Simple image host.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

preprocess.js 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. var vals = {
  2. env: "[^\\s}]+#[^\\s}]+",
  3. string: "'[^'}]*'"
  4. }
  5. //Get regex for all values
  6. var valueRegex =
  7. Object.keys(vals)
  8. .map(function(i) { return vals[i]; })
  9. .join("|");
  10. //Turn value regex strings into actual regexes
  11. Object.keys(vals).forEach(function(i) {
  12. vals[i] = new RegExp(vals[i]);
  13. });
  14. var regexStr =
  15. "{{"+ //{{
  16. "("+valueRegex+")"+ //value - $1
  17. "(?:"+ //<optional>
  18. " \\? "+ //?
  19. "("+valueRegex+")"+ //value - $2
  20. " : "+ //:
  21. "("+valueRegex+")"+ //value - $3
  22. ")?"+ //</optional>
  23. "}}"; //}}
  24. var localRegex = new RegExp(regexStr);
  25. var globalRegex = new RegExp(regexStr, "g");
  26. function getVal(str, env) {
  27. if (vals.env.test(str)) {
  28. var parts = str.split("#");
  29. var ns = env[parts[0]];
  30. if (typeof ns === "function")
  31. return ns(parts[1]);
  32. else if (ns !== undefined)
  33. return ns[parts[1]];
  34. else
  35. throw new Error("No: "+str);
  36. } else if (vals.string.test(str)) {
  37. return str.substring(1, str.length - 1);
  38. }
  39. }
  40. module.exports = function(str, env) {
  41. var placeholders = str.match(globalRegex);
  42. if (!placeholders)
  43. return str;
  44. placeholders.forEach(function(p) {
  45. var parts = p.match(localRegex);
  46. var s = parts[0];
  47. //Ternary
  48. if (parts[3]) {
  49. try {
  50. var cond = getVal(parts[1], env);
  51. var val1 = getVal(parts[2], env);
  52. var val2 = getVal(parts[3], env);
  53. } catch (err) {
  54. return;
  55. }
  56. if (cond === true)
  57. str = str.replace(s, val1);
  58. else
  59. str = str.replace(s, val2);
  60. }
  61. //Direct value
  62. else {
  63. try {
  64. var val = getVal(parts[1], env);
  65. } catch (err) {
  66. return;
  67. }
  68. if (val !== undefined && val !== null)
  69. str = str.replace(s, val);
  70. }
  71. });
  72. return str;
  73. }