1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jappix_ynh.git synced 2024-09-03 19:26:19 +02:00

update source to 1.0.3

This commit is contained in:
titoko 2014-04-08 20:14:28 +02:00
parent 979b376609
commit 01fbda2f9b
463 changed files with 28475 additions and 158714 deletions

View file

@ -73,4 +73,4 @@ Translators
* Valérian Saliou
* vitalyster
* zAchAry
* Zash
* Zash

View file

@ -4,250 +4,264 @@ Jappix Changelog
Here's the log of what has changed over the Jappix releases.
One, v1.0.3 (March 2014)
------------------------
* Fix JSJaC packet register @valeriansaliou, @sstrigler
One, v1.0.2 (March 2014)
------------------------
* Fix IQ spoofing security issue @valeriansaliou, @sstrigler
* Better autocompletion @Nabellaleen
* Various bugfixes @Nabellaleen, @valeriansaliou
One, v1.0.1 (January 2014)
--------------------------
* Changed MAM namespace to a temporary one
* Fixed broken Jappix Mini CSS loader in some cases
* Libs update
* Change MAM namespace to a temporary one @maranda
* Fix broken Jappix Mini CSS loader in some cases @valeriansaliou
* Libs update @valeriansaliou
One, v1.0.0 (January 2014)
--------------------------
* XEP-0166: Jingle
* XEP-0292: vCard4 Over XMPP
* XEP-0280: Message Carbons
* IE9, IE10, IE11 support
* Libs update
* Client code rewrite
* Directory tree re-organization
* Tested code (pass CSSLint, JSHint and PHPLint)
* XEP-0166: Jingle @valeriansaliou
* XEP-0292: vCard4 Over XMPP @valeriansaliou
* XEP-0280: Message Carbons @valeriansaliou
* IE9, IE10, IE11 support @valeriansaliou
* Libs update @valeriansaliou
* Client code rewrite @valeriansaliou
* Directory tree re-organization @valeriansaliou
* Tested code (pass CSSLint, JSHint and PHPLint) @valeriansaliou
Nemesis Alpha 9, v0.9.9 (August 2013)
-------------------------------------
* XEP-0313: Message Archive Management
* Drop support for Message Archiving (XEP-0136), outpaced by MAM (XEP-0313)
* Jappix Desktop performances improved (noticeable with big rosters)
* Fix Jappix Desktop avatar system, unable to cache avatars (thus increasing network load and delays)
* New translations added (Mongolian), and a few ones updated
* XEP-0313: Message Archive Management @valeriansaliou
* Drop support for Message Archiving (XEP-0136), outpaced by MAM (XEP-0313) @valeriansaliou
* Jappix Desktop performances improved (noticeable with big rosters) @valeriansaliou
* Fix Jappix Desktop avatar system, unable to cache avatars (thus increasing network load and delays) @valeriansaliou
* New translations added (Mongolian), and a few ones updated @valeriansaliou
Nemesis Alpha 8, v0.9.8 (May 2013)
----------------------------------
* RTL (Right-To-Left Languages) support
* Various bufixes
* RTL (Right-To-Left Languages) support @valeriansaliou
* Various bufixes @valeriansaliou
Nemesis Alpha 7, v0.9.7 (April 2013)
------------------------------------
* Fix overflow events in Mini
* Fix user info display bug with formatted text
* Jappix Me notification system
* Update JSJaC
* Update jQuery (v1.10.1)
* Fix overflow events in Mini @valeriansaliou
* Fix user info display bug with formatted text @valeriansaliou
* Jappix Me notification system @valeriansaliou
* Update JSJaC @valeriansaliou
* Update jQuery (v1.10.1) @valeriansaliou
Nemesis Alpha 6, v0.9.6 (April 2013)
------------------------------------
* Fix login with accented usernames
* WOFF Get API headers fixed
* Better Get API URL generator
* Fix broken Jappix Mini extraction script
* Show when user joins/exits MUC in Jappix Mini
* Fix login with accented usernames @valeriansaliou
* WOFF Get API headers fixed @valeriansaliou
* Better Get API URL generator @valeriansaliou
* Fix broken Jappix Mini extraction script @valeriansaliou
* Show when user joins/exits MUC in Jappix Mini @valeriansaliou
Nemesis Alpha 5, v0.9.5 (March 2013)
------------------------------------
* Jappix Mini enhancements
* Fix Jappix over non-standard ports
* Locale detector improved
* Load more items on social channel scroll
* Fix a lot of English base language typos
* Support for XHTML microblog entries (Movim compatibility)
* Show Jappix Desktop on tablets (not mobile anymore)
* Option to disable Jappix Mini on mobile phones
* Fix broken MUC bookmarks retrieval
* Jappix Mini enhancements @valeriansaliou
* Fix Jappix over non-standard ports @valeriansaliou
* Locale detector improved @valeriansaliou
* Load more items on social channel scroll @valeriansaliou
* Fix a lot of English base language typos @valeriansaliou
* Support for XHTML microblog entries (Movim compatibility) @valeriansaliou
* Show Jappix Desktop on tablets (not mobile anymore) @valeriansaliou
* Option to disable Jappix Mini on mobile phones @valeriansaliou
* Fix broken MUC bookmarks retrieval @valeriansaliou
Nemesis Alpha 4, v0.9.4 (March 2013)
------------------------------------
* [SECURITY] Fix insafe HTML escaping
* PHP 5.4 compatibility
* Auto-populate microblog on connect
* Register API support for Metronome XMPPd
* Non-blocking PHP sessions
* Permissive geoloc selector in microblog
* Select priority more easily
* Compliancy with Atom specification (social inbox)
* Added project mirrors
* [SECURITY] Fix insafe HTML escaping @valeriansaliou
* PHP 5.4 compatibility @valeriansaliou
* Auto-populate microblog on connect @valeriansaliou
* Register API support for Metronome XMPPd @valeriansaliou
* Non-blocking PHP sessions @valeriansaliou
* Permissive geoloc selector in microblog @valeriansaliou
* Select priority more easily @valeriansaliou
* Compliancy with Atom specification (social inbox) @valeriansaliou
* Added project mirrors @valeriansaliou
Nemesis Alpha 3, v0.9.3 (February 2013)
---------------------------------------
* [SECURITY] More randomness in CAPTCHA
* Fix buggy roster filter with groups
* Add Piwik tracking feature (configurable in manager)
* Easy popup close by clicking away
* Fix cropped uploaded pictures
* Revert to old File Share API (which is far better)
* Fixes broken translations (strange UTF-8 chars due to bugged Gettext compiler)
* [SECURITY] More randomness in CAPTCHA @valeriansaliou
* Fix buggy roster filter with groups @valeriansaliou
* Add Piwik tracking feature (configurable in manager) @valeriansaliou
* Easy popup close by clicking away @valeriansaliou
* Fix cropped uploaded pictures @valeriansaliou
* Revert to old File Share API (which is far better) @valeriansaliou
* Fixes broken translations (strange UTF-8 chars due to bugged Gettext compiler) @valeriansaliou
Nemesis Alpha 2, v0.9.2 (January 2013)
--------------------------------------
* [SECURITY] Introduced the Register API (prevents register flood by spam bots)
* Reworked Storage API
* Jappix Mini code beautify
* Lighter and Web-safe font files
* Better error logging
* Fix Openfire ping request
* Typing notification in Jappix Mini
* Support for WebKit notifications
* Jappix Mini groupchat suggest
* Enhanced Download API
* Mini animated chat icon, much sexier
* IE custom font compatibility
* Legal changes
* Update licensing with real names
* [SECURITY] Introduce the Register API (prevents register flood by spam bots) @valeriansaliou
* Reworked Storage API @valeriansaliou
* Jappix Mini code beautify @valeriansaliou
* Lighter and Web-safe font files @valeriansaliou
* Better error logging @valeriansaliou
* Fix Openfire ping request @valeriansaliou
* Typing notification in Jappix Mini @valeriansaliou
* Support for WebKit notifications @valeriansaliou
* Jappix Mini groupchat suggest @valeriansaliou
* Enhanced Download API @valeriansaliou
* Mini animated chat icon, much sexier @valeriansaliou
* IE custom font compatibility @valeriansaliou
* Legal changes @valeriansaliou
* Update licensing with real names @valeriansaliou
Nemesis Alpha 1, v0.9.1 (2012)
------------------------------
* Show an 'add to home' button on iOS devices
* Ability to suspend statistics
* Fix IE9 issue with clustering
* Show profile button in user search results
* Ability to change message font, font size and color
* Fix choppy Jappix Mini status picker
* Sounds for Safari & IE9
* Enhance new file storage functions
* No resize for textareas
* Add a configurable legal disclaimer
* Fix a loop bug on presence if no support for sessionStorage
* Universal fonts
* Add ability to configure the node owner name & website
* HTTP authentication for LDAP
* Better notification + comments management
* Show an 'add to home' button on iOS devices @camaran
* Ability to suspend statistics @valeriansaliou
* Fix IE9 issue with clustering @valeriansaliou
* Show profile button in user search results @valeriansaliou
* Ability to change message font, font size and color @valeriansaliou
* Fix choppy Jappix Mini status picker @valeriansaliou
* Sounds for Safari & IE9 @valeriansaliou
* Enhance new file storage functions @valeriansaliou
* No resize for textareas @valeriansaliou
* Add a configurable legal disclaimer @valeriansaliou
* Fix a loop bug on presence if no support for sessionStorage @valeriansaliou
* Universal fonts @valeriansaliou
* Add ability to configure the node owner name & website @valeriansaliou
* HTTP authentication for LDAP @valeriansaliou
* Better notification + comments management @valeriansaliou
Spaco, v0.9 (2011)
------------------
* [SECURITY] Fix when sending files to a contact
* Better Jappix Mini performances
* Fix Jappix Mini display issues
* Connection issue fixed with BOSH API
* Open XMPP links when Jappix is ready
* [SECURITY] Fix when sending files to a contact @valeriansaliou
* Better Jappix Mini performances @valeriansaliou
* Fix Jappix Mini display issues @valeriansaliou
* Connection issue fixed with BOSH API @valeriansaliou
* Open XMPP links when Jappix is ready @valeriansaliou
Suno, v0.8 (2011)
---------------------
* XEP-0066: Out of Band Data
* Switch from OpenStreetMap to Google Maps for geolocation
* XEP-0066: Out of Band Data @valeriansaliou
* Switch from OpenStreetMap to Google Maps for geolocation @valeriansaliou
Stelo, v0.7 (2011)
------------------
* Lighter Jappix Mini
* Welcome popup
* Support for /me command in Jappix Mini
* Fixes in social channel
* Bigger BOSH poll interval (avoids some overactivity errors)
* Compression disabled by default in Get API
* Send chatstates in MUC
* Social notification inbox
* Lighter Jappix Mini @valeriansaliou
* Welcome popup @valeriansaliou
* Support for /me command in Jappix Mini @valeriansaliou
* Fixes in social channel @valeriansaliou
* Bigger BOSH poll interval (avoids some overactivity errors) @valeriansaliou
* Compression disabled by default in Get API @valeriansaliou
* Send chatstates in MUC @valeriansaliou
* Social notification inbox @valeriansaliou
Lumo, v0.6 (2011)
-----------------
* Smoother Mini animation
* Show avatars in social channel comments
* Legacy mode for microblog comments
* Microblog updated to comply with a new version of XEP-0277
* Fix DNS SRV issue because of a 'route' attribute on BOSH initiation
* Smoother Mini animation @valeriansaliou
* Show avatars in social channel comments @valeriansaliou
* Legacy mode for microblog comments @valeriansaliou
* Microblog updated to comply with a new version of XEP-0277 @valeriansaliou
* Fix DNS SRV issue because of a 'route' attribute on BOSH initiation @valeriansaliou
Ribelo, v0.5 (2011)
-------------------
* Add support for comments in microblog
* Jappix Mini fixes and improvements
* Add support for comments in microblog @valeriansaliou
* Jappix Mini fixes and improvements @valeriansaliou
Lupo, v0.4 (2011)
-----------------
* Full IE5.5 compatibility for Jappix Mini
* BOSH without cURL (if cURL unavailable)
* Handle multiple microblog attached files
* Microblog attached files thumbnails
* BOM (Byte Order Mark) filtering for Get API
* Autoplay for new YouTube HTML5 player
* Support for privacy lists pushs
* Roster-side privacy lists (make contact blocking/unblocking easy)
* Better update checker
* XEP-0144: Roster Item Exchange
* Cross domain support for Internet Explorer and legacy browsers
* Update jQuery (v1.4.4)
* TZO fix (for negative timezones, e.g.: UTC-5)
* Better language detection
* Use HTML5 or Flash for YouTube embedded videos
* Full IE5.5 compatibility for Jappix Mini @valeriansaliou
* BOSH without cURL (if cURL unavailable) @valeriansaliou
* Handle multiple microblog attached files @valeriansaliou
* Microblog attached files thumbnails @valeriansaliou
* BOM (Byte Order Mark) filtering for Get API @valeriansaliou
* Autoplay for new YouTube HTML5 player @valeriansaliou
* Support for privacy lists pushs @valeriansaliou
* Roster-side privacy lists (make contact blocking/unblocking easy) @valeriansaliou
* Better update checker @valeriansaliou
* XEP-0144: Roster Item Exchange @valeriansaliou
* Cross domain support for Internet Explorer and legacy browsers @valeriansaliou
* Update jQuery (v1.4.4) @valeriansaliou
* TZO fix (for negative timezones, e.g.: UTC-5) @valeriansaliou
* Better language detection @valeriansaliou
* Use HTML5 or Flash for YouTube embedded videos @valeriansaliou
Prism, v0.3 (2011)
------------------
* [SECURITY] Fix JS escape bug for quotes
* [SECURITY] HTML-encode notification username
* Introduction of Jappix Mini
* Introduction of Jappix Manager
* Introduction of Jappix Install
* XEP-0050: Ad-Hoc Commands
* XEP-0136: Message Archiving
* Update Jappix logo
* Declare application language to XMPP server
* Add a buddy search tool
* Support for old/legacy vCard server implementations
* Inbox messages sorted by date
* Better music search
* Human-readable geolocation
* Gateway show/hide
* HTML5 forms
* Better notification management
* Unified chat design
* Dynamic DOM load (better performances)
* Jappix logo shown when connected (improves branding)
* [SECURITY] Fix JS escape bug for quotes @valeriansaliou
* [SECURITY] HTML-encode notification username @valeriansaliou
* Introduction of Jappix Mini @valeriansaliou
* Introduction of Jappix Manager @valeriansaliou
* Introduction of Jappix Install @valeriansaliou
* XEP-0050: Ad-Hoc Commands @valeriansaliou
* XEP-0136: Message Archiving @valeriansaliou
* Update Jappix logo @valeriansaliou
* Declare application language to XMPP server @valeriansaliou
* Add a buddy search tool @valeriansaliou
* Support for old/legacy vCard server implementations @valeriansaliou
* Inbox messages sorted by date @valeriansaliou
* Better music search @valeriansaliou
* Human-readable geolocation @valeriansaliou
* Gateway show/hide @valeriansaliou
* HTML5 forms @valeriansaliou
* Better notification management @valeriansaliou
* Unified chat design @valeriansaliou
* Dynamic DOM load (better performances) @valeriansaliou
* Jappix logo shown when connected (improves branding) @valeriansaliou
Lidar, v0.2 (2010)
------------------
* Introduction of Jappix Mobile
* UI redesign (from grey to black and blue)
* Social channel introduced (microblog)
* Introduction of Jappix Mobile @valeriansaliou
* UI redesign (from grey to black and blue) @valeriansaliou
* Social channel introduced (microblog) @valeriansaliou
Genesis, v0.1 (2010)
--------------------
* Initial version, released after private beta
* Introduction of Jappix Desktop
* Basic chat, groupchat, roster and profile features
* Basic UI
* Initial version, released after private beta @valeriansaliou
* Introduction of Jappix Desktop @valeriansaliou
* Basic chat, groupchat, roster and profile features @valeriansaliou
* Basic UI @valeriansaliou
**For more information about what changed through time, check the changes made to our source code on GitHub: https://github.com/jappix/jappix/commits/master**

File diff suppressed because it is too large Load diff

View file

@ -37,4 +37,4 @@ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
**ParaType Ltd**
**http://www.paratype.ru**
**http://www.paratype.ru**

View file

@ -23,4 +23,4 @@ They contain work from the FamFamFam Silk icon set by Mark James.
* http://famfamfam.com/lab/icons/silk/
* http://creativecommons.org/licenses/by/2.5/
* http://creativecommons.org/licenses/by/3.0/
* http://creativecommons.org/licenses/by/3.0/

View file

@ -18,4 +18,4 @@ More
* The whole documentation is available at: https://github.com/jappix/jappix/wiki
Now, you can use Jappix. Happy socializing!
Now, you can use Jappix. Happy socializing!

View file

@ -65,4 +65,4 @@ Here are listed the XMPP Protocol Extensions that Jappix supports, as well as th
# Others
* RFC-3264: An Offer/Answer Model with Session Description Protocol (SDP)
* RFC-3264: An Offer/Answer Model with Session Description Protocol (SDP)

View file

@ -7,17 +7,17 @@ We would like to thanks the authors of these tools, coming from other projects:
Projects
--------
* Base64 https://github.com/dankogai/js-base64
* DrawSVGChart http://codingteam.net/project/codingteam
* idzXHR http://www.iadvize.com/plugin_strophe_xmpp.html
* JSJaC http://blog.jwchat.org/jsjac/
* JSMin http://github.com/rgrove/jsmin-php/
* jQuery http://jquery.com/
* jQuery Form http://jquery.malsup.com/form/
* jQuery Timers http://plugins.jquery.com/project/timers
* jXHR http://mulletxhr.com/
* Mobile Detect https://github.com/serbanghita/Mobile-Detect
* ParaType http://paratype.ru/
* PHP-gettext https://launchpad.net/php-gettext
* Silk icons http://www.famfamfam.com/lab/icons/silk/
* Smileys http://www.gajim.org/
* Base64 https://github.com/dankogai/js-base64
* DrawSVGChart http://codingteam.net/project/codingteam
* idzXHR http://www.iadvize.com/plugin_strophe_xmpp.html
* JSJaC http://blog.jwchat.org/jsjac/
* JSMin http://github.com/rgrove/jsmin-php/
* jQuery http://jquery.com/
* jQuery Form http://jquery.malsup.com/form/
* jQuery Timers http://plugins.jquery.com/project/timers
* jXHR http://mulletxhr.com/
* Mobile Detect https://github.com/serbanghita/Mobile-Detect
* ParaType http://paratype.ru/
* PHP-gettext https://launchpad.net/php-gettext
* Silk icons http://www.famfamfam.com/lab/icons/silk/
* Smileys http://www.gajim.org/

View file

@ -1 +1 @@
One [1.0.1]
One [1.0.3]

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<css>anonymous.css</css>
<js>anonymous.js</js>
<css>anonymous.css</css>
<js>anonymous.js</js>
</jappix>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<css>fonts.css~main.css~images.css~board.css~home.css~others.css~tools.css~roster.css~myinfos.css~pageengine.css~channel.css~pageswitch.css~smileys.css~popup.css~vcard.css~options.css~favorites.css~discovery.css~directory.css~adhoc.css~privacy.css~inbox.css~mucadmin.css~integratebox.css~userinfos.css~search.css~welcome.css~me.css~rosterx.css~jingle.css</css>
<js>origin.js~jxhr.js~datejs.js~jquery.js~jquery.ui.js~jquery.json.js~jquery.form.js~jquery.timers.js~jquery.placeholder.js~jquery.textrange.js~base64.js~jsjac.js~jsjac.jingle.js~system.js~constants.js~datastore.js~browser-detect.js~home.js~talk.js~popup.js~audio.js~board.js~bubble.js~chat.js~groupchat.js~smileys.js~oob.js~avatar.js~mucadmin.js~connection.js~dataform.js~discovery.js~directory.js~adhoc.js~privacy.js~errors.js~name.js~favorites.js~features.js~interface.js~xmpplinks.js~iq.js~message.js~chatstate.js~receipts.js~tooltip.js~filter.js~links.js~inbox.js~microblog.js~music.js~notification.js~httpreply.js~options.js~integratebox.js~pubsub.js~pep.js~presence.js~roster.js~jingle.js~storage.js~console.js~common.js~utilities.js~date.js~caps.js~vcard.js~userinfos.js~search.js~autocompletion.js~welcome.js~me.js~rosterx.js~mam.js~carbons.js</js>
<css>fonts.css~main.css~images.css~board.css~home.css~others.css~tools.css~roster.css~myinfos.css~pageengine.css~channel.css~pageswitch.css~smileys.css~popup.css~vcard.css~options.css~favorites.css~discovery.css~directory.css~adhoc.css~privacy.css~inbox.css~mucadmin.css~integratebox.css~userinfos.css~search.css~welcome.css~me.css~rosterx.css~jingle.css</css>
<js>origin.js~jxhr.js~datejs.js~jquery.js~jquery.ui.js~jquery.json.js~jquery.form.js~jquery.timers.js~jquery.placeholder.js~jquery.textrange.js~base64.js~jsjac.js~jsjac.jingle.js~system.js~constants.js~datastore.js~browser-detect.js~home.js~talk.js~popup.js~audio.js~board.js~bubble.js~chat.js~groupchat.js~smileys.js~oob.js~avatar.js~mucadmin.js~connection.js~dataform.js~discovery.js~directory.js~adhoc.js~privacy.js~errors.js~name.js~favorites.js~features.js~interface.js~xmpplinks.js~iq.js~message.js~chatstate.js~receipts.js~tooltip.js~filter.js~links.js~inbox.js~microblog.js~music.js~notification.js~httpreply.js~options.js~integratebox.js~pubsub.js~pep.js~presence.js~roster.js~jingle.js~storage.js~console.js~common.js~utilities.js~date.js~caps.js~vcard.js~userinfos.js~search.js~autocompletion.js~welcome.js~me.js~rosterx.js~mam.js~carbons.js</js>
</jappix>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<js>httpauth.js</js>
<js>httpauth.js</js>
</jappix>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<css>main.css~install.css~images.css</css>
<js></js>
<css>main.css~install.css~images.css</css>
<js></js>
</jappix>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<css>main.css~manager.css~images.css</css>
<js></js>
<css>main.css~manager.css~images.css</css>
<js></js>
</jappix>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<css>mini.css</css>
<js>origin.js~jxhr.js~base64.js~jsjac.js~jquery.json.js~jquery.timers.js~jquery.scrollto.js~system.js~constants.js~datastore.js~browser-detect.js~console.js~common.js~date.js~links.js~mini.js</js>
<css>mini.css</css>
<js>origin.js~jxhr.js~base64.js~jsjac.js~jquery.json.js~jquery.timers.js~jquery.scrollto.js~system.js~constants.js~datastore.js~browser-detect.js~console.js~common.js~date.js~links.js~mini.js</js>
</jappix>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<jappix xmlns="jappix:file:get">
<css>mobile.css~ios.css~images.css</css>
<js>origin.js~jxhr.js~base64.js~jsjac.js~system.js~constants.js~console.js~browser-detect.js~links.js~mobile.js~ios.js</js>
<css>mobile.css~ios.css~images.css</css>
<js>origin.js~jxhr.js~base64.js~jsjac.js~system.js~constants.js~console.js~browser-detect.js~links.js~mobile.js~ios.js</js>
</jappix>

View file

@ -20,7 +20,7 @@ var Anonymous = (function () {
var self = {};
/**
/**
* Connected to an anonymous session
* @public
* @return {undefined}

View file

@ -46,7 +46,7 @@ var Audio = (function () {
};
/**
/**
* Plays the given sound ID
* @public
* @param {string} name

View file

@ -21,23 +21,24 @@ var Autocompletion = (function () {
/**
* Sort an array with insensitivity to the case
* Sort an autocompletion result array with insensitivity to the case,
* using the 1st elements (a[0] and b[0]) to process comparison
* @public
* @param {string} a
* @param {string} b
* @param {array} a
* @param {array} b
* @return {undefined}
*/
self.caseInsensitiveSort = function(a, b) {
try {
// Put the two strings into lower case
a = a.toLowerCase();
b = b.toLowerCase();
var sA = a[0].toLowerCase();
var sB = b[0].toLowerCase();
// Process the sort
if(a > b)
if(sA > sB)
return 1;
if(a < b)
if(sA < sB)
return -1;
} catch(e) {
Console.error('Autocompletion.caseInsensitiveSort', e);
@ -47,11 +48,52 @@ var Autocompletion = (function () {
/**
* Creates an array with the autocompletion results
* @public
* Split a query into its subqueries ready to be used in autocompletion
* The function return an array containing two others : the first with subqueries
* and the second with remaining parts
* For example, if query is "A B C", the subqueries are ["C", "B C", "A B C"] and
* the remaining parts are ["A B ", "A ", ""]
* @param {string} query
* @return {Array}
*/
self.getSubQueries = function(query) {
var subqueries = [];
var remnants = [];
var queryLastCharPos = query.length - 1;
var spaceCounter = 0;
for (var i=queryLastCharPos; i>=0; i--) {
// Search from the end of the query
var iChar = query.charAt(i);
if (spaceCounter === 0 && iChar.search(/\s/) === 0) {
// the first "local" space was found
// add the subquery and its remnant to results
subqueries.push(query.slice(i+1));
remnants.push(query.slice(0, i+1));
spaceCounter++;
} else {
spaceCounter = 0;
}
}
if (spaceCounter === 0) {
// If the first char of the query is not a space, add the full query to results
subqueries.push(query);
remnants.push("");
}
return [subqueries, remnants];
};
/**
* Creates an array with the autocompletion results. An autocompletion result
* is an array containing the result himself and the rank of the query which
* matched this answer
* @public
* @param {Array} query
* @param {string} id
* @return {object}
* @return {Array}
*/
self.process = function(query, id) {
@ -60,16 +102,23 @@ var Autocompletion = (function () {
try {
// Replace forbidden characters in regex
query = Common.escapeRegex(query);
// Build an array of regex to use
var queryRegExp = [];
for (i = 0; i<query.length; i++) {
if (query[i] !== null) {
queryRegExp.push(new RegExp('(^)' + query[i], 'gi'));
}
}
// Search in the roster
$('#' + id + ' .user').each(function() {
var nick = $(this).find('.name').text();
var regex = new RegExp('(^)' + query, 'gi');
if(nick.match(regex))
results.push(nick);
for (i = 0; i<queryRegExp.length; i++) {
var regex = queryRegExp[i];
if(nick.match(regex)) {
results.push([nick, i]);
}
}
});
// Sort the array
results = results.sort(self.caseInsensitiveSort);
} catch(e) {
@ -106,7 +155,7 @@ var Autocompletion = (function () {
*/
self.create = function(hash) {
try {
try {
// Initialize
var vSelector = $('#' + hash + ' .message-area');
var value = vSelector.val();
@ -117,10 +166,13 @@ var Autocompletion = (function () {
var query = vSelector.attr('data-autocompletion-query');
// The autocompletion has not been yet launched
if(query === undefined) {
query = value;
vSelector.attr('data-autocompletion-query', query);
// The autocompletion has not been yet launched
query = self.getSubQueries(value);
vSelector.attr('data-autocompletion-query', JSON.stringify(query));
} else {
// The autocompletion has already stored a query
query = JSON.parse(query);
}
// Get the pointer
@ -131,7 +183,11 @@ var Autocompletion = (function () {
i = parseInt(pointer);
// We get the nickname
var nick = self.process(query, hash)[i];
var nickResult = self.process(query[0], hash)[i];
var nick;
if (nickResult !== undefined) {
nick = nickResult[0];
}
// Shit, this is my nick!
if((nick !== undefined) && (nick.toLowerCase() == Name.getMUCNick(hash).toLowerCase())) {
@ -139,14 +195,18 @@ var Autocompletion = (function () {
i++;
// Get the next nick
nick = self.process(query, hash)[i];
nickResult = self.process(query[0], hash)[i];
if (nickResult !== undefined) {
nick = nickResult[0];
}
}
// We quote the nick
if(nick !== undefined) {
if((nickResult !== undefined) && (nick !== undefined)) {
// Increment
i++;
Utils.quoteMyNick(hash, nick);
var message = query[1][nickResult[1]];
Utils.quoteMyNick(hash, nick, message);
// Put a pointer
vSelector.attr('data-autocompletion-pointer', i);

View file

@ -20,11 +20,11 @@ var Avatar = (function () {
var self = {};
/* Variables */
self.pending = [];
/* Variables */
self.pending = [];
/**
/**
* Requests the avatar of a given user
* @public
* @param {string} xid

View file

@ -20,7 +20,7 @@ var Board = (function () {
var self = {};
/**
/**
* Creates a board panel
* @public
* @param {string} type
@ -202,7 +202,7 @@ var Board = (function () {
};
/**
/**
* Closes a given board
* @public
* @param {string} board
@ -235,8 +235,9 @@ var Board = (function () {
try {
// Cannot process?
if(Common.isFocused() || !content || !window.webkitNotifications)
if(Common.isFocused() || !content || !(window.webkitNotifications || window.Notification)) {
return;
}
// Default icon?
if(!icon) {
@ -256,49 +257,77 @@ var Board = (function () {
}
// Default title?
if(!title)
if(!title) {
title = Common._e("New event!");
}
// Click callback
var cb_click_fn = function() {
// Click action?
switch(type) {
case 'chat':
Interface.switchChan(hex_md5(xid));
break;
case 'groupchat':
Interface.switchChan(hex_md5(Common.bareXID(xid)));
break;
default:
break;
}
// Focus on msg-me
window.focus();
// Remove notification
this.cancel();
};
// Check for notification permission
if(window.webkitNotifications.checkPermission() === 0) {
// Create notification
var notification = window.webkitNotifications.createNotification(icon, title, content);
// Auto-hide after a while
notification.ondisplay = function(event) {
try {
if(Notification.permission == 'granted' || Notification.permission === undefined) {
var notification = new Notification(title, {
dir: 'auto',
lang: '',
body: content,
tag: type,
icon: icon
});
notification.onclick = cb_click_fn;
setTimeout(function() {
event.currentTarget.cancel();
notification.close();
}, 10000);
};
// Click event
notification.onclick = function() {
// Click action?
switch(type) {
case 'chat':
Interface.switchChan(hex_md5(xid));
break;
case 'groupchat':
Interface.switchChan(hex_md5(Common.bareXID(xid)));
break;
default:
break;
if(notification.permission == 'granted') {
return notification;
}
}
} catch(_e) {
if(window.webkitNotifications.checkPermission() === 0) {
// Create notification
var notification = window.webkitNotifications.createNotification(icon, title, content);
// Focus on msg-me
window.focus();
// Auto-hide after a while
notification.ondisplay = function(event) {
setTimeout(function() {
event.currentTarget.cancel();
}, 10000);
};
// Remove notification
this.cancel();
};
// Show notification
notification.show();
return notification;
// Click event
notification.onclick = cb_click_fn;
// Show notification
notification.show();
return notification;
}
}
return null;
} catch(e) {
Console.error('Board.quick', e);
}
@ -314,11 +343,21 @@ var Board = (function () {
self.quickPermission = function() {
try {
if(!window.webkitNotifications || (window.webkitNotifications.checkPermission() === 0))
return;
// Ask for permission
window.webkitNotifications.requestPermission();
try {
// W3C Notification API (still a draft!)
if(Notification.permission !== 'granted') {
// Ask for permission
Notification.requestPermission();
}
} catch (_e) {
// WebKit Notification API (fallback)
if(!window.webkitNotifications || (window.webkitNotifications.checkPermission() === 0)) {
return;
}
// Ask for permission
window.webkitNotifications.requestPermission();
}
} catch(e) {
Console.error('Board.quickPermission', e);
}

View file

@ -4,122 +4,122 @@
*/
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
};
BrowserDetect.init();

View file

@ -20,7 +20,7 @@ var Bubble = (function () {
var self = {};
/**
/**
* Closes all the opened bubbles
* @public
* @return {boolean}

View file

@ -39,7 +39,7 @@ var Caps = (function () {
};
/**
/**
* Returns an array of the Jappix disco#infos
* @public
* @return {object}
@ -468,7 +468,7 @@ var Caps = (function () {
};
/**
/**
* Generates the Jappix CAPS hash
* @public
* @return {string}

View file

@ -20,7 +20,7 @@ var Chat = (function () {
var self = {};
/**
/**
* Correctly opens a new chat
* @public
* @param {string} xid

View file

@ -20,7 +20,7 @@ var ChatState = (function () {
var self = {};
/**
/**
* Sends a given chatstate to a given entity
* @public
* @param {string} state

View file

@ -20,7 +20,7 @@ var Common = (function () {
var self = {};
/**
/**
* Checks if an element exists in the DOM
* @public
* @param {string} path
@ -162,7 +162,7 @@ var Common = (function () {
};
/**
/**
* Replaces '%s' to a given value for a translated string
* @public
* @param {string} string
@ -298,7 +298,7 @@ var Common = (function () {
};
/**
/**
* nodepreps an XMPP node
* @public
* @param {string} node
@ -360,8 +360,9 @@ var Common = (function () {
xid = self.cutResource(xid);
// Launch nodeprep
if(xid.indexOf('@') != -1)
if(xid.indexOf('@') != -1) {
xid = self.nodeprep(self.getXIDNick(xid)) + '@' + self.getXIDHost(xid);
}
return xid;
} catch(e) {
@ -417,7 +418,7 @@ var Common = (function () {
};
/**
/**
* Gets the host from a XID
* @public
* @param {string} aXID
@ -482,7 +483,7 @@ var Common = (function () {
};
/**
/**
* Gets the full XID of the user
* @public
* @return {string}
@ -572,8 +573,9 @@ var Common = (function () {
var from = stanza.getFrom();
// No from, we assume this is our XID
if(!from)
if(!from) {
from = self.getXID();
}
return from;
} catch(e) {
@ -583,6 +585,29 @@ var Common = (function () {
};
/**
* Returns whether the stanza has been really sent from our own server or entity
* @public
* @param {object} stanza
* @return {string}
*/
self.isSafeStanza = function(stanza) {
var is_safe = false;
try {
var from = self.getStanzaFrom(stanza);
is_safe = (!from || from == con.domain || from == self.getXID()) && true;
} catch(e) {
Console.error('Common.isSafeStanza', e);
} finally {
return is_safe;
}
};
/**
* Adds a zero to a date when needed
* @public
@ -610,17 +635,31 @@ var Common = (function () {
/**
* Escapes a string for a regex usage
* Escapes a string (or an array of string) for a regex usage. In case of an
* array, escapes are not done "in place", keeping the query unmodified
* @public
* @param {string} query
* @return {string}
* @param {object} query
* @return {object}
*/
self.escapeRegex = function(query) {
try {
return query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
} catch(e) {
Console.error('Common.escapeRegex', e);
if (query instanceof Array) {
var result = new Array(query.length);
for(i=0; i<query.length; i++) {
try {
result[i] = Common.escapeRegex(query[i]);
} catch(e) {
Console.error('Common.escapeRegex', e);
result[i] = null;
}
}
return result;
} else {
try {
return query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
} catch(e) {
Console.error('Common.escapeRegex', e);
}
}
};
@ -663,7 +702,7 @@ var Common = (function () {
};
/**
/**
* Converts a XML document to a string
* @public
* @param {object} xmlData

View file

@ -29,7 +29,7 @@ var Connection = (function () {
self.resume = false;
/**
/**
* Does the user login
* @public
* @param {string} lNick
@ -363,7 +363,7 @@ var Connection = (function () {
};
/**
/**
* Triggers the connected state
* @public
* @return {undefined}
@ -513,7 +513,7 @@ var Connection = (function () {
};
/**
/**
* Quits a session
* @public
* @param {type} name
@ -710,7 +710,7 @@ var Connection = (function () {
};
/**
/**
* Resets the connection markers
* @public
* @return {undefined}

View file

@ -178,54 +178,54 @@ var BOSH_SAME_ORIGIN = false;
// XMPP error stanzas
function STANZA_ERROR(code, type, cond) {
if(window == this) {
return new STANZA_ERROR(code, type, cond);
}
this.code = code;
this.type = type;
this.cond = cond;
if(window == this) {
return new STANZA_ERROR(code, type, cond);
}
this.code = code;
this.type = type;
this.cond = cond;
}
var ERR_BAD_REQUEST =
STANZA_ERROR('400', 'modify', 'bad-request');
STANZA_ERROR('400', 'modify', 'bad-request');
var ERR_CONFLICT =
STANZA_ERROR('409', 'cancel', 'conflict');
STANZA_ERROR('409', 'cancel', 'conflict');
var ERR_FEATURE_NOT_IMPLEMENTED =
STANZA_ERROR('501', 'cancel', 'feature-not-implemented');
STANZA_ERROR('501', 'cancel', 'feature-not-implemented');
var ERR_FORBIDDEN =
STANZA_ERROR('403', 'auth', 'forbidden');
STANZA_ERROR('403', 'auth', 'forbidden');
var ERR_GONE =
STANZA_ERROR('302', 'modify', 'gone');
STANZA_ERROR('302', 'modify', 'gone');
var ERR_INTERNAL_SERVER_ERROR =
STANZA_ERROR('500', 'wait', 'internal-server-error');
STANZA_ERROR('500', 'wait', 'internal-server-error');
var ERR_ITEM_NOT_FOUND =
STANZA_ERROR('404', 'cancel', 'item-not-found');
STANZA_ERROR('404', 'cancel', 'item-not-found');
var ERR_JID_MALFORMED =
STANZA_ERROR('400', 'modify', 'jid-malformed');
STANZA_ERROR('400', 'modify', 'jid-malformed');
var ERR_NOT_ACCEPTABLE =
STANZA_ERROR('406', 'modify', 'not-acceptable');
STANZA_ERROR('406', 'modify', 'not-acceptable');
var ERR_NOT_ALLOWED =
STANZA_ERROR('405', 'cancel', 'not-allowed');
STANZA_ERROR('405', 'cancel', 'not-allowed');
var ERR_NOT_AUTHORIZED =
STANZA_ERROR('401', 'auth', 'not-authorized');
STANZA_ERROR('401', 'auth', 'not-authorized');
var ERR_PAYMENT_REQUIRED =
STANZA_ERROR('402', 'auth', 'payment-required');
STANZA_ERROR('402', 'auth', 'payment-required');
var ERR_RECIPIENT_UNAVAILABLE =
STANZA_ERROR('404', 'wait', 'recipient-unavailable');
STANZA_ERROR('404', 'wait', 'recipient-unavailable');
var ERR_REDIRECT =
STANZA_ERROR('302', 'modify', 'redirect');
STANZA_ERROR('302', 'modify', 'redirect');
var ERR_REGISTRATION_REQUIRED =
STANZA_ERROR('407', 'auth', 'registration-required');
STANZA_ERROR('407', 'auth', 'registration-required');
var ERR_REMOTE_SERVER_NOT_FOUND =
STANZA_ERROR('404', 'cancel', 'remote-server-not-found');
STANZA_ERROR('404', 'cancel', 'remote-server-not-found');
var ERR_REMOTE_SERVER_TIMEOUT =
STANZA_ERROR('504', 'wait', 'remote-server-timeout');
STANZA_ERROR('504', 'wait', 'remote-server-timeout');
var ERR_RESOURCE_CONSTRAINT =
STANZA_ERROR('500', 'wait', 'resource-constraint');
STANZA_ERROR('500', 'wait', 'resource-constraint');
var ERR_SERVICE_UNAVAILABLE =
STANZA_ERROR('503', 'cancel', 'service-unavailable');
STANZA_ERROR('503', 'cancel', 'service-unavailable');
var ERR_SUBSCRIPTION_REQUIRED =
STANZA_ERROR('407', 'auth', 'subscription-required');
STANZA_ERROR('407', 'auth', 'subscription-required');
var ERR_UNEXPECTED_REQUEST =
STANZA_ERROR('400', 'wait', 'unexpected-request');
STANZA_ERROR('400', 'wait', 'unexpected-request');

View file

@ -20,7 +20,7 @@ var DataForm = (function () {
var self = {};
/**
/**
* Gets the defined dataform elements
* @public
* @param {string} host
@ -384,7 +384,7 @@ var DataForm = (function () {
};
/**
/**
* Handles the command dataform
* @public
* @param {object} iq
@ -943,7 +943,7 @@ var DataForm = (function () {
};
/**
/**
* Gets the dataform type
* @public
* @param {string} host

View file

@ -25,7 +25,7 @@ var DataStore = (function () {
self._persistent_emulated = {};
/**
/**
* Common: storage adapter
* @public
* @param {object} storage_native
@ -234,7 +234,7 @@ var DataStore = (function () {
};
/**
/**
* Temporary: used to check a database entry exists
* @public
* @param {string} dbID
@ -378,7 +378,7 @@ var DataStore = (function () {
};
/**
/**
* Persistent: used to remove a database entry
* @public
* @param {string} dbID

View file

@ -25,7 +25,7 @@ var DateUtils = (function () {
self.presence_last_activity = 0;
/**
/**
* Gets a stamp from a date
* @public
* @param {Date} date
@ -115,7 +115,7 @@ var DateUtils = (function () {
};
/**
/**
* Generates the time for XMPP
* @public
* @param {string} location
@ -288,7 +288,7 @@ var DateUtils = (function () {
};
/**
/**
* Parses a XMPP date (hh-mm-ss) into an human-readable one
* @public
* @param {string} to_parse

View file

@ -20,7 +20,7 @@ var Directory = (function () {
var self = {};
/**
/**
* Opens the directory popup
* @public
* @return {boolean}

View file

@ -20,7 +20,7 @@ var Discovery = (function () {
var self = {};
/**
/**
* Opens the discovery popup
* @public
* @return {boolean}

View file

@ -20,7 +20,7 @@ var Errors = (function () {
var self = {};
/**
/**
* Shows the given error output
* @public
* @param {string} condition

View file

@ -20,7 +20,7 @@ var Favorites = (function () {
var self = {};
/**
/**
* Opens the favorites popup
* @public
* @return {undefined}
@ -255,7 +255,7 @@ var Favorites = (function () {
};
/**
/**
* Edits a favorite
* @public
* @return {undefined}
@ -365,6 +365,8 @@ var Favorites = (function () {
Console.info('Action on this bookmark: ' + room + '@' + server + ' / ' + type);
} catch(e) {
Console.error('Favorites.terminateThis', e);
} finally {
return false;
}
};
@ -444,7 +446,7 @@ var Favorites = (function () {
};
/**
/**
* Gets a list of the MUC items on a given server
* @public
* @return {undefined}
@ -663,11 +665,11 @@ var Favorites = (function () {
if(e.keyCode == 13) {
// Edit a favorite
if($(path + 'fedit-edit').is(':visible'))
terminateThis('edit');
self.terminateThis('edit');
// Add a favorite
else
terminateThis('add');
self.terminateThis('add');
}
});
@ -690,15 +692,15 @@ var Favorites = (function () {
});
$(path + 'fedit-add').click(function() {
return terminateThis('add');
return self.terminateThis('add');
});
$(path + 'fedit-edit').click(function() {
return terminateThis('edit');
return self.terminateThis('edit');
});
$(path + 'fedit-remove').click(function() {
return terminateThis('remove');
return self.terminateThis('remove');
});
$(path + 'bottom .finish').click(function() {

View file

@ -20,7 +20,23 @@ var Features = (function () {
var self = {};
/**
/* Constants */
self.SERVER_NAMES = [
'metronome',
'prosody',
'ejabberd',
'jabberd',
'openfire',
'tigase',
'isode'
];
/* Variables */
self.server_name = null;
/**
* Gets the features of a server
* @public
* @return {undefined}
@ -89,10 +105,12 @@ var Features = (function () {
// Markers
var namespaces = [NS_PUBSUB, NS_PUBSUB_CN, NS_URN_MAM, NS_COMMANDS, NS_URN_CARBONS];
var identity = selector.find('identity');
var cur_feature;
var features = {
// This weird selector fixes the same IE8 bug as above...
'pep': (selector.find('identity').filter(function() {
'pep': (identity.filter(function() {
var this_sel = $(this);
return (this_sel.attr('category') == 'pubsub' && this_sel.attr('type') == 'pep');
}).size() && true)
@ -105,7 +123,12 @@ var Features = (function () {
self.enable(namespace);
}
});
// Retrieve server identity
self.server_name = self._normalizeServerName(
identity.filter('[category="server"]').attr('name')
);
// Enable the pep elements if available
if(features.pep === true) {
// Update our database
@ -246,7 +269,7 @@ var Features = (function () {
};
/**
/**
* Returns the XMPP server PEP support
* @public
* @return {boolean}
@ -362,6 +385,49 @@ var Features = (function () {
};
/**
* Normalizes the XMPP server name
* @private
* @return {string}
*/
self._normalizeServerName = function(name) {
try {
var cur_r;
for(var i in self.SERVER_NAMES) {
cur_r = new RegExp(self.SERVER_NAMES[i], 'gi');
if(cur_r.exec(name) !== null) {
name = self.SERVER_NAMES[i];
break;
}
}
} catch(e) {
Console.error('Features._normalizeServerName', e);
} finally {
return name;
}
};
/**
* Returns the XMPP server name
* @public
* @return {string}
*/
self.getServerName = function() {
try {
return self.server_name;
} catch(e) {
Console.error('Features.getServerName', e);
}
};
/**
* Return class scope
*/

View file

@ -20,7 +20,7 @@ var Filter = (function () {
var self = {};
/**
/**
* Generates a given emoticon HTML code
* @public
* @param {string} image

View file

@ -24,7 +24,7 @@ var Groupchat = (function () {
var JOIN_SUGGEST = [];
/**
/**
* Displays the MUC admin elements
* @public
* @param {string} affiliation
@ -348,7 +348,7 @@ var Groupchat = (function () {
};
/**
/**
* Generates a groupchat to join array
* @public
* @return {object}

View file

@ -20,7 +20,7 @@ var Home = (function () {
var self = {};
/**
/**
* Allows the user to switch the difference home page elements
* @public
* @param {string} div

View file

@ -20,7 +20,7 @@ var HTTPAuth = (function () {
var self = {};
/**
/**
* Login to a HTTP session
* @public
* @param {string} lNick
@ -55,7 +55,7 @@ var HTTPAuth = (function () {
}
// And we handle everything that happen
self.setupCon(con);
Connection.setupCon(con);
// Generate a resource
var random_resource = DataStore.getDB(Connection.desktop_hash, 'session', 'resource');

View file

@ -20,7 +20,7 @@ var Inbox = (function () {
var self = {};
/**
/**
* Opens the inbox popup
* @public
* @return {boolean}
@ -232,7 +232,7 @@ var Inbox = (function () {
};
/**
/**
* Cleans the inbox
* @public
* @return {undefined}
@ -469,7 +469,7 @@ var Inbox = (function () {
};
/**
/**
* Stores an inbox message
* @public
* @param {string} from
@ -715,7 +715,7 @@ var Inbox = (function () {
};
/**
/**
* Hides a normal message content
* @public
* @param {string} id

View file

@ -20,7 +20,7 @@ var IntegrateBox = (function () {
var self = {};
/**
/**
* Opens the integratebox popup
* @public
* @return {undefined}
@ -309,7 +309,7 @@ var IntegrateBox = (function () {
};
/**
/**
* Filters a string to apply the integratebox links
* @public
* @param {string} data

View file

@ -24,7 +24,7 @@ var Interface = (function () {
self.chat_focus_hash = null;
/**
/**
* Changes the title of the document
* @public
* @param {string} new_title
@ -166,7 +166,7 @@ var Interface = (function () {
};
/**
/**
* Loads the complete chat switcher
* @public
* @return {undefined}
@ -433,7 +433,7 @@ var Interface = (function () {
};
/**
/**
* Notifies the user from a new incoming message
* @public
* @param {string} hash
@ -451,17 +451,19 @@ var Interface = (function () {
// We notify the user if he has not the focus on the chat
if(!active || !Common.isFocused() || (self.chat_focus_hash != hash)) {
if(!active) {
if(type == 'personal')
if(type == 'personal') {
$(tested + ', ' + chat_switch + 'more-button').addClass('chan-newmessage');
else if(type == 'unread')
} else if(type == 'unread') {
$(tested).addClass('chan-unread');
}
}
// Count the number of pending messages
var pending = 1;
if(Common.exists('#' + hash + '[data-counter]'))
if(Common.exists('#' + hash + '[data-counter]')) {
pending = parseInt($('#' + hash).attr('data-counter')) + 1;
}
$('#' + hash).attr('data-counter', pending);
}
@ -570,7 +572,7 @@ var Interface = (function () {
};
/**
/**
* Shows all the buddies in the roster
* @public
* @param {string} from

View file

@ -15,340 +15,340 @@ Author: Camaran
* Released under MIT license, http://cubiq.org/license
*/
var addToHome = (function (w) {
var nav = w.navigator,
isIDevice = 'platform' in nav && (/iphone|ipod|ipad/gi).test(nav.platform),
isIPad,
isRetina,
isSafari,
isStandalone,
OSVersion,
startX = 0,
startY = 0,
lastVisit = 0,
isExpired,
isSessionActive,
isReturningVisitor,
balloon,
overrideChecks,
var nav = w.navigator,
isIDevice = 'platform' in nav && (/iphone|ipod|ipad/gi).test(nav.platform),
isIPad,
isRetina,
isSafari,
isStandalone,
OSVersion,
startX = 0,
startY = 0,
lastVisit = 0,
isExpired,
isSessionActive,
isReturningVisitor,
balloon,
overrideChecks,
positionInterval,
closeTimeout,
positionInterval,
closeTimeout,
options = {
autostart: true, // Automatically open the balloon
returningVisitor: false, // Show the balloon to returning visitors only (setting this to true is highly recommended)
animationIn: 'drop', // drop || bubble || fade
animationOut: 'fade', // drop || bubble || fade
startDelay: 2000, // 2 seconds from page load before the balloon appears
lifespan: 15000, // 15 seconds before it is automatically destroyed
bottomOffset: 14, // Distance of the balloon from bottom
expire: 0, // Minutes to wait before showing the popup again (0 = always displayed)
message: '', // Customize your message or force a language ('' = automatic)
touchIcon: false, // Display the touch icon
arrow: true, // Display the balloon arrow
hookOnLoad: true, // Should we hook to onload event? (really advanced usage)
closeButton: true, // Let the user close the balloon
iterations: 100 // Internal/debug use
},
options = {
autostart: true, // Automatically open the balloon
returningVisitor: false, // Show the balloon to returning visitors only (setting this to true is highly recommended)
animationIn: 'drop', // drop || bubble || fade
animationOut: 'fade', // drop || bubble || fade
startDelay: 2000, // 2 seconds from page load before the balloon appears
lifespan: 15000, // 15 seconds before it is automatically destroyed
bottomOffset: 14, // Distance of the balloon from bottom
expire: 0, // Minutes to wait before showing the popup again (0 = always displayed)
message: '', // Customize your message or force a language ('' = automatic)
touchIcon: false, // Display the touch icon
arrow: true, // Display the balloon arrow
hookOnLoad: true, // Should we hook to onload event? (really advanced usage)
closeButton: true, // Let the user close the balloon
iterations: 100 // Internal/debug use
},
intl = {
ar: '<span dir="rtl">قم بتثبيت هذا التطبيق على <span dir="ltr">%device:</span>انقر<span dir="ltr">%icon</span> ،<strong>ثم اضفه الى الشاشة الرئيسية.</strong></span>',
ca_es: 'Per instal·lar aquesta aplicació al vostre %device premeu %icon i llavors <strong>Afegir a pantalla d\'inici</strong>.',
cs_cz: 'Pro instalaci aplikace na Váš %device, stiskněte %icon a v nabídce <strong>Přidat na plochu</strong>.',
da_dk: 'Tilføj denne side til din %device: tryk på %icon og derefter <strong>Føj til hjemmeskærm</strong>.',
de_de: 'Installieren Sie diese App auf Ihrem %device: %icon antippen und dann <strong>Zum Home-Bildschirm</strong>.',
el_gr: 'Εγκαταστήσετε αυτήν την Εφαρμογή στήν συσκευή σας %device: %icon μετά πατάτε <strong>Προσθήκη σε Αφετηρία</strong>.',
en_us: 'Install this web app on your %device: tap %icon and then <strong>Add to Home Screen</strong>.',
es_es: 'Para instalar esta app en su %device, pulse %icon y seleccione <strong>Añadir a pantalla de inicio</strong>.',
fi_fi: 'Asenna tämä web-sovellus laitteeseesi %device: paina %icon ja sen jälkeen valitse <strong>Lisää Koti-valikkoon</strong>.',
fr_fr: 'Ajoutez cette application sur votre %device en cliquant sur %icon, puis <strong>Ajouter à l\'écran d\'accueil</strong>.',
he_il: '<span dir="rtl">התקן אפליקציה זו על ה-%device שלך: הקש %icon ואז <strong>הוסף למסך הבית</strong>.</span>',
hr_hr: 'Instaliraj ovu aplikaciju na svoj %device: klikni na %icon i odaberi <strong>Dodaj u početni zaslon</strong>.',
hu_hu: 'Telepítse ezt a web-alkalmazást az Ön %device-jára: nyomjon a %icon-ra majd a <strong>Főképernyőhöz adás</strong> gombra.',
it_it: 'Installa questa applicazione sul tuo %device: premi su %icon e poi <strong>Aggiungi a Home</strong>.',
ja_jp: 'このウェブアプリをあなたの%deviceにインストールするには%iconをタップして<strong>ホーム画面に追加</strong>を選んでください。',
ko_kr: '%device에 웹앱을 설치하려면 %icon을 터치 후 "홈화면에 추가"를 선택하세요',
nb_no: 'Installer denne appen på din %device: trykk på %icon og deretter <strong>Legg til på Hjem-skjerm</strong>',
nl_nl: 'Installeer deze webapp op uw %device: tik %icon en dan <strong>Voeg toe aan beginscherm</strong>.',
pl_pl: 'Aby zainstalować tę aplikacje na %device: naciśnij %icon a następnie <strong>Dodaj jako ikonę</strong>.',
pt_br: 'Instale este aplicativo em seu %device: aperte %icon e selecione <strong>Adicionar à Tela Inicio</strong>.',
pt_pt: 'Para instalar esta aplicação no seu %device, prima o %icon e depois em <strong>Adicionar ao ecrã principal</strong>.',
ru_ru: 'Установите это веб-приложение на ваш %device: нажмите %icon, затем <strong>Добавить в «Домой»</strong>.',
sv_se: 'Lägg till denna webbapplikation på din %device: tryck på %icon och därefter <strong>Lägg till på hemskärmen</strong>.',
th_th: 'ติดตั้งเว็บแอพฯ นี้บน %device ของคุณ: แตะ %icon และ <strong>เพิ่มที่หน้าจอโฮม</strong>',
tr_tr: 'Bu uygulamayı %device\'a eklemek için %icon simgesine sonrasında <strong>Ana Ekrana Ekle</strong> düğmesine basın.',
uk_ua: 'Встановіть цей веб сайт на Ваш %device: натисніть %icon, а потім <strong>На початковий екран</strong>.',
zh_cn: '您可以将此应用程式安装到您的 %device 上。请按 %icon 然后点选<strong>添加至主屏幕</strong>。',
zh_tw: '您可以將此應用程式安裝到您的 %device 上。請按 %icon 然後點選<strong>加入主畫面螢幕</strong>。'
};
intl = {
ar: '<span dir="rtl">قم بتثبيت هذا التطبيق على <span dir="ltr">%device:</span>انقر<span dir="ltr">%icon</span> ،<strong>ثم اضفه الى الشاشة الرئيسية.</strong></span>',
ca_es: 'Per instal·lar aquesta aplicació al vostre %device premeu %icon i llavors <strong>Afegir a pantalla d\'inici</strong>.',
cs_cz: 'Pro instalaci aplikace na Váš %device, stiskněte %icon a v nabídce <strong>Přidat na plochu</strong>.',
da_dk: 'Tilføj denne side til din %device: tryk på %icon og derefter <strong>Føj til hjemmeskærm</strong>.',
de_de: 'Installieren Sie diese App auf Ihrem %device: %icon antippen und dann <strong>Zum Home-Bildschirm</strong>.',
el_gr: 'Εγκαταστήσετε αυτήν την Εφαρμογή στήν συσκευή σας %device: %icon μετά πατάτε <strong>Προσθήκη σε Αφετηρία</strong>.',
en_us: 'Install this web app on your %device: tap %icon and then <strong>Add to Home Screen</strong>.',
es_es: 'Para instalar esta app en su %device, pulse %icon y seleccione <strong>Añadir a pantalla de inicio</strong>.',
fi_fi: 'Asenna tämä web-sovellus laitteeseesi %device: paina %icon ja sen jälkeen valitse <strong>Lisää Koti-valikkoon</strong>.',
fr_fr: 'Ajoutez cette application sur votre %device en cliquant sur %icon, puis <strong>Ajouter à l\'écran d\'accueil</strong>.',
he_il: '<span dir="rtl">התקן אפליקציה זו על ה-%device שלך: הקש %icon ואז <strong>הוסף למסך הבית</strong>.</span>',
hr_hr: 'Instaliraj ovu aplikaciju na svoj %device: klikni na %icon i odaberi <strong>Dodaj u početni zaslon</strong>.',
hu_hu: 'Telepítse ezt a web-alkalmazást az Ön %device-jára: nyomjon a %icon-ra majd a <strong>Főképernyőhöz adás</strong> gombra.',
it_it: 'Installa questa applicazione sul tuo %device: premi su %icon e poi <strong>Aggiungi a Home</strong>.',
ja_jp: 'このウェブアプリをあなたの%deviceにインストールするには%iconをタップして<strong>ホーム画面に追加</strong>を選んでください。',
ko_kr: '%device에 웹앱을 설치하려면 %icon을 터치 후 "홈화면에 추가"를 선택하세요',
nb_no: 'Installer denne appen på din %device: trykk på %icon og deretter <strong>Legg til på Hjem-skjerm</strong>',
nl_nl: 'Installeer deze webapp op uw %device: tik %icon en dan <strong>Voeg toe aan beginscherm</strong>.',
pl_pl: 'Aby zainstalować tę aplikacje na %device: naciśnij %icon a następnie <strong>Dodaj jako ikonę</strong>.',
pt_br: 'Instale este aplicativo em seu %device: aperte %icon e selecione <strong>Adicionar à Tela Inicio</strong>.',
pt_pt: 'Para instalar esta aplicação no seu %device, prima o %icon e depois em <strong>Adicionar ao ecrã principal</strong>.',
ru_ru: 'Установите это веб-приложение на ваш %device: нажмите %icon, затем <strong>Добавить в «Домой»</strong>.',
sv_se: 'Lägg till denna webbapplikation på din %device: tryck på %icon och därefter <strong>Lägg till på hemskärmen</strong>.',
th_th: 'ติดตั้งเว็บแอพฯ นี้บน %device ของคุณ: แตะ %icon และ <strong>เพิ่มที่หน้าจอโฮม</strong>',
tr_tr: 'Bu uygulamayı %device\'a eklemek için %icon simgesine sonrasında <strong>Ana Ekrana Ekle</strong> düğmesine basın.',
uk_ua: 'Встановіть цей веб сайт на Ваш %device: натисніть %icon, а потім <strong>На початковий екран</strong>.',
zh_cn: '您可以将此应用程式安装到您的 %device 上。请按 %icon 然后点选<strong>添加至主屏幕</strong>。',
zh_tw: '您可以將此應用程式安裝到您的 %device 上。請按 %icon 然後點選<strong>加入主畫面螢幕</strong>。'
};
function init () {
// Preliminary check, all further checks are performed on iDevices only
if ( !isIDevice ) return;
function init () {
// Preliminary check, all further checks are performed on iDevices only
if ( !isIDevice ) return;
var now = Date.now(),
i;
var now = Date.now(),
i;
// Merge local with global options
if ( w.addToHomeConfig ) {
for ( i in w.addToHomeConfig ) {
options[i] = w.addToHomeConfig[i];
}
}
if ( !options.autostart ) options.hookOnLoad = false;
// Merge local with global options
if ( w.addToHomeConfig ) {
for ( i in w.addToHomeConfig ) {
options[i] = w.addToHomeConfig[i];
}
}
if ( !options.autostart ) options.hookOnLoad = false;
isIPad = (/ipad/gi).test(nav.platform);
isRetina = w.devicePixelRatio && w.devicePixelRatio > 1;
isSafari = (/Safari/i).test(nav.appVersion) && !(/CriOS/i).test(nav.appVersion);
isStandalone = nav.standalone;
OSVersion = nav.appVersion.match(/OS (\d+_\d+)/i);
OSVersion = OSVersion && OSVersion[1] ? +OSVersion[1].replace('_', '.') : 0;
isIPad = (/ipad/gi).test(nav.platform);
isRetina = w.devicePixelRatio && w.devicePixelRatio > 1;
isSafari = (/Safari/i).test(nav.appVersion) && !(/CriOS/i).test(nav.appVersion);
isStandalone = nav.standalone;
OSVersion = nav.appVersion.match(/OS (\d+_\d+)/i);
OSVersion = OSVersion && OSVersion[1] ? +OSVersion[1].replace('_', '.') : 0;
lastVisit = +w.localStorage.getItem('addToHome');
lastVisit = +w.localStorage.getItem('addToHome');
isSessionActive = w.sessionStorage.getItem('addToHomeSession');
isReturningVisitor = options.returningVisitor ? lastVisit && lastVisit + 28*24*60*60*1000 > now : true;
isSessionActive = w.sessionStorage.getItem('addToHomeSession');
isReturningVisitor = options.returningVisitor ? lastVisit && lastVisit + 28*24*60*60*1000 > now : true;
if ( !lastVisit ) lastVisit = now;
if ( !lastVisit ) lastVisit = now;
// If it is expired we need to reissue a new balloon
isExpired = isReturningVisitor && lastVisit <= now;
// If it is expired we need to reissue a new balloon
isExpired = isReturningVisitor && lastVisit <= now;
if ( options.hookOnLoad ) w.addEventListener('load', loaded, false);
else if ( !options.hookOnLoad && options.autostart ) loaded();
}
if ( options.hookOnLoad ) w.addEventListener('load', loaded, false);
else if ( !options.hookOnLoad && options.autostart ) loaded();
}
function loaded () {
w.removeEventListener('load', loaded, false);
function loaded () {
w.removeEventListener('load', loaded, false);
if ( !isReturningVisitor ) w.localStorage.setItem('addToHome', Date.now());
else if ( options.expire && isExpired ) w.localStorage.setItem('addToHome', Date.now() + options.expire * 60000);
if ( !isReturningVisitor ) w.localStorage.setItem('addToHome', Date.now());
else if ( options.expire && isExpired ) w.localStorage.setItem('addToHome', Date.now() + options.expire * 60000);
if ( !overrideChecks && ( !isSafari || !isExpired || isSessionActive || isStandalone || !isReturningVisitor ) ) return;
if ( !overrideChecks && ( !isSafari || !isExpired || isSessionActive || isStandalone || !isReturningVisitor ) ) return;
var touchIcon = '',
platform = nav.platform.split(' ')[0],
language = nav.language.replace('-', '_');
var touchIcon = '',
platform = nav.platform.split(' ')[0],
language = nav.language.replace('-', '_');
balloon = document.createElement('div');
balloon.id = 'addToHomeScreen';
balloon.style.cssText += 'left:-9999px;-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0;-webkit-transform:translate3d(0,0,0);position:' + (OSVersion < 5 ? 'absolute' : 'fixed');
balloon = document.createElement('div');
balloon.id = 'addToHomeScreen';
balloon.style.cssText += 'left:-9999px;-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0;-webkit-transform:translate3d(0,0,0);position:' + (OSVersion < 5 ? 'absolute' : 'fixed');
// Localize message
if ( options.message in intl ) { // You may force a language despite the user's locale
language = options.message;
options.message = '';
}
if ( options.message === '' ) { // We look for a suitable language (defaulted to en_us)
options.message = language in intl ? intl[language] : intl['en_us'];
}
// Localize message
if ( options.message in intl ) { // You may force a language despite the user's locale
language = options.message;
options.message = '';
}
if ( options.message === '' ) { // We look for a suitable language (defaulted to en_us)
options.message = language in intl ? intl[language] : intl['en_us'];
}
if ( options.touchIcon ) {
touchIcon = isRetina ?
document.querySelector('head link[rel^=apple-touch-icon][sizes="114x114"],head link[rel^=apple-touch-icon][sizes="144x144"],head link[rel^=apple-touch-icon]') :
document.querySelector('head link[rel^=apple-touch-icon][sizes="57x57"],head link[rel^=apple-touch-icon]');
if ( options.touchIcon ) {
touchIcon = isRetina ?
document.querySelector('head link[rel^=apple-touch-icon][sizes="114x114"],head link[rel^=apple-touch-icon][sizes="144x144"],head link[rel^=apple-touch-icon]') :
document.querySelector('head link[rel^=apple-touch-icon][sizes="57x57"],head link[rel^=apple-touch-icon]');
if ( touchIcon ) {
touchIcon = '<span style="background-image:url(' + touchIcon.href + ')" class="addToHomeTouchIcon"></span>';
}
}
if ( touchIcon ) {
touchIcon = '<span style="background-image:url(' + touchIcon.href + ')" class="addToHomeTouchIcon"></span>';
}
}
balloon.className = (isIPad ? 'addToHomeIpad' : 'addToHomeIphone') + (touchIcon ? ' addToHomeWide' : '');
balloon.innerHTML = touchIcon +
options.message.replace('%device', platform).replace('%icon', OSVersion >= 4.2 ? '<span class="addToHomeShare' + (OSVersion >= 7 ? ' addToHomeShareOS7' : '') + '"></span>' : '<span class="addToHomePlus">+</span>') +
(options.arrow ? '<span class="addToHomeArrow"></span>' : '') +
(options.closeButton ? '<span class="addToHomeClose">\u00D7</span>' : '');
balloon.className = (isIPad ? 'addToHomeIpad' : 'addToHomeIphone') + (touchIcon ? ' addToHomeWide' : '');
balloon.innerHTML = touchIcon +
options.message.replace('%device', platform).replace('%icon', OSVersion >= 4.2 ? '<span class="addToHomeShare' + (OSVersion >= 7 ? ' addToHomeShareOS7' : '') + '"></span>' : '<span class="addToHomePlus">+</span>') +
(options.arrow ? '<span class="addToHomeArrow"></span>' : '') +
(options.closeButton ? '<span class="addToHomeClose">\u00D7</span>' : '');
document.body.appendChild(balloon);
document.body.appendChild(balloon);
// Add the close action
if ( options.closeButton ) balloon.addEventListener('click', clicked, false);
// Add the close action
if ( options.closeButton ) balloon.addEventListener('click', clicked, false);
if ( !isIPad && OSVersion >= 6 ) window.addEventListener('orientationchange', orientationCheck, false);
if ( !isIPad && OSVersion >= 6 ) window.addEventListener('orientationchange', orientationCheck, false);
setTimeout(show, options.startDelay);
}
setTimeout(show, options.startDelay);
}
function show () {
var duration,
iPadXShift = 208;
function show () {
var duration,
iPadXShift = 208;
// Set the initial position
if ( isIPad ) {
if ( OSVersion < 5 ) {
startY = w.scrollY;
startX = w.scrollX;
} else if ( OSVersion < 6 ) {
iPadXShift = 160;
}
// Set the initial position
if ( isIPad ) {
if ( OSVersion < 5 ) {
startY = w.scrollY;
startX = w.scrollX;
} else if ( OSVersion < 6 ) {
iPadXShift = 160;
}
balloon.style.top = startY + options.bottomOffset + 'px';
balloon.style.left = startX + iPadXShift - Math.round(balloon.offsetWidth / 2) + 'px';
balloon.style.top = startY + options.bottomOffset + 'px';
balloon.style.left = startX + iPadXShift - Math.round(balloon.offsetWidth / 2) + 'px';
switch ( options.animationIn ) {
case 'drop':
duration = '0.6s';
balloon.style.webkitTransform = 'translate3d(0,' + -(w.scrollY + options.bottomOffset + balloon.offsetHeight) + 'px,0)';
break;
case 'bubble':
duration = '0.6s';
balloon.style.opacity = '0';
balloon.style.webkitTransform = 'translate3d(0,' + (startY + 50) + 'px,0)';
break;
default:
duration = '1s';
balloon.style.opacity = '0';
}
} else {
startY = w.innerHeight + w.scrollY;
switch ( options.animationIn ) {
case 'drop':
duration = '0.6s';
balloon.style.webkitTransform = 'translate3d(0,' + -(w.scrollY + options.bottomOffset + balloon.offsetHeight) + 'px,0)';
break;
case 'bubble':
duration = '0.6s';
balloon.style.opacity = '0';
balloon.style.webkitTransform = 'translate3d(0,' + (startY + 50) + 'px,0)';
break;
default:
duration = '1s';
balloon.style.opacity = '0';
}
} else {
startY = w.innerHeight + w.scrollY;
if ( OSVersion < 5 ) {
startX = Math.round((w.innerWidth - balloon.offsetWidth) / 2) + w.scrollX;
balloon.style.left = startX + 'px';
balloon.style.top = startY - balloon.offsetHeight - options.bottomOffset + 'px';
} else {
balloon.style.left = '50%';
balloon.style.marginLeft = -Math.round(balloon.offsetWidth / 2) - ( w.orientation%180 && OSVersion >= 6 ? 40 : 0 ) + 'px';
balloon.style.bottom = options.bottomOffset + 'px';
}
if ( OSVersion < 5 ) {
startX = Math.round((w.innerWidth - balloon.offsetWidth) / 2) + w.scrollX;
balloon.style.left = startX + 'px';
balloon.style.top = startY - balloon.offsetHeight - options.bottomOffset + 'px';
} else {
balloon.style.left = '50%';
balloon.style.marginLeft = -Math.round(balloon.offsetWidth / 2) - ( w.orientation%180 && OSVersion >= 6 ? 40 : 0 ) + 'px';
balloon.style.bottom = options.bottomOffset + 'px';
}
switch (options.animationIn) {
case 'drop':
duration = '1s';
balloon.style.webkitTransform = 'translate3d(0,' + -(startY + options.bottomOffset) + 'px,0)';
break;
case 'bubble':
duration = '0.6s';
balloon.style.webkitTransform = 'translate3d(0,' + (balloon.offsetHeight + options.bottomOffset + 50) + 'px,0)';
break;
default:
duration = '1s';
balloon.style.opacity = '0';
}
}
switch (options.animationIn) {
case 'drop':
duration = '1s';
balloon.style.webkitTransform = 'translate3d(0,' + -(startY + options.bottomOffset) + 'px,0)';
break;
case 'bubble':
duration = '0.6s';
balloon.style.webkitTransform = 'translate3d(0,' + (balloon.offsetHeight + options.bottomOffset + 50) + 'px,0)';
break;
default:
duration = '1s';
balloon.style.opacity = '0';
}
}
balloon.offsetHeight; // repaint trick
balloon.style.webkitTransitionDuration = duration;
balloon.style.opacity = '1';
balloon.style.webkitTransform = 'translate3d(0,0,0)';
balloon.addEventListener('webkitTransitionEnd', transitionEnd, false);
balloon.offsetHeight; // repaint trick
balloon.style.webkitTransitionDuration = duration;
balloon.style.opacity = '1';
balloon.style.webkitTransform = 'translate3d(0,0,0)';
balloon.addEventListener('webkitTransitionEnd', transitionEnd, false);
closeTimeout = setTimeout(close, options.lifespan);
}
closeTimeout = setTimeout(close, options.lifespan);
}
function manualShow (override) {
if ( !isIDevice || balloon ) return;
function manualShow (override) {
if ( !isIDevice || balloon ) return;
overrideChecks = override;
loaded();
}
overrideChecks = override;
loaded();
}
function close () {
clearInterval( positionInterval );
clearTimeout( closeTimeout );
closeTimeout = null;
function close () {
clearInterval( positionInterval );
clearTimeout( closeTimeout );
closeTimeout = null;
// check if the popup is displayed and prevent errors
if ( !balloon ) return;
// check if the popup is displayed and prevent errors
if ( !balloon ) return;
var posY = 0,
posX = 0,
opacity = '1',
duration = '0';
var posY = 0,
posX = 0,
opacity = '1',
duration = '0';
if ( options.closeButton ) balloon.removeEventListener('click', clicked, false);
if ( !isIPad && OSVersion >= 6 ) window.removeEventListener('orientationchange', orientationCheck, false);
if ( options.closeButton ) balloon.removeEventListener('click', clicked, false);
if ( !isIPad && OSVersion >= 6 ) window.removeEventListener('orientationchange', orientationCheck, false);
if ( OSVersion < 5 ) {
posY = isIPad ? w.scrollY - startY : w.scrollY + w.innerHeight - startY;
posX = isIPad ? w.scrollX - startX : w.scrollX + Math.round((w.innerWidth - balloon.offsetWidth)/2) - startX;
}
if ( OSVersion < 5 ) {
posY = isIPad ? w.scrollY - startY : w.scrollY + w.innerHeight - startY;
posX = isIPad ? w.scrollX - startX : w.scrollX + Math.round((w.innerWidth - balloon.offsetWidth)/2) - startX;
}
balloon.style.webkitTransitionProperty = '-webkit-transform,opacity';
balloon.style.webkitTransitionProperty = '-webkit-transform,opacity';
switch ( options.animationOut ) {
case 'drop':
if ( isIPad ) {
duration = '0.4s';
opacity = '0';
posY += 50;
} else {
duration = '0.6s';
posY += balloon.offsetHeight + options.bottomOffset + 50;
}
break;
case 'bubble':
if ( isIPad ) {
duration = '0.8s';
posY -= balloon.offsetHeight + options.bottomOffset + 50;
} else {
duration = '0.4s';
opacity = '0';
posY -= 50;
}
break;
default:
duration = '0.8s';
opacity = '0';
}
switch ( options.animationOut ) {
case 'drop':
if ( isIPad ) {
duration = '0.4s';
opacity = '0';
posY += 50;
} else {
duration = '0.6s';
posY += balloon.offsetHeight + options.bottomOffset + 50;
}
break;
case 'bubble':
if ( isIPad ) {
duration = '0.8s';
posY -= balloon.offsetHeight + options.bottomOffset + 50;
} else {
duration = '0.4s';
opacity = '0';
posY -= 50;
}
break;
default:
duration = '0.8s';
opacity = '0';
}
balloon.addEventListener('webkitTransitionEnd', transitionEnd, false);
balloon.style.opacity = opacity;
balloon.style.webkitTransitionDuration = duration;
balloon.style.webkitTransform = 'translate3d(' + posX + 'px,' + posY + 'px,0)';
}
balloon.addEventListener('webkitTransitionEnd', transitionEnd, false);
balloon.style.opacity = opacity;
balloon.style.webkitTransitionDuration = duration;
balloon.style.webkitTransform = 'translate3d(' + posX + 'px,' + posY + 'px,0)';
}
function clicked () {
w.sessionStorage.setItem('addToHomeSession', '1');
isSessionActive = true;
close();
}
function clicked () {
w.sessionStorage.setItem('addToHomeSession', '1');
isSessionActive = true;
close();
}
function transitionEnd () {
balloon.removeEventListener('webkitTransitionEnd', transitionEnd, false);
function transitionEnd () {
balloon.removeEventListener('webkitTransitionEnd', transitionEnd, false);
balloon.style.webkitTransitionProperty = '-webkit-transform';
balloon.style.webkitTransitionDuration = '0.2s';
balloon.style.webkitTransitionProperty = '-webkit-transform';
balloon.style.webkitTransitionDuration = '0.2s';
// We reached the end!
if ( !closeTimeout ) {
balloon.parentNode.removeChild(balloon);
balloon = null;
return;
}
// We reached the end!
if ( !closeTimeout ) {
balloon.parentNode.removeChild(balloon);
balloon = null;
return;
}
// On iOS 4 we start checking the element position
if ( OSVersion < 5 && closeTimeout ) positionInterval = setInterval(setPosition, options.iterations);
}
// On iOS 4 we start checking the element position
if ( OSVersion < 5 && closeTimeout ) positionInterval = setInterval(setPosition, options.iterations);
}
function setPosition () {
var matrix = new WebKitCSSMatrix(w.getComputedStyle(balloon, null).webkitTransform),
posY = isIPad ? w.scrollY - startY : w.scrollY + w.innerHeight - startY,
posX = isIPad ? w.scrollX - startX : w.scrollX + Math.round((w.innerWidth - balloon.offsetWidth) / 2) - startX;
function setPosition () {
var matrix = new WebKitCSSMatrix(w.getComputedStyle(balloon, null).webkitTransform),
posY = isIPad ? w.scrollY - startY : w.scrollY + w.innerHeight - startY,
posX = isIPad ? w.scrollX - startX : w.scrollX + Math.round((w.innerWidth - balloon.offsetWidth) / 2) - startX;
// Screen didn't move
if ( posY == matrix.m42 && posX == matrix.m41 ) return;
// Screen didn't move
if ( posY == matrix.m42 && posX == matrix.m41 ) return;
balloon.style.webkitTransform = 'translate3d(' + posX + 'px,' + posY + 'px,0)';
}
balloon.style.webkitTransform = 'translate3d(' + posX + 'px,' + posY + 'px,0)';
}
// Clear local and session storages (this is useful primarily in development)
function reset () {
w.localStorage.removeItem('addToHome');
w.sessionStorage.removeItem('addToHomeSession');
}
// Clear local and session storages (this is useful primarily in development)
function reset () {
w.localStorage.removeItem('addToHome');
w.sessionStorage.removeItem('addToHomeSession');
}
function orientationCheck () {
balloon.style.marginLeft = -Math.round(balloon.offsetWidth / 2) - ( w.orientation%180 && OSVersion >= 6 ? 40 : 0 ) + 'px';
}
function orientationCheck () {
balloon.style.marginLeft = -Math.round(balloon.offsetWidth / 2) - ( w.orientation%180 && OSVersion >= 6 ? 40 : 0 ) + 'px';
}
// Bootstrap!
init();
// Bootstrap!
init();
return {
show: manualShow,
close: close,
reset: reset
};
return {
show: manualShow,
close: close,
reset: reset
};
})(window);

View file

@ -20,7 +20,7 @@ var IQ = (function () {
var self = {};
/**
/**
* Handles an incoming IQ packet
* @public
* @param {object} iq
@ -109,7 +109,7 @@ var IQ = (function () {
}
// Privacy lists push
else if((iqQueryXMLNS == NS_PRIVACY) && (iqType == 'set')) {
else if((iqQueryXMLNS == NS_PRIVACY) && (iqType == 'set') && Common.isSafeStanza(iq)) {
// REF : http://xmpp.org/extensions/xep-0016.html
// Roster push
@ -124,7 +124,7 @@ var IQ = (function () {
}
// Roster push
else if((iqQueryXMLNS == NS_ROSTER) && (iqType == 'set')) {
else if((iqQueryXMLNS == NS_ROSTER) && (iqType == 'set') && Common.isSafeStanza(iq)) {
// REF : http://xmpp.org/extensions/xep-0092.html
// Roster push

View file

@ -29,7 +29,7 @@ var Jingle = (function() {
/**
* Provides an adapter to the JSJaCJingle console implementation which is different
* @public
* @private
* @return {object}
*/
self._consoleAdapter = (function() {

File diff suppressed because it is too large Load diff

View file

@ -14,188 +14,188 @@
* @license MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
(function ($) {
'use strict';
'use strict';
var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
meta = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
hasOwn = Object.prototype.hasOwnProperty;
var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
meta = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
hasOwn = Object.prototype.hasOwnProperty;
/**
* jQuery.toJSON
* Converts the given argument into a JSON representation.
*
* @param o {Mixed} The json-serializable *thing* to be converted
*
* If an object has a toJSON prototype, that will be used to get the representation.
* Non-integer/string keys are skipped in the object, as are keys that point to a
* function.
*
*/
$.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
if (o === null) {
return 'null';
}
/**
* jQuery.toJSON
* Converts the given argument into a JSON representation.
*
* @param o {Mixed} The json-serializable *thing* to be converted
*
* If an object has a toJSON prototype, that will be used to get the representation.
* Non-integer/string keys are skipped in the object, as are keys that point to a
* function.
*
*/
$.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
if (o === null) {
return 'null';
}
var pairs, k, name, val,
type = $.type(o);
var pairs, k, name, val,
type = $.type(o);
if (type === 'undefined') {
return undefined;
}
if (type === 'undefined') {
return undefined;
}
// Also covers instantiated Number and Boolean objects,
// which are typeof 'object' but thanks to $.type, we
// catch them here. I don't know whether it is right
// or wrong that instantiated primitives are not
// exported to JSON as an {"object":..}.
// We choose this path because that's what the browsers did.
if (type === 'number' || type === 'boolean') {
return String(o);
}
if (type === 'string') {
return $.quoteString(o);
}
if (typeof o.toJSON === 'function') {
return $.toJSON(o.toJSON());
}
if (type === 'date') {
var month = o.getUTCMonth() + 1,
day = o.getUTCDate(),
year = o.getUTCFullYear(),
hours = o.getUTCHours(),
minutes = o.getUTCMinutes(),
seconds = o.getUTCSeconds(),
milli = o.getUTCMilliseconds();
// Also covers instantiated Number and Boolean objects,
// which are typeof 'object' but thanks to $.type, we
// catch them here. I don't know whether it is right
// or wrong that instantiated primitives are not
// exported to JSON as an {"object":..}.
// We choose this path because that's what the browsers did.
if (type === 'number' || type === 'boolean') {
return String(o);
}
if (type === 'string') {
return $.quoteString(o);
}
if (typeof o.toJSON === 'function') {
return $.toJSON(o.toJSON());
}
if (type === 'date') {
var month = o.getUTCMonth() + 1,
day = o.getUTCDate(),
year = o.getUTCFullYear(),
hours = o.getUTCHours(),
minutes = o.getUTCMinutes(),
seconds = o.getUTCSeconds(),
milli = o.getUTCMilliseconds();
if (month < 10) {
month = '0' + month;
}
if (day < 10) {
day = '0' + day;
}
if (hours < 10) {
hours = '0' + hours;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
if (seconds < 10) {
seconds = '0' + seconds;
}
if (milli < 100) {
milli = '0' + milli;
}
if (milli < 10) {
milli = '0' + milli;
}
return '"' + year + '-' + month + '-' + day + 'T' +
hours + ':' + minutes + ':' + seconds +
'.' + milli + 'Z"';
}
if (month < 10) {
month = '0' + month;
}
if (day < 10) {
day = '0' + day;
}
if (hours < 10) {
hours = '0' + hours;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
if (seconds < 10) {
seconds = '0' + seconds;
}
if (milli < 100) {
milli = '0' + milli;
}
if (milli < 10) {
milli = '0' + milli;
}
return '"' + year + '-' + month + '-' + day + 'T' +
hours + ':' + minutes + ':' + seconds +
'.' + milli + 'Z"';
}
pairs = [];
pairs = [];
if ($.isArray(o)) {
for (k = 0; k < o.length; k++) {
pairs.push($.toJSON(o[k]) || 'null');
}
return '[' + pairs.join(',') + ']';
}
if ($.isArray(o)) {
for (k = 0; k < o.length; k++) {
pairs.push($.toJSON(o[k]) || 'null');
}
return '[' + pairs.join(',') + ']';
}
// Any other object (plain object, RegExp, ..)
// Need to do typeof instead of $.type, because we also
// want to catch non-plain objects.
if (typeof o === 'object') {
for (k in o) {
// Only include own properties,
// Filter out inherited prototypes
if (hasOwn.call(o, k)) {
// Keys must be numerical or string. Skip others
type = typeof k;
if (type === 'number') {
name = '"' + k + '"';
} else if (type === 'string') {
name = $.quoteString(k);
} else {
continue;
}
type = typeof o[k];
// Any other object (plain object, RegExp, ..)
// Need to do typeof instead of $.type, because we also
// want to catch non-plain objects.
if (typeof o === 'object') {
for (k in o) {
// Only include own properties,
// Filter out inherited prototypes
if (hasOwn.call(o, k)) {
// Keys must be numerical or string. Skip others
type = typeof k;
if (type === 'number') {
name = '"' + k + '"';
} else if (type === 'string') {
name = $.quoteString(k);
} else {
continue;
}
type = typeof o[k];
// Invalid values like these return undefined
// from toJSON, however those object members
// shouldn't be included in the JSON string at all.
if (type !== 'function' && type !== 'undefined') {
val = $.toJSON(o[k]);
pairs.push(name + ':' + val);
}
}
}
return '{' + pairs.join(',') + '}';
}
};
// Invalid values like these return undefined
// from toJSON, however those object members
// shouldn't be included in the JSON string at all.
if (type !== 'function' && type !== 'undefined') {
val = $.toJSON(o[k]);
pairs.push(name + ':' + val);
}
}
}
return '{' + pairs.join(',') + '}';
}
};
/**
* jQuery.evalJSON
* Evaluates a given json string.
*
* @param str {String}
*/
$.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
/*jshint evil: true */
return eval('(' + str + ')');
};
/**
* jQuery.evalJSON
* Evaluates a given json string.
*
* @param str {String}
*/
$.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
/*jshint evil: true */
return eval('(' + str + ')');
};
/**
* jQuery.secureEvalJSON
* Evals JSON in a way that is *more* secure.
*
* @param str {String}
*/
$.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
var filtered =
str
.replace(/\\["\\\/bfnrtu]/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
/**
* jQuery.secureEvalJSON
* Evals JSON in a way that is *more* secure.
*
* @param str {String}
*/
$.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
var filtered =
str
.replace(/\\["\\\/bfnrtu]/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
if (/^[\],:{}\s]*$/.test(filtered)) {
/*jshint evil: true */
return eval('(' + str + ')');
}
throw new SyntaxError('Error parsing JSON, source is not valid.');
};
if (/^[\],:{}\s]*$/.test(filtered)) {
/*jshint evil: true */
return eval('(' + str + ')');
}
throw new SyntaxError('Error parsing JSON, source is not valid.');
};
/**
* jQuery.quoteString
* Returns a string-repr of a string, escaping quotes intelligently.
* Mostly a support function for toJSON.
* Examples:
* >>> jQuery.quoteString('apple')
* "apple"
*
* >>> jQuery.quoteString('"Where are we going?", she asked.')
* "\"Where are we going?\", she asked."
*/
$.quoteString = function (str) {
if (str.match(escape)) {
return '"' + str.replace(escape, function (a) {
var c = meta[a];
if (typeof c === 'string') {
return c;
}
c = a.charCodeAt();
return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
}) + '"';
}
return '"' + str + '"';
};
/**
* jQuery.quoteString
* Returns a string-repr of a string, escaping quotes intelligently.
* Mostly a support function for toJSON.
* Examples:
* >>> jQuery.quoteString('apple')
* "apple"
*
* >>> jQuery.quoteString('"Where are we going?", she asked.')
* "\"Where are we going?\", she asked."
*/
$.quoteString = function (str) {
if (str.match(escape)) {
return '"' + str.replace(escape, function (a) {
var c = meta[a];
if (typeof c === 'string') {
return c;
}
c = a.charCodeAt();
return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
}) + '"';
}
return '"' + str + '"';
};
}(jQuery));

View file

@ -1,157 +1,157 @@
/*! http://mths.be/placeholder v2.0.7 by @mathias */
;(function(window, document, $) {
var isInputSupported = 'placeholder' in document.createElement('input'),
isTextareaSupported = 'placeholder' in document.createElement('textarea'),
prototype = $.fn,
valHooks = $.valHooks,
hooks,
placeholder;
var isInputSupported = 'placeholder' in document.createElement('input'),
isTextareaSupported = 'placeholder' in document.createElement('textarea'),
prototype = $.fn,
valHooks = $.valHooks,
hooks,
placeholder;
if (isInputSupported && isTextareaSupported) {
if (isInputSupported && isTextareaSupported) {
placeholder = prototype.placeholder = function() {
return this;
};
placeholder = prototype.placeholder = function() {
return this;
};
placeholder.input = placeholder.textarea = true;
placeholder.input = placeholder.textarea = true;
} else {
} else {
placeholder = prototype.placeholder = function() {
var $this = this;
$this
.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
.not('.placeholder')
.bind({
'focus.placeholder': clearPlaceholder,
'blur.placeholder': setPlaceholder
})
.data('placeholder-enabled', true)
.trigger('blur.placeholder');
return $this;
};
placeholder = prototype.placeholder = function() {
var $this = this;
$this
.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
.not('.placeholder')
.bind({
'focus.placeholder': clearPlaceholder,
'blur.placeholder': setPlaceholder
})
.data('placeholder-enabled', true)
.trigger('blur.placeholder');
return $this;
};
placeholder.input = isInputSupported;
placeholder.textarea = isTextareaSupported;
placeholder.input = isInputSupported;
placeholder.textarea = isTextareaSupported;
hooks = {
'get': function(element) {
var $element = $(element);
return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
},
'set': function(element, value) {
var $element = $(element);
if (!$element.data('placeholder-enabled')) {
return element.value = value;
}
if (value == '') {
element.value = value;
// Issue #56: Setting the placeholder causes problems if the element continues to have focus.
if (element != document.activeElement) {
// We can't use `triggerHandler` here because of dummy text/password inputs :(
setPlaceholder.call(element);
}
} else if ($element.hasClass('placeholder')) {
clearPlaceholder.call(element, true, value) || (element.value = value);
} else {
element.value = value;
}
// `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
return $element;
}
};
hooks = {
'get': function(element) {
var $element = $(element);
return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
},
'set': function(element, value) {
var $element = $(element);
if (!$element.data('placeholder-enabled')) {
return element.value = value;
}
if (value == '') {
element.value = value;
// Issue #56: Setting the placeholder causes problems if the element continues to have focus.
if (element != document.activeElement) {
// We can't use `triggerHandler` here because of dummy text/password inputs :(
setPlaceholder.call(element);
}
} else if ($element.hasClass('placeholder')) {
clearPlaceholder.call(element, true, value) || (element.value = value);
} else {
element.value = value;
}
// `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
return $element;
}
};
isInputSupported || (valHooks.input = hooks);
isTextareaSupported || (valHooks.textarea = hooks);
isInputSupported || (valHooks.input = hooks);
isTextareaSupported || (valHooks.textarea = hooks);
$(function() {
// Look for forms
$(document).delegate('form', 'submit.placeholder', function() {
// Clear the placeholder values so they don't get submitted
var $inputs = $('.placeholder', this).each(clearPlaceholder);
setTimeout(function() {
$inputs.each(setPlaceholder);
}, 10);
});
});
$(function() {
// Look for forms
$(document).delegate('form', 'submit.placeholder', function() {
// Clear the placeholder values so they don't get submitted
var $inputs = $('.placeholder', this).each(clearPlaceholder);
setTimeout(function() {
$inputs.each(setPlaceholder);
}, 10);
});
});
// Clear placeholder values upon page reload
$(window).bind('beforeunload.placeholder', function() {
$('.placeholder').each(function() {
this.value = '';
});
});
// Clear placeholder values upon page reload
$(window).bind('beforeunload.placeholder', function() {
$('.placeholder').each(function() {
this.value = '';
});
});
}
}
function args(elem) {
// Return an object of element attributes
var newAttrs = {},
rinlinejQuery = /^jQuery\d+$/;
$.each(elem.attributes, function(i, attr) {
if (attr.specified && !rinlinejQuery.test(attr.name)) {
newAttrs[attr.name] = attr.value;
}
});
return newAttrs;
}
function args(elem) {
// Return an object of element attributes
var newAttrs = {},
rinlinejQuery = /^jQuery\d+$/;
$.each(elem.attributes, function(i, attr) {
if (attr.specified && !rinlinejQuery.test(attr.name)) {
newAttrs[attr.name] = attr.value;
}
});
return newAttrs;
}
function clearPlaceholder(event, value) {
var input = this,
$input = $(input);
if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {
if ($input.data('placeholder-password')) {
$input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));
// If `clearPlaceholder` was called from `$.valHooks.input.set`
if (event === true) {
return $input[0].value = value;
}
$input.focus();
} else {
input.value = '';
$input.removeClass('placeholder');
input == document.activeElement && input.select();
}
}
}
function clearPlaceholder(event, value) {
var input = this,
$input = $(input);
if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {
if ($input.data('placeholder-password')) {
$input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));
// If `clearPlaceholder` was called from `$.valHooks.input.set`
if (event === true) {
return $input[0].value = value;
}
$input.focus();
} else {
input.value = '';
$input.removeClass('placeholder');
input == document.activeElement && input.select();
}
}
}
function setPlaceholder() {
var $replacement,
input = this,
$input = $(input),
$origInput = $input,
id = this.id;
if (input.value == '') {
if (input.type == 'password') {
if (!$input.data('placeholder-textinput')) {
try {
$replacement = $input.clone().attr({ 'type': 'text' });
} catch(e) {
$replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
}
$replacement
.removeAttr('name')
.data({
'placeholder-password': true,
'placeholder-id': id
})
.bind('focus.placeholder', clearPlaceholder);
$input
.data({
'placeholder-textinput': $replacement,
'placeholder-id': id
})
.before($replacement);
}
$input = $input.removeAttr('id').hide().prev().attr('id', id).show();
// Note: `$input[0] != input` now!
}
$input.addClass('placeholder');
$input[0].value = $input.attr('placeholder');
} else {
$input.removeClass('placeholder');
}
}
function setPlaceholder() {
var $replacement,
input = this,
$input = $(input),
$origInput = $input,
id = this.id;
if (input.value == '') {
if (input.type == 'password') {
if (!$input.data('placeholder-textinput')) {
try {
$replacement = $input.clone().attr({ 'type': 'text' });
} catch(e) {
$replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
}
$replacement
.removeAttr('name')
.data({
'placeholder-password': true,
'placeholder-id': id
})
.bind('focus.placeholder', clearPlaceholder);
$input
.data({
'placeholder-textinput': $replacement,
'placeholder-id': id
})
.before($replacement);
}
$input = $input.removeAttr('id').hide().prev().attr('id', id).show();
// Note: `$input[0] != input` now!
}
$input.addClass('placeholder');
$input[0].value = $input.attr('placeholder');
} else {
$input.removeClass('placeholder');
}
}
}(this, document, jQuery));

View file

@ -17,169 +17,169 @@
}
}(function ($) {
var $scrollTo = $.scrollTo = function( target, duration, settings ) {
return $(window).scrollTo( target, duration, settings );
};
var $scrollTo = $.scrollTo = function( target, duration, settings ) {
return $(window).scrollTo( target, duration, settings );
};
$scrollTo.defaults = {
axis:'xy',
duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
limit:true
};
$scrollTo.defaults = {
axis:'xy',
duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
limit:true
};
// Returns the element that needs to be animated to scroll the window.
// Kept for backwards compatibility (specially for localScroll & serialScroll)
$scrollTo.window = function( scope ) {
return $(window)._scrollable();
};
// Returns the element that needs to be animated to scroll the window.
// Kept for backwards compatibility (specially for localScroll & serialScroll)
$scrollTo.window = function( scope ) {
return $(window)._scrollable();
};
// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function() {
return this.map(function() {
var elem = this,
isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function() {
return this.map(function() {
var elem = this,
isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
if (!isWin)
return elem;
if (!isWin)
return elem;
var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
doc.body :
doc.documentElement;
});
};
return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
doc.body :
doc.documentElement;
});
};
$.fn.scrollTo = function( target, duration, settings ) {
if (typeof duration == 'object') {
settings = duration;
duration = 0;
}
if (typeof settings == 'function')
settings = { onAfter:settings };
$.fn.scrollTo = function( target, duration, settings ) {
if (typeof duration == 'object') {
settings = duration;
duration = 0;
}
if (typeof settings == 'function')
settings = { onAfter:settings };
if (target == 'max')
target = 9e9;
if (target == 'max')
target = 9e9;
settings = $.extend( {}, $scrollTo.defaults, settings );
// Speed is still recognized for backwards compatibility
duration = duration || settings.duration;
// Make sure the settings are given right
settings.queue = settings.queue && settings.axis.length > 1;
settings = $.extend( {}, $scrollTo.defaults, settings );
// Speed is still recognized for backwards compatibility
duration = duration || settings.duration;
// Make sure the settings are given right
settings.queue = settings.queue && settings.axis.length > 1;
if (settings.queue)
// Let's keep the overall duration
duration /= 2;
settings.offset = both( settings.offset );
settings.over = both( settings.over );
if (settings.queue)
// Let's keep the overall duration
duration /= 2;
settings.offset = both( settings.offset );
settings.over = both( settings.over );
return this._scrollable().each(function() {
// Null target yields nothing, just like jQuery does
if (target == null) return;
return this._scrollable().each(function() {
// Null target yields nothing, just like jQuery does
if (target == null) return;
var elem = this,
$elem = $(elem),
targ = target, toff, attr = {},
win = $elem.is('html,body');
var elem = this,
$elem = $(elem),
targ = target, toff, attr = {},
win = $elem.is('html,body');
switch (typeof targ) {
// A number will pass the regex
case 'number':
case 'string':
if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
targ = both( targ );
// We are done
break;
}
// Relative selector, no break!
targ = $(targ,this);
if (!targ.length) return;
case 'object':
// DOMElement / jQuery
if (targ.is || targ.style)
// Get the real position of the target
toff = (targ = $(targ)).offset();
}
var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
$.each( settings.axis.split(''), function( i, axis ) {
var Pos = axis == 'x' ? 'Left' : 'Top',
pos = Pos.toLowerCase(),
key = 'scroll' + Pos,
old = elem[key],
max = $scrollTo.max(elem, axis);
switch (typeof targ) {
// A number will pass the regex
case 'number':
case 'string':
if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
targ = both( targ );
// We are done
break;
}
// Relative selector, no break!
targ = $(targ,this);
if (!targ.length) return;
case 'object':
// DOMElement / jQuery
if (targ.is || targ.style)
// Get the real position of the target
toff = (targ = $(targ)).offset();
}
var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
$.each( settings.axis.split(''), function( i, axis ) {
var Pos = axis == 'x' ? 'Left' : 'Top',
pos = Pos.toLowerCase(),
key = 'scroll' + Pos,
old = elem[key],
max = $scrollTo.max(elem, axis);
if (toff) {// jQuery / DOMElement
attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
if (toff) {// jQuery / DOMElement
attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
// If it's a dom element, reduce the margin
if (settings.margin) {
attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
}
// If it's a dom element, reduce the margin
if (settings.margin) {
attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
}
attr[key] += offset[pos] || 0;
attr[key] += offset[pos] || 0;
if(settings.over[pos])
// Scroll to a fraction of its width/height
attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
} else {
var val = targ[pos];
// Handle percentage values
attr[key] = val.slice && val.slice(-1) == '%' ?
parseFloat(val) / 100 * max
: val;
}
if(settings.over[pos])
// Scroll to a fraction of its width/height
attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
} else {
var val = targ[pos];
// Handle percentage values
attr[key] = val.slice && val.slice(-1) == '%' ?
parseFloat(val) / 100 * max
: val;
}
// Number or 'number'
if (settings.limit && /^\d+$/.test(attr[key]))
// Check the limits
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
// Number or 'number'
if (settings.limit && /^\d+$/.test(attr[key]))
// Check the limits
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
// Queueing axes
if (!i && settings.queue) {
// Don't waste time animating, if there's no need.
if (old != attr[key])
// Intermediate animation
animate( settings.onAfterFirst );
// Don't animate this axis again in the next iteration.
delete attr[key];
}
});
// Queueing axes
if (!i && settings.queue) {
// Don't waste time animating, if there's no need.
if (old != attr[key])
// Intermediate animation
animate( settings.onAfterFirst );
// Don't animate this axis again in the next iteration.
delete attr[key];
}
});
animate( settings.onAfter );
animate( settings.onAfter );
function animate( callback ) {
$elem.animate( attr, duration, settings.easing, callback && function() {
callback.call(this, targ, settings);
});
};
function animate( callback ) {
$elem.animate( attr, duration, settings.easing, callback && function() {
callback.call(this, targ, settings);
});
};
}).end();
};
}).end();
};
// Max scrolling position, works on quirks mode
// It only fails (not too badly) on IE, quirks mode.
$scrollTo.max = function( elem, axis ) {
var Dim = axis == 'x' ? 'Width' : 'Height',
scroll = 'scroll'+Dim;
// Max scrolling position, works on quirks mode
// It only fails (not too badly) on IE, quirks mode.
$scrollTo.max = function( elem, axis ) {
var Dim = axis == 'x' ? 'Width' : 'Height',
scroll = 'scroll'+Dim;
if (!$(elem).is('html,body'))
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
if (!$(elem).is('html,body'))
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
var size = 'client' + Dim,
html = elem.ownerDocument.documentElement,
body = elem.ownerDocument.body;
var size = 'client' + Dim,
html = elem.ownerDocument.documentElement,
body = elem.ownerDocument.body;
return Math.max( html[scroll], body[scroll] )
- Math.min( html[size] , body[size] );
};
return Math.max( html[scroll], body[scroll] )
- Math.min( html[size] , body[size] );
};
function both( val ) {
return $.isFunction(val) || typeof val == 'object' ? val : { top:val, left:val };
};
function both( val ) {
return $.isFunction(val) || typeof val == 'object' ? val : { top:val, left:val };
};
// AMD requirement
return $scrollTo;

View file

@ -10,129 +10,129 @@
**/
jQuery.fn.extend({
everyTime: function(interval, label, fn, times) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, times);
});
},
oneTime: function(interval, label, fn) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, 1);
});
},
stopTime: function(label, fn) {
return this.each(function() {
jQuery.timer.remove(this, label, fn);
});
}
everyTime: function(interval, label, fn, times) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, times);
});
},
oneTime: function(interval, label, fn) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, 1);
});
},
stopTime: function(label, fn) {
return this.each(function() {
jQuery.timer.remove(this, label, fn);
});
}
});
jQuery.extend({
timer: {
global: [],
guid: 1,
dataKey: "jQuery.timer",
regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
powers: {
// Yeah this is major overkill...
'ms': 1,
'cs': 10,
'ds': 100,
's': 1000,
'das': 10000,
'hs': 100000,
'ks': 1000000
},
timeParse: function(value) {
if (value == undefined || value == null)
return null;
var result = this.regex.exec(jQuery.trim(value.toString()));
if (result[2]) {
var num = parseFloat(result[1]);
var mult = this.powers[result[2]] || 1;
return num * mult;
} else {
return value;
}
},
add: function(element, interval, label, fn, times) {
var counter = 0;
timer: {
global: [],
guid: 1,
dataKey: "jQuery.timer",
regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
powers: {
// Yeah this is major overkill...
'ms': 1,
'cs': 10,
'ds': 100,
's': 1000,
'das': 10000,
'hs': 100000,
'ks': 1000000
},
timeParse: function(value) {
if (value == undefined || value == null)
return null;
var result = this.regex.exec(jQuery.trim(value.toString()));
if (result[2]) {
var num = parseFloat(result[1]);
var mult = this.powers[result[2]] || 1;
return num * mult;
} else {
return value;
}
},
add: function(element, interval, label, fn, times) {
var counter = 0;
if (jQuery.isFunction(label)) {
if (!times)
times = fn;
fn = label;
label = interval;
}
if (jQuery.isFunction(label)) {
if (!times)
times = fn;
fn = label;
label = interval;
}
interval = jQuery.timer.timeParse(interval);
interval = jQuery.timer.timeParse(interval);
if (typeof interval != 'number' || isNaN(interval) || interval < 0)
return;
if (typeof interval != 'number' || isNaN(interval) || interval < 0)
return;
if (typeof times != 'number' || isNaN(times) || times < 0)
times = 0;
if (typeof times != 'number' || isNaN(times) || times < 0)
times = 0;
times = times || 0;
times = times || 0;
var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});
var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});
if (!timers[label])
timers[label] = {};
if (!timers[label])
timers[label] = {};
fn.timerID = fn.timerID || this.guid++;
fn.timerID = fn.timerID || this.guid++;
var handler = function() {
if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
jQuery.timer.remove(element, label, fn);
};
var handler = function() {
if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
jQuery.timer.remove(element, label, fn);
};
handler.timerID = fn.timerID;
handler.timerID = fn.timerID;
if (!timers[label][fn.timerID])
timers[label][fn.timerID] = window.setInterval(handler,interval);
if (!timers[label][fn.timerID])
timers[label][fn.timerID] = window.setInterval(handler,interval);
this.global.push( element );
this.global.push( element );
},
remove: function(element, label, fn) {
var timers = jQuery.data(element, this.dataKey), ret;
},
remove: function(element, label, fn) {
var timers = jQuery.data(element, this.dataKey), ret;
if ( timers ) {
if ( timers ) {
if (!label) {
for ( label in timers )
this.remove(element, label, fn);
} else if ( timers[label] ) {
if ( fn ) {
if ( fn.timerID ) {
window.clearInterval(timers[label][fn.timerID]);
delete timers[label][fn.timerID];
}
} else {
for ( var fn in timers[label] ) {
window.clearInterval(timers[label][fn]);
delete timers[label][fn];
}
}
if (!label) {
for ( label in timers )
this.remove(element, label, fn);
} else if ( timers[label] ) {
if ( fn ) {
if ( fn.timerID ) {
window.clearInterval(timers[label][fn.timerID]);
delete timers[label][fn.timerID];
}
} else {
for ( var fn in timers[label] ) {
window.clearInterval(timers[label][fn]);
delete timers[label][fn];
}
}
for ( ret in timers[label] ) break;
if ( !ret ) {
ret = null;
delete timers[label];
}
}
for ( ret in timers[label] ) break;
if ( !ret ) {
ret = null;
delete timers[label];
}
}
for ( ret in timers ) break;
if ( !ret )
jQuery.removeData(element, this.dataKey);
}
}
}
for ( ret in timers ) break;
if ( !ret )
jQuery.removeData(element, this.dataKey);
}
}
}
});
jQuery(window).bind("unload", function() {
jQuery.each(jQuery.timer.global, function(index, item) {
jQuery.timer.remove(item);
});
jQuery.each(jQuery.timer.global, function(index, item) {
jQuery.timer.remove(item);
});
});

File diff suppressed because it is too large Load diff

View file

@ -77,7 +77,7 @@ XmlHttp.create = function () {
}
// Fallback on JSONP
return new jXHR();
return new jXHR();
}
// Might be local-domain?
if (window.XMLHttpRequest) {
@ -86,12 +86,12 @@ XmlHttp.create = function () {
// some versions of Moz do not support the readyState property
// and the onreadystate event so we patch it!
if (req.readyState == null) {
req.readyState = 1;
req.addEventListener("load", function () {
req.readyState = 4;
if (typeof req.onreadystatechange == "function")
req.onreadystatechange();
}, false);
req.readyState = 1;
req.addEventListener("load", function () {
req.readyState = 4;
if (typeof req.onreadystatechange == "function")
req.onreadystatechange();
}, false);
}
return req;
@ -146,12 +146,12 @@ XmlDocument.create = function (name,ns) {
// some versions of Moz do not support the readyState property
// and the onreadystate event so we patch it!
if (doc.readyState == null) {
doc.readyState = 1;
doc.addEventListener("load", function () {
doc.readyState = 4;
if (typeof doc.onreadystatechange == "function")
doc.onreadystatechange();
}, false);
doc.readyState = 1;
doc.addEventListener("load", function () {
doc.readyState = 4;
if (typeof doc.onreadystatechange == "function")
doc.onreadystatechange();
}, false);
}
} else if (window.ActiveXObject) {
doc = new ActiveXObject(XmlDocument.getPrefix() + ".DomDocument");
@ -218,14 +218,14 @@ if (typeof(Document) != 'undefined' && window.DOMParser) {
* @private
*/
Document.prototype.loadXML = function (s) {
// parse the string to a new doc
var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
// remove all initial children
while (this.hasChildNodes())
this.removeChild(this.lastChild);
// insert and import nodes
for (var i = 0; i < doc2.childNodes.length; i++) {
this.appendChild(this.importNode(doc2.childNodes[i], true));
@ -312,7 +312,7 @@ String.prototype.htmlEnc = function() {
String.prototype.revertHtmlEnc = function() {
if(!this)
return this;
var str = this.replace(/&amp;/gi,'&');
str = str.replace(/&lt;/gi,'<');
str = str.replace(/&gt;/gi,'>');
@ -333,7 +333,7 @@ String.prototype.revertHtmlEnc = function() {
Date.jab2date = function(ts) {
// Timestamp
if(!isNaN(ts))
return new Date(ts * 1000);
return new Date(ts * 1000);
// Get the UTC date
var date = new Date(Date.UTC(ts.substr(0,4),ts.substr(5,2)-1,ts.substr(8,2),ts.substr(11,2),ts.substr(14,2),ts.substr(17,2)));
@ -361,7 +361,17 @@ Date.hrTime = function(ts) {
return Date.jab2date(ts).toLocaleString();
};
/**
/**
* Current timestamp.
* @return Seconds since 1.1.1970.
* @type int
*/
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
/**
* somewhat opposit to {@link #hrTime}
* expects a javascript Date object as parameter and returns a jabber
* date string conforming to
@ -1195,6 +1205,7 @@ function cnonce(size) {
JSJAC_HAVEKEYS = true; // whether to use keys
JSJAC_NKEYS = 16; // number of keys to generate
JSJAC_INACTIVITY = 300; // qnd hack to make suspend/resume
// work more smoothly with polling
JSJAC_ERR_COUNT = 10; // number of retries in case of connection
@ -1209,11 +1220,19 @@ JSJAC_TIMERVAL = 2000; // default polling interval
JSJAC_ALLOW_PLAIN = true; // whether to allow plaintext logins
JSJAC_ALLOW_SCRAM = false; // allow usage of SCRAM-SHA-1 authentication; please note that it is quite slow so it is disable by default
// Options specific to HTTP Binding (BOSH)
JSJACHBC_MAX_HOLD = 1; // default for number of connections held by
// connection manager
JSJACHBC_MAX_WAIT = 20; // default 'wait' param - how long an idle connection
// should be held by connection manager
JSJAC_RETRYDELAY = 5000; // msecs to wait before trying next
// request after error
JSJAC_REGID_TIMEOUT = 20000; // time in msec until registered
// callbacks for ids timeout
/* Options specific to HTTP Binding (BOSH) */
JSJACHBC_MAX_HOLD = 1; // default for number of connctions
// held by connection manager
JSJACHBC_MAX_WAIT = 300; // default 'wait' param - how long an
// idle connection should be held by
// connection manager
JSJACHBC_BOSH_VERSION = "1.6";
JSJACHBC_USE_BOSH_VER = true;
@ -1265,7 +1284,7 @@ JSJaCJSON.toString = function (obj) {
v = x[i];
f = s[typeof v];
if (f) {
try {
try {
v = f(v);
if (typeof v == 'string') {
if (b) {
@ -1274,8 +1293,8 @@ JSJaCJSON.toString = function (obj) {
a[a.length] = v;
b = true;
}
} catch(e) {
}
} catch(e) {
}
}
}
a[a.length] = ']';
@ -1301,7 +1320,7 @@ JSJaCJSON.toString = function (obj) {
v = x[i];
f = s[typeof v];
if (f) {
try {
try {
v = f(v);
if (typeof v == 'string') {
if (b) {
@ -1310,8 +1329,8 @@ JSJaCJSON.toString = function (obj) {
a.push(s.string(i), ':', v);
b = true;
}
} catch(e) {
}
} catch(e) {
}
}
}
}
@ -1517,7 +1536,7 @@ JSJaCJID.prototype.clone = function() {
*/
JSJaCJID.prototype.isEntity = function(jid) {
if (typeof jid == 'string')
jid = (new JSJaCJID(jid));
jid = (new JSJaCJID(jid));
jid.removeResource();
return (this.clone().removeResource().toString() === jid.toString());
};
@ -2263,7 +2282,7 @@ JSJaCIQ.prototype.setQuery = function(xmlns) {
query = this.getDoc().createElementNS(xmlns,'query');
} catch (e) {
query = this.getDoc().createElement('query');
query.setAttribute('xmlns',xmlns);
query.setAttribute('xmlns',xmlns);
}
this.getNode().appendChild(query);
return query;
@ -2483,7 +2502,7 @@ function JSJaCError(code,type,condition) {
* @constructor
* @param {Function} func The hash function to be used for creating the keys
* @param {Debugger} oDbg Reference to debugger implementation [optional]
*/
*/
function JSJaCKeys(func,oDbg) {
var seed = Math.random();
@ -2965,9 +2984,9 @@ JSJaCConnection.prototype.resumeFromData = function(data) {
this._handleEvent('onresume');
setTimeout(JSJaC.bind(this._resume, this),this.getPollInterval());
this._interval = setInterval(JSJaC.bind(this._checkQueue, this),
JSJAC_CHECKQUEUEINTERVAL);
JSJAC_CHECKQUEUEINTERVAL);
this._inQto = setInterval(JSJaC.bind(this._checkInQ, this),
JSJAC_CHECKINQUEUEINTERVAL);
JSJAC_CHECKINQUEUEINTERVAL);
}
return (this._connected === true);
@ -3009,7 +3028,7 @@ JSJaCConnection.prototype.send = function(packet,cb,arg) {
// remember id for response if callback present
if (cb)
this._registerPID(packet.getID(),cb,arg);
this._registerPID(packet, cb, arg);
try {
this._handleEvent(packet.pType()+'_out', packet);
@ -3063,7 +3082,7 @@ JSJaCConnection.prototype.sendIQ = function(iq, handlers, arg) {
/**
* Sets polling interval for this connection
* @param {int} millisecs Milliseconds to set timer to
* @param {int} timerval Milliseconds to set timer to
* @return effective interval this connection has been set to
* @type int
*/
@ -3502,6 +3521,11 @@ JSJaCConnection.prototype._doXMPPSess = function(iq) {
this.fulljid = iq.getChildVal("jid");
this.jid = this.fulljid.substring(0,this.fulljid.lastIndexOf('/'));
if (!this.legacy_sessions) {
this._handleEvent('onconnect');
return;
}
iq = new JSJaCIQ();
iq.setIQ(null,'set','sess_1');
iq.appendNode("session", {xmlns: "urn:ietf:params:xml:ns:xmpp-session"},
@ -3539,8 +3563,8 @@ JSJaCConnection.prototype._handleEvent = function(event,arg) {
if (arg) {
if (arg.pType) { // it's a packet
if ((!arg.getNode().hasChildNodes() && aEvent.childName != '*') ||
(arg.getNode().hasChildNodes() &&
!arg.getChild(aEvent.childName, aEvent.childNS)))
(arg.getNode().hasChildNodes() &&
!arg.getChild(aEvent.childName, aEvent.childNS)))
continue;
if (aEvent.type != '*' &&
arg.getType() != aEvent.type)
@ -3573,29 +3597,39 @@ JSJaCConnection.prototype._handleEvent = function(event,arg) {
/**
* @private
*/
JSJaCConnection.prototype._handlePID = function(aJSJaCPacket) {
if (!aJSJaCPacket.getID())
JSJaCConnection.prototype._handlePID = function(packet) {
if (!packet.getID())
return false;
for (var i in this._regIDs) {
if (this._regIDs.hasOwnProperty(i) &&
this._regIDs[i] && i == aJSJaCPacket.getID()) {
var pID = aJSJaCPacket.getID();
this.oDbg.log("handling "+pID,3);
try {
if (this._regIDs[i].cb.call(this, aJSJaCPacket, this._regIDs[i].arg) === false) {
// don't unregister
return false;
} else {
this._unregisterPID(pID);
return true;
}
} catch (e) {
// broken handler?
this.oDbg.log(e.name+": "+ e.message, 1);
this._unregisterPID(pID);
if (packet.pType() != 'iq' ||
(packet.getType() != 'error' && packet.getType() != 'result'))
return false;
var jid = packet.getFrom() || this.jid;
if (packet.getFrom() == this.domain)
jid = this.jid;
var id = packet.getID();
if (this._regIDs[jid] && this._regIDs[jid][id]) {
try {
this.oDbg.log("handling id "+id,3);
var reg = this._regIDs[jid][id];
if (reg.cb.call(this, packet, reg.arg) === false) {
// don't unregister
return false;
} else {
delete this._regIDs[jid][id];
return true;
}
} catch (e) {
// broken handler?
this.oDbg.log(e.name+": "+ e.message, 1);
delete this._regIDs[jid][id];
return true;
}
} else {
this.oDbg.log("not handling id '"+id+"' from jid "+jid, 1);
}
return false;
};
@ -3686,6 +3720,12 @@ JSJaCConnection.prototype._parseStreamFeatures = function(doc) {
break;
}
}
// Get legacy session capability if available
this.legacy_sessions=null;
if (doc.getElementsByTagName("session")[0]) {
this.legacy_sessions=true;
}
return true;
};
@ -3784,20 +3824,69 @@ JSJaCConnection.prototype._process = function(timerval) {
/**
* @private
@param {JSJaCPacket} packet The packet to be sent.
@param {function} cb The callback to be called when response is received.
@param {any} arg Optional arguments to be passed to 'cb' when executing it.
@return Whether registering an ID was successful
@type boolean
*/
JSJaCConnection.prototype._registerPID = function(pID,cb,arg) {
if (!pID || !cb)
JSJaCConnection.prototype._registerPID = function(packet, cb, arg) {
this.oDbg.log("registering id for packet "+packet.xml(), 3);
var id = packet.getID();
if (!id) {
this.oDbg.log("id missing", 1);
return false;
this._regIDs[pID] = new Object();
this._regIDs[pID].cb = cb;
if (arg)
this._regIDs[pID].arg = arg;
this.oDbg.log("registered "+pID,3);
}
if (typeof cb != 'function') {
this.oDbg.log("callback is not a function", 1);
return false;
}
var jid = packet.getTo() || this.jid;
if (packet.getTo() == this.domain)
jid = this.jid;
if (!this._regIDs[jid]) {
this._regIDs[jid] = {};
}
if (this._regIDs[jid][id] != null) {
this.oDbg.log("id already registered: " + id, 1);
return false;
}
this._regIDs[jid][id] = {
cb: cb,
arg: arg,
ts: Date.now()
};
this.oDbg.log("registered id "+id,3);
this._cleanupRegisteredPIDs();
return true;
};
/**
* partial function binding sendEmpty to callback
* @private
*/
JSJaCConnection.prototype._cleanupRegisteredPIDs = function() {
var now = Date.now();
for (var jid in this._regIDs) {
if (this._regIDs.hasOwnProperty(jid)) {
for (var id in this._regIDs[jid]) {
if (this._regIDs[jid].hasOwnProperty(id)) {
if (this._regIDs[jid][id].ts + JSJAC_REGID_TIMEOUT < now) {
this.oDbg.log("deleting registered id '"+id+ "' due to timeout", 1);
delete this._regIDs[jid][id];
}
}
}
}
}
};
/**
* Partial function binding sendEmpty to callback
* @private
*/
JSJaCConnection.prototype._prepSendEmpty = function(cb, ctx) {
@ -3862,17 +3951,6 @@ JSJaCConnection.prototype._setStatus = function(status) {
}
};
/**
* @private
*/
JSJaCConnection.prototype._unregisterPID = function(pID) {
if (!this._regIDs[pID])
return false;
this._regIDs[pID] = null;
this.oDbg.log("unregistered "+pID,3);
return true;
};
/**
* @fileoverview All stuff related to HTTP Binding
@ -4240,18 +4318,18 @@ JSJaCHttpBindingConnection.prototype._parseResponse = function(req) {
}
} catch (e) {
this.oDbg.log("XMLHttpRequest error: status not available", 1);
this._errcnt++;
if (this._errcnt > JSJAC_ERR_COUNT) {
// abort
this._abort();
} else {
this._errcnt++;
if (this._errcnt > JSJAC_ERR_COUNT) {
// abort
this._abort();
} else {
if (this.connected()) {
this.oDbg.log("repeating ("+this._errcnt+")",1);
this.oDbg.log("repeating ("+this._errcnt+")",1);
this._setStatus('proto_error_fallback');
this._setStatus('proto_error_fallback');
// schedule next tick
setTimeout(JSJaC.bind(this._resume, this),
// schedule next tick
setTimeout(JSJaC.bind(this._resume, this),
this.getPollInterval());
}
}
@ -4260,7 +4338,7 @@ JSJaCHttpBindingConnection.prototype._parseResponse = function(req) {
var body = r.responseXML.documentElement;
if (!body || body.tagName != 'body' ||
body.namespaceURI != 'http://jabber.org/protocol/httpbind') {
body.namespaceURI != 'http://jabber.org/protocol/httpbind') {
this.oDbg.log("invalid response:\n" + r.responseText,1);
clearTimeout(this._timeout); // remove timer
@ -4273,7 +4351,7 @@ JSJaCHttpBindingConnection.prototype._parseResponse = function(req) {
this._setStatus('internal_server_error');
this._handleEvent('onerror',
JSJaCError('500','wait','internal-server-error'));
JSJaCError('500','wait','internal-server-error'));
return null;
}
@ -4841,7 +4919,7 @@ JSJaCWebSocketConnection.prototype.send = function(packet, cb, arg) {
}
// register callback with id
this._registerPID(packet.getID(), cb, arg);
this._registerPID(packet, cb, arg);
}
try {

View file

@ -5,112 +5,112 @@
// for http://www.iadvize.com
(function(global){
var SETTIMEOUT = global.setTimeout, // for better compression
doc = global.document,
callback_counter = 0;
global.jXHR = function() {
var script_url,
script_loaded,
jsonp_callback,
scriptElem,
publicAPI = null;
function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
function reset() {
script_loaded = false;
script_url = "";
removeScript();
scriptElem = null;
fireReadyStateChange(0);
}
function ThrowError(msg) {
try {
publicAPI.onerror.call(publicAPI,msg,script_url);
} catch (err) {
//throw new Error(msg);
}
}
var SETTIMEOUT = global.setTimeout, // for better compression
doc = global.document,
callback_counter = 0;
global.jXHR = function() {
var script_url,
script_loaded,
jsonp_callback,
scriptElem,
publicAPI = null;
function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
function reset() {
script_loaded = false;
script_url = "";
removeScript();
scriptElem = null;
fireReadyStateChange(0);
}
function ThrowError(msg) {
try {
publicAPI.onerror.call(publicAPI,msg,script_url);
} catch (err) {
//throw new Error(msg);
}
}
function handleScriptLoad() {
if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
this.onload = this.onreadystatechange = null; // prevent memory leak
script_loaded = true;
if (publicAPI.readyState !== 4) ThrowError("handleScriptLoad: Script failed to load ["+script_url+"].");
removeScript();
}
function parseXMLString(xmlStr) {
var xmlDoc = null;
if(window.DOMParser) {
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlStr,"text/xml");
}
else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(xmlStr);
}
return xmlDoc;
}
function fireReadyStateChange(rs,args) {
args = args || [];
publicAPI.readyState = rs;
if (rs == 4) {
publicAPI.responseText = args[0].reply;
publicAPI.responseXML = parseXMLString(args[0].reply);
}
if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
}
publicAPI = {
onerror:null,
onreadystatechange:null,
readyState:0,
status:200,
responseBody: null,
responseText: null,
responseXML: null,
open:function(method,url){
reset();
var internal_callback = "cb"+(callback_counter++);
(function(icb){
global.jXHR[icb] = function() {
try { fireReadyStateChange.call(publicAPI,4,arguments); }
catch(err) {
publicAPI.readyState = -1;
ThrowError("Script failed to run ["+script_url+"].");
}
global.jXHR[icb] = null;
};
})(internal_callback);
script_url = url + '?callback=?jXHR&data=';
script_url = script_url.replace(/=\?jXHR/,"=jXHR."+internal_callback);
fireReadyStateChange(1);
},
send:function(data){
script_url = script_url + encodeURIComponent(data);
SETTIMEOUT(function(){
scriptElem = doc.createElement("script");
scriptElem.setAttribute("type","text/javascript");
scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
scriptElem.setAttribute("src",script_url);
doc.getElementsByTagName("head")[0].appendChild(scriptElem);
},0);
fireReadyStateChange(2);
},
abort:function(){},
setRequestHeader:function(){}, // noop
getResponseHeader:function(){return "";}, // basically noop
getAllResponseHeaders:function(){return [];} // ditto
};
function handleScriptLoad() {
if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
this.onload = this.onreadystatechange = null; // prevent memory leak
script_loaded = true;
if (publicAPI.readyState !== 4) ThrowError("handleScriptLoad: Script failed to load ["+script_url+"].");
removeScript();
}
function parseXMLString(xmlStr) {
var xmlDoc = null;
if(window.DOMParser) {
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlStr,"text/xml");
}
else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(xmlStr);
}
return xmlDoc;
}
function fireReadyStateChange(rs,args) {
args = args || [];
publicAPI.readyState = rs;
if (rs == 4) {
publicAPI.responseText = args[0].reply;
publicAPI.responseXML = parseXMLString(args[0].reply);
}
if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
}
publicAPI = {
onerror:null,
onreadystatechange:null,
readyState:0,
status:200,
responseBody: null,
responseText: null,
responseXML: null,
open:function(method,url){
reset();
var internal_callback = "cb"+(callback_counter++);
(function(icb){
global.jXHR[icb] = function() {
try { fireReadyStateChange.call(publicAPI,4,arguments); }
catch(err) {
publicAPI.readyState = -1;
ThrowError("Script failed to run ["+script_url+"].");
}
global.jXHR[icb] = null;
};
})(internal_callback);
script_url = url + '?callback=?jXHR&data=';
script_url = script_url.replace(/=\?jXHR/,"=jXHR."+internal_callback);
fireReadyStateChange(1);
},
send:function(data){
script_url = script_url + encodeURIComponent(data);
SETTIMEOUT(function(){
scriptElem = doc.createElement("script");
scriptElem.setAttribute("type","text/javascript");
scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
scriptElem.setAttribute("src",script_url);
doc.getElementsByTagName("head")[0].appendChild(scriptElem);
},0);
fireReadyStateChange(2);
},
abort:function(){},
setRequestHeader:function(){}, // noop
getResponseHeader:function(){return "";}, // basically noop
getAllResponseHeaders:function(){return [];} // ditto
};
reset();
return publicAPI;
};
reset();
return publicAPI;
};
})(window);

View file

@ -38,7 +38,7 @@ var MAM = (function () {
self.msg_queue = {};
/**
/**
* Gets the MAM configuration
* @public
* @return {undefined}
@ -210,7 +210,7 @@ var MAM = (function () {
};
/**
/**
* Handles the MAM configuration
* @public
* @param {object} iq

View file

@ -20,7 +20,7 @@ var Me = (function () {
var self = {};
/**
/**
* Opens the Me tools
* @public
* @return {undefined}

View file

@ -20,7 +20,7 @@ var Message = (function () {
var self = {};
/**
/**
* Handles the incoming message packets
* @public
* @param {object} message
@ -392,8 +392,9 @@ var Message = (function () {
var html_escape = true;
// IE bug fix
if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9))
if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) {
xHTML = 0;
}
//If this is a xHTML message
if(xHTML) {
@ -411,12 +412,14 @@ var Message = (function () {
var message_type = 'user-message';
// This is an old message
if(delay && resource)
if(delay && resource) {
message_type = 'old-message';
}
// This is a system message
else if(!resource)
else if(!resource) {
message_type = 'system-message';
}
var nickQuote = '';
@ -442,8 +445,9 @@ var Message = (function () {
Interface.messageNotify(hash, 'unread');
// Play sound to all users in the MUC, except user who sent the message.
if(myNick != resource)
if(myNick != resource) {
Audio.play('receive-message');
}
}
}
@ -462,10 +466,11 @@ var Message = (function () {
Receipts.sendReceived(type, from, id);
// It does not come from a groupchat user, get the full name
if(!GCUser)
if(!GCUser) {
fromName = Name.getBuddy(xid);
else
} else {
chatType = 'private';
}
// If the chat isn't yet opened, open it !
if(!Common.exists('#' + hash)) {

View file

@ -18,9 +18,9 @@ var Microblog = (function () {
* @private
*/
var self = {};
/**
/**
* Completes arrays of an entry's attached files
* @public
* @param {string} selector
@ -515,7 +515,7 @@ var Microblog = (function () {
};
/**
/**
* Gets a given microblog comments node
* @public
* @param {string} server
@ -930,7 +930,7 @@ var Microblog = (function () {
};
/**
/**
* Adapts the comment elements width
* @public
* @param {string} id
@ -1085,7 +1085,7 @@ var Microblog = (function () {
};
/**
/**
* Handles the user's microblog to create it in case of error
* @public
* @param {object} iq
@ -1199,7 +1199,7 @@ var Microblog = (function () {
// Create a new individual channel
$('#channel .content.mixed').after(
'<div class="content individual microblog-' + hash + '">' +
'<a href="#" class="more home-images" onclick="if($(\'#channel .footer div.fetch\').is(\':hidden\')) { return self.get(\'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(hash) + '\'); } return false;">' + Common._e("More notices...") + '</a>' +
'<a href="#" class="more home-images" onclick="if($(\'#channel .footer div.fetch\').is(\':hidden\')) { return Microblog.get(\'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(hash) + '\'); } return false;">' + Common._e("More notices...") + '</a>' +
'</div>'
)
@ -1283,7 +1283,7 @@ var Microblog = (function () {
};
/**
/**
* Gets the microblog configuration
* @public
* @return {undefined}
@ -1455,7 +1455,7 @@ var Microblog = (function () {
};
/**
/**
* Publishes a given microblog item
* @public
* @param {type} body

View file

@ -11,39 +11,39 @@ Authors: Valérian Saliou, hunterjm, Camaran, regilero, Kloadut, Maranda
*/
// Jappix Mini globals
var MINI_DISCONNECT = false;
var MINI_AUTOCONNECT = false;
var MINI_SHOWPANE = false;
var MINI_INITIALIZED = false;
var MINI_ROSTER_INIT = false;
var MINI_DISCONNECT = false;
var MINI_AUTOCONNECT = false;
var MINI_SHOWPANE = false;
var MINI_INITIALIZED = false;
var MINI_ROSTER_INIT = false;
var MINI_ROSTER_NOGROUP = 'jm_nogroup';
var MINI_ANONYMOUS = false;
var MINI_ANIMATE = false;
var MINI_RANDNICK = false;
var MINI_GROUPCHAT_PRESENCE = false;
var MINI_DISABLE_MOBILE = false;
var MINI_NICKNAME = '';
var MINI_TITLE = null;
var MINI_DOMAIN = null;
var MINI_USER = null;
var MINI_PASSWORD = null;
var MINI_HASH = null;
var MINI_ACTIVE = null;
var MINI_RECONNECT = 0;
var MINI_RECONNECT_MAX = 100;
var MINI_ANONYMOUS = false;
var MINI_ANIMATE = false;
var MINI_RANDNICK = false;
var MINI_GROUPCHAT_PRESENCE = false;
var MINI_DISABLE_MOBILE = false;
var MINI_NICKNAME = '';
var MINI_TITLE = null;
var MINI_DOMAIN = null;
var MINI_USER = null;
var MINI_PASSWORD = null;
var MINI_HASH = null;
var MINI_ACTIVE = null;
var MINI_RECONNECT = 0;
var MINI_RECONNECT_MAX = 100;
var MINI_RECONNECT_INTERVAL = 1;
var MINI_PIXEL_STREAM_DURATION = 300;
var MINI_PIXEL_STREAM_INTERVAL = 7200;
var MINI_QUEUE = [];
var MINI_CHATS = [];
var MINI_GROUPCHATS = [];
var MINI_SUGGEST_CHATS = [];
var MINI_SUGGEST_GROUPCHATS = [];
var MINI_SUGGEST_PASSWORDS = [];
var MINI_PASSWORDS = [];
var MINI_PRIORITY = 1;
var MINI_RESOURCE = JAPPIX_RESOURCE + ' Mini';
var MINI_ERROR_LINK = 'https://mini.jappix.com/issues';
var MINI_QUEUE = [];
var MINI_CHATS = [];
var MINI_GROUPCHATS = [];
var MINI_SUGGEST_CHATS = [];
var MINI_SUGGEST_GROUPCHATS = [];
var MINI_SUGGEST_PASSWORDS = [];
var MINI_PASSWORDS = [];
var MINI_PRIORITY = 1;
var MINI_RESOURCE = JAPPIX_RESOURCE + ' Mini';
var MINI_ERROR_LINK = 'https://mini.jappix.com/issues';
// Bundle
@ -56,7 +56,7 @@ var JappixMini = (function () {
var self = {};
/**
/**
* Setups connection handlers
* @public
* @param {object} con
@ -298,7 +298,7 @@ var JappixMini = (function () {
};
/**
/**
* Flushes Jappix Mini storage database
* @public
* @param {string} r_override
@ -604,7 +604,7 @@ var JappixMini = (function () {
};
/**
/**
* Handles the incoming IQs
* @public
* @param {object} iq
@ -843,7 +843,7 @@ var JappixMini = (function () {
};
/**
/**
* Removes a given presence resource for an user
* @public
* @param {string} xid
@ -1174,7 +1174,7 @@ var JappixMini = (function () {
};
/**
/**
* Updates the user presence
* @public
* @param {string} type
@ -1371,7 +1371,7 @@ var JappixMini = (function () {
};
/**
/**
* Unserializes and update the queue storage
* @public
* @return {undefined}
@ -1526,7 +1526,7 @@ var JappixMini = (function () {
};
/**
/**
* Clears the notifications
* @public
* @param {string} hash
@ -2431,7 +2431,7 @@ var JappixMini = (function () {
};
/**
/**
* Buddy events
* @public
* @param {string} path
@ -2745,7 +2745,7 @@ var JappixMini = (function () {
};
/**
/**
* Returns the prompt value
* @public
* @return {string}
@ -3159,7 +3159,7 @@ var JappixMini = (function () {
};
/**
/**
* Shows the roster
* @public
* @return {undefined}
@ -3363,7 +3363,7 @@ var JappixMini = (function () {
};
/**
/**
* Displays a roster buddy
* @public
* @param {string} xid
@ -3654,7 +3654,7 @@ var JappixMini = (function () {
};
/**
/**
* Adapts the roster height to the window
* @public
* @return {undefined}
@ -3861,7 +3861,7 @@ var JappixMini = (function () {
};
/**
/**
* Adds the chatstate events
* @public
* @param {string} xid

View file

@ -20,7 +20,7 @@ var Mobile = (function () {
var self = {};
/**
/**
* Proceeds connection
* @public
* @param {object} aForm
@ -207,7 +207,7 @@ var Mobile = (function () {
};
/**
/**
* Resets DOM to its initial state
* @public
* @return {undefined}
@ -286,7 +286,7 @@ var Mobile = (function () {
};
/**
/**
* Handles message stanza
* @public
* @param {object} msg
@ -504,7 +504,7 @@ var Mobile = (function () {
};
/**
/**
* Handles disconnected state
* @public
* @return {undefined}
@ -664,7 +664,7 @@ var Mobile = (function () {
};
/**
/**
* Gets user nick (the dumb way)
* @public
* @param {string} xid
@ -770,7 +770,7 @@ var Mobile = (function () {
};
/**
/**
* Gets the host part of a XID
* @public
* @param {string} aXID
@ -899,7 +899,7 @@ var Mobile = (function () {
};
/**
/**
* Creates given chat
* @public
* @param {string} xid

View file

@ -20,7 +20,7 @@ var MUCAdmin = (function () {
var self = {};
/**
/**
* Opens the MUC admin popup
* @public
* @param {string} xid
@ -251,7 +251,7 @@ var MUCAdmin = (function () {
};
/**
/**
* Handles the MUC admin form
* @public
* @param {object} iq
@ -449,7 +449,7 @@ var MUCAdmin = (function () {
};
/**
/**
* Destroys a MUC room
* @public
* @param {string} xid

View file

@ -20,7 +20,7 @@ var Music = (function () {
var self = {};
/**
/**
* Opens the music bubble
* @public
* @return {boolean}
@ -281,7 +281,7 @@ var Music = (function () {
};
/**
/**
* Adds a music title to the results
* @public
* @param {string} id

View file

@ -20,7 +20,7 @@ var Name = (function () {
var self = {};
/**
/**
* Gets an user name for buddy add tool
* @public
* @param {string} xid
@ -181,7 +181,7 @@ var Name = (function () {
};
/**
/**
* Gets the full name of the user
* @public
* @return {string}

View file

@ -20,7 +20,7 @@ var Notification = (function () {
var self = {};
/**
/**
* Resets the notifications alert if no one remaining
* @public
* @return {undefined}
@ -405,7 +405,7 @@ var Notification = (function () {
};
/**
/**
* Gets the pending social notifications
* @public
* @return {undefined}
@ -588,7 +588,7 @@ var Notification = (function () {
};
/**
/**
* Adapt the notifications bubble max-height
* @public
* @return {undefined}

View file

@ -20,7 +20,7 @@ var OOB = (function () {
var self = {};
/**
/**
* Sends an OOB request to someone
* @public
* @param {string} to

View file

@ -20,7 +20,7 @@ var Options = (function () {
var self = {};
/**
/**
* Opens the options popup
* @public
* @return {boolean}
@ -315,7 +315,7 @@ var Options = (function () {
};
/**
/**
* Sends the options to the XMPP server
* @public
* @return {undefined}
@ -559,7 +559,7 @@ var Options = (function () {
};
/**
/**
* Handles the account deletion request
* @public
* @param {object} iq
@ -747,7 +747,7 @@ var Options = (function () {
};
/**
/**
* Loads the user options
* @public
* @return {undefined}

View file

@ -20,7 +20,7 @@ var PEP = (function () {
var self = {};
/**
/**
* Stores the PEP items
* @public
* @param {string} xid
@ -549,7 +549,7 @@ var PEP = (function () {
};
/**
/**
* Sends the user's activity
* @public
* @param {string} main
@ -777,7 +777,7 @@ var PEP = (function () {
};
/**
/**
* Geolocates the user
* @public
* @return {undefined}
@ -809,7 +809,7 @@ var PEP = (function () {
/**
* Gets the user's microblog to check it exists
* Gets the user's geolocation to check it exists
* @public
* @return {undefined}
*/
@ -833,7 +833,7 @@ var PEP = (function () {
/**
* Handles the user's microblog to create it in case of error
* Handles the user's geolocation to create note in case of error
* @public
* @param {object} iq
* @return {undefined}

View file

@ -20,7 +20,7 @@ var Popup = (function () {
var self = {};
/**
/**
* Creates a popup code
* @public
* @param {string} id

View file

@ -25,7 +25,7 @@ var Presence = (function () {
self.auto_idle = false;
/**
/**
* Sends the user first presence
* @public
* @param {string} checksum
@ -753,7 +753,7 @@ var Presence = (function () {
};
/**
/**
* Process the chat presence position
* @public
* @param {string} hash
@ -997,7 +997,7 @@ var Presence = (function () {
};
/**
/**
* Returns the highest presence priority XID for an user
* @public
* @param {string} xid
@ -1130,7 +1130,7 @@ var Presence = (function () {
};
/**
/**
* Makes something easy to process for the presence IA
* @public
* @param {string} xid
@ -1356,7 +1356,7 @@ var Presence = (function () {
};
/**
/**
* Accepts the subscription from another entity
* @public
* @param {string} xid
@ -1526,7 +1526,7 @@ var Presence = (function () {
};
/**
/**
* Gets the user presence show
* @public
* @return {string}

View file

@ -20,7 +20,7 @@ var Privacy = (function () {
var self = {};
/**
/**
* Opens the privacy popup
* @public
* @return {boolean}
@ -243,7 +243,7 @@ var Privacy = (function () {
};
/**
/**
* Gets privacy lists
* @public
* @param {object} list
@ -536,7 +536,7 @@ var Privacy = (function () {
};
/**
/**
* Checks the privacy status (action) of a value
* @public
* @param {string} list
@ -844,7 +844,7 @@ var Privacy = (function () {
};
/**
/**
* Clears the privacy list form
* @public
* @return {undefined}

View file

@ -20,7 +20,7 @@ var Receipts = (function () {
var self = {};
/**
/**
* Checks if we can send a receipt request
* @public
* @param {string} hash
@ -158,7 +158,7 @@ var Receipts = (function () {
};
/**
/**
* Checks if the message has been received
* @public
* @param {string} hash

View file

@ -24,7 +24,7 @@ var Roster = (function () {
self.blist_all = false;
/**
/**
* Gets the roster items
* @public
* @return {undefined}
@ -66,7 +66,10 @@ var Roster = (function () {
// Request user microblog (populates channel)
if(user_xid && ((user_subscription == 'both') || (user_subscription == 'to'))) {
Microblog.request(user_xid, 1, null, Microblog.handleRoster);
// Openfire has an issue, forget about it!
if(Features.getServerName() != 'openfire') {
Microblog.request(user_xid, 1, null, Microblog.handleRoster);
}
}
});
@ -316,7 +319,7 @@ var Roster = (function () {
};
/**
/**
* Applies the buddy editing input events
* @public
* @param {string} xid
@ -704,7 +707,7 @@ var Roster = (function () {
};
/**
/**
* Gets an array of all the groups in the roster
* @public
* @param {type} name
@ -945,7 +948,7 @@ var Roster = (function () {
};
/**
/**
* Gets all the buddies in our roster
* @public
* @return {object}

View file

@ -20,7 +20,7 @@ var RosterX = (function () {
var self = {};
/**
/**
* Opens the rosterx tools
* @public
* @param {string} data
@ -238,7 +238,7 @@ var RosterX = (function () {
};
/**
/**
* Plugin launcher
* @public
* @return {undefined}

View file

@ -24,7 +24,7 @@ var Search = (function () {
self.search_filtered = false;
/**
/**
* Searches in the user's buddy list
* @public
* @param {string} query

View file

@ -20,7 +20,7 @@ var Smileys = (function () {
var self = {};
/**
/**
* Generates the correct HTML code for an emoticon insertion tool
* @public
* @param {string} smiley

View file

@ -20,7 +20,7 @@ var Talk = (function () {
var self = {};
/**
/**
* Creates the talkpage events
* @public
* @return {undefined}

View file

@ -20,7 +20,7 @@ var Tooltip = (function () {
var self = {};
/**
/**
* Creates a tooltip code
* @public
* @param {string} xid

View file

@ -20,7 +20,7 @@ var UserInfos = (function () {
var self = {};
/**
/**
* Opens the user-infos popup
* @public
* @param {string} xid
@ -263,7 +263,7 @@ var UserInfos = (function () {
};
/**
/**
* Displays the buddy comments
* @public
* @param {string} xid
@ -463,7 +463,7 @@ var UserInfos = (function () {
};
/**
/**
* Sends the buddy comments
* @public
* @return {boolean}

View file

@ -85,7 +85,7 @@ var Utils = (function () {
};
/**
/**
* Truncates a string
* @public
* @param {string} string
@ -181,7 +181,7 @@ var Utils = (function () {
};
/**
/**
* Checks if this is a private chat user
* @public
* @param {string} xid
@ -303,7 +303,7 @@ var Utils = (function () {
};
/**
/**
* Gets the password of the user
* @public
* @return {string}
@ -321,22 +321,27 @@ var Utils = (function () {
/**
* Quotes the nick of an user
* Quotes the nick of an user. If a message is given, the nick is inserted at its end.
* @public
* @param {string} hash
* @param {string} nick
* @param {string} message
* @return {undefined}
*/
self.quoteMyNick = function(hash, nick) {
self.quoteMyNick = function(hash, nick, message) {
try {
$(document).oneTime(10, function() {
$('#page-engine #' + hash + ' .message-area').val(nick + ', ').focus();
if (message === undefined || message.length === 0) {
$('#page-engine #' + hash + ' .message-area').val(nick + ', ').focus();
} else {
$('#page-engine #' + hash + ' .message-area').val(message + nick).focus();
}
});
} catch(e) {
Console.error('Utils.quoteMyNick', e);
}
};
@ -551,7 +556,7 @@ var Utils = (function () {
};
/**
/**
* Removes a value from an array
* @public
* @param {object} array

View file

@ -20,7 +20,7 @@ var vCard = (function () {
var self = {};
/**
/**
* Opens the vCard popup
* @public
* @return {boolean}
@ -294,7 +294,7 @@ var vCard = (function () {
};
/**
/**
* Deletes the encoded avatar of an user
* @public
* @return {boolean}
@ -428,7 +428,7 @@ var vCard = (function () {
};
/**
/**
* Handles a vCard stanza
* @public
* @param {object} iq

View file

@ -24,7 +24,7 @@ var Welcome = (function () {
self.is_done = false;
/**
/**
* Opens the welcome tools
* @public
* @return {undefined}
@ -324,7 +324,7 @@ var Welcome = (function () {
};
/**
/**
* Goes to the next welcome step
* @public
* @return {boolean}

View file

@ -20,7 +20,7 @@ var XMPPLinks = (function () {
var self = {};
/**
/**
* Does an action with the provided XMPP link
* @public
* @param {string} link

View file

@ -11,19 +11,19 @@ Author: Valérian Saliou
*/
#adhoc .content {
padding: 10px 0 10px 0;
padding: 10px 0 10px 0;
}
#adhoc .adhoc-head {
background-color: #f1f6fd;
border: 1px #9dc4fc solid;
width: 598px;
height: 18px;
font-size: 0.9em;
margin: 0 10px 12px 10px;
padding: 6px 10px;
background-color: #f1f6fd;
border: 1px #9dc4fc solid;
width: 598px;
height: 18px;
font-size: 0.9em;
margin: 0 10px 12px 10px;
padding: 6px 10px;
}
#adhoc .one-actions .one-button {
float: right;
float: right;
}

View file

@ -11,19 +11,19 @@ Author: Valérian Saliou
*/
#top-content {
min-width: 500px !important;
min-width: 500px !important;
}
#main-content {
min-width: 490px !important;
min-height: 450px !important;
min-width: 490px !important;
min-height: 450px !important;
}
#left-content {
display: none;
display: none;
}
#right-content {
left: 0 !important;
right: 0 !important;
left: 0 !important;
right: 0 !important;
}

View file

@ -11,36 +11,36 @@ Author: Valérian Saliou
*/
#board .one-board {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
height: 20px;
z-index: 10000;
font-size: 0.92em;
padding: 6px 8px 5px 8px;
-moz-box-shadow: 0 0 8px #5c5c5c;
-webkit-box-shadow: 0 0 8px #5c5c5c;
box-shadow: 0 0 8px #5c5c5c;
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
height: 20px;
z-index: 10000;
font-size: 0.92em;
padding: 6px 8px 5px 8px;
-moz-box-shadow: 0 0 8px #5c5c5c;
-webkit-box-shadow: 0 0 8px #5c5c5c;
box-shadow: 0 0 8px #5c5c5c;
}
#board .one-board:hover {
cursor: pointer;
cursor: pointer;
}
#board .one-board.visible {
display: block;
display: block;
}
#board .one-board.error {
background-color: rgb(241,160,160);
background-color: rgba(241,160,160,0.9);
color: #420c0c;
background-color: rgb(241,160,160);
background-color: rgba(241,160,160,0.9);
color: #420c0c;
}
#board .one-board.info {
background-color: rgb(248,246,186);
background-color: rgba(248,246,186,0.9);
color: #2f2a02;
background-color: rgb(248,246,186);
background-color: rgba(248,246,186,0.9);
color: #2f2a02;
}

View file

@ -11,636 +11,636 @@ Author: Valérian Saliou
*/
#channel .top div.update {
position: absolute;
top: 12px;
left: 115px;
right: 15px;
bottom: 15px;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
position: absolute;
top: 12px;
left: 115px;
right: 15px;
bottom: 15px;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
}
html[dir="rtl"] #channel .top div.update {
right: 115px;
left: 15px;
right: 115px;
left: 15px;
}
#channel .top p {
font-size: 0.9em;
margin-bottom: 10px;
font-size: 0.9em;
margin-bottom: 10px;
}
#channel .top h2 {
font-size: 1.5em;
margin-bottom: 10px;
color: #232323;
font-size: 1.5em;
margin-bottom: 10px;
color: #232323;
}
#channel .top a {
font-size: 0.9em;
color: #232323;
font-size: 0.9em;
color: #232323;
}
#channel .top.individual div.update {
right: 36px;
right: 36px;
}
#channel .top.individual div.shortcuts,
#userinfos .main-infos div.shortcuts {
width: 16px;
float: right;
width: 16px;
float: right;
}
#channel .top.individual div.shortcuts {
margin: 2px 5px 0 0;
margin: 2px 5px 0 0;
}
#channel .top.individual div.shortcuts a,
#userinfos .main-infos div.shortcuts a {
height: 16px;
width: 16px;
margin-bottom: 4px;
display: block;
height: 16px;
width: 16px;
margin-bottom: 4px;
display: block;
}
#channel .top.individual div.shortcuts a.message,
#userinfos .main-infos a.message {
background-position: 0 -1717px;
background-position: 0 -1717px;
}
#channel .top.individual div.shortcuts a.chat,
#userinfos .main-infos a.chat {
background-position: 0 -1737px;
background-position: 0 -1737px;
}
#channel .top.individual div.shortcuts a.command,
#userinfos .main-infos a.command {
background-position: 0 -1758px;
background-position: 0 -1758px;
}
#channel .microblog-body {
height: 20px;
margin-right: 50px;
height: 20px;
margin-right: 50px;
}
html[dir="rtl"] #channel .microblog-body {
margin-right: auto;
margin-left: 50px;
margin-right: auto;
margin-left: 50px;
}
#channel .microblog-body input {
width: 100%;
height: 100%;
padding: 8px;
width: 100%;
height: 100%;
padding: 8px;
}
#channel .one-microblog-icon {
position: absolute;
top: 38px;
right: 0;
position: absolute;
top: 38px;
right: 0;
}
html[dir="rtl"] #channel .one-microblog-icon {
left: 0;
right: auto;
left: 0;
right: auto;
}
#channel div.update .one-microblog-icon,
#channel div.update .postit {
width: 16px;
height: 16px;
display: block;
width: 16px;
height: 16px;
display: block;
}
#channel div.update .attach {
background-position: 0 -79px;
display: none;
background-position: 0 -79px;
display: none;
}
#attach {
position: absolute;
width: 263px;
margin-left: -227px;
color: white;
font-size: 0.85em;
z-index: 9998;
text-align: left;
display: none;
position: absolute;
width: 263px;
margin-left: -227px;
color: white;
font-size: 0.85em;
z-index: 9998;
text-align: left;
display: none;
}
#attach p {
margin-bottom: 6px !important;
margin-bottom: 6px !important;
}
#attach input[type="submit"] {
margin: 8px 0 6px 0;
margin: 8px 0 6px 0;
}
#attach .wait {
float: right;
margin: 7px 5px;
float: right;
margin: 7px 5px;
}
#attach div.one-file {
height: 16px;
margin-top: 2px;
height: 16px;
margin-top: 2px;
}
#attach div.one-file a.link {
color: white;
width: 215px;
height: 14px;
margin-left: 2px;
overflow: hidden;
float: left;
color: white;
width: 215px;
height: 14px;
margin-left: 2px;
overflow: hidden;
float: left;
}
html[dir="rtl"] #attach div.one-file a.link {
text-align: right;
margin-left: auto;
margin-right: 2px;
float: right;
text-align: right;
margin-left: auto;
margin-right: 2px;
float: right;
}
#attach div.one-file a.remove {
width: 16px;
height: 16px;
float: left;
width: 16px;
height: 16px;
float: left;
}
html[dir="rtl"] #attach div.one-file a.remove {
float: right;
float: right;
}
.attach-subarrow {
background-position: 0 -241px;
opacity: 0.8;
height: 10px;
width: 18px;
margin-left: 226px;
background-position: 0 -241px;
opacity: 0.8;
height: 10px;
width: 18px;
margin-left: 226px;
}
.attach-subitem {
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.8);
padding: 10px;
text-shadow: 0 1px 1px black;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.8);
padding: 10px;
text-shadow: 0 1px 1px black;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
html[dir="rtl"] .attach-subitem {
position: absolute;
left: 238px;
position: absolute;
left: 238px;
}
.attach-p {
font-weight: bold;
float: left;
font-weight: bold;
float: left;
}
#channel .one-update {
margin-bottom: 12px;
padding: 6px 6px 8px 6px;
border-bottom: 1px dotted #d0d0d0;
min-height: 50px;
color: black;
position: relative;
display: none;
margin-bottom: 12px;
padding: 6px 6px 8px 6px;
border-bottom: 1px dotted #d0d0d0;
min-height: 50px;
color: black;
position: relative;
display: none;
}
#channel .one-update .avatar-container {
text-align: center;
margin-right: 16px;
float: left;
height: 50px;
width: 50px;
text-align: center;
margin-right: 16px;
float: left;
height: 50px;
width: 50px;
}
html[dir="rtl"] #channel .one-update .avatar-container {
margin-right: auto;
margin-left: 16px;
float: right;
margin-right: auto;
margin-left: 16px;
float: right;
}
#channel .one-update .avatar-container:hover {
cursor: pointer;
cursor: pointer;
}
#channel .one-update img.avatar {
max-height: 50px;
max-width: 50px;
max-height: 50px;
max-width: 50px;
}
#channel .one-update div.body {
line-height: 1.4;
margin-left: 65px;
opacity: 0.8;
line-height: 1.4;
margin-left: 65px;
opacity: 0.8;
}
#channel .one-update:hover div.body {
opacity: 1;
opacity: 1;
}
#channel .one-update a.repeat {
background-position: 0 -1681px;
height: 16px;
width: 16px;
margin-right: 4px;
float: left;
background-position: 0 -1681px;
height: 16px;
width: 16px;
margin-right: 4px;
float: left;
}
#channel .one-update span a {
text-decoration: underline;
text-decoration: underline;
}
#channel .one-update p {
display: block;
margin: 0 12px 5px 0;
display: block;
margin: 0 12px 5px 0;
}
html[dir="rtl"] #channel .one-update p {
margin-right: auto;
margin-left: 12px;
margin-right: auto;
margin-left: 12px;
}
#channel .one-update p b.name:hover {
cursor: pointer;
text-decoration: underline;
cursor: pointer;
text-decoration: underline;
}
html[dir="rtl"] #channel .one-update p b.name {
margin-left: 4px;
float: right;
margin-left: 4px;
float: right;
}
#channel .one-update p.infos {
font-size: 0.9em;
font-size: 0.9em;
}
#channel .one-update p.infos a.geoloc {
background-position: 0 -1778px;
color: #363636;
margin-left: 18px;
padding-left: 14px;
background-position: 0 -1778px;
color: #363636;
margin-left: 18px;
padding-left: 14px;
}
html[dir="rtl"] #channel .one-update p.infos a.geoloc {
float: right;
float: right;
}
#channel .one-update p.infos a.geoloc:hover,
#channel .one-update p.infos a.geoloc:focus,
#channel .one-update p.infos a.geoloc:active {
color: #141414;
color: #141414;
}
#channel .one-update p.file {
font-size: 0.9em;
margin: 6px 0 5px 10px;
font-size: 0.9em;
margin: 6px 0 5px 10px;
}
#channel .one-update p.file a.link,
#inbox .inbox-new-file a.file {
min-height: 16px;
padding-left: 22px;
text-decoration: underline;
display: block;
min-height: 16px;
padding-left: 22px;
text-decoration: underline;
display: block;
}
#channel .one-update p.file a.link {
margin-top: 4px;
margin-top: 4px;
}
#channel p.file a,
#inbox .inbox-new-file a.file {
background-position: 0 -988px;
background-position: 0 -988px;
}
#channel p.file a.audio,
#inbox .inbox-new-file a.file.audio {
background-position: 0 -899px;
background-position: 0 -899px;
}
#channel p.file a.image,
#inbox .inbox-new-file a.file.image {
background-position: 0 -917px;
background-position: 0 -917px;
}
#channel p.file a.video,
#inbox .inbox-new-file a.file.video {
background-position: 0 -935px;
background-position: 0 -935px;
}
#channel p.file a.document,
#inbox .inbox-new-file a.file.document {
background-position: 0 -953px;
background-position: 0 -953px;
}
#channel p.file a.package,
#inbox .inbox-new-file a.file.package {
background-position: 0 -971px;
background-position: 0 -971px;
}
#channel .one-update p.file a.thumb img {
border: 1px solid #a2a2a2;
max-width: 140px;
max-height: 105px;
margin: 4px 10px 2px 0;
padding: 1px;
border: 1px solid #a2a2a2;
max-width: 140px;
max-height: 105px;
margin: 4px 10px 2px 0;
padding: 1px;
}
#channel .one-update p.file a.thumb img:hover {
border-color: #464646;
border-color: #464646;
}
#channel .one-update div.comments,
.popup.large div.comments {
width: 410px;
margin: 2px 0 2px 76px;
width: 410px;
margin: 2px 0 2px 76px;
}
html[dir="rtl"] #channel .one-update div.comments {
margin-left: auto;
margin-right: 76px;
margin-left: auto;
margin-right: 76px;
}
#channel .one-update div.comments div.arrow,
.popup.large div.comments div.arrow {
background-position: 0 -1702px;
width: 20px;
height: 8px;
margin-left: 20px;
display: block;
background-position: 0 -1702px;
width: 20px;
height: 8px;
margin-left: 20px;
display: block;
}
html[dir="rtl"] #channel .one-update div.comments div.arrow,
html[dir="rtl"] .popup.large div.comments div.arrow {
margin-left: auto;
margin-right: 20px;
margin-left: auto;
margin-right: 20px;
}
#channel .one-update div.comments div.comments-content,
.popup.large div.comments div.comments-content {
background-color: #e5ebec;
color: black;
font-size: 0.9em;
text-shadow: 0 1px 0 white;
background-color: #e5ebec;
color: black;
font-size: 0.9em;
text-shadow: 0 1px 0 white;
}
#channel .one-update div.comments input,
.popup.large div.comments input {
width: 356px;
margin: 6px 0;
padding: 4px 5px;
width: 356px;
margin: 6px 0;
padding: 4px 5px;
}
#channel .one-update div.comments span.icon,
.popup.large div.comments span.icon {
background-position: 0 -1082px;
height: 16px;
width: 16px;
margin: 10px;
float: left;
background-position: 0 -1082px;
height: 16px;
width: 16px;
margin: 10px;
float: left;
}
html[dir="rtl"] #channel .one-update div.comments span.icon,
html[dir="rtl"] .popup.large div.comments span.icon {
float: right;
float: right;
}
#channel .one-update div.comments .one-comment.loading span.icon,
.popup.large div.comments .one-comment.loading span.icon {
margin: 0 10px 0 0;
margin: 0 10px 0 0;
}
html[dir="rtl"] #channel .one-update div.comments .one-comment.loading span.icon,
html[dir="rtl"] .popup.large div.comments .one-comment.loading span.icon {
margin: 0 0 0 10px;
margin: 0 0 0 10px;
}
#channel .one-update div.comments .one-comment,
.popup.large div.comments .one-comment {
border-bottom: 1px solid #f4f4f4;
padding: 4px 8px 0 8px;
position: relative;
display: block;
border-bottom: 1px solid #f4f4f4;
padding: 4px 8px 0 8px;
position: relative;
display: block;
}
#channel .one-update div.comments .one-comment.compose,
.popup.large div.comments .one-comment.compose {
border-bottom: 2px solid #f4f4f4;
height: 36px;
padding: 0;
border-bottom: 2px solid #f4f4f4;
height: 36px;
padding: 0;
}
#channel .one-update div.comments .one-comment.new,
.popup.large div.comments .one-comment.new {
display: none;
display: none;
}
#channel .one-update div.comments a.one-comment,
.popup.large div.comments a.one-comment {
text-decoration: none;
text-decoration: none;
}
#channel .one-update div.comments a.one-comment:hover,
#channel .one-update div.comments a.one-comment:focus,
.popup.large div.comments a.one-comment:hover,
.popup.large div.comments a.one-comment:focus {
text-decoration: underline;
text-decoration: underline;
}
#channel .one-update div.comments .one-comment.loading,
.popup.large div.comments .one-comment.loading {
padding-bottom: 5px;
padding-bottom: 5px;
}
#channel .one-update div.comments .one-comment div.marker,
.popup.large div.comments .one-comment div.marker {
background-color: #6d8387;
width: 2px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
background-color: #6d8387;
width: 2px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
}
#channel .one-update div.comments .one-comment .avatar-container,
.popup.large div.comments .one-comment .avatar-container {
text-align: center;
width: 30px;
height: 30px;
margin: 2px 8px 0 0;
float: left;
text-align: center;
width: 30px;
height: 30px;
margin: 2px 8px 0 0;
float: left;
}
html[dir="rtl"] #channel .one-update div.comments .one-comment .avatar-container,
html[dir="rtl"] .popup.large div.comments .one-comment .avatar-container {
margin-right: auto;
margin-left: 8px;
float: right;
margin-right: auto;
margin-left: 8px;
float: right;
}
#channel .one-update div.comments .one-comment .avatar-container:hover,
.popup.large div.comments .one-comment .avatar-container:hover {
cursor: pointer;
cursor: pointer;
}
#channel .one-update div.comments .one-comment img.avatar,
.popup.large div.comments .one-comment img.avatar {
max-height: 30px;
max-width: 30px;
max-height: 30px;
max-width: 30px;
}
#channel .one-update div.comments .one-comment .comment-container,
.popup.large div.comments .one-comment .comment-container {
float: left;
float: left;
}
#channel .one-update div.comments .one-comment a.name,
.popup.large div.comments .one-comment a.name {
font-weight: bold;
text-decoration: none;
font-size: 0.95em;
padding-bottom: 2px;
float: left;
font-weight: bold;
text-decoration: none;
font-size: 0.95em;
padding-bottom: 2px;
float: left;
}
html[dir="rtl"] #channel .one-update div.comments .one-comment a.name,
html[dir="rtl"] .popup.large div.comments .one-comment a.name {
float: right;
float: right;
}
#channel .one-update div.comments .one-comment a.name:hover,
#channel .one-update div.comments .one-comment a.name:focus,
.popup.large div.comments .one-comment a.name:hover,
.popup.large div.comments .one-comment a.name:focus {
text-decoration: underline;
text-decoration: underline;
}
#channel .one-update div.comments .one-comment span.date,
#channel .one-update div.comments .one-comment a.remove,
.popup.large div.comments .one-comment span.date,
.popup.large div.comments .one-comment a.remove {
font-size: 0.85em;
float: right;
font-size: 0.85em;
float: right;
}
html[dir="rtl"] #channel .one-update div.comments .one-comment span.date,
html[dir="rtl"] #channel .one-update div.comments .one-comment a.remove,
html[dir="rtl"] .popup.large div.comments .one-comment span.date,
html[dir="rtl"] .popup.large div.comments .one-comment a.remove {
margin-left: 2px;
float: left;
margin-left: 2px;
float: left;
}
#channel .one-update div.comments .one-comment.me:hover span.date,
.popup.large div.comments .one-comment.me:hover span.date {
display: none;
display: none;
}
#channel .one-update div.comments .one-comment.me a.remove,
.popup.large div.comments .one-comment.me a.remove {
display: none;
display: none;
}
#channel .one-update div.comments .one-comment.me:hover a.remove,
.popup.large div.comments .one-comment.me:hover a.remove {
display: block;
display: block;
}
#channel .one-update div.comments .one-comment p.body,
.popup.large div.comments .one-comment p.body {
clear: both;
clear: both;
}
#channel a.more {
background-position: 0 -334px;
color: black;
height: 16px;
text-decoration: none;
margin: -2px 0 14px 4px;
padding-left: 20px;
display: block;
visibility: hidden;
background-position: 0 -334px;
color: black;
height: 16px;
text-decoration: none;
margin: -2px 0 14px 4px;
padding-left: 20px;
display: block;
visibility: hidden;
}
#channel a.more:hover,
#channel a.more:focus {
text-decoration: underline;
text-decoration: underline;
}
#channel a.mbtool {
width: 11px;
height: 11px;
display: none;
position: absolute;
right: 0;
width: 11px;
height: 11px;
display: none;
position: absolute;
right: 0;
}
html[dir="rtl"] #channel a.mbtool {
right: auto;
left: 0;
right: auto;
left: 0;
}
#channel .one-update:hover a.mbtool {
display: block;
display: block;
}
#channel a.mbtool:hover,
#channel a.mbtool:focus {
text-decoration: none;
text-decoration: none;
}
#channel a.mbtool.profile {
background-position: -1px -1333px;
top: 24px;
background-position: -1px -1333px;
top: 24px;
}
#channel a.mbtool.repost {
background-position: -1px -1354px;
background-position: -1px -1354px;
}
#channel a.mbtool.remove {
background-position: -1px -1312px;
background-position: -1px -1312px;
}
#channel a.mbtool.repost,
#channel a.mbtool.remove {
top: 6px;
top: 6px;
}
#channel .footer {
bottom: 0;
-moz-border-radius-bottomleft: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
bottom: 0;
-moz-border-radius-bottomleft: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
}
#channel .footer div {
margin-left: 5px;
padding-left: 24px;
min-height: 16px;
font-size: 0.85em;
width: auto !important;
margin-left: 5px;
padding-left: 24px;
min-height: 16px;
font-size: 0.85em;
width: auto !important;
}
html[dir="rtl"] #channel .footer div {
float: right;
float: right;
}
#channel .footer .sync {
background-position: 0 -804px;
display: none;
background-position: 0 -804px;
display: none;
}
#channel .footer .unsync {
background-position: 0 -830px;
display: none;
background-position: 0 -830px;
display: none;
}

