mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	moved utils over to client side for code sharing
This commit is contained in:
		
							
								
								
									
										103
									
								
								public/src/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								public/src/utils.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| (function (module) { | ||||
| 	 | ||||
| 	var utils, fs; | ||||
|  | ||||
| 	try { | ||||
| 		fs = require('fs'); | ||||
| 	} catch (e) {} | ||||
|  | ||||
|  | ||||
| 	module.exports = utils = { | ||||
| 		generateUUID: function() { | ||||
| 			return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { | ||||
| 				var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); | ||||
| 				return v.toString(16); | ||||
| 			}); | ||||
| 		}, | ||||
|  | ||||
| 		//Adapted from http://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search | ||||
| 		walk: function(dir, done) { | ||||
| 			var main_dir = global.configuration.ROOT_DIRECTORY + '/public/templates/'; | ||||
| 			var results = []; | ||||
| 			fs.readdir(dir, function(err, list) { | ||||
| 			    if (err) return done(err); | ||||
| 			    var pending = list.length; | ||||
| 			    if (!pending) return done(null, results); | ||||
| 			    list.forEach(function(file) { | ||||
| 					file = dir + '/' + file; | ||||
| 					fs.stat(file, function(err, stat) { | ||||
| 						if (stat && stat.isDirectory()) { | ||||
| 							utils.walk(file, function(err, res) { | ||||
| 								results = results.concat(res); | ||||
| 								if (!--pending) done(null, results); | ||||
| 							}); | ||||
| 						} else { | ||||
| 							results.push(file.replace(main_dir, '').replace('.tpl', '')); | ||||
| 							if (!--pending) done(null, results); | ||||
| 				        } | ||||
| 					}); | ||||
| 				}); | ||||
| 			}); | ||||
| 		}, | ||||
| 		 | ||||
| 		relativeTime: function(timestamp) { | ||||
| 			var	now = +new Date(), | ||||
| 				difference = now - Math.floor(parseFloat(timestamp)); | ||||
|  | ||||
| 			difference = Math.floor(difference / 1000); | ||||
| 			 | ||||
| 			if (difference < 60) return difference + ' second' + (difference !== 1 ? 's' : ''); | ||||
| 			 | ||||
| 			difference = Math.floor(difference / 60); | ||||
| 			if (difference < 60) return difference + ' minute' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 			difference = Math.floor(difference / 60); | ||||
| 			if (difference < 24) return difference + ' hour' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 			difference = Math.floor(difference / 24); | ||||
| 			if (difference < 30) return difference + ' day' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 			difference = Math.floor(difference / 30); | ||||
| 			if (difference < 12) return difference + ' month' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 			difference = Math.floor(difference / 12); | ||||
| 			return difference + ' year' + (difference !== 1 ? 's' : ''); | ||||
| 		}, | ||||
| 		 | ||||
| 		//http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/ | ||||
| 		slugify: function(str) { | ||||
| 			str = str.replace(/^\s+|\s+$/g, ''); // trim | ||||
| 			str = str.toLowerCase(); | ||||
|  | ||||
| 			// remove accents, swap ñ for n, etc | ||||
| 			var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;"; | ||||
| 			var to   = "aaaaeeeeiiiioooouuuunc------"; | ||||
| 			for (var i=0, l=from.length ; i<l ; i++) { | ||||
| 				str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i)); | ||||
| 			} | ||||
|  | ||||
| 			str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars | ||||
| 					.replace(/\s+/g, '-') // collapse whitespace and replace by - | ||||
| 					.replace(/-+/g, '-'); // collapse dashes | ||||
|  | ||||
| 			return str; | ||||
| 		}, | ||||
|  | ||||
| 		// Willingly stolen from: http://phpjs.org/functions/strip_tags/ | ||||
| 		'strip_tags': function(input, allowed) { | ||||
| 			allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>) | ||||
| 			var	tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, | ||||
| 				commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi; | ||||
|  | ||||
| 			return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) { | ||||
| 				return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	 | ||||
| 	if ('undefined' !== typeof window) { | ||||
| 		window.utils = module.exports; | ||||
| 	} | ||||
|  | ||||
| })('undefined' === typeof module ? {module:{exports:{}}} : module) | ||||
| @@ -1,6 +1,6 @@ | ||||
| var	RDB = require('./redis.js'), | ||||
| 	posts = require('./posts.js'), | ||||
| 	utils = require('./utils.js'), | ||||
| 	utils = require('./../public/src/utils.js'), | ||||
| 	user = require('./user.js'), | ||||
| 	async = require('async'), | ||||
| 	topics = require('./topics.js'); | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| var	RDB = require('./redis.js'), | ||||
| 	utils = require('./utils.js'), | ||||
| 	utils = require('./../public/src/utils.js'), | ||||
| 	marked = require('marked'), | ||||
| 	user = require('./user.js'), | ||||
| 	topics = require('./topics.js'), | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  | ||||
| 		redis = require('redis'), | ||||
| 		config = require('../config.js'), | ||||
| 		utils = require('./utils.js'); | ||||
| 		utils = require('./../public/src/utils.js'); | ||||
| 	 | ||||
|  | ||||
| 	RedisDB.exports = redis.createClient(config.redis.port, config.redis.host, config.redis.options); | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| var user = require('./../user.js'), | ||||
| 	fs = require('fs'), | ||||
| 	utils = require('./../utils.js'), | ||||
| 	utils = require('./../../public/src/utils.js'), | ||||
| 	config = require('../../config.js'), | ||||
| 	marked = require('marked'); | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| var	RDB = require('./redis.js'), | ||||
| 	posts = require('./posts.js'), | ||||
| 	utils = require('./utils.js'), | ||||
| 	utils = require('./../public/src/utils.js'), | ||||
| 	user = require('./user.js'), | ||||
| 	config = require('../config.js'), | ||||
| 	categories = require('./categories.js'), | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
|  | ||||
|  | ||||
| var config = require('../config.js'), | ||||
| 	utils = require('./utils.js'), | ||||
| 	utils = require('./../public/src/utils.js'), | ||||
| 	RDB = require('./redis.js'), | ||||
| 	crypto = require('crypto'), | ||||
| 	emailjs = require('emailjs'), | ||||
|   | ||||
							
								
								
									
										91
									
								
								src/utils.js
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								src/utils.js
									
									
									
									
									
								
							| @@ -1,91 +0,0 @@ | ||||
