browser-language
Advanced tools
Comparing version 1.0.12 to 1.1.0
@@ -0,1 +1,6 @@ | ||
v1.1.0 / 2014-07-25 | ||
================== | ||
* Rewrite for multiple require | ||
v1.0.12 / 2014-07-22 | ||
@@ -2,0 +7,0 @@ ================== |
186
index.js
@@ -7,3 +7,3 @@ "use strict"; | ||
* @subpackage main | ||
* @version 1.0.12 | ||
* @version 1.1.0 | ||
* @author hex7c0 <hex7c0@gmail.com> | ||
@@ -17,3 +17,2 @@ * @copyright hex7c0 2014 | ||
*/ | ||
var my, LANG; | ||
var all = { | ||
@@ -125,2 +124,3 @@ 'ab': 'Abkhazian', | ||
* @function set | ||
* @param {Object} my - user option | ||
* @param {Object} res - response to client | ||
@@ -131,3 +131,3 @@ * @param {String} lang - string for cookie | ||
*/ | ||
function set(res,lang,signed) { | ||
function set(my,res,lang,signed) { | ||
@@ -162,88 +162,2 @@ var opt = my; | ||
/** | ||
* detect language and (if accepted) build it. Store information on normal cookie | ||
* | ||
* @function normal | ||
* @param {Object} req - client request | ||
* @param {Object} res - response to client | ||
* @param {next} [next] - continue routes | ||
* @return | ||
*/ | ||
function normal(req,res,next) { | ||
var lang = LANG; // cache | ||
var opt = my; | ||
if (req.cookies == undefined) { | ||
req.cookies = {}; | ||
/** | ||
* @todo req.headers.cookie | ||
*/ | ||
} | ||
if (req.cookies[opt.cookie] == undefined) { // check | ||
if (req.headers['accept-language']) { | ||
// req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split(';'); | ||
var optional = req.headers['accept-language'] | ||
.match(/([a-z]{2,2})/ig); | ||
// remove duplicate | ||
var language = optional.filter(function(elem,pos,self) { | ||
return self.indexOf(elem.toLowerCase()) == pos; | ||
}) | ||
for (var i = 0, ii = language.length; i < ii; i++) { | ||
if (lang[language[i]]) { | ||
req.cookies[opt.cookie] = set(res,language[i],false); | ||
return end(next); | ||
} | ||
} | ||
} | ||
} else if (lang[req.cookies[opt.cookie]]) { // lookup | ||
return end(next); | ||
} | ||
req.cookies[opt.cookie] = set(res,lang._default,false); | ||
return end(next); | ||
} | ||
/** | ||
* detect language and (if accepted) build it. Store information on signed cookie | ||
* | ||
* @function signed | ||
* @param {Object} req - client request | ||
* @param {Object} res - response to client | ||
* @param {next} next - continue routes | ||
* @return | ||
*/ | ||
function signed(req,res,next) { | ||
var lang = LANG; // cache | ||
var opt = my; | ||
if (req.signedCookies == undefined) { | ||
req.signedCookies = {}; | ||
/** | ||
* @todo req.headers.cookie | ||
*/ | ||
} | ||
if (req.signedCookies[opt.cookie] == undefined) { // check | ||
if (req.headers['accept-language']) { | ||
// req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split(';'); | ||
var optional = req.headers['accept-language'] | ||
.match(/([a-z]{2,2})/ig); | ||
// remove duplicate | ||
var language = optional.filter(function(elem,pos,self) { | ||
return self.indexOf(elem.toLowerCase()) == pos; | ||
}) | ||
for (var i = 0, ii = language.length; i < ii; i++) { | ||
if (lang[language[i]]) { | ||
req.signedCookies[opt.cookie] = set(res,language[i],true); | ||
return end(next); | ||
} | ||
} | ||
} | ||
} else if (lang[req.signedCookies[opt.cookie]]) { // lookup | ||
return end(next); | ||
} | ||
req.signedCookies[opt.cookie] = set(res,lang._default,true); | ||
return end(next); | ||
} | ||
/** | ||
* setting options | ||
@@ -261,3 +175,3 @@ * | ||
var lang = options.dictionary || require(include).LANG; | ||
my = { | ||
var my = { | ||
cookie: String(options.cookie || 'lang'), | ||
@@ -281,7 +195,93 @@ domain: String(options.domain || ''), | ||
process.env.lang = lang._default; | ||
LANG = lang; | ||
var LANG = lang; | ||
// return | ||
if (Boolean(options.signed)) { | ||
return signed; | ||
/** | ||
* detect language and (if accepted) build it. Store information on signed cookie | ||
* | ||
* @function signed | ||
* @param {Object} req - client request | ||
* @param {Object} res - response to client | ||
* @param {next} next - continue routes | ||
* @return | ||
*/ | ||
return function signed(req,res,next) { | ||
var lang = LANG; | ||
var opt = my; | ||
if (req.signedCookies == undefined) { | ||
req.signedCookies = {}; | ||
/** | ||
* @todo req.headers.cookie | ||
*/ | ||
} | ||
if (req.signedCookies[opt.cookie] == undefined) { // check | ||
if (req.headers['accept-language']) { | ||
// req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split(';'); | ||
var optional = req.headers['accept-language'] | ||
.match(/([a-z]{2,2})/ig); | ||
// remove duplicate | ||
var language = optional.filter(function(elem,pos,self) { | ||
return self.indexOf(elem.toLowerCase()) == pos; | ||
}) | ||
for (var i = 0, ii = language.length; i < ii; i++) { | ||
if (lang[language[i]]) { | ||
req.signedCookies[opt.cookie] = set(opt,res, | ||
language[i],true); | ||
return end(next); | ||
} | ||
} | ||
} | ||
} else if (lang[req.signedCookies[opt.cookie]]) { // lookup | ||
return end(next); | ||
} | ||
req.signedCookies[opt.cookie] = set(opt,res,lang._default,true); | ||
return end(next); | ||
} | ||
} | ||
return normal; | ||
/** | ||
* detect language and (if accepted) build it. Store information on normal cookie | ||
* | ||
* @function normal | ||
* @param {Object} req - client request | ||
* @param {Object} res - response to client | ||
* @param {next} [next] - continue routes | ||
* @return | ||
*/ | ||
return function normal(req,res,next) { | ||
var lang = LANG; | ||
var opt = my; | ||
if (req.cookies == undefined) { | ||
req.cookies = {}; | ||
/** | ||
* @todo req.headers.cookie | ||
*/ | ||
} | ||
if (req.cookies[opt.cookie] == undefined) { // check | ||
if (req.headers['accept-language']) { | ||
// req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split(';'); | ||
var optional = req.headers['accept-language'] | ||
.match(/([a-z]{2,2})/ig); | ||
// remove duplicate | ||
var language = optional.filter(function(elem,pos,self) { | ||
return self.indexOf(elem.toLowerCase()) == pos; | ||
}) | ||
for (var i = 0, ii = language.length; i < ii; i++) { | ||
if (lang[language[i]]) { | ||
req.cookies[opt.cookie] = set(opt,res,language[i],false); | ||
return end(next); | ||
} | ||
} | ||
} | ||
} else if (lang[req.cookies[opt.cookie]]) { // lookup | ||
return end(next); | ||
} | ||
req.cookies[opt.cookie] = set(opt,res,lang._default,false); | ||
return end(next); | ||
} | ||
}; |
{ | ||
"name": "browser-language", | ||
"version": "1.0.12", | ||
"version": "1.1.0", | ||
"description": "grab browser language and store on cookie", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
57128