View file

@ -11,5 +11,5 @@ Author: Valérian Saliou
*/
#directory .content {
padding: 10px 0 10px 0;
padding: 10px 0 10px 0;
}

View file

@ -11,68 +11,68 @@ Author: Valérian Saliou
*/
#discovery .content {
padding: 10px 0 10px 0;
padding: 10px 0 10px 0;
}
#discovery .content p {
margin: 5px 10px 5px 10px;
text-align: justify;
font-size: 0.85em;
margin: 5px 10px 5px 10px;
text-align: justify;
font-size: 0.85em;
}
#discovery .discovery-head,
#directory .directory-head,
#rosterx .rosterx-head,
#privacy .privacy-head {
width: 606px;
height: 24px;
margin: 0 10px 10px 10px;
padding: 6px;
background: #f1f6fd;
border: 1px #9dc4fc solid;
width: 606px;
height: 24px;
margin: 0 10px 10px 10px;
padding: 6px;
background: #f1f6fd;
border: 1px #9dc4fc solid;
}
#discovery .disco-server-text,
#directory .directory-server-text {
float: left;
font-size: 0.9em;
margin: 3px;
float: left;
font-size: 0.9em;
margin: 3px;
}
html[dir="rtl"] #discovery .disco-server-text,
html[dir="rtl"] #directory .directory-server-text {
float: right;
float: right;
}
#discovery .disco-server-input,
#directory .directory-server-input {
width: 200px;
height: 18px;
float: right;
margin-right: 10px;
padding: 2px;
width: 200px;
height: 18px;
float: right;
margin-right: 10px;
padding: 2px;
}
html[dir="rtl"] #discovery .disco-server-input,
html[dir="rtl"] #directory .directory-server-input {
margin-right: 0;
margin-left: 10px;
float: left;
margin-right: 0;
margin-left: 10px;
float: left;
}
#discovery .disco-category {
display: none;
margin-bottom: 22px;
display: none;
margin-bottom: 22px;
}
#discovery .disco-category-title {
font-weight: bold;
font-weight: bold;
}
#discovery .one-actions .one-button {
float: right;
float: right;
}
html[dir="rtl"] #discovery .one-actions .one-button {
float: left;
float: left;
}

