Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. 'use strict';
  2.  
  3. var gulp = require('gulp'),
  4. argv = require('yargs').argv,
  5. tap = require('gulp-tap');
  6.  
  7. var config = require('./config');
  8.  
  9. module.exports = {
  10. setProperty: setProperty,
  11. deleteProperty: deleteProperty,
  12. addProperty: addProperty
  13. }
  14.  
  15. function deleteProperty() {
  16. if(argv.property === undefined) {
  17. throw new Error("property parameter is required");
  18. }
  19. doWork(0);
  20. }
  21.  
  22. function setProperty() {
  23. if(argv.property === undefined || argv.value === undefined) {
  24. throw new Error("property and value parameters are required");
  25. }
  26. doWork(1);
  27. }
  28.  
  29. function addProperty() {
  30. if(argv.property === undefined || argv.value === undefined || argv.filename === undefined) {
  31. throw new Error("property, value, and filename parameters are required");
  32. }
  33. doWork(2);
  34. }
  35.  
  36. function doWork(operation) {
  37.  
  38. // 0 == deleting, 1 == setting, 2 == adding
  39. if(operation === undefined)
  40. operation = 0;
  41.  
  42. var opCount = 0;
  43.  
  44. var str = gulp.src(config.app + 'i18n/**/*.json')
  45. .pipe(tap(function(file) {
  46. var json = getObjFromJsonFile(file);
  47. var prop = getDescendantProp(json, argv.property);
  48. if(prop !== undefined || operation == 2) {
  49. //if language is specified use it to filter
  50. if(argv.language !== undefined && !checkLanguage(file, argv.language)) {
  51. // console.log("skipping file not for specified language: " + file.relative);
  52. return;
  53. }
  54.  
  55. if(operation == 2 && !checkFilename(file, argv.filename)) {
  56. // console.log("skipping unspecified file: " + file.relative);
  57. return;
  58. }
  59.  
  60. console.log(getOperationString(operation) + ' property value in file: ' + file.relative);
  61. operation ? setDescendantProp(json, argv.property, argv.value) : deleteDescendantProp(json, argv.property);
  62. opCount++;
  63. file.contents = new Buffer(JSON.stringify(json, null, 4));
  64. }
  65. }))
  66. .pipe(gulp.dest(config.app + 'i18n/'));
  67.  
  68. if(!opCount) {
  69. switch (operation) {
  70. case 0:
  71. case 1:
  72. console.log('property ' + getOperationString(operation) + ' operation did not find property "' + argv.property + '" in any file');
  73. break;
  74. case 2:
  75. console.log('property ' + getOperationString(operation) + ' operation did not find file "' + argv.filename + '"');
  76. break;
  77. }
  78. }
  79. return str;
  80. }
  81.  
  82. function getOperationString(operation) {
  83. switch (operation) {
  84. case 0:
  85. return 'deleting';
  86. case 1:
  87. return 'setting';
  88. case 2:
  89. return 'adding';
  90. }
  91. }
  92.  
  93. function setDescendantProp(obj, desc, value) {
  94. var arr = desc.split(".");
  95. for(var i = 0; i <= arr.length; i++) {
  96. var curr = arr.shift();
  97. if(obj[curr] === undefined && i < arr.length)
  98. {
  99. obj[curr] = {};
  100. }
  101. obj = obj[curr];
  102. }
  103. obj[arr[0]] = value;
  104. }
  105.  
  106. function getDescendantProp(obj, desc) {
  107. var arr = desc.split('.');
  108. while (arr.length && (obj = obj[arr.shift()]));
  109. return obj;
  110. }
  111.  
  112. function deleteDescendantProp(obj, desc) {
  113. var arr = desc.split(".");
  114. while(arr.length > 1) {
  115. obj = obj[arr.shift()];
  116. }
  117. delete obj[arr[0]];
  118. }
  119.  
  120. function getObjFromJsonFile(file) {
  121. try {
  122. return JSON.parse(file.contents);
  123. }
  124. catch(e) {
  125. return {};
  126. }
  127. }
  128.  
  129. function checkLanguage(file, language) {
  130. if(language !== undefined) {
  131. var relSplit = file.relative.split('\\');
  132. if (relSplit.length) {
  133. return relSplit[0] === language;
  134. }
  135. }
  136. return false;
  137. }
  138.  
  139. function checkFilename(file, filename) {
  140. if(filename !== undefined) {
  141. var relSplit = file.relative.split('\\');
  142. if (relSplit.length) {
  143. return relSplit[1] === filename;
  144. }
  145. }
  146. return false;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement