1 | var SlJsInfra = require('sl-js-infra').SlJsInfra;
|
2 | var ValidationUtils = SlJsInfra.Utils.ValidationUtils;
|
3 | var regex = /<script[\s\S]*?>[\s\S]*?<\/script>/gi;
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | function MarkupFileParser(fileContent, filename, logger) {
|
11 | ValidationUtils.verifyNotNullOrEmpty(fileContent, "fileContent");
|
12 | ValidationUtils.verifyNotNullOrEmpty(filename, "filename");
|
13 | ValidationUtils.verifyNotNullOrEmpty(logger, "logger");
|
14 | this.fileContent = fileContent;
|
15 | this.filename = filename;
|
16 | this.logger = logger;
|
17 | this.scriptTags = [];
|
18 | this.extractScriptTags = function () {
|
19 | var tagsArray = this.fileContent.match(regex) || [];
|
20 | if (tagsArray.length === 0) {
|
21 | this.logger.info("no script tags found in '%s'", this.filename)
|
22 | }
|
23 | for (var i = 0; i < tagsArray.length; i++) {
|
24 | var currentTag = tagsArray[i];
|
25 | var jsCode = extractJsCodeFromTag(currentTag);
|
26 | var linesToAdd = calculateLinesToAdd(jsCode);
|
27 | this.scriptTags.push(new ScriptTag(jsCode, linesToAdd));
|
28 | }
|
29 | };
|
30 |
|
31 | this.getPaddedTags = function () {
|
32 | var paddedTags = [];
|
33 | for (var i = 0; i < this.scriptTags.length; i++) {
|
34 | var scriptTag = this.scriptTags[i];
|
35 | paddedTags.push(scriptTag.padContent());
|
36 | }
|
37 | return paddedTags;
|
38 | };
|
39 | this.getAllJsInFile = function () {
|
40 | var tags = this.scriptTags;
|
41 | var allJsCode = "";
|
42 | for (var i = 0; i < tags.length; i++) {
|
43 | var currentTag = tags[i];
|
44 | var linesSoFar = allJsCode.match(/\n/g) || [];
|
45 | var linesToRemove = Array(linesSoFar.length).fill("\n").join("");
|
46 | allJsCode += currentTag.padContent().replace(linesToRemove, "");
|
47 | }
|
48 | return allJsCode;
|
49 | };
|
50 |
|
51 | function calculateLinesToAdd(jsCode) {
|
52 | var contentUntilTag = fileContent.substring(0, fileContent.indexOf(jsCode));
|
53 | var count = contentUntilTag.match(/\n/g) || [];
|
54 | return count.length
|
55 | }
|
56 |
|
57 | function extractJsCodeFromTag(tagAsString) {
|
58 | var codeStartIndex = tagAsString.indexOf(">") + 1;
|
59 | var codeEndIndex = tagAsString.lastIndexOf("<");
|
60 | return tagAsString.substring(codeStartIndex, codeEndIndex);
|
61 |
|
62 | }
|
63 |
|
64 | }
|
65 |
|
66 |
|
67 | function ScriptTag(content, offset) {
|
68 | this.content = content;
|
69 | this.offset = offset;
|
70 | this.getPadding = function () {
|
71 | var padding = "";
|
72 | for (var i = 0; i < this.offset; i++) {
|
73 | padding += '\n';
|
74 | }
|
75 | return padding;
|
76 | };
|
77 | this.padContent = function () {
|
78 | return this.getPadding() + this.content;
|
79 | };
|
80 | }
|
81 |
|
82 | module.exports = MarkupFileParser; |
\ | No newline at end of file |