View file

@ -11,141 +11,141 @@ Author: Valérian Saliou
*/
#favorites .content {
padding: 10px 0 10px 0;
padding: 10px 0 10px 0;
}
#favorites .fedit-head-select {
min-width: 190px;
max-width: 210px;
min-width: 190px;
max-width: 210px;
}
#favorites .switch-fav {
margin: 0 10px 0 10px;
width: 200px;
height: 355px;
border-right: 1px #c0c0c0 dotted;
float: left;
margin: 0 10px 0 10px;
width: 200px;
height: 355px;
border-right: 1px #c0c0c0 dotted;
float: left;
}
#favorites .room-switcher {
width: 188px;
height: 18px;
border-bottom: 1px #9dc4fc solid;
float: left;
padding: 10px 6px;
font-size: 0.9em;
width: 188px;
height: 18px;
border-bottom: 1px #9dc4fc solid;
float: left;
padding: 10px 6px;
font-size: 0.9em;
}
#favorites .room-switcher:hover {
background-color: #e9f1fd;
cursor: pointer;
background-color: #e9f1fd;
cursor: pointer;
}
#favorites .room-switcher:active {
background-color: #f1f6fd;
background-color: #f1f6fd;
}
#favorites .switch-fav .icon {
float: left;
height: 16px;
width: 16px;
margin: 0 8px 0 0;
float: left;
height: 16px;
width: 16px;
margin: 0 8px 0 0;
}
#favorites .switch-fav .room-list .list-icon {
background-position: 0 -855px;
background-position: 0 -855px;
}
#favorites .switch-fav .room-search .search-icon {
background-position: 0 -876px;
background-position: 0 -876px;
}
#favorites .static-fav {
width: 385px;
height: 335px;
margin: 0 10px 0 0;
padding: 10px;
float: right;
width: 385px;
height: 335px;
margin: 0 10px 0 0;
padding: 10px;
float: right;
}
#favorites .favorites-search {
display: none;
display: none;
}
#favorites .static-fav-head {
width: 393px;
margin: -10px;
width: 393px;
margin: -10px;
}
#favorites .static-fav-results {
width: 406px;
height: 314px;
margin: 10px -10px -10px -10px;
padding: 6px 0 0 0;
width: 406px;
height: 314px;
margin: 10px -10px -10px -10px;
padding: 6px 0 0 0;
}
#favorites .fedit-line {
height: 30px;
font-size: 0.9em;
padding: 10px 0 4px 4px;
border-bottom: 1px #9dc4fc solid;
height: 30px;
font-size: 0.9em;
padding: 10px 0 4px 4px;
border-bottom: 1px #9dc4fc solid;
}
#favorites .fedit-line:hover {
background: #e9f1fd;
background: #e9f1fd;
}
#favorites label {
width: 140px;
margin-top: 3px;
width: 140px;
margin-top: 3px;
}
#favorites input {
height: 18px;
width: 186px;
margin-top: 0;
padding: 2px;
height: 18px;
width: 186px;
margin-top: 0;
padding: 2px;
}
#favorites .fedit-select {
min-width: 160px;
min-width: 160px;
}
#favorites .fedit-actions {
margin: 10px 0 0;
font-size: 0.9em;
float: right;
margin: 10px 0 0;
font-size: 0.9em;
float: right;
}
#favorites input[type="checkbox"] {
margin-top: 5px;
width: auto;
margin-top: 5px;
width: auto;
}
#favorites .fedit-terminate {
float: right;
float: right;
}
#favorites .fedit-add {
display: block;
display: block;
}
#favorites .fedit-edit {
background-position: 2px -1240px;
background-position: 2px -1240px;
}
#favorites .fedit-remove {
margin: 0 8px 0 0;
margin: 0 8px 0 0;
}
#favorites .add,
.popup .results .one-button.one-add {
background-position: 3px -1177px;
background-position: 3px -1177px;
}
#favorites .remove,
#inbox .remove {
background-position: 3px -1196px;
background-position: 3px -1196px;
}
#favorites .join,
@ -153,32 +153,32 @@ Author: Valérian Saliou
#inbox .send,
.popup .results .one-button.one-chat,
.popup .results a.one-profile {
background-position: 3px -124px;
background-position: 3px -124px;
}
#favorites .one-button,
#inbox .one-button,
.popup .results .one-button {
padding-left: 20px !important;
font-size: 0.98em;
padding-left: 20px !important;
font-size: 0.98em;
}
#favorites .fsearch-results {
overflow: auto;
overflow: auto;
}
#favorites .room-name {
margin: 4px 2px 5px;
max-width: 210px;
float: left;
margin: 4px 2px 5px;
max-width: 210px;
float: left;
}
html[dir="rtl"] #favorites .room-name {
float: right;
float: right;
}
#favorites .fsearch-noresults {
display: none;
font-size: 0.9em;
font-weight: bold;
display: none;
font-size: 0.9em;
font-weight: bold;
}