| var fs = require('fs'); | ||||
|  | ||||
| var utils = { | ||||
| 	generateUUID: function() { | ||||
| 		return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { | ||||
| 			var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); | ||||
| 			return v.toString(16); | ||||
| 		}); | ||||
| 	}, | ||||
|  | ||||
| 	//Adapted from http://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search | ||||
| 	walk: function(dir, done) { | ||||
| 		var main_dir = global.configuration.ROOT_DIRECTORY + '/public/templates/'; | ||||
| 		var results = []; | ||||
| 		fs.readdir(dir, function(err, list) { | ||||
| 		    if (err) return done(err); | ||||
| 		    var pending = list.length; | ||||
| 		    if (!pending) return done(null, results); | ||||
| 		    list.forEach(function(file) { | ||||
| 				file = dir + '/' + file; | ||||
| 				fs.stat(file, function(err, stat) { | ||||
| 					if (stat && stat.isDirectory()) { | ||||
| 						utils.walk(file, function(err, res) { | ||||
| 							results = results.concat(res); | ||||
| 							if (!--pending) done(null, results); | ||||
| 						}); | ||||
| 					} else { | ||||
| 						results.push(file.replace(main_dir, '').replace('.tpl', '')); | ||||
| 						if (!--pending) done(null, results); | ||||
| 			        } | ||||
| 				}); | ||||
| 			}); | ||||
| 		}); | ||||
| 	}, | ||||
| 	 | ||||
| 	relativeTime: function(timestamp) { | ||||
| 		var	now = +new Date(), | ||||
| 			difference = now - Math.floor(parseFloat(timestamp)); | ||||
|  | ||||
| 		difference = Math.floor(difference / 1000); | ||||
| 		 | ||||
| 		if (difference < 60) return difference + ' second' + (difference !== 1 ? 's' : ''); | ||||
| 		 | ||||
| 		difference = Math.floor(difference / 60); | ||||
| 		if (difference < 60) return difference + ' minute' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 		difference = Math.floor(difference / 60); | ||||
| 		if (difference < 24) return difference + ' hour' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 		difference = Math.floor(difference / 24); | ||||
| 		if (difference < 30) return difference + ' day' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 		difference = Math.floor(difference / 30); | ||||
| 		if (difference < 12) return difference + ' month' + (difference !== 1 ? 's' : ''); | ||||
|  | ||||
| 		difference = Math.floor(difference / 12); | ||||
| 		return difference + ' year' + (difference !== 1 ? 's' : ''); | ||||
| 	}, | ||||
| 	 | ||||
| 	//http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/ | ||||
| 	slugify: function(str) { | ||||
| 		str = str.replace(/^\s+|\s+$/g, ''); // trim | ||||
| 		str = str.toLowerCase(); | ||||
|  | ||||
| 		// remove accents, swap ñ for n, etc | ||||
| 		var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;"; | ||||
| 		var to   = "aaaaeeeeiiiioooouuuunc------"; | ||||
| 		for (var i=0, l=from.length ; i<l ; i++) { | ||||
| 			str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i)); | ||||
| 		} | ||||
|  | ||||
| 		str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars | ||||
| 				.replace(/\s+/g, '-') // collapse whitespace and replace by - | ||||
| 				.replace(/-+/g, '-'); // collapse dashes | ||||
|  | ||||
| 		return str; | ||||
| 	}, | ||||
|  | ||||
| 	// Willingly stolen from: http://phpjs.org/functions/strip_tags/ | ||||
| 	'strip_tags': function(input, allowed) { | ||||
| 		allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>) | ||||
| 		var	tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, | ||||
| 			commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi; | ||||
|  | ||||
| 		return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) { | ||||
| 			return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| module.exports = utils; | ||||
| @@ -12,7 +12,7 @@ var express = require('express'), | ||||
| 	categories = require('./categories.js'), | ||||
| 	posts = require('./posts.js'), | ||||
| 	topics = require('./topics.js'), | ||||
| 	utils = require('./utils.js'), | ||||
| 	utils = require('./../public/src/utils.js'), | ||||
| 	fs = require('fs'), | ||||
| 	admin = require('./routes/admin.js'), | ||||
| 	userRoute = require('./routes/user.js'), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user