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.
116 lines
2.6 KiB
116 lines
2.6 KiB
|
|
/*! |
|
* Stylus - plugin - url |
|
* Copyright (c) Automattic <developer.wordpress.com> |
|
* MIT Licensed |
|
*/ |
|
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var Compiler = require('../visitor/compiler') |
|
, events = require('../renderer').events |
|
, nodes = require('../nodes') |
|
, parse = require('url').parse |
|
, extname = require('path').extname |
|
, utils = require('../utils') |
|
, fs = require('fs'); |
|
|
|
/** |
|
* Mime table. |
|
*/ |
|
|
|
var defaultMimes = { |
|
'.gif': 'image/gif' |
|
, '.png': 'image/png' |
|
, '.jpg': 'image/jpeg' |
|
, '.jpeg': 'image/jpeg' |
|
, '.svg': 'image/svg+xml' |
|
, '.webp': 'image/webp' |
|
, '.ttf': 'application/x-font-ttf' |
|
, '.eot': 'application/vnd.ms-fontobject' |
|
, '.woff': 'application/font-woff' |
|
, '.woff2': 'application/font-woff2' |
|
}; |
|
|
|
/** |
|
* Return a url() function with the given `options`. |
|
* |
|
* Options: |
|
* |
|
* - `limit` bytesize limit defaulting to 30Kb |
|
* - `paths` image resolution path(s), merged with general lookup paths |
|
* |
|
* Examples: |
|
* |
|
* stylus(str) |
|
* .set('filename', __dirname + '/css/test.styl') |
|
* .define('url', stylus.url({ paths: [__dirname + '/public'] })) |
|
* .render(function(err, css){ ... }) |
|
* |
|
* @param {Object} options |
|
* @return {Function} |
|
* @api public |
|
*/ |
|
|
|
module.exports = function(options) { |
|
options = options || {}; |
|
|
|
var _paths = options.paths || []; |
|
var sizeLimit = null != options.limit ? options.limit : 30000; |
|
var mimes = options.mimes || defaultMimes; |
|
|
|
function fn(url){ |
|
// Compile the url |
|
var compiler = new Compiler(url); |
|
compiler.isURL = true; |
|
url = url.nodes.map(function(node){ |
|
return compiler.visit(node); |
|
}).join(''); |
|
|
|
// Parse literal |
|
url = parse(url); |
|
var ext = extname(url.pathname) |
|
, mime = mimes[ext] |
|
, hash = url.hash || '' |
|
, literal = new nodes.Literal('url("' + url.href + '")') |
|
, paths = _paths.concat(this.paths) |
|
, buf; |
|
|
|
// Not supported |
|
if (!mime) return literal; |
|
|
|
// Absolute |
|
if (url.protocol) return literal; |
|
|
|
// Lookup |
|
var found = utils.lookup(url.pathname, paths); |
|
|
|
// Failed to lookup |
|
if (!found) { |
|
events.emit( |
|
'file not found' |
|
, 'File ' + literal + ' could not be found, literal url retained!' |
|
); |
|
|
|
return literal; |
|
} |
|
|
|
// Read data |
|
buf = fs.readFileSync(found); |
|
|
|
// Too large |
|
if (false !== sizeLimit && buf.length > sizeLimit) return literal; |
|
|
|
// Encode |
|
return new nodes.Literal('url("data:' + mime + ';base64,' + buf.toString('base64') + hash + '")'); |
|
}; |
|
|
|
fn.raw = true; |
|
return fn; |
|
}; |
|
|
|
// Exporting default mimes so we could easily access them |
|
module.exports.mimes = defaultMimes; |
|
|
|
|