View file

@ -11,41 +11,41 @@ Author: Valérian Saliou
*/
@font-face {
font-family: 'PT Sans';
src: url('../fonts/eot/ptsans.eot');
src: url('../fonts/eot/ptsans.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsans.woff') format('woff'),
url('../fonts/ttf/ptsans.ttf') format('truetype'),
url('../fonts/svg/ptsans.svg#pt_sansregular') format('svg');
font-family: 'PT Sans';
src: url('../fonts/eot/ptsans.eot');
src: url('../fonts/eot/ptsans.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsans.woff') format('woff'),
url('../fonts/ttf/ptsans.ttf') format('truetype'),
url('../fonts/svg/ptsans.svg#pt_sansregular') format('svg');
}
@font-face {
font-family: 'PT Sans';
font-style: italic;
src: url('../fonts/eot/ptsansitalic.eot');
src: url('../fonts/eot/ptsansitalic.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsansitalic.woff') format('woff'),
url('../fonts/ttf/ptsansitalic.ttf') format('truetype'),
url('../fonts/svg/ptsansitalic.svg#pt_sansitalic') format('svg');
font-family: 'PT Sans';
font-style: italic;
src: url('../fonts/eot/ptsansitalic.eot');
src: url('../fonts/eot/ptsansitalic.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsansitalic.woff') format('woff'),
url('../fonts/ttf/ptsansitalic.ttf') format('truetype'),
url('../fonts/svg/ptsansitalic.svg#pt_sansitalic') format('svg');
}
@font-face {
font-family: 'PT Sans';
font-weight: bold;
src: url('../fonts/eot/ptsansbold.eot');
src: url('../fonts/eot/ptsansbold.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsansbold.woff') format('woff'),
url('../fonts/ttf/ptsansbold.ttf') format('truetype'),
url('../fonts/svg/ptsansbold.svg#pt_sansbold') format('svg');
font-family: 'PT Sans';
font-weight: bold;
src: url('../fonts/eot/ptsansbold.eot');
src: url('../fonts/eot/ptsansbold.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsansbold.woff') format('woff'),
url('../fonts/ttf/ptsansbold.ttf') format('truetype'),
url('../fonts/svg/ptsansbold.svg#pt_sansbold') format('svg');
}
@font-face {
font-family: 'PT Sans';
font-weight: bold;
font-style: italic;
src: url('../fonts/eot/ptsansbolditalic.eot');
src: url('../fonts/eot/ptsansbolditalic.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsansbolditalic.woff') format('woff'),
url('../fonts/ttf/ptsansbolditalic.ttf') format('truetype'),
url('../fonts/svg/ptsansbolditalic.svg#pt_sansbold_italic') format('svg');
font-family: 'PT Sans';
font-weight: bold;
font-style: italic;
src: url('../fonts/eot/ptsansbolditalic.eot');
src: url('../fonts/eot/ptsansbolditalic.eot?#iefix') format('embedded-opentype'),
url('../fonts/woff/ptsansbolditalic.woff') format('woff'),
url('../fonts/ttf/ptsansbolditalic.ttf') format('truetype'),
url('../fonts/svg/ptsansbolditalic.svg#pt_sansbold_italic') format('svg');
}

