Fully end to end encrypted anonymous chat program. Server only stores public key lookup for users and the encrypted messages. No credentials are transfered to the server, but kept in local browser storage. This allows 100% safe chatting.
https://safechat.ch
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
1.8 KiB
113 lines
1.8 KiB
9 years ago
|
|
||
|
/*!
|
||
|
* Stylus - Literal
|
||
|
* Copyright (c) Automattic <developer.wordpress.com>
|
||
|
* MIT Licensed
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Module dependencies.
|
||
|
*/
|
||
|
|
||
|
var Node = require('./node')
|
||
|
, nodes = require('./');
|
||
|
|
||
|
/**
|
||
|
* Initialize a new `Literal` with the given `str`.
|
||
|
*
|
||
|
* @param {String} str
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
var Literal = module.exports = function Literal(str){
|
||
|
Node.call(this);
|
||
|
this.val = str;
|
||
|
this.string = str;
|
||
|
this.prefixed = false;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Inherit from `Node.prototype`.
|
||
|
*/
|
||
|
|
||
|
Literal.prototype.__proto__ = Node.prototype;
|
||
|
|
||
|
/**
|
||
|
* Return hash.
|
||
|
*
|
||
|
* @return {String}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Literal.prototype.__defineGetter__('hash', function(){
|
||
|
return this.val;
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* Return literal value.
|
||
|
*
|
||
|
* @return {String}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Literal.prototype.toString = function(){
|
||
|
return this.val;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Coerce `other` to a literal.
|
||
|
*
|
||
|
* @param {Node} other
|
||
|
* @return {String}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Literal.prototype.coerce = function(other){
|
||
|
switch (other.nodeName) {
|
||
|
case 'ident':
|
||
|
case 'string':
|
||
|
case 'literal':
|
||
|
return new Literal(other.string);
|
||
|
default:
|
||
|
return Node.prototype.coerce.call(this, other);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Operate on `right` with the given `op`.
|
||
|
*
|
||
|
* @param {String} op
|
||
|
* @param {Node} right
|
||
|
* @return {Node}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Literal.prototype.operate = function(op, right){
|
||
|
var val = right.first;
|
||
|
switch (op) {
|
||
|
case '+':
|
||
|
return new nodes.Literal(this.string + this.coerce(val).string);
|
||
|
default:
|
||
|
return Node.prototype.operate.call(this, op, right);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Return a JSON representation of this node.
|
||
|
*
|
||
|
* @return {Object}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Literal.prototype.toJSON = function(){
|
||
|
return {
|
||
|
__type: 'Literal',
|
||
|
val: this.val,
|
||
|
string: this.string,
|
||
|
prefixed: this.prefixed,
|
||
|
lineno: this.lineno,
|
||
|
column: this.column,
|
||
|
filename: this.filename
|
||
|
};
|
||
|
};
|