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'), | var	RDB = require('./redis.js'), | ||||||
| 	posts = require('./posts.js'), | 	posts = require('./posts.js'), | ||||||
| 	utils = require('./utils.js'), | 	utils = require('./../public/src/utils.js'), | ||||||
| 	user = require('./user.js'), | 	user = require('./user.js'), | ||||||
| 	async = require('async'), | 	async = require('async'), | ||||||
| 	topics = require('./topics.js'); | 	topics = require('./topics.js'); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| var	RDB = require('./redis.js'), | var	RDB = require('./redis.js'), | ||||||
| 	utils = require('./utils.js'), | 	utils = require('./../public/src/utils.js'), | ||||||
| 	marked = require('marked'), | 	marked = require('marked'), | ||||||
| 	user = require('./user.js'), | 	user = require('./user.js'), | ||||||
| 	topics = require('./topics.js'), | 	topics = require('./topics.js'), | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| 		redis = require('redis'), | 		redis = require('redis'), | ||||||
| 		config = require('../config.js'), | 		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); | 	RedisDB.exports = redis.createClient(config.redis.port, config.redis.host, config.redis.options); | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|  |  | ||||||
| var user = require('./../user.js'), | var user = require('./../user.js'), | ||||||
| 	fs = require('fs'), | 	fs = require('fs'), | ||||||
| 	utils = require('./../utils.js'), | 	utils = require('./../../public/src/utils.js'), | ||||||
| 	config = require('../../config.js'), | 	config = require('../../config.js'), | ||||||
| 	marked = require('marked'); | 	marked = require('marked'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| var	RDB = require('./redis.js'), | var	RDB = require('./redis.js'), | ||||||
| 	posts = require('./posts.js'), | 	posts = require('./posts.js'), | ||||||
| 	utils = require('./utils.js'), | 	utils = require('./../public/src/utils.js'), | ||||||
| 	user = require('./user.js'), | 	user = require('./user.js'), | ||||||
| 	config = require('../config.js'), | 	config = require('../config.js'), | ||||||
| 	categories = require('./categories.js'), | 	categories = require('./categories.js'), | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| var config = require('../config.js'), | var config = require('../config.js'), | ||||||
| 	utils = require('./utils.js'), | 	utils = require('./../public/src/utils.js'), | ||||||
| 	RDB = require('./redis.js'), | 	RDB = require('./redis.js'), | ||||||
| 	crypto = require('crypto'), | 	crypto = require('crypto'), | ||||||
| 	emailjs = require('emailjs'), | 	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'), | 	categories = require('./categories.js'), | ||||||
| 	posts = require('./posts.js'), | 	posts = require('./posts.js'), | ||||||
| 	topics = require('./topics.js'), | 	topics = require('./topics.js'), | ||||||
| 	utils = require('./utils.js'), | 	utils = require('./../public/src/utils.js'), | ||||||
| 	fs = require('fs'), | 	fs = require('fs'), | ||||||
| 	admin = require('./routes/admin.js'), | 	admin = require('./routes/admin.js'), | ||||||
| 	userRoute = require('./routes/user.js'), | 	userRoute = require('./routes/user.js'), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user