File diff suppressed because it is too large Load diff

View file

@ -13,41 +13,41 @@ Author: Valérian Saliou
/* Fix custom fonts */
@font-face {
font-family: 'PT Sans';
src: url(../fonts/eot/ptsans.eot);
font-family: 'PT Sans';
src: url(../fonts/eot/ptsans.eot);
}
@font-face {
font-family: 'PT Sans';
font-style: italic;
src: url(../fonts/eot/ptsansitalic.eot);
font-family: 'PT Sans';
font-style: italic;
src: url(../fonts/eot/ptsansitalic.eot);
}
@font-face {
font-family: 'PT Sans';
font-weight: bold;
src: url(../fonts/eot/ptsansbold.eot);
font-family: 'PT Sans';
font-weight: bold;
src: url(../fonts/eot/ptsansbold.eot);
}
@font-face {
font-family: 'PT Sans';
font-weight: bold;
font-style: italic;
src: url(../fonts/eot/ptsansbolditalic.eot);
font-family: 'PT Sans';
font-weight: bold;
font-style: italic;
src: url(../fonts/eot/ptsansbolditalic.eot);
}
/* rgba(255,255,255,0.9) */
.search ul {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edffffff,endColorstr=#edffffff);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edffffff,endColorstr=#edffffff);
}
/* rgba(255,255,255,0.3) */
a.finish:active,
#manager-buttons input:active,
#install-buttons input:active {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#49ffffff,endColorstr=#49ffffff);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#49ffffff,endColorstr=#49ffffff);
}
/* rgba(255,255,255,0.2) */
@ -58,15 +58,15 @@ a.finish:focus,
#install-buttons input:hover,
#install-buttons input:focus,
.notifications-content .one-notification:active {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
}
/* rgba(255,255,255,0.14) */
#home .corporation .corp_network a:active,
#home .locale .list a:active {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2fffffff,endColorstr=#2fffffff);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2fffffff,endColorstr=#2fffffff);
}
/* rgba(255,255,255,0.1) */
@ -82,44 +82,44 @@ a.finish.disabled:active,
#install-buttons input,
.notifications-content .one-notification:hover,
.notifications-content .one-notification:focus {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#20ffffff,endColorstr=#20ffffff);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#20ffffff,endColorstr=#20ffffff);
}
/* rgba(255,239,104,0.8) */
.popup .infos {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#deffef68,endColorstr=#deffef68);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#deffef68,endColorstr=#deffef68);
}
/* rgba(225,160,20,0.3) */
.search ul li.hovered {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#46e1a014,endColorstr=#46e1a014);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#46e1a014,endColorstr=#46e1a014);
}
/* rgba(248,246,186,0.9) */
#board .one-board.info {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edf8f6ba,endColorstr=#edf8f6ba);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edf8f6ba,endColorstr=#edf8f6ba);
}
/* rgba(241,160,160,0.9) */
#board .one-board.error {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edf1a0a0,endColorstr=#edf1a0a0);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edf1a0a0,endColorstr=#edf1a0a0);
}
/* rgba(234,234,234,0.8) */
#page-engine .chatstate {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#deeaeaea,endColorstr=#deeaeaea);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#deeaeaea,endColorstr=#deeaeaea);
}
/* rgba(20,20,20,0.6) */
#home .notice.simple {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a0141414,endColorstr=#a0141414);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a0141414,endColorstr=#a0141414);
}
/* rgba(20,20,20,0.8) */
@ -129,29 +129,29 @@ a.finish.disabled:active,
#roster,
#manager,
#install {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de141414,endColorstr=#de141414);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de141414,endColorstr=#de141414);
}
#home .main {
background: #141414;
background: #141414;
}
/* rgba(20,20,20,0.9) */
.popup {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ed141414,endColorstr=#ed141414);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ed141414,endColorstr=#ed141414);
}
/* rgba(0,0,0,0.2) */
#install-top .step {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000);
}
/* rgba(0,0,0,0.6) */
.lock {
background: url(../images/others/lock.png) repeat !important;
background: url(../images/others/lock.png) repeat !important;
}
/* rgba(0,0,0,0.8) */
@ -160,20 +160,20 @@ a.finish.disabled:active,
.buddy-infos-subitem,
.buddy-conf-subitem,
.tools-content-subitem {
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de000000,endColorstr=#de000000);
background: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de000000,endColorstr=#de000000);
}
/* Fix a fieldset padding bug */
legend {
margin-bottom: 5px !important;
margin-bottom: 5px !important;
}
/* Fix opacity bugs */
#options .forms.in_background fieldset {
filter: alpha(opacity = 50) !important;
filter: alpha(opacity = 50) !important;
}
a.finish.disabled {
filter: alpha(opacity = 20) !important;
filter: alpha(opacity = 20) !important;
}

