ipsum.ir/ipsum.js

110 lines
3.5 KiB
JavaScript
Raw Normal View History

2014-09-06 15:08:42 +00:00
var express = require('express'),
2015-01-16 09:55:23 +00:00
app = express(),
server = require('http').Server(app),
io = require('socket.io')(server),
fs = require('fs');
2014-09-06 15:08:42 +00:00
2015-01-02 19:59:30 +00:00
app.use(express.static(__dirname + '/client', {maxAge: 60*60*24*7}));
2014-09-06 15:08:42 +00:00
module.exports.app = app;
app.get(/.*\/.*\/.*/, function(req, res) {
2015-01-16 09:55:23 +00:00
res.charset = 'utf-8';
res.end(go(req.url));
2014-09-06 16:54:04 +00:00
});
2014-09-06 15:08:42 +00:00
if(!String.prototype.repeat) {
String.prototype.repeat = function(n) {
return new Array(n+1).join(this);
2014-09-06 16:54:04 +00:00
};
}
function randomize() {
return Math.floor(Math.random()*3-1);
2014-09-06 15:08:42 +00:00
}
2014-09-06 15:34:49 +00:00
var stretch = function stretch(a, n) {
var d = a;
2014-09-07 08:30:46 +00:00
if(typeof d == 'string') {
while(d.length < n) {
d = d.repeat(2);
}
return d;
}
2014-09-06 15:34:49 +00:00
while(d.length < n) {
2014-09-06 16:54:04 +00:00
d = d.concat(a.sort(randomize));
2014-09-06 15:34:49 +00:00
}
return d;
2014-09-06 16:54:04 +00:00
};
2014-09-06 15:34:49 +00:00
2014-09-06 15:08:42 +00:00
/* IPSUM GENERATOR */
var general = require('./general.json');
var dictionary = {
2014-09-09 10:23:21 +00:00
'design': require('./design.json'),
'news': require('./news.json')
2014-09-06 16:54:04 +00:00
};
2014-09-06 15:08:42 +00:00
var normal = 'لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت بیستری را برای طراحان رایانه ای و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.';
2014-09-06 15:08:42 +00:00
function loremipsum(data) {
var method = data[0],
unit = data[1],
amount = +data[2],
r;
2014-09-06 15:08:42 +00:00
2014-09-07 08:30:46 +00:00
if(method == 'normal' && unit == 'p')
return (normal + '<br>').repeat(amount);
else if (method == 'normal')
r = normal.split(' ');
2014-09-06 15:08:42 +00:00
2014-09-07 08:30:46 +00:00
if(!r) {
r = dictionary[method].concat(general);
r.sort(randomize);
}
2014-09-06 15:08:42 +00:00
switch(unit) {
case 'c':
r = stretch(r, amount/2);
var c = 0;
r = r.filter(function(a) {
if(c < amount && c + a.length <= amount) {
c += a.length;
return true;
}
return false;
});
return r.slice(0, Math.round(amount/2)).join(' ');
2014-09-06 15:08:42 +00:00
case 'w':
r = stretch(r, amount);
return r.slice(0, amount).join(' ');
case 'p':
r = stretch(r, 15*(Math.random()+1));
var s = r.join(' ') + '. <br>';
for(var i = 1; i < amount; i++) {
2014-09-06 16:54:04 +00:00
r = r.sort(randomize);
2014-09-06 15:08:42 +00:00
r = stretch(r, 15*(Math.random()*3+2));
s += r.join(' ') + '. <br>';
}
return s;
}
}
2015-01-16 09:55:23 +00:00
//COUNTER
io.on('connection', function(socket) {
socket.emit('count', +fs.readFileSync('count.json', 'utf8'));
});
function counter(data) {
var count = data.split(' ').length + (+fs.readFileSync('count.json', 'utf8'));
fs.writeFileSync('count.json', count);
io.emit('count', count);
}
2014-09-06 15:08:42 +00:00
function go(url) {
2015-01-16 09:55:23 +00:00
var req = url.split('/'),
ipsum = loremipsum(req.slice(1));
counter(ipsum);
return ipsum;
2014-09-06 15:08:42 +00:00
}