-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Ondřej Dušek
committed
Jul 27, 2015
1 parent
601a592
commit ce58e9a
Showing
3 changed files
with
166 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
/node_modules/ | ||
/.idea/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
'use strict'; | ||
|
||
var path = require('path'), | ||
fs = require('fs'), | ||
es = require('event-stream'), | ||
gulp = require('gulp'), | ||
cheerio = require('cheerio'), | ||
sprintf = require('sprintf'), | ||
|
||
/** | ||
* Zkontroluje pøístup k souboru a vyhodí chybu v pøípadì, že nelze pøeèíst. | ||
* @param file Název souboru | ||
*/ | ||
validateFile = function (file) { | ||
fs.accessSync && fs.accessSync(file, fs.R_OK); | ||
if (fs.existsSync && !fs.existsSync(file)) { | ||
throw new Error(sprintf('ENOENT, no such file or directory \'%s\'', file)); | ||
} | ||
}, | ||
|
||
/** | ||
* Zkonvertuje pole názvù souborù na zdrojový stream Gulpu | ||
* @param cwd Pracovní adresáø | ||
* @returns {*} | ||
*/ | ||
gulpSources = function (cwd) { | ||
cwd = cwd || ''; | ||
var pathStream = es.through(), | ||
fileStream = es.through(); | ||
pathStream.pipe(es.writeArray(function (err, files) { | ||
files = files.map(function (file) { | ||
file = path.join(cwd, file); | ||
validateFile(file); | ||
return file; | ||
}); | ||
gulp.src(files).pipe(fileStream); | ||
})); | ||
return es.duplex(pathStream, fileStream); | ||
}, | ||
|
||
/** | ||
* Builder funkce pro script tag | ||
* @param builder Builder funkce | ||
* @param minified Použít minifikovanou verzi sriptu | ||
* @returns {Function} | ||
*/ | ||
scriptBuilder = function (builder, minified) { | ||
minified = minified !== false; | ||
var extractSrc = function (line) { | ||
var element = cheerio('script[src]', line) || cheerio('<script></script>'); | ||
return minified && element.attr('data-build-src') || element.attr('data-abs-src') || element.attr('src'); | ||
}; | ||
return function (block) { | ||
var templateScript = function (path) { | ||
var element = cheerio('script', '<script></script>'); | ||
element.attr('src', path); | ||
return block.indent + cheerio.html(element); | ||
}, | ||
extractScriptStream = es.mapSync(extractSrc), | ||
templateScriptStream = es.mapSync(templateScript); | ||
block.pipe(extractScriptStream); | ||
templateScriptStream.pipe(block); | ||
builder(es.duplex(templateScriptStream, extractScriptStream)); | ||
}; | ||
}, | ||
|
||
/** | ||
* Builder funkce pro link tag | ||
* @param builder Builder funkce | ||
* @param minified Použít minifikovanou verzi sriptu | ||
* @returns {Function} | ||
*/ | ||
stylesheetBuilder = function (builder, minified) { | ||
minified = minified !== false; | ||
var extractLink = function (line) { | ||
var element = cheerio('link[rel=stylesheet][href]', line) || cheerio('<link>'); | ||
return minified && element.attr('data-build-href') || element.attr('data-href') || element.attr('href'); | ||
}; | ||
return function (block) { | ||
var templateLink = function (path) { | ||
var element = cheerio('link', '<link>'); | ||
element.attr('rel', 'stylesheet'); | ||
element.attr('href', path); | ||
return block.indent + cheerio.html(element); | ||
}, | ||
extractLinkStream = es.mapSync(extractLink), | ||
templateLinkStream = es.mapSync(templateLink); | ||
block.pipe(extractLinkStream); | ||
templateLinkStream.pipe(block); | ||
builder(es.duplex(templateLinkStream, extractLinkStream)); | ||
}; | ||
}; | ||
|
||
module.exports = { | ||
/** | ||
* Builder pro vytvoøení streamu se seznamem všech skriptù | ||
* @param stream Výstupní stream | ||
* @param cwd Pracovní adresáø | ||
* @param minified Použít minifikované verze sriptù | ||
* @returns {Function} | ||
*/ | ||
scriptStream: function (stream, cwd, minified) { | ||
return scriptBuilder(function (block) { | ||
block.pipe(gulpSources(cwd)).pipe(stream); | ||
}, minified); | ||
}, | ||
|
||
/** | ||
* Builder pro nahrazení sekce scriptù za souhrnný script tag | ||
* @param src Hodnota src atributu | ||
* @returns {Function} | ||
*/ | ||
scriptReplace: function (src) { | ||
return scriptBuilder(function (block) { | ||
block.end(src); | ||
}); | ||
}, | ||
|
||
/** | ||
* Builder pro vytvoøení streamu se seznamem všech souborù se styly | ||
* @param stream Výstupní stream | ||
* @param cwd Pracovní adresáø | ||
* @param minified Použít minifikované verze souborù se styly | ||
* @returns {Function} | ||
*/ | ||
stylesheetStream: function (stream, cwd, minified) { | ||
return stylesheetBuilder(function (block) { | ||
block.pipe(gulpSources(cwd)).pipe(stream); | ||
}, minified); | ||
}, | ||
|
||
/** | ||
* Builder pro nahrazení sekce stylù za souhrnný script link | ||
* @param href Hodnota href atributu | ||
* @returns {Function} | ||
*/ | ||
stylesheetReplace: function (href) { | ||
return stylesheetBuilder(function (block) { | ||
block.end(href); | ||
}); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{ | ||
"name": "htmlbuild-functions", | ||
"version": "0.0.1", | ||
"description": "", | ||
"main": "index.js", | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/winsite/htmlbuild-functions.git" | ||
}, | ||
"author": "Winsite a.s.", | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/winsite/htmlbuild-functions/issues" | ||
}, | ||
"homepage": "https://github.com/winsite/htmlbuild-functions#readme", | ||
"devDependencies": { | ||
"cheerio": "^0.19.0", | ||
"event-stream": "^3.3.1", | ||
"gulp": "^3.9.0", | ||
"sprintf": "^0.1.5" | ||
} | ||
} |