View file

@ -11,90 +11,90 @@ Author: Valérian Saliou
*/
.body-images {
background-image: url(../images/sprites/background.png);
background-repeat: repeat;
background-color: #93c5fa;
background-image: url(../images/sprites/background.png);
background-repeat: repeat;
background-color: #93c5fa;
}
.install-images {
background-image: url(../images/sprites/install.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/install.png);
background-repeat: no-repeat;
}
.home-images {
background-image: url(../images/sprites/home.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/home.png);
background-repeat: no-repeat;
}
.browsers-images {
background-image: url(../images/sprites/browsers.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/browsers.png);
background-repeat: no-repeat;
}
.buttons-images {
background-image: url(../images/sprites/buttons.png);
background-repeat: repeat-x;
background-image: url(../images/sprites/buttons.png);
background-repeat: repeat-x;
}
.talk-images {
background-image: url(../images/sprites/talk.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/talk.png);
background-repeat: no-repeat;
}
.smileys-images {
background-image: url(../images/sprites/smileys.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/smileys.png);
background-repeat: no-repeat;
}
.welcome-images {
background-image: url(../images/sprites/welcome.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/welcome.png);
background-repeat: no-repeat;
}
.me-images {
background-image: url(../images/sprites/me.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/me.png);
background-repeat: no-repeat;
}
.jingle-images {
background-image: url(../images/sprites/jingle.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/jingle.png);
background-repeat: no-repeat;
}
.manager-images {
background-image: url(../images/sprites/manager.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/manager.png);
background-repeat: no-repeat;
}
.mobile-images {
background-image: url(../images/sprites/mobile.png);
background-repeat: no-repeat;
background-image: url(../images/sprites/mobile.png);
background-repeat: no-repeat;
}
.wait-small {
background-image: url(../images/wait/wait-small.gif);
background-repeat: no-repeat;
height: 16px;
width: 16px;
background-image: url(../images/wait/wait-small.gif);
background-repeat: no-repeat;
height: 16px;
width: 16px;
}
.wait-medium {
background-image: url(../images/wait/wait-medium.png);
background-repeat: no-repeat;
height: 24px;
width: 24px;
background-image: url(../images/wait/wait-medium.png);
background-repeat: no-repeat;
height: 24px;
width: 24px;
}
.wait-big {
background-image: url(../images/wait/wait-big.gif);
background-repeat: no-repeat;
height: 30px;
width: 30px;
background-image: url(../images/wait/wait-big.gif);
background-repeat: no-repeat;
height: 30px;
width: 30px;
}
.wait-typing {
background-image: url(../images/wait/wait-typing.gif);
background-repeat: no-repeat;
height: 4px;
width: 16px;
background-image: url(../images/wait/wait-typing.gif);
background-repeat: no-repeat;
height: 4px;
width: 16px;
}

View file

@ -11,234 +11,234 @@ Author: Valérian Saliou
*/
#inbox .content {
padding: 10px 0 10px 0;
padding: 10px 0 10px 0;
}
#inbox .content p {
margin: 3px 10px;
text-align: justify;
font-size: 0.9em;
margin: 3px 10px;
text-align: justify;
font-size: 0.9em;
}
#inbox .inbox-results {
height: 310px;
width: 620px;
margin: -5px 0 0 10px;
padding: 6px 0 0 0;
overflow: auto;
height: 310px;
width: 620px;
margin: -5px 0 0 10px;
padding: 6px 0 0 0;
overflow: auto;
}
html[dir="rtl"] #inbox .inbox-results {
margin-left: auto;
margin-right: 10px;
margin-left: auto;
margin-right: 10px;
}
#inbox .message-unread {
background-color: #E9F1FD;
background-color: #E9F1FD;
}
#inbox .one-message {
font-size: 0.9em;
border-bottom: 1px #b2c7cb solid;
font-size: 0.9em;
border-bottom: 1px #b2c7cb solid;
}
#inbox .message-head {
padding: 6px 0 7px 4px;
overflow: hidden;
padding: 6px 0 7px 4px;
overflow: hidden;
}
#inbox .message-head:hover {
background-color: #e9f1fd;
cursor: pointer;
background-color: #e9f1fd;
cursor: pointer;
}
#inbox .message-head:active {
background-color: #f1f6fd;
background-color: #f1f6fd;
}
#inbox .one-message.message-reading,
#inbox .one-message.message-reading .message-head {
background-color: #f1f6fd;
background-color: #f1f6fd;
}
html[dir="rtl"] #inbox .one-message a.one-button {
float: right;
float: right;
}
#inbox .avatar-container {
float: left;
width: 40px;
height: 40px;
margin-right: 7px;
text-align: center;
background-repeat: no-repeat;
float: left;
width: 40px;
height: 40px;
margin-right: 7px;
text-align: center;
background-repeat: no-repeat;
}
html[dir="rtl"] #inbox .avatar-container {
margin-left: 7px;
margin-right: auto;
float: right;
margin-left: 7px;
margin-right: auto;
float: right;
}
#inbox .avatar {
max-width: 40px;
max-height: 40px;
max-width: 40px;
max-height: 40px;
}
#inbox .message-jid,
#inbox .message-subject {
float: left;
margin: 0 2px;
overflow: hidden;
float: left;
margin: 0 2px;
overflow: hidden;
}
html[dir="rtl"] #inbox .message-jid,
html[dir="rtl"] #inbox .message-subject {
float: right;
float: right;
}
#inbox .message-jid {
width: 165px;
font-weight: bold;
width: 165px;
font-weight: bold;
}
#inbox .message-subject {
width: 355px;
width: 355px;
}
#inbox .message-truncated {
color: #42646b;
font-size: 0.8em;
margin: 23px 0 0 49px;
color: #42646b;
font-size: 0.8em;
margin: 23px 0 0 49px;
}
#inbox .message-body {
padding: 8px 5px 5px 5px;
padding: 8px 5px 5px 5px;
}
#inbox .message-body a {
text-decoration: underline;
text-decoration: underline;
}
#inbox .message-meta {
margin-top: 6px;
padding: 3px 4px;
border-top: 1px #b2c7cb dotted;
margin-top: 6px;
padding: 3px 4px;
border-top: 1px #b2c7cb dotted;
}
#inbox .message-meta span.date {
color: #28474e;
font-size: 0.8em;
margin: 10px 0 0 4px;
float: left;
color: #28474e;
font-size: 0.8em;
margin: 10px 0 0 4px;
float: left;
}
#inbox .message-meta a {
font-size: 0.98em;
margin: 5px;
float: right;
display: block;
font-size: 0.98em;
margin: 5px;
float: right;
display: block;
}
#inbox .inbox-noresults {
font-weight: bold;
display: none;
font-weight: bold;
display: none;
}
#inbox .a-show-messages {
display: none;
display: none;
}
#inbox .inbox-new {
display: none;
height: 300px;
width: 620px;
margin: -5px 0 0 10px;
padding: 16px 0 0 0;
display: none;
height: 300px;
width: 620px;
margin: -5px 0 0 10px;
padding: 16px 0 0 0;
}
#inbox .inbox-new-block {
border-top: 1px #686868 dotted;
padding-top: 9px;
min-height: 32px;
clear: both;
border-top: 1px #686868 dotted;
padding-top: 9px;
min-height: 32px;
clear: both;
}
#inbox .inbox-new-text {
float: left;
width: 100px;
float: left;
width: 100px;
}
#inbox .inbox-new-textarea {
width: 460px;
height: 109px;
margin-bottom: 10px;
float: left;
width: 460px;
height: 109px;
margin-bottom: 10px;
float: left;
}
#inbox .inbox-new input {
float: left;
float: left;
}
html[dir="rtl"] #inbox .inbox-new-text,
html[dir="rtl"] #inbox .inbox-new-textarea,
html[dir="rtl"] #inbox .inbox-new input {
float: right;
float: right;
}
html[dir="rtl"] #inbox .inbox-new-text {
margin-right: 20px;
margin-right: 20px;
}
html[dir="rtl"] #inbox .inbox-new input {
margin-right: auto;
margin-right: auto;
}
#inbox .inbox-new-to ul {
width: 264px;
max-height: 168px;
font-size: 0.9em;
left: 120px;
top: 31px;
width: 264px;
max-height: 168px;
font-size: 0.9em;
left: 120px;
top: 31px;
}
html[dir="rtl"] #inbox .inbox-new-to ul {
left: auto;
right: 130px;
left: auto;
right: 130px;
}
#inbox .inbox-new-to-input {
width: 260px;
width: 260px;
}
#inbox .inbox-new-subject-input {
width: 380px;
width: 380px;
}
#inbox .inbox-new-file a {
display: block;
float: left;
display: block;
float: left;
}
#inbox .inbox-new-file a.file {
font-size: 0.85em;
height: 16px;
max-width: 320px;
margin: 3px 0 15px 013px;
overflow: hidden;
font-size: 0.85em;
height: 16px;
max-width: 320px;
margin: 3px 0 15px 013px;
overflow: hidden;
}
#inbox .inbox-new-file a.one-button {
font-size: 0.85em;
margin: -2px 0 0 25px;
font-size: 0.85em;
margin: -2px 0 0 25px;
}
#inbox .inbox-new-send a {
font-size: 0.85em;
float: right;
display: block;
font-size: 0.85em;
float: right;
display: block;
}
html[dir="rtl"] #inbox .inbox-new-send a {
margin-right: 18px;
margin-right: 18px;
}

View file

@ -11,294 +11,294 @@ Author: Valérian Saliou
*/
body {
color: white;
color: white;
}
#install {
background-color: rgb(20,20,20);
background-color: rgba(20,20,20,0.85);
width: 800px;
margin: 35px auto;
padding-bottom: 17px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border-radius: 6px;
-moz-box-shadow: 0 0 35px #5c5c5c;
-webkit-box-shadow: 0 0 35px #5c5c5c;
box-shadow: 0 0 35px #5c5c5c;
background-color: rgb(20,20,20);
background-color: rgba(20,20,20,0.85);
width: 800px;
margin: 35px auto;
padding-bottom: 17px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border-radius: 6px;
-moz-box-shadow: 0 0 35px #5c5c5c;
-webkit-box-shadow: 0 0 35px #5c5c5c;
box-shadow: 0 0 35px #5c5c5c;
}
#install a {
color: black;
text-decoration: underline;
color: black;
text-decoration: underline;
}
#install .clear {
clear: both;
clear: both;
}
#install fieldset {
border: 1px solid black;
margin: 22px 0 15px 0;
padding: 7px 2px 5px 2px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
border: 1px solid black;
margin: 22px 0 15px 0;
padding: 7px 2px 5px 2px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
#install legend {
font-size: 0.9em;
margin: 0 0 0 15px;
padding: 0 2px;
text-transform: uppercase;
font-size: 0.9em;
margin: 0 0 0 15px;
padding: 0 2px;
text-transform: uppercase;
}
#install label {
width: 200px;
display: block;
float: left;
clear: both;
margin: 0 0 9px 12px;
width: 200px;
display: block;
float: left;
clear: both;
margin: 0 0 9px 12px;
}
html[dir="rtl"] #install label {
margin-right: 12px;
margin-left: 0;
float: right;
margin-right: 12px;
margin-left: 0;
float: right;
}
#install input,
#install select {
float: left;
margin-bottom: 5px;
float: left;
margin-bottom: 5px;
}
html[dir="rtl"] #install input,
html[dir="rtl"] #install select {
float: right;
float: right;
}
#install input[type="text"],
#install input[type="url"],
#install input[type="password"] {
margin-top: -2px;
padding: 3px;
font-size: 0.95em;
min-width: 220px;
margin-top: -2px;
padding: 3px;
font-size: 0.95em;
min-width: 220px;
}
#install input.icon {
padding-left: 24px;
min-width: 199px;
max-height: 18px;
padding-left: 24px;
min-width: 199px;
max-height: 18px;
}
#install input.icon#user_name {
background-position: 4px -204px;
background-position: 4px -204px;
}
#install input.icon#user_password {
background-position: 4px -226px;
background-position: 4px -226px;
}
#install input.icon#user_repassword {
background-position: 4px -248px;
background-position: 4px -248px;
}
#install-top {
padding: 30px 45px;
padding: 30px 45px;
}
#install-top .logo {
background-position: 0 0;
min-width: 88px;
height: 36px;
padding: 32px 0 0 66px;
font-size: 32px;
color: white;
text-transform: lowercase;
float: left;
text-shadow: 0 1px 1px black;
background-position: 0 0;
min-width: 88px;
height: 36px;
padding: 32px 0 0 66px;
font-size: 32px;
color: white;
text-transform: lowercase;
float: left;
text-shadow: 0 1px 1px black;
}
#install-top .step {
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.2);
border: 2px solid white;
padding: 6px 21px;
font-size: 2.7em;
text-shadow: 0 1px 1px black;
float: right;
-moz-border-radius: 40px;
-webkit-border-radius: 40px;
border-radius: 40px;
-moz-box-shadow: 0 0 10px #202020;
-webkit-box-shadow: 0 0 10px #202020;
box-shadow: 0 0 10px #202020;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.2);
border: 2px solid white;
padding: 6px 21px;
font-size: 2.7em;
text-shadow: 0 1px 1px black;
float: right;
-moz-border-radius: 40px;
-webkit-border-radius: 40px;
border-radius: 40px;
-moz-box-shadow: 0 0 10px #202020;
-webkit-box-shadow: 0 0 10px #202020;
box-shadow: 0 0 10px #202020;
}
#install-top .step span {
font-size: 0.6em;
font-size: 0.6em;
}
#install-content {
background: #e4eef9;
background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
color: black;
font-size: 0.9em;
margin: 0 10px;
padding: 20px 24px;
min-height: 260px;
clear: both;
right: 10px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 20px #202020;
-webkit-box-shadow: 0 0 20px #202020;
box-shadow: 0 0 20px #202020;
background: #e4eef9;
background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
color: black;
font-size: 0.9em;
margin: 0 10px;
padding: 20px 24px;
min-height: 260px;
clear: both;
right: 10px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 20px #202020;
-webkit-box-shadow: 0 0 20px #202020;
box-shadow: 0 0 20px #202020;
}
#install-content h3 {
padding-left: 24px;
margin-bottom: 15px;
float: left;
padding-left: 24px;
margin-bottom: 15px;
float: left;
}
html[dir="rtl"] #install-content h3 {
float: right;
float: right;
}
#install-content h3.start {
background-position: 0 -73px;
background-position: 0 -73px;
}
#install-content h3.storage {
background-position: 0 -95px;
background-position: 0 -95px;
}
#install-content h3.account {
background-position: 0 -117px;
background-position: 0 -117px;
}
#install-content h3.main {
background-position: 0 -139px;
background-position: 0 -139px;
}
#install-content h3.hosts {
background-position: 0 -161px;
background-position: 0 -161px;
}
#install-content h3.services {
background-position: 0 -183px;
background-position: 0 -183px;
}
#install-content p {
margin-bottom: 10px;
clear: both;
margin-bottom: 10px;
clear: both;
}
#install-content .info {
color: black;
border-width: 1px;
border-style: dashed;
padding: 6px 8px;
display: block;
text-decoration: none;
color: black;
border-width: 1px;
border-style: dashed;
padding: 6px 8px;
display: block;
text-decoration: none;
}
#install-content .info.smallspace {
margin: 14px 0 10px 0;
margin: 14px 0 10px 0;
}
#install-content .info.bigspace {
margin: 35px 0 20px 0;
margin: 35px 0 20px 0;
}
#install-content .info.first {
margin-top: 28px;
margin-top: 28px;
}
#install-content .info.last {
margin-bottom: 28px;
margin-bottom: 28px;
}
#install-content .info.neutral {
background-color: #f0f19d;
border-color: #b3ad4f;
background-color: #f0f19d;
border-color: #b3ad4f;
}
#install-content a.info.neutral:hover,
#install-content a.info.neutral:focus {
background-color: #eced96;
background-color: #eced96;
}
#install-content a.info.neutral:active {
background-color: #e9ea93;
background-color: #e9ea93;
}
#install-content .info.success {
background-color: #a8dca9;
border-color: #5e9f5f;
background-color: #a8dca9;
border-color: #5e9f5f;
}
#install-content a.info.success:hover,
#install-content a.info.success:focus {
background-color: #a0d5a1;
background-color: #a0d5a1;
}
#install-content a.info.success:active {
background-color: #9ad09b;
background-color: #9ad09b;
}
#install-content .info.fail {
background-color: #f19d9d;
border-color: #b34f4f;
background-color: #f19d9d;
border-color: #b34f4f;
}
#install-content ol {
margin: 20px 30px;
margin: 20px 30px;
}
#install-content ol li {
margin-bottom: 1px;
margin-bottom: 1px;
}
#install-buttons {
margin-top: 22px;
margin-top: 22px;
}
#install-buttons input {
border: 1px solid white;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.1);
color: white;
padding: 4px 8px;
margin-right: 20px;
text-shadow: 0 1px 1px black;
float: right;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 5px #202020;
-webkit-box-shadow: 0 0 5px #202020;
box-shadow: 0 0 5px #202020;
border: 1px solid white;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.1);
color: white;
padding: 4px 8px;
margin-right: 20px;
text-shadow: 0 1px 1px black;
float: right;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 5px #202020;
-webkit-box-shadow: 0 0 5px #202020;
box-shadow: 0 0 5px #202020;
}
#install-buttons input:hover,
#install-buttons input:focus {
cursor: pointer;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.2);
-moz-box-shadow: 0 0 15px #202020;
-webkit-box-shadow: 0 0 15px #202020;
box-shadow: 0 0 15px #202020;
cursor: pointer;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.2);
-moz-box-shadow: 0 0 15px #202020;
-webkit-box-shadow: 0 0 15px #202020;
box-shadow: 0 0 15px #202020;
}
#install-buttons input:active {
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.3);
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.3);
}

View file

@ -11,27 +11,27 @@ Author: Valérian Saliou
*/
#integratebox .top {
height: 40px;
height: 40px;
}
#integratebox .content {
text-align: center;
height: 385px;
text-align: center;
height: 385px;
}
#integratebox .one-media img {
max-height: 385px;
max-width: 640px;
max-height: 385px;
max-width: 640px;
}
#integratebox .one-media a img {
border: none;
border: none;
}
#integratebox .one-media audio {
margin-top: 170px;
margin-top: 170px;
}
#integratebox .bottom {
left: 10px;
left: 10px;
}

View file

