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-08 07:57:34 +00:00
2014-09-06 15:08:42 +00:00
function loremipsum ( data ) {
var method = data [ 0 ] ,
unit = data [ 1 ] ,
2014-09-08 07:57:34 +00:00
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 ) ;
2014-09-07 08:04:23 +00:00
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
}