Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jappix/jappix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascripts/common.js')
-rw-r--r--app/javascripts/common.js917
1 files changed, 0 insertions, 917 deletions
diff --git a/app/javascripts/common.js b/app/javascripts/common.js
deleted file mode 100644
index 8f58bfd4..00000000
--- a/app/javascripts/common.js
+++ /dev/null
@@ -1,917 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the common JS script for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, olivierm, regilero, Maranda
-
-*/
-
-// Bundle
-var Common = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.R_DOMAIN_NAME = /^(([a-zA-Z0-9-\.]+)\.)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/i;
-
-
- /**
- * Checks if an element exists in the DOM
- * @public
- * @param {string} path
- * @return {boolean}
- */
- self.exists = function(path) {
-
- var exists = false;
-
- try {
- if(jQuery(path).size() > 0) {
- exists = true;
- }
- } catch(e) {
- Console.error('Common.exists', e);
- } finally {
- return exists;
- }
-
- };
-
-
- /**
- * Checks if Jappix is connected
- * @public
- * @return {boolean}
- */
- self.isConnected = function() {
-
- connected = false;
-
- try {
- if((typeof con != 'undefined') && con && con.connected()) {
- connected = true;
- }
- } catch(e) {
- Console.error('Common.isConnected', e);
- } finally {
- return connected;
- }
-
- };
-
-
- /**
- * Checks if Jappix is connected
- * @public
- * @return {boolean}
- */
- self.hasWebSocket = function() {
-
- has_websocket = false;
-
- try {
- if(HOST_WEBSOCKET && typeof window.WebSocket != 'undefined') {
- has_websocket = true;
- }
- } catch(e) {
- Console.error('Common.hasWebSocket', e);
- } finally {
- return has_websocket;
- }
-
- };
-
-
- /**
- * Checks if Jappix has focus
- * @public
- * @return {boolean}
- */
- self.isFocused = function() {
-
- has_focus = true;
-
- try {
- if(!document.hasFocus()) {
- has_focus = false;
- }
- } catch(e) {
- Console.error('Common.isFocused', e);
- } finally {
- return has_focus;
- }
-
- };
-
-
- /**
- * Matches a domain name
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isDomain = function(xid) {
-
- is_domain = false;
-
- try {
- if(xid.match(self.R_DOMAIN_NAME)) {
- is_domain = true;
- }
- } catch(e) {
- Console.error('Common.isDomain', e);
- } finally {
- return is_domain;
- }
-
- };
-
-
- /**
- * Generates the good XID
- * @public
- * @param {string} xid
- * @param {string} type
- * @return {string}
- */
- self.generateXID = function(xid, type) {
-
- try {
- // XID needs to be transformed
- xid = xid.toLowerCase();
-
- if(xid && (xid.indexOf('@') === -1)) {
- // Groupchat XID
- if(type == 'groupchat') {
- return xid + '@' + HOST_MUC;
- }
-
- // Gateway XID
- if(self.isDomain(xid) === true) {
- return xid;
- }
-
- // User XID
- return xid + '@' + HOST_MAIN;
- }
-
- // Nothing special (yet bare XID)
- return xid;
- } catch(e) {
- Console.error('Common.generateXID', e);
- }
-
- };
-
-
- /**
- * Gets the asked translated string
- * @public
- * @param {string} string
- * @return {string}
- */
- self._e = function(string) {
-
- try {
- return string;
- } catch(e) {
- Console.error('Common._e', e);
- }
-
- };
-
-
- /**
- * Replaces '%s' to a given value for a translated string
- * @public
- * @param {string} string
- * @param {string} value
- * @return {string}
- */
- self.printf = function(string, value) {
-
- try {
- return string.replace('%s', value);
- } catch(e) {
- Console.error('Common.printf', e);
- }
-
- };
-
-
- /**
- * Returns the string after the last given char
- * @public
- * @param {string} given_char
- * @param {string} str
- * @return {string}
- */
- self.strAfterLast = function(given_char, str) {
-
- try {
- if(!given_char || !str) {
- return '';
- }
-
- var char_index = str.lastIndexOf(given_char);
- var str_return = str;
-
- if(char_index >= 0) {
- str_return = str.substr(char_index + 1);
- }
-
- return str_return;
- } catch(e) {
- Console.error('Common.strAfterLast', e);
- }
-
- };
-
-
- /**
- * Properly explodes a string with a given character
- * @public
- * @param {string} toEx
- * @param {string} toStr
- * @param {number} i
- * @return {string}
- */
- self.explodeThis = function(toEx, toStr, i) {
-
- try {
- // Get the index of our char to explode
- var index = toStr.indexOf(toEx);
-
- // We split if necessary the string
- if(index !== -1) {
- if(i === 0) {
- toStr = toStr.substr(0, index);
- } else {
- toStr = toStr.substr(index + 1);
- }
- }
-
- // We return the value
- return toStr;
- } catch(e) {
- Console.error('Common.explodeThis', e);
- }
-
- };
-
-
- /**
- * Cuts the resource of a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.cutResource = function(aXID) {
-
- try {
- return self.explodeThis('/', aXID, 0);
- } catch(e) {
- Console.error('Common.cutResource', e);
- }
-
- };
-
-
- /**
- * Gets the resource of a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.thisResource = function(aXID) {
-
- resource = '';
-
- try {
- // Any resource?
- if(self.isFullXID(aXID)) {
- resource = self.explodeThis('/', aXID, 1);
- }
- } catch(e) {
- Console.error('Common.thisResource', e);
- } finally {
- return resource;
- }
-
- };
-
-
- /**
- * Returns whether this XID is full or not
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isFullXID = function(xid) {
-
- try {
- return xid.indexOf('/') !== -1;
- } catch(e) {
- Console.error('Common.isFullXID', e);
-
- return false;
- }
-
- };
-
-
- /**
- * nodepreps an XMPP node
- * @public
- * @param {string} node
- * @return {string}
- */
- self.nodeprep = function(node) {
-
- // Spec: http://tools.ietf.org/html/rfc6122#appendix-A
-
- try {
- if(!node) {
- return node;
- }
-
- // Remove prohibited chars
- var prohibited_chars = ['"', '&', '\'', '/', ':', '<', '>', '@'];
-
- for(var j in prohibited_chars) {
- node = node.replace(prohibited_chars[j], '');
- }
-
- // Lower case
- node = node.toLowerCase();
-
- return node;
- } catch(e) {
- Console.error('Common.nodeprep', e);
- }
-
- };
-
-
- /**
- * Encodes quotes in a string
- * @public
- * @param {string} str
- * @return {string}
- */
- self.encodeQuotes = function(str) {
-
- try {
- return (str + '').htmlEnc();
- } catch(e) {
- Console.error('Common.encodeQuotes', e);
- }
-
- };
-
-
- /**
- * Escapes quotes in a string
- * @public
- * @param {string} str
- * @return {string}
- */
- self.escapeQuotes = function(str) {
-
- try {
- return escape(self.encodeQuotes(str));
- } catch(e) {
- Console.error('Common.escapeQuotes', e);
- }
-
- };
-
-
- /**
- * Unescapes quotes in a string
- * @public
- * @param {string} str
- * @return {string}
- */
- self.unescapeQuotes = function(str) {
-
- try {
- return unescape(str);
- } catch(e) {
- Console.error('Common.unescapeQuotes', e);
- }
-
- };
-
-
- /**
- * Gets the bare XID from a XID
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.bareXID = function(xid) {
-
- try {
- // Cut the resource
- xid = self.cutResource(xid);
-
- // Launch nodeprep
- if(xid.indexOf('@') !== -1) {
- xid = self.nodeprep(self.getXIDNick(xid, true)) + '@' + self.getXIDHost(xid);
- }
-
- return xid;
- } catch(e) {
- Console.error('Common.bareXID', e);
- }
-
- };
-
-
- /**
- * Gets the full XID from a XID
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.fullXID = function(xid) {
-
- try {
- // Normalizes the XID
- var full = self.bareXID(xid);
- var resource = self.thisResource(xid);
-
- // Any resource?
- if(resource) {
- full += '/' + resource;
- }
-
- return full;
- } catch(e) {
- Console.error('Common.fullXID', e);
- }
-
- };
-
-
- /**
- * Gets the nick from a XID
- * @public
- * @param {string} aXID
- * @param {boolean} raw_explode
- * @return {string}
- */
- self.getXIDNick = function(aXID, raw_explode) {
-
- try {
- if(raw_explode !== true) {
- // Gateway nick?
- if(aXID.match(/\\40/)) {
- return self.explodeThis('\\40', aXID, 0);
- }
- }
-
- return self.explodeThis('@', aXID, 0);
- } catch(e) {
- Console.error('Common.getXIDNick', e);
- }
-
- };
-
-
- /**
- * Gets the host from a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.getXIDHost = function(aXID) {
-
- try {
- return self.explodeThis('@', aXID, 1);
- } catch(e) {
- Console.error('Common.getXIDHost', e);
- }
-
- };
-
-
- /**
- * Checks if we are RTL (Right-To-Left)
- * @public
- * @return {boolean}
- */
- self.isRTL = function() {
-
- try {
- return (self._e("default:LTR") == 'default:RTL');
- } catch(e) {
- Console.error('Common.isRTL', e);
- }
-
- };
-
-
- /**
- * Checks if anonymous mode is allowed
- * @public
- * @return {boolean}
- */
- self.allowedAnonymous = function() {
-
- try {
- return (ANONYMOUS == 'on');
- } catch(e) {
- Console.error('Common.allowedAnonymous', e);
- }
-
- };
-
-
- /**
- * Checks if host is locked
- * @public
- * @return {boolean}
- */
- self.lockHost = function() {
-
- try {
- return (LOCK_HOST == 'on');
- } catch(e) {
- Console.error('Common.lockHost', e);
- }
-
- };
-
-
- /**
- * Gets the bare XID of the user
- * @public
- * @return {string}
- */
- self.getXID = function() {
-
- try {
- // Return the XID of the user
- if(con.username && con.domain) {
- return con.username + '@' + con.domain;
- }
-
- return '';
- } catch(e) {
- Console.error('Common.getXID', e);
- }
-
- };
-
-
- /**
- * Gets the full XID of the user
- * @public
- * @return {string}
- */
- self.getFullXID = function() {
-
- try {
- var xid = self.getXID();
-
- // Return the full XID of the user
- if(xid) {
- return xid + '/' + con.resource;
- }
-
- return '';
- } catch(e) {
- Console.error('Common.getFullXID', e);
- }
-
- };
-
-
- /**
- * Generates the colors for a given user XID
- * @public
- * @param {type} xid
- * @return {string}
- */
- self.generateColor = function(xid) {
-
- try {
- var colors = new Array(
- 'ac0000',
- 'a66200',
- '007703',
- '00705f',
- '00236b',
- '4e005c'
- );
-
- var number = 0;
-
- for(var i = 0; i < xid.length; i++) {
- number += xid.charCodeAt(i);
- }
-
- var color = '#' + colors[number % (colors.length)];
-
- return color;
- } catch(e) {
- Console.error('Common.generateColor', e);
- }
-
- };
-
-
- /**
- * Checks if the XID is a gateway
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isGateway = function(xid) {
-
- is_gateway = true;
-
- try {
- if(xid.indexOf('@') !== -1) {
- is_gateway = false;
- }
- } catch(e) {
- Console.error('Common.isGateway', e);
- } finally {
- return is_gateway;
- }
-
- };
-
-
- /**
- * Gets the from attribute of a stanza (overrides some servers like Prosody missing from attributes)
- * @public
- * @param {object} stanza
- * @return {string}
- */
- self.getStanzaFrom = function(stanza) {
-
- try {
- var from = stanza.getFrom();
-
- // No from, we assume this is our XID
- if(!from) {
- from = self.getXID();
- }
-
- return from;
- } catch(e) {
- Console.error('Common.getStanzaFrom', e);
- }
-
- };
-
-
- /**
- * 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
- * @param {number} i
- * @return {string}
- */
- self.padZero = function(i) {
-
- try {
- // Negative number (without first 0)
- if(i > -10 && i < 0) {
- return '-0' + (i * -1);
- }
-
- // Positive number (without first 0)
- if(i < 10 && i >= 0) {
- return '0' + i;
- }
-
- // All is okay
- return i;
- } catch(e) {
- Console.error('Common.padZero', e);
- }
-
- };
-
-
- /**
- * 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 {object} query
- * @return {object}
- */
- self.escapeRegex = function(query) {
-
- var result = [];
-
- try {
- if(query instanceof Array) {
- result = [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;
- }
- }
- } else {
- try {
- result = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
- } catch(e) {
- Console.error('Common.escapeRegex[inner]', e);
- }
- }
- } catch(e) {
- Console.error('Common.escapeRegex', e);
- } finally {
- return result;
- }
-
- };
-
-
- /**
- * Returns a random array value
- * @public
- * @param {object} arr
- * @return {object}
- */
- self.randomArrayValue = function(arr) {
-
- try {
- return arr[Math.floor(Math.random() * arr.length)];
- } catch(e) {
- Console.error('Common.randomArrayValue', e);
- }
-
- };
-
-
- /**
- * Returns whether the browser is mobile or not
- * @public
- * @return {boolean}
- */
- self.isMobile = function() {
-
- is_mobile = false;
-
- try {
- is_mobile = /Android|iPhone|iPod|iPad|Windows Phone|BlackBerry|Bada|Maemo|Meego|webOS/i.test(navigator.userAgent);
- } catch(e) {
- Console.error('Common.isMobile', e);
- } finally {
- return is_mobile;
- }
-
- };
-
-
- /**
- * Converts a XML document to a string
- * @public
- * @param {object} xmlData
- * @return {string}
- */
- self.xmlToString = function(xmlData) {
-
- xml_str = null;
-
- try {
- // For Mozilla, Firefox, Opera, etc.
- if(window.XMLSerializer) {
- xml_str = (new XMLSerializer()).serializeToString(xmlData);
- }
-
- // For Internet Explorer
- if(window.ActiveXObject) {
- xml_str = xmlData.xml;
- }
- } catch(e) {
- Console.error('Common.xmlToString', e);
- } finally {
- return xml_str;
- }
-
- };
-
-
- /**
- * Converts a string to a XML document
- * @public
- * @param {string} sXML
- * @return {object}
- */
- self.XMLFromString = function(sXML) {
-
- try {
- // No data?
- if(!sXML) {
- return '';
- }
-
- // Add the XML tag
- if(!sXML.match(/^<\?xml/i)) {
- sXML = '<?xml version="1.0"?>' + sXML;
- }
-
- // Parse it!
- if(window.DOMParser) {
- return (new DOMParser()).parseFromString(sXML, 'text/xml');
- }
-
- if(window.ActiveXObject) {
- var oXML = new ActiveXObject('Microsoft.XMLDOM');
- oXML.loadXML(sXML);
-
- return oXML;
- }
- } catch(e) {
- Console.error('Common.XMLFromString', e);
-
- return '';
- }
-
- };
-
-
- /**
- * Watches for input value change (delays callback)
- * @public
- * @param {function} cb
- * @return {function}
- */
- self.typewatch = function(cb) {
-
- try {
- var timer = 0;
-
- return function(callback, ms) {
- clearTimeout(timer);
- timer = setTimeout(callback, ms);
- };
- } catch(e) {
- Console.error('Common.typewatch', e);
- }
-
- };
-
- /**
- * Convert all applicable characters to HTML entities
- * @public
- * @param {string} cb
- * @return {string}
- */
- self.htmlentities = function(s) {
- return $('<div/>').text(s + '').html();
- };
-
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixCommon = Common;