@ -16,32 +16,32 @@ Author: Camaran
*
*/
#addToHomeScreen {
z-index:9999;
-webkit-user-select:none;
user-select:none;
-webkit-box-sizing:border-box;
box-sizing:border-box;
-webkit-touch-callout:none;
touch-callout:none;
width:240px;
font-size:15px;
padding:12px 14px;
text-align:left;
font-family:helvetica;
background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(0,#fff),color-stop(0.02,#eee),color-stop(0.98,#ccc),color-stop(1,#a3a3a3));
border:1px solid #505050;
-webkit-border-radius:8px;
-webkit-background-clip:padding-box;
color:#333;
text-shadow:0 1px 0 rgba(255,255,255,0.75);
line-height:130%;
-webkit-box-shadow:0 0 4px rgba(0,0,0,0.5);
z-index:9999;
-webkit-user-select:none;
user-select:none;
-webkit-box-sizing:border-box;
box-sizing:border-box;
-webkit-touch-callout:none;
touch-callout:none;
width:240px;
font-size:15px;
padding:12px 14px;
text-align:left;
font-family:helvetica;
background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(0,#fff),color-stop(0.02,#eee),color-stop(0.98,#ccc),color-stop(1,#a3a3a3));
border:1px solid #505050;
-webkit-border-radius:8px;
-webkit-background-clip:padding-box;
color:#333;
text-shadow:0 1px 0 rgba(255,255,255,0.75);
line-height:130%;
-webkit-box-shadow:0 0 4px rgba(0,0,0,0.5);
}
#addToHomeScreen.addToHomeIpad {
width:268px;
font-size:18px;
padding:14px;
width:268px;
font-size:18px;
padding:14px;
}
/**
@ -50,13 +50,13 @@ Author: Camaran
*
*/
#addToHomeScreen.addToHomeWide {
width:296px;
width:296px;
}
#addToHomeScreen.addToHomeIpad.addToHomeWide {
width:320px;
font-size:18px;
padding:14px;
width:320px;
font-size:18px;
padding:14px;
}
/**
@ -65,17 +65,17 @@ Author: Camaran
*
*/
#addToHomeScreen .addToHomeArrow {
position:absolute;
background-image:-webkit-gradient(linear,0 0,100% 100%,color-stop(0,rgba(204,204,204,0)),color-stop(0.4,rgba(204,204,204,0)),color-stop(0.4,#ccc));
border-width:0 1px 1px 0;
border-style:solid;
border-color:#505050;
width:16px; height:16px;
-webkit-transform:rotateZ(45deg);
bottom:-9px; left:50%;
margin-left:-8px;
-webkit-box-shadow:inset -1px -1px 0 #a9a9a9;
-webkit-border-bottom-right-radius:2px;
position:absolute;
background-image:-webkit-gradient(linear,0 0,100% 100%,color-stop(0,rgba(204,204,204,0)),color-stop(0.4,rgba(204,204,204,0)),color-stop(0.4,#ccc));
border-width:0 1px 1px 0;
border-style:solid;
border-color:#505050;
width:16px; height:16px;
-webkit-transform:rotateZ(45deg);
bottom:-9px; left:50%;
margin-left:-8px;
-webkit-box-shadow:inset -1px -1px 0 #a9a9a9;
-webkit-border-bottom-right-radius:2px;
}
@ -85,10 +85,10 @@ Author: Camaran
*
*/
#addToHomeScreen.addToHomeIpad .addToHomeArrow {
-webkit-transform:rotateZ(-135deg);
background-image:-webkit-gradient(linear,0 0,100% 100%,color-stop(0,rgba(238,238,238,0)),color-stop(0.4,rgba(238,238,238,0)),color-stop(0.4,#eee));
-webkit-box-shadow:inset -1px -1px 0 #fff;
top:-9px; bottom:auto; left:50%;
-webkit-transform:rotateZ(-135deg);
background-image:-webkit-gradient(linear,0 0,100% 100%,color-stop(0,rgba(238,238,238,0)),color-stop(0.4,rgba(238,238,238,0)),color-stop(0.4,#eee));
-webkit-box-shadow:inset -1px -1px 0 #fff;
top:-9px; bottom:auto; left:50%;
}
@ -98,19 +98,19 @@ Author: Camaran
*
*/
#addToHomeScreen .addToHomeClose {
-webkit-box-sizing:border-box;
position:absolute;
right:4px;
top:4px;
width:18px;
height:18px; line-height:14px;
text-align:center;
text-indent:1px;
-webkit-border-radius:9px;
background:rgba(0,0,0,0.12);
color:#707070;
-webkit-box-shadow:0 1px 0 #fff;
font-size:16px;
-webkit-box-sizing:border-box;
position:absolute;
right:4px;
top:4px;
width:18px;
height:18px; line-height:14px;
text-align:center;
text-indent:1px;
-webkit-border-radius:9px;
background:rgba(0,0,0,0.12);
color:#707070;
-webkit-box-shadow:0 1px 0 #fff;
font-size:16px;
}
@ -120,8 +120,8 @@ Author: Camaran
*
*/
#addToHomeScreen .addToHomePlus {
font-weight:bold;
font-size:1.3em;
font-weight:bold;
font-size:1.3em;
}
@ -131,20 +131,20 @@ Author: Camaran
*
*/
#addToHomeScreen .addToHomeShare {
display:inline-block;
width:18px;
height:15px;
background-repeat:no-repeat;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAeCAQAAADu6HTYAAADPElEQVR4Xq3TX2gcRRzA8e/M7mVv2+TSNpc/TZtrY6jUGqgaSAmEChKLrYK0YH0RFC2CSCkEfCghiKU04J8qNigq6os+iQV98MHWFwVBrQQRWs21lBw5cw3NNb1/udu72RGG5Y77IzXW77D7sAwf5scyYoL6BGXSDKFZwaGpLvIUaeoCkvX1MmsM0Ny6oRSQYOLuIS+YZOpfQdqslpUxcZrzTVAz4qPwW2O3CeIwC/RSzeY6Ow1QhUrkr+YOWfEKDkEP8Rij7CHKJmrFSDHBdwGEE5wiGChPN+PnT8VdRtEIl1d4gRj/1EVe5ZSBKGh8iqQpo/Fo5+3C/gz0MYg4zgwbqday1/Q4B8BGQ45d/Hi54lakCrU5obOcidJpu1+Lg9whjabyaOYLnrIBFFaRD+xe2ybMDWY66GmP/WA9cGfGp0CWhy0wkMN8inepFiH2rV1j0NQSNQbFLRQnS8/8YSDBBpadfv4CYDub2fmeHDNAsL1MBWUel0iA+Xik6eHcyvD3vAMSU1TGuA/YRS+dD7ovCQN43GKRFCU20Kd3V/avDVVyAZ5niTEuLA5/zBGWg9EEEhfJKN200Tat8CmRAQb9+wv7soPlHt2tQorsz1uPbr0HTY4sJwrH47zJZwABBAKLMBoQXepwgTwdHCo+fXMkQ4lrxEmQ5AaXipPqDY9V2vn09tgvTPI71EEGYxM+/uMJLJ4svpgaWGKOi/xKgmqLSUGSUd5f2vIVJ/CgBaTIUsZ7ZBsn0+NzfMOXLFCXQyTcybN6ep5ZZgUOHn7jpfUpsZshdugPGf+E5zjbyHTSRyQ8xfRPPM/s63RHeuknSoT22mjmmnAOIMkUZ6D1xSfPPAfd1WFKM3sO2CMaHx8M1NjnXKHaAGGkOW0C02WeYHUz4qMtx+w5gUDS8NckYe5lHsMYwCZEPyEEmjLDZFmAS7CDviMdxyTkMNVBKEmYLvbiQQBIBBbCQG04bGQvFWz6CfsCQLWCigILFwcfkGYBiOpbYuOizTAyYyDdCtrGaRG1LCkIgMYEFhI0WqQZoSlbGRyHKe4qOx7iv2bVQW9dp4dlM/x6kmwnWQcd/Q3FCqwTEiT5s+6D5v/pb0SSHyg7uhMWAAAAAElFTkSuQmCC);
background-size:18px 15px;
text-indent:-9999em;
overflow:hidden;
display:inline-block;
width:18px;
height:15px;
background-repeat:no-repeat;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAeCAQAAADu6HTYAAADPElEQVR4Xq3TX2gcRRzA8e/M7mVv2+TSNpc/TZtrY6jUGqgaSAmEChKLrYK0YH0RFC2CSCkEfCghiKU04J8qNigq6os+iQV98MHWFwVBrQQRWs21lBw5cw3NNb1/udu72RGG5Y77IzXW77D7sAwf5scyYoL6BGXSDKFZwaGpLvIUaeoCkvX1MmsM0Ny6oRSQYOLuIS+YZOpfQdqslpUxcZrzTVAz4qPwW2O3CeIwC/RSzeY6Ow1QhUrkr+YOWfEKDkEP8Rij7CHKJmrFSDHBdwGEE5wiGChPN+PnT8VdRtEIl1d4gRj/1EVe5ZSBKGh8iqQpo/Fo5+3C/gz0MYg4zgwbqday1/Q4B8BGQ45d/Hi54lakCrU5obOcidJpu1+Lg9whjabyaOYLnrIBFFaRD+xe2ybMDWY66GmP/WA9cGfGp0CWhy0wkMN8inepFiH2rV1j0NQSNQbFLRQnS8/8YSDBBpadfv4CYDub2fmeHDNAsL1MBWUel0iA+Xik6eHcyvD3vAMSU1TGuA/YRS+dD7ovCQN43GKRFCU20Kd3V/avDVVyAZ5niTEuLA5/zBGWg9EEEhfJKN200Tat8CmRAQb9+wv7soPlHt2tQorsz1uPbr0HTY4sJwrH47zJZwABBAKLMBoQXepwgTwdHCo+fXMkQ4lrxEmQ5AaXipPqDY9V2vn09tgvTPI71EEGYxM+/uMJLJ4svpgaWGKOi/xKgmqLSUGSUd5f2vIVJ/CgBaTIUsZ7ZBsn0+NzfMOXLFCXQyTcybN6ep5ZZgUOHn7jpfUpsZshdugPGf+E5zjbyHTSRyQ8xfRPPM/s63RHeuknSoT22mjmmnAOIMkUZ6D1xSfPPAfd1WFKM3sO2CMaHx8M1NjnXKHaAGGkOW0C02WeYHUz4qMtx+w5gUDS8NckYe5lHsMYwCZEPyEEmjLDZFmAS7CDviMdxyTkMNVBKEmYLvbiQQBIBBbCQG04bGQvFWz6CfsCQLWCigILFwcfkGYBiOpbYuOizTAyYyDdCtrGaRG1LCkIgMYEFhI0WqQZoSlbGRyHKe4qOx7iv2bVQW9dp4dlM/x6kmwnWQcd/Q3FCqwTEiT5s+6D5v/pb0SSHyg7uhMWAAAAAElFTkSuQmCC);
background-size:18px 15px;
text-indent:-9999em;
overflow:hidden;
}
#addToHomeScreen .addToHomeShare.addToHomeShareOS7 {
width:11px;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAA8CAYAAAAQTCjdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASCQAAEgkB80sG3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKjSURBVGiB7dpPiFVVHMDxz7m9NCtMyI2bEJEC25WrEkzHUXCRraIwdNE8ZxfYIlcis1ZEbGEzT1QCF4XgH1CyWhUoJKIWNRGEiCNKmkSiYTzfcfGuOokx77x3ZlS8382959zfn+/invvn3RdijHIRBrwkOINCYXEcdjpb7VyiYdBsLScwt5y6IloYdzqXo36Ro0gY9IKWo+5JwmzBt2HQnBw9ehYNazyn5TBee8Dh+Vq+CWu92GufnkTDR6ab7gDeBNHouMM/l9tXTXM0fGBmL726Fg1Dam74EsvKqR8VNowL2Yzj5f7rnnE4DHq2235diYYhhTGfC94up35T0y+6di/ITU0rKVd+sEi0P7xr2pSJOu8zvF+OzqEv7vDH/WFxt7/cshy/ticsN8sXYUht0kXDOlsF9XJ4UaEvNoz9X3zc5bKaZThbyr5jzJ4wlNY7KTgM+ES0vhz+KeiPw36fKC/ucAF9uFBOrTZm26SJCtaV27+xIo7cXdkTEhvOoh+XyxprU1qnim7CQdGK2HAyKRexYVShT3RItDElN+mkjiP2Ym+S3f01hv2EVal5WW6hU0ElmptaqJuBpXg6MbeFH2LDpU6CQ93zWIKnEvs0cayGU3glMfkOo1jQYewZzOuyz7FC95Jwo5OgUFfgeg993hh/eTqCTxOSm/iuk8DY0Ap1b2GhtHXxsfZN4j/X0fOx4auEIknEhqv4OiUn1L13Z/+xWfWVaG4q0dxUormpRHNTieamEs1NJZqbJ1Q0jHvdiJo5S2cVjSNOCHZhn3/SnuYnIvl3yomIIz7MXZMn9hydRCrR3FSiualEc1OJ5qYSzU0lmptKNDePjWgwcPePT7/g+4cp8wCW4GXaryK3tL+mLdD5x62ppllgu7bso8q/2HIbzGWdNmWnSJwAAAAASUVORK5CYII=);
background-size:11px 15px;
width:11px;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAA8CAYAAAAQTCjdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASCQAAEgkB80sG3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKjSURBVGiB7dpPiFVVHMDxz7m9NCtMyI2bEJEC25WrEkzHUXCRraIwdNE8ZxfYIlcis1ZEbGEzT1QCF4XgH1CyWhUoJKIWNRGEiCNKmkSiYTzfcfGuOokx77x3ZlS8382959zfn+/invvn3RdijHIRBrwkOINCYXEcdjpb7VyiYdBsLScwt5y6IloYdzqXo36Ro0gY9IKWo+5JwmzBt2HQnBw9ehYNazyn5TBee8Dh+Vq+CWu92GufnkTDR6ab7gDeBNHouMM/l9tXTXM0fGBmL726Fg1Dam74EsvKqR8VNowL2Yzj5f7rnnE4DHq2235diYYhhTGfC94up35T0y+6di/ITU0rKVd+sEi0P7xr2pSJOu8zvF+OzqEv7vDH/WFxt7/cshy/ticsN8sXYUht0kXDOlsF9XJ4UaEvNoz9X3zc5bKaZThbyr5jzJ4wlNY7KTgM+ES0vhz+KeiPw36fKC/ucAF9uFBOrTZm26SJCtaV27+xIo7cXdkTEhvOoh+XyxprU1qnim7CQdGK2HAyKRexYVShT3RItDElN+mkjiP2Ym+S3f01hv2EVal5WW6hU0ElmptaqJuBpXg6MbeFH2LDpU6CQ93zWIKnEvs0cayGU3glMfkOo1jQYewZzOuyz7FC95Jwo5OgUFfgeg993hh/eTqCTxOSm/iuk8DY0Ap1b2GhtHXxsfZN4j/X0fOx4auEIknEhqv4OiUn1L13Z/+xWfWVaG4q0dxUormpRHNTieamEs1NJZqbJ1Q0jHvdiJo5S2cVjSNOCHZhn3/SnuYnIvl3yomIIz7MXZMn9hydRCrR3FSiualEc1OJ5qYSzU0lmptKNDePjWgwcPePT7/g+4cp8wCW4GXaryK3tL+mLdD5x62ppllgu7bso8q/2HIbzGWdNmWnSJwAAAAASUVORK5CYII=);
background-size:11px 15px;
}
/**
@ -153,20 +153,20 @@ Author: Camaran
*
*/
#addToHomeScreen .addToHomeTouchIcon {
display:block;
float:left;
-webkit-border-radius:6px;
border-radius:6px;
-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.5),
inset 0 0 2px rgba(255,255,255,0.9);
box-shadow:0 1px 3px rgba(0,0,0,0.5),
inset 0 0 2px rgba(255,255,255,0.9);
background-repeat:no-repeat;
width:57px; height:57px;
-webkit-background-size:57px 57px;
background-size:57px 57px;
margin:0 12px 0 0;
border:1px solid #333;
-webkit-background-clip:padding-box;
background-clip:padding-box;
display:block;
float:left;
-webkit-border-radius:6px;
border-radius:6px;
-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.5),
inset 0 0 2px rgba(255,255,255,0.9);
box-shadow:0 1px 3px rgba(0,0,0,0.5),
inset 0 0 2px rgba(255,255,255,0.9);
background-repeat:no-repeat;
width:57px; height:57px;
-webkit-background-size:57px 57px;
background-size:57px 57px;
margin:0 12px 0 0;
border:1px solid #333;
-webkit-background-clip:padding-box;
background-clip:padding-box;
}

View file

@ -11,122 +11,122 @@ Author: Valérian Saliou
*/
* {
margin: 0;
padding: 0;
margin: 0;
padding: 0;
}
body {
font: normal 14.6px 'PT Sans', sans-serif;
text-shadow: 0 0 5px white;
font: normal 14.6px 'PT Sans', sans-serif;
text-shadow: 0 0 5px white;
}
h1 {
margin-bottom: 15px;
margin-bottom: 15px;
}
a {
text-decoration: none;
color: black;
outline-style: none;
text-decoration: none;
color: black;
outline-style: none;
}
a:hover,
a:focus {
cursor: pointer;
text-decoration: underline;
cursor: pointer;
text-decoration: underline;
}
legend {
color: black;
color: black;
}
input,
textarea {
background-color: white;
border: 1px solid #636363;
font-size: 0.95em;
padding: 2px;
outline-style: none;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-shadow: inset 0 3px 10px #dcdcdc;
-webkit-box-shadow: inset 0 3px 10px #dcdcdc;
box-shadow: inset 0 3px 10px #dcdcdc;
background-color: white;
border: 1px solid #636363;
font-size: 0.95em;
padding: 2px;
outline-style: none;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-shadow: inset 0 3px 10px #dcdcdc;
-webkit-box-shadow: inset 0 3px 10px #dcdcdc;
box-shadow: inset 0 3px 10px #dcdcdc;
}
textarea {
font-size: 1.1em;
resize: none;
font-size: 1.1em;
resize: none;
}
input:focus,
input[type="submit"]:hover,
input[type="reset"]:hover,
textarea:focus {
border: 1px solid #e1a014;
-moz-box-shadow: inset 0 3px 10px #edd9bc;
-webkit-box-shadow: inset 0 3px 10px #edd9bc;
box-shadow: inset 0 3px 10px #edd9bc;
border: 1px solid #e1a014;
-moz-box-shadow: inset 0 3px 10px #edd9bc;
-webkit-box-shadow: inset 0 3px 10px #edd9bc;
box-shadow: inset 0 3px 10px #edd9bc;
}
input[type="submit"],
input[type="reset"] {
cursor: pointer;
cursor: pointer;
}
input[type="submit"]:active,
input[type="reset"]:active {
-moz-box-shadow: inset 0 3px 15px #e1a753;
-webkit-box-shadow: inset 0 3px 15px #e1a753;
box-shadow: inset 0 3px 15px #e1a753;
-moz-box-shadow: inset 0 3px 15px #e1a753;
-webkit-box-shadow: inset 0 3px 15px #e1a753;
box-shadow: inset 0 3px 15px #e1a753;
}
input[disabled],
textarea[disabled] {
background-color: #f3f3f3;
border: 1px solid #989898;
background-color: #f3f3f3;
border: 1px solid #989898;
}
input:placeholder {
color: #78868a !important;
color: #78868a !important;
}
input:-moz-placeholder {
color: #78868a !important;
color: #78868a !important;
}
input::-webkit-input-placeholder {
color: #78868a !important;
color: #78868a !important;
}
input.placeholder {
color: #78868a !important;
color: #78868a !important;
}
input[type="checkbox"] {
margin-top: 2px;
margin-top: 2px;
}
input[type="checkbox"],
input[type="radio"] {
background: transparent none !important;
border: 0 none !important;
background: transparent none !important;
border: 0 none !important;
}
.please-complete,
.please-complete:hover,
.please-complete:focus {
border: 1px #ac2525 solid !important;
-moz-box-shadow: inset 0 3px 10px #f39c9c !important;
-webkit-box-shadow: inset 0 3px 10px #f39c9c !important;
box-shadow: inset 0 3px 10px #f39c9c !important;
border: 1px #ac2525 solid !important;
-moz-box-shadow: inset 0 3px 10px #f39c9c !important;
-webkit-box-shadow: inset 0 3px 10px #f39c9c !important;
box-shadow: inset 0 3px 10px #f39c9c !important;
}
.hidden {
display: none !important;
display: none !important;
}
.clear {
clear: both !important;
clear: both !important;
}

View file

@ -11,602 +11,602 @@ Author: Valérian Saliou
*/
#manager {
background-color: rgb(20,20,20);
background-color: rgba(20,20,20,0.85);
width: 945px;
margin: 0 auto 25px;
padding-bottom: 17px;
-moz-border-radius-bottomleft: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
-moz-box-shadow: 0 0 35px #5c5c5c;
-webkit-box-shadow: 0 0 35px #5c5c5c;
box-shadow: 0 0 35px #5c5c5c;
background-color: rgb(20,20,20);
background-color: rgba(20,20,20,0.85);
width: 945px;
margin: 0 auto 25px;
padding-bottom: 17px;
-moz-border-radius-bottomleft: 4px;
-moz-border-radius-bottomright: 4px;
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
-moz-box-shadow: 0 0 35px #5c5c5c;
-webkit-box-shadow: 0 0 35px #5c5c5c;
box-shadow: 0 0 35px #5c5c5c;
}
#manager a {
color: black;
text-decoration: underline;
color: black;
text-decoration: underline;
}
#manager .clear {
clear: both;
clear: both;
}
#manager fieldset {
border: 1px solid black;
margin: 22px 0 15px 0;
padding: 7px 2px 5px 2px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
border: 1px solid black;
margin: 22px 0 15px 0;
padding: 7px 2px 5px 2px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
#manager legend {
font-size: 0.9em;
margin: 0 0 0 15px;
padding: 0 2px;
text-transform: uppercase;
font-size: 0.9em;
margin: 0 0 0 15px;
padding: 0 2px;
text-transform: uppercase;
}
#manager label {
width: 200px;
display: block;
float: left;
clear: both;
margin: 0 0 9px 12px;
width: 200px;
display: block;
float: left;
clear: both;
margin: 0 0 9px 12px;
}
html[dir="rtl"] #manager label {
margin-left: 0;
margin-right: 12px;
float: right;
margin-left: 0;
margin-right: 12px;
float: right;
}
#manager label.master {
text-decoration: underline;
text-decoration: underline;
}
#manager input,
#manager select {
float: left;
margin-bottom: 5px;
float: left;
margin-bottom: 5px;
}
html[dir="rtl"] #manager input,
html[dir="rtl"] #manager select {
float: right;
float: right;
}
#manager input[type="radio"] {
margin: 2px 8px 5px 0;
margin: 2px 8px 5px 0;
}
html[dir="rtl"] #manager input[type="radio"] {
margin-right: 0;
margin-left: 8px;
margin-right: 0;
margin-left: 8px;
}
#manager input[type="text"],
#manager input[type="url"],
#manager input[type="password"],
#manager select {
margin-top: -2px;
font-size: 0.95em;
margin-top: -2px;
font-size: 0.95em;
}
#manager input[type="text"],
#manager input[type="url"],
#manager input[type="password"] {
padding: 3px;
min-width: 220px;
padding: 3px;
min-width: 220px;
}
#manager input.icon {
padding-left: 24px;
min-width: 199px;
max-height: 18px;
padding-left: 24px;
min-width: 199px;
max-height: 18px;
}
#manager input.icon#admin_name {
background-position: 4px -510px;
background-position: 4px -510px;
}
#manager input.icon#admin_password,
#manager input.icon#user_repassword {
background-position: 4px -532px;
background-position: 4px -532px;
}
#manager input.icon#user_name,
#manager input.icon#music_artist {
background-position: 4px -554px;
background-position: 4px -554px;
}
#manager input.icon#user_password {
background-position: 4px -576px;
background-position: 4px -576px;
}
#manager input.icon#music_title {
background-position: 4px -598px;
background-position: 4px -598px;
}
#manager input.icon#music_album {
background-position: 4px -620px;
background-position: 4px -620px;
}
#manager input.icon#background_image_color,
#manager input.icon#background_color_color {
background-position: 4px -641px;
background-position: 4px -641px;
}
#manager select {
min-width: 160px;
max-width: 230px;
min-width: 160px;
max-width: 230px;
}
#manager-top {
padding: 25px 45px 30px;
padding: 25px 45px 30px;
}
#manager-top .logo {
background-position: 0 0;
min-width: 89px;
height: 40px;
padding: 28px 0 0 65px;
font-size: 32px;
color: white;
text-transform: lowercase;
float: left;
text-shadow: 0 1px 1px black;
background-position: 0 0;
min-width: 89px;
height: 40px;
padding: 28px 0 0 65px;
font-size: 32px;
color: white;
text-transform: lowercase;
float: left;
text-shadow: 0 1px 1px black;
}
#manager-top .meta {
background-color: #e0eaec;
font-size: 0.9em;
padding: 12px 7px 12px 14px;
float: right;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 10px #202020;
-webkit-box-shadow: 0 0 10px #202020;
box-shadow: 0 0 10px #202020;
background-color: #e0eaec;
font-size: 0.9em;
padding: 12px 7px 12px 14px;
float: right;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 10px #202020;
-webkit-box-shadow: 0 0 10px #202020;
box-shadow: 0 0 10px #202020;
}
html[dir="rtl"] #manager-top .meta {
padding-left: 7px;
padding-right: 14px;
padding-left: 7px;
padding-right: 14px;
}
#manager-top .meta span {
margin-right: 10px;
color: black;
margin-right: 10px;
color: black;
}
html[dir="rtl"] #manager-top .meta span {
margin-right: 0;
margin-left: 10px;
margin-right: 0;
margin-left: 10px;
}
#manager-top .meta a {
background-color: #f1f6fd;
border: 1px solid #b9cbcf;
color: #224249;
padding: 4px 8px 4px 21px;
margin-left: 2px;
text-decoration: none;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
background-color: #f1f6fd;
border: 1px solid #b9cbcf;
color: #224249;
padding: 4px 8px 4px 21px;
margin-left: 2px;
text-decoration: none;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
#manager-top .meta a:hover,
#manager-top .meta a:focus {
border: 1px solid #95b1b7;
border: 1px solid #95b1b7;
}
#manager-top .meta a:active {
border: 1px solid #77989f;
border: 1px solid #77989f;
}
#manager-top .meta a.logout {
background-position: 3px -69px;
background-position: 3px -69px;
}
#manager-top .meta a.close {
background-position: 3px -90px;
background-position: 3px -90px;
}
#manager-tabs {
margin-left: 12px;
margin-left: 12px;
}
html[dir="rtl"] #manager-tabs {
margin-left: 0;
margin-right: 12px;
margin-left: 0;
margin-right: 12px;
}
#manager-tabs a {
background-color: #d9e7ea;
color: #204249;
width: 107px;
height: 17px;
padding: 4px 4px 4px 16px;
margin-left: 4px;
font-size: 0.94em;
text-decoration: none;
overflow: hidden;
float: left;
-moz-border-radius-topright: 3px;
-moz-border-radius-topleft: 3px;
-webkit-border-top-right-radius: 3px;
-webkit-border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
background-color: #d9e7ea;
color: #204249;
width: 107px;
height: 17px;
padding: 4px 4px 4px 16px;
margin-left: 4px;
font-size: 0.94em;
text-decoration: none;
overflow: hidden;
float: left;
-moz-border-radius-topright: 3px;
-moz-border-radius-topleft: 3px;
-webkit-border-top-right-radius: 3px;
-webkit-border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
}
html[dir="rtl"] #manager-tabs a {
margin-left: 0;
margin-right: 4px;
padding-left: 4px;
padding-right: 16px;
float: right;
margin-left: 0;
margin-right: 4px;
padding-left: 4px;
padding-right: 16px;
float: right;
}
#manager-tabs a:hover,
#manager-tabs a:focus {
background-color: #cedee1;
text-decoration: none;
background-color: #cedee1;
text-decoration: none;
}
#manager-tabs a:active {
background-color: #c3d3d7;
text-decoration: none;
background-color: #c3d3d7;
text-decoration: none;
}
#manager-tabs a.tab-active {
background-color: #e4eef9 !important;
background-color: #e4eef9 !important;
}
#manager-content {
background: #e4eef9;
background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
color: black;
font-size: 0.9em;
margin: 0 10px;
padding: 20px 24px;
min-height: 260px;
clear: both;
right: 10px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 20px #202020;
-webkit-box-shadow: 0 0 20px #202020;
box-shadow: 0 0 20px #202020;
background: #e4eef9;
background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
color: black;
font-size: 0.9em;
margin: 0 10px;
padding: 20px 24px;
min-height: 260px;
clear: both;
right: 10px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 20px #202020;
-webkit-box-shadow: 0 0 20px #202020;
box-shadow: 0 0 20px #202020;
}
#manager-content h3 {
padding-left: 24px;
margin-bottom: 15px;
float: left;
padding-left: 24px;
margin-bottom: 15px;
float: left;
}
html[dir="rtl"] #manager-content h3 {
float: right;
float: right;
}
#manager-content h3.login {
background-position: 0 -466px;
background-position: 0 -466px;
}
#manager-content h3.statistics {
background-position: 0 -203px;
background-position: 0 -203px;
}
#manager-content h3.configuration {
background-position: 0 -224px;
background-position: 0 -224px;
}
#manager-content h3.hosts {
background-position: 0 -246px;
background-position: 0 -246px;
}
#manager-content h3.storage {
background-position: 0 -268px;
background-position: 0 -268px;
}
#manager-content h3.design {
background-position: 0 -290px;
background-position: 0 -290px;
}
#manager-content h3.users {
background-position: 0 -312px;
background-position: 0 -312px;
}
#manager-content h3.updates {
background-position: 0 -334px;
background-position: 0 -334px;
}
#manager-content h4 {
border-top: 1px dotted black;
padding-top: 5px;
margin: 20px 0 14px;
clear: both;
border-top: 1px dotted black;
padding-top: 5px;
margin: 20px 0 14px;
clear: both;
}
#manager-content ul,
#manager-content ol {
width: 380px;
margin: 8px 0 20px 18px;
width: 380px;
margin: 8px 0 20px 18px;
}
html[dir="rtl"] #manager-content ul,
html[dir="rtl"] #manager-content ol {
margin-left: 0;
margin-right: 18px;
margin-left: 0;
margin-right: 18px;
}
#manager-content li {
margin-bottom: 3px;
margin-bottom: 3px;
}
html[dir="rtl"] #manager-content li {
margin-right: 15px;
margin-right: 15px;
}
#manager-content li.total {
margin-bottom: 14px;
margin-bottom: 14px;
}
#manager-content li b {
width: 190px;
display: inline-block;
width: 190px;
display: inline-block;
}
#manager-content li span {
margin-left: 10px;
display: inline-block;
margin-left: 10px;
display: inline-block;
}
#manager-content ul.stats,
#manager-content ol.stats {
float: left;
float: left;
}
#manager-content object.stats {
border: 1px dotted #bed4d9;
width: 450px;
height: 270px;
margin-bottom: 20px;
float: right;
border: 1px dotted #bed4d9;
width: 450px;
height: 270px;
margin-bottom: 20px;
float: right;
}
#manager-content p,
#manager-content div {
margin-bottom: 10px;
clear: both;
margin-bottom: 10px;
clear: both;
}
#manager-content .info {
color: black;
border-width: 1px;
border-style: dashed;
padding: 6px 8px;
display: block;
text-decoration: none;
color: black;
border-width: 1px;
border-style: dashed;
padding: 6px 8px;
display: block;
text-decoration: none;
}
#manager-content .info.bottomspace {
margin-bottom: 16px;
margin-bottom: 16px;
}
#manager-content .info.smallspace {
margin: 14px 0 10px 0;
margin: 14px 0 10px 0;
}
#manager-content .info.bigspace {
margin: 35px 0 20px 0;
margin: 35px 0 20px 0;
}
#manager-content .info.neutral {
background-color: #f0f19d;
border-color: #b3ad4f;
background-color: #f0f19d;
border-color: #b3ad4f;
}
#manager-content a.info.neutral:hover,
#manager-content a.info.neutral:focus {
background-color: #eced96;
background-color: #eced96;
}
#manager-content a.info.neutral:active {
background-color: #e9ea93;
background-color: #e9ea93;
}
#manager-content .info.success {
background-color: #a8dca9;
border-color: #5e9f5f;
background-color: #a8dca9;
border-color: #5e9f5f;
}
#manager-content a.info.success:hover,
#manager-content a.info.success:focus {
background-color: #a0d5a1;
background-color: #a0d5a1;
}
#manager-content a.info.success:active {
background-color: #9ad09b;
background-color: #9ad09b;
}
#manager-content .info.fail {
background-color: #f19d9d;
border-color: #b34f4f;
background-color: #f19d9d;
border-color: #b34f4f;
}
#manager-content a.info.fail:hover,
#manager-content a.info.fail:focus {
background-color: #ea9595;
background-color: #ea9595;
}
#manager-content a.info.fail:active {
background-color: #e59090;
background-color: #e59090;
}
#manager-content .browse {
margin: 2px 0 6px;
max-height: 243px;
overflow: auto;
margin: 2px 0 6px;
max-height: 243px;
overflow: auto;
}
#manager-content .browse .one-browse {
padding: 5px 10px 5px 34px;
height: 17px;
padding: 5px 10px 5px 34px;
height: 17px;
}
html[dir="rtl"] #manager-content .browse .one-browse a,
html[dir="rtl"] #manager-content .browse .one-browse span {
float: left;
float: left;
}
#manager-content .browse .user {
background-position: 9px -111px;
background-position: 9px -111px;
}
#manager-content .browse .other {
background-position: 9px -133px;
background-position: 9px -133px;
}
#manager-content .browse .folder {
background-position: 9px -178px;
background-position: 9px -178px;
}
#manager-content .browse .audio {
background-position: 9px -154px;
background-position: 9px -154px;
}
#manager-content .browse .alert {
background-position: 9px -353px;
background-position: 9px -353px;
}
#manager-content .browse .image {
background-position: 9px -374px;
background-position: 9px -374px;
}
#manager-content .browse .video {
background-position: 9px -397px;
background-position: 9px -397px;
}
#manager-content .browse .document {
background-position: 9px -418px;
background-position: 9px -418px;
}
#manager-content .browse .package {
background-position: 9px -441px;
background-position: 9px -441px;
}
#manager-content .browse .previous {
background-position: 9px -485px;
margin-bottom: 4px;
background-position: 9px -485px;
margin-bottom: 4px;
}
#manager-content .browse div {
margin: 0;
margin: 0;
}
#manager-content .browse input {
float: right;
margin: 1px 0;
float: right;
margin: 1px 0;
}
#manager-content .browse .odd {
background-color: #e9f1fd;
background-color: #e9f1fd;
}
#manager-content .browse .even {
background-color: #f1f6fd;
background-color: #f1f6fd;
}
#manager-content .sub {
border-width: 0 0 0 1px;
border-style: solid;
border-color: black;
margin: 5px 0 20px 22px;
padding-left: 12px;
clear: both;
border-width: 0 0 0 1px;
border-style: solid;
border-color: black;
margin: 5px 0 20px 22px;
padding-left: 12px;
clear: both;
}
html[dir="rtl"] #manager-content .sub {
border-width: 0 1px 0 0;
padding-right: 12px;
padding-left: 0;
border-width: 0 1px 0 0;
padding-right: 12px;
padding-left: 0;
}
#manager span.logo_links a {
width: 16px;
height: 16px;
margin-right: 6px;
float: left;
width: 16px;
height: 16px;
margin-right: 6px;
float: left;
}
#manager span.logo_links a.remove {
background-position: 0 -688px;
background-position: 0 -688px;
}
#manager span.logo_links a.view {
background-position: 0 -666px;
background-position: 0 -666px;
}
#manager-content .clear {
margin: 0;
margin: 0;
}
#manager-content textarea.notice-text {
height: 70px;
width: 600px;
margin-left: 4px;
padding: 5px;
font-size: 1.2em;
height: 70px;
width: 600px;
margin-left: 4px;
padding: 5px;
font-size: 1.2em;
}
#manager-buttons {
margin-top: 22px;
margin-top: 22px;
}
#manager-buttons input {
border: 1px solid white;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.1);
color: white;
padding: 4px 8px;
margin-left: -12px;
margin-right: 20px;
font-size: 1em;
text-shadow: 0 1px 1px black;
float: right;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 5px #202020;
-webkit-box-shadow: 0 0 5px #202020;
box-shadow: 0 0 5px #202020;
border: 1px solid white;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.1);
color: white;
padding: 4px 8px;
margin-left: -12px;
margin-right: 20px;
font-size: 1em;
text-shadow: 0 1px 1px black;
float: right;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 0 5px #202020;
-webkit-box-shadow: 0 0 5px #202020;
box-shadow: 0 0 5px #202020;
}
#manager-buttons input:hover,
#manager-buttons input:focus {
cursor: pointer;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.2);
-moz-box-shadow: 0 0 15px #202020;
-webkit-box-shadow: 0 0 15px #202020;
box-shadow: 0 0 15px #202020;
cursor: pointer;
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.2);
-moz-box-shadow: 0 0 15px #202020;
-webkit-box-shadow: 0 0 15px #202020;
box-shadow: 0 0 15px #202020;
}
#manager-buttons input:active {
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.3);
background-color: rgb(255,255,255);
background-color: rgba(255,255,255,0.3);
}

Some files were not shown because too many files have changed in this diff Show more