Initial commit

This commit is contained in:
Developer
2025-04-21 16:03:20 +02:00
commit 2832896157
22874 changed files with 3092801 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
root = true
[*.js]
indent_style=tab
trim_trailing_whitespace=true

View File

@@ -0,0 +1,24 @@
{
"env": {
"node": true
},
"rules": {
"strict": 0,
"camelcase": 0,
"curly": 0,
"indent": [2, "tab", { "SwitchCase": 1 }],
"eol-last": 1,
"no-shadow": 0,
"no-redeclare": 2,
"no-extra-bind": 1,
"no-empty": 0,
"no-process-exit": 1,
"no-underscore-dangle": 0,
"no-use-before-define": 0,
"no-unused-vars": 0,
"consistent-return": 0,
"no-inner-declarations": 1,
"no-loop-func": 1,
"space-before-function-paren": [2, "never"]
}
}

View File

@@ -0,0 +1,41 @@
## **BEFORE YOU SUBMIT** please read the following:
If you have a support request or question please
submit them to [StackOverflow](http://stackoverflow.com/questions/tagged/webpack) using the tag `[webpack]` or the [webpack Gitter](https://gitter.im/webpack/webpack). Future support requests will be closed.
(remove this from issue)
**I'm submitting a bug report**
**I'm submitting a feature request**
**I'm submitting a support request** => Please do not submit support request here, see note at the top of this template.
(remove inappropriate sentences)
**Webpack version:**
1.10.x / 2.x
**HTML-Loader version:**
0.3.x / 0.4.x
**Please tell us about your environment:**
OSX 10.x / Linux / Windows 10
**Current behavior:**
**Expected/desired behavior:**
* **If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem along with a gist/jsbin of your webpack configuration.**
* **What is the expected behavior?**
* **What is the motivation / use case for changing the behavior?**
* **Browser:** [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]
* **Language:** [all | TypeScript X.X | ES6/7 | ES5 | Dart | ...]

View File

@@ -0,0 +1,34 @@
**Please check if the PR fulfills these requirements**
- [ ] Tests for the changes have been added (for bug fixes / features)
- [ ] Docs have been added / updated (for bug fixes / features)
**What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...)
- [ ] Bugfix
- [ ] Feature
- [ ] Code style update (formatting, local variables)
- [ ] Refactoring (no functional changes, no api changes)
- [ ] Build related changes
- [ ] CI related changes
- [ ] Other... Please describe:
**What is the current behavior?** (You can also link to an open issue here)
**What is the new behavior?**
**Does this PR introduce a breaking change?**
- [ ] Yes
- [ ] No
If this PR contains a breaking change, please describe the following...
* Impact:
* Migration path for existing applications:
* Github Issue(s) this is regarding:
**Other information**:

View File

@@ -0,0 +1,26 @@
{
"js": {
"allowed_file_extensions": ["js", "json", "jshintrc", "jsbeautifyrc"],
"brace_style": "collapse",
"break_chained_methods": false,
"e4x": true,
"eval_code": false,
"end_with_newline": true,
"indent_char": "\t",
"indent_level": 0,
"indent_size": 1,
"indent_with_tabs": true,
"jslint_happy": false,
"jslint_happy_align_switch_case": true,
"space_after_anon_function": false,
"keep_array_indentation": false,
"keep_function_indentation": false,
"max_preserve_newlines": 2,
"preserve_newlines": true,
"space_before_conditional": false,
"space_in_paren": false,
"unescape_strings": false,
"wrap_line_length": 0
}
}

View File

@@ -0,0 +1,20 @@
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz
pids
logs
results
npm-debug.log
node_modules
coverage
examples
test
assets
.idea

View File

@@ -0,0 +1,14 @@
sudo: false
language: node_js
os:
- linux
node_js:
- node
- "6"
- "4"
script: npm run travis
after_success:
- cat ./coverage/coverage.json | node_modules/codecov.io/bin/codecov.io.js
- rm -rf ./coverage

View File

@@ -0,0 +1,42 @@
# Contributing
From opening a bug report to creating a pull request: every contribution is
appreciated and welcome. If you're planning to implement a new feature or change
the api please create an issue first. This way we can ensure that your precious
work is not in vain.
## Issues
Most of the time, if webpack is not working correctly for you it is a simple configuration issue.
If you are having difficulty, please search the [StackOverflow with the webpack tag](http://stackoverflow.com/tags/webpack) for questions related
to the `html-loader`. If you can find an answer to your issue, please post a question in [StackOverflow](http://stackoverflow.com/tags/webpack) or
the [webpack Gitter](https://gitter.im/webpack/webpack) and include both your webpack & html-loader versions.
**If you have discovered a bug or have a feature suggestion, feel free to create an issue on Github.**
## Setup
```bash
git clone https://github.com/webpack/html-loader.git
cd html-loader
npm install
```
To run the entire test suite use:
```bash
npm test
```
## Submitting Changes
After getting some feedback, push to your fork and submit a pull request. We
may suggest some changes or improvements or alternatives, but for small changes
your pull request should be accepted quickly.
Some things that will increase the chance that your pull request is accepted:
* Write tests
* Follow the existing Webpack coding style defined in the eslint jsbeutify and editor config rules.
* Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)

View File

@@ -0,0 +1,20 @@
Copyright JS Foundation and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,305 @@
[![npm][npm]][npm-url]
[![deps][deps]][deps-url]
[![test][test]][test-url]
[![coverage][cover]][cover-url]
[![chat][chat]][chat-url]
<div align="center">
<img width="200" height="200"
src="https://worldvectorlogo.com/logos/html5.svg">
<a href="https://github.com/webpack/webpack">
<img width="200" height="200" vspace="" hspace="25"
src="https://worldvectorlogo.com/logos/webpack.svg">
</a>
<h1>HTML Loader</h1>
<p>Exports HTML as string. HTML is minimized when the compiler demands.<p>
</div>
<h2 align="center">Install</h2>
```bash
npm i -D html-loader
```
<h2 align="center">Usage</h2>
By default every local `<img src="image.png">` is required (`require('./image.png')`). You may need to specify loaders for images in your configuration (recommended `file-loader` or `url-loader`).
You can specify which tag-attribute combination should be processed by this loader via the query parameter `attrs`. Pass an array or a space-separated list of `<tag>:<attribute>` combinations. (Default: `attrs=img:src`)
To completely disable tag-attribute processing (for instance, if you're handling image loading on the client side) you can pass in `attrs=false`.
<h2 align="center">Examples</h2>
With this configuration:
```js
{
module: {
rules: [
{ test: /\.jpg$/, use: [ "file-loader" ] },
{ test: /\.png$/, use: [ "url-loader?mimetype=image/png" ] }
]
},
output: {
publicPath: "http://cdn.example.com/[hash]/"
}
}
```
``` html
<!-- file.html -->
<img src="image.png" data-src="image2x.png" >
```
```js
require("html-loader!./file.html");
// => '<img src="http://cdn.example.com/49eba9f/a992ca.png"
// data-src="image2x.png">'
```
```js
require("html-loader?attrs=img:data-src!./file.html");
// => '<img src="image.png" data-src="data:image/png;base64,..." >'
```
```js
require("html-loader?attrs=img:src img:data-src!./file.html");
require("html-loader?attrs[]=img:src&attrs[]=img:data-src!./file.html");
// => '<img src="http://cdn.example.com/49eba9f/a992ca.png"
// data-src="data:image/png;base64,..." >'
```
```js
require("html-loader?-attrs!./file.html");
// => '<img src="image.jpg" data-src="image2x.png" >'
```
minimized by running `webpack --optimize-minimize`
```html
'<img src=http://cdn.example.com/49eba9f/a9f92ca.jpg
data-src=data:image/png;base64,...>'
```
or specify the `minimize` property in the rule's options in your `webpack.conf.js`
```js
module: {
rules: [{
test: /\.html$/,
use: [ {
loader: 'html-loader',
options: {
minimize: true
}
}],
}]
}
```
### 'Root-relative' URLs
For urls that start with a `/`, the default behavior is to not translate them.
If a `root` query parameter is set, however, it will be prepended to the url
and then translated.
With the same configuration as above:
``` html
<!-- file.html -->
<img src="/image.jpg">
```
```js
require("html-loader!./file.html");
// => '<img src="/image.jpg">'
```
```js
require("html-loader?root=.!./file.html");
// => '<img src="http://cdn.example.com/49eba9f/a992ca.jpg">'
```
### Interpolation
You can use `interpolate` flag to enable interpolation syntax for ES6 template strings, like so:
```js
require("html-loader?interpolate!./file.html");
```
```html
<img src="${require(`./images/gallery.png`)}">
<div>${require('./components/gallery.html')}</div>
```
And if you only want to use `require` in template and any other `${}` are not to be translated, you can set `interpolate` flag to `require`, like so:
```js
require("html-loader?interpolate=require!./file.ftl");
```
```html
<#list list as list>
<a href="${list.href!}" />${list.name}</a>
</#list>
<img src="${require(`./images/gallery.png`)}">
<div>${require('./components/gallery.html')}</div>
```
### Export formats
There are different export formats available:
+ ```module.exports``` (default, cjs format). "Hello world" becomes ```module.exports = "Hello world";```
+ ```exports.default``` (when ```exportAsDefault``` param is set, es6to5 format). "Hello world" becomes ```exports.default = "Hello world";```
+ ```export default``` (when ```exportAsEs6Default``` param is set, es6 format). "Hello world" becomes ```export default "Hello world";```
### Advanced options
If you need to pass [more advanced options](https://github.com/webpack/html-loader/pull/46), especially those which cannot be stringified, you can also define an `htmlLoader`-property on your `webpack.config.js`:
```js
var path = require('path')
module.exports = {
...
module: {
rules: [
{
test: /\.html$/,
use: [ "html-loader" ]
}
]
},
htmlLoader: {
ignoreCustomFragments: [/\{\{.*?}}/],
root: path.resolve(__dirname, 'assets'),
attrs: ['img:src', 'link:href']
}
};
```
If you need to define two different loader configs, you can also change the config's property name via `html-loader?config=otherHtmlLoaderConfig`:
```js
module.exports = {
...
module: {
rules: [
{
test: /\.html$/,
use: [ "html-loader?config=otherHtmlLoaderConfig" ]
}
]
},
otherHtmlLoaderConfig: {
...
}
};
```
### Export into HTML files
A very common scenario is exporting the HTML into their own _.html_ file, to
serve them directly instead of injecting with javascript. This can be achieved
with a combination of 3 loaders:
- [file-loader](https://github.com/webpack/file-loader)
- [extract-loader](https://github.com/peerigon/extract-loader)
- html-loader
The html-loader will parse the URLs, require the images and everything you
expect. The extract loader will parse the javascript back into a proper html
file, ensuring images are required and point to proper path, and the file loader
will write the _.html_ file for you. Example:
```js
{
test: /\.html$/,
use: [ 'file-loader?name=[path][name].[ext]!extract-loader!html-loader' ]
}
```
<h2 align="center">Maintainers</h2>
<table>
<tbody>
<tr>
<td align="center">
<img width="150" height="150"
src="https://avatars.githubusercontent.com/u/18315?v=3">
</br>
<a href="https://github.com/hemanth">Hemanth</a>
</td>
<td align="center">
<img width="150" height="150"
src="https://avatars.githubusercontent.com/u/8420490?v=3">
</br>
<a href="https://github.com/d3viant0ne">Joshua Wiens</a>
</td>
<td align="center">
<img width="150" height="150" src="https://avatars.githubusercontent.com/u/5419992?v=3">
</br>
<a href="https://github.com/michael-ciniawsky">Michael Ciniawsky</a>
</td>
<td align="center">
<img width="150" height="150"
src="https://avatars.githubusercontent.com/u/6542274?v=3">
</br>
<a href="https://github.com/imvetri">Imvetri</a>
</td>
</tr>
<tr>
<td align="center">
<img width="150" height="150"
src="https://avatars.githubusercontent.com/u/1520965?v=3">
</br>
<a href="https://github.com/andreicek">Andrei Crnković</a>
</td>
<td align="center">
<img width="150" height="150"
src="https://avatars.githubusercontent.com/u/3367801?v=3">
</br>
<a href="https://github.com/abouthiroppy">Yuta Hiroto</a>
</td>
<td align="center">
<img width="150" height="150" src="https://avatars.githubusercontent.com/u/80044?v=3">
</br>
<a href="https://github.com/petrunov">Vesselin Petrunov</a>
</td>
<td align="center">
<img width="150" height="150"
src="https://avatars.githubusercontent.com/u/973543?v=3">
</br>
<a href="https://github.com/gajus">Gajus Kuizinas</a>
</td>
</tr>
</tbody>
</table>
[npm]: https://img.shields.io/npm/v/html-loader.svg
[npm-url]: https://npmjs.com/package/html-loader
[deps]: https://david-dm.org/webpack/html-loader.svg
[deps-url]: https://david-dm.org/webpack/html-loader
[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg
[chat-url]: https://gitter.im/webpack/webpack
[test]: http://img.shields.io/travis/webpack/html-loader.svg
[test-url]: https://travis-ci.org/webpack/html-loader
[cover]: https://codecov.io/gh/webpack/html-loader/branch/master/graph/badge.svg
[cover-url]: https://codecov.io/gh/webpack/html-loader

View File

@@ -0,0 +1,141 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var htmlMinifier = require("html-minifier");
var attrParse = require("./lib/attributesParser");
var loaderUtils = require("loader-utils");
var url = require("url");
var assign = require("object-assign");
var compile = require("es6-templates").compile;
function randomIdent() {
return "xxxHTMLLINKxxx" + Math.random() + Math.random() + "xxx";
}
function getLoaderConfig(context) {
var query = loaderUtils.getOptions(context) || {};
var configKey = query.config || 'htmlLoader';
var config = context.options && context.options.hasOwnProperty(configKey) ? context.options[configKey] : {};
delete query.config;
return assign(query, config);
}
module.exports = function(content) {
this.cacheable && this.cacheable();
var config = getLoaderConfig(this);
var attributes = ["img:src"];
if(config.attrs !== undefined) {
if(typeof config.attrs === "string")
attributes = config.attrs.split(" ");
else if(Array.isArray(config.attrs))
attributes = config.attrs;
else if(config.attrs === false)
attributes = [];
else
throw new Error("Invalid value to config parameter attrs");
}
var root = config.root;
var links = attrParse(content, function(tag, attr) {
return attributes.indexOf(tag + ":" + attr) >= 0;
});
links.reverse();
var data = {};
content = [content];
links.forEach(function(link) {
if(!loaderUtils.isUrlRequest(link.value, root)) return;
var uri = url.parse(link.value);
if (uri.hash !== null && uri.hash !== undefined) {
uri.hash = null;
link.value = uri.format();
link.length = link.value.length;
}
do {
var ident = randomIdent();
} while(data[ident]);
data[ident] = link.value;
var x = content.pop();
content.push(x.substr(link.start + link.length));
content.push(ident);
content.push(x.substr(0, link.start));
});
content.reverse();
content = content.join("");
if (config.interpolate === 'require'){
var reg = /\$\{require\([^)]*\)\}/g;
var result;
var reqList = [];
while(result = reg.exec(content)){
reqList.push({
length : result[0].length,
start : result.index,
value : result[0]
})
}
reqList.reverse();
content = [content];
reqList.forEach(function(link) {
var x = content.pop();
do {
var ident = randomIdent();
} while(data[ident]);
data[ident] = link.value.substring(11,link.length - 3)
content.push(x.substr(link.start + link.length));
content.push(ident);
content.push(x.substr(0, link.start));
});
content.reverse();
content = content.join("");
}
if(typeof config.minimize === "boolean" ? config.minimize : this.minimize) {
var minimizeOptions = assign({}, config);
[
"removeComments",
"removeCommentsFromCDATA",
"removeCDATASectionsFromCDATA",
"collapseWhitespace",
"conservativeCollapse",
"removeAttributeQuotes",
"useShortDoctype",
"keepClosingSlash",
"minifyJS",
"minifyCSS",
"removeScriptTypeAttributes",
"removeStyleTypeAttributes",
].forEach(function(name) {
if(typeof minimizeOptions[name] === "undefined") {
minimizeOptions[name] = true;
}
});
content = htmlMinifier.minify(content, minimizeOptions);
}
if(config.interpolate && config.interpolate !== 'require') {
content = compile('`' + content + '`').code;
} else {
content = JSON.stringify(content);
}
var exportsString = "module.exports = ";
if (config.exportAsDefault) {
exportsString = "exports.default = ";
} else if (config.exportAsEs6Default) {
exportsString = "export default ";
}
return exportsString + content.replace(/xxxHTMLLINKxxx[0-9\.]+xxx/g, function(match) {
if(!data[match]) return match;
return '" + require(' + JSON.stringify(loaderUtils.urlToRequest(data[match], root)) + ') + "';
}) + ";";
}

View File

@@ -0,0 +1,42 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var Parser = require("fastparse");
var processMatch = function(match, strUntilValue, name, value, index) {
if(!this.isRelevantTagAttr(this.currentTag, name)) return;
this.results.push({
start: index + strUntilValue.length,
length: value.length,
value: value
});
};
var parser = new Parser({
outside: {
"<!--.*?-->": true,
"<![CDATA[.*?]]>": true,
"<[!\\?].*?>": true,
"<\/[^>]+>": true,
"<([a-zA-Z\\-:]+)\\s*": function(match, tagName) {
this.currentTag = tagName;
return "inside";
}
},
inside: {
"\\s+": true, // eat up whitespace
">": "outside", // end of attributes
"(([0-9a-zA-Z\\-:]+)\\s*=\\s*\")([^\"]*)\"": processMatch,
"(([0-9a-zA-Z\\-:]+)\\s*=\\s*\')([^\']*)\'": processMatch,
"(([0-9a-zA-Z\\-:]+)\\s*=\\s*)([^\\s>]+)": processMatch
}
});
module.exports = function parse(html, isRelevantTagAttr) {
return parser.parse("outside", html, {
currentTag: null,
results: [],
isRelevantTagAttr: isRelevantTagAttr
}).results;
};

View File

@@ -0,0 +1,69 @@
{
"_from": "html-loader@^0.4.5",
"_id": "html-loader@0.4.5",
"_inBundle": false,
"_integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=",
"_location": "/html-loader",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "html-loader@^0.4.5",
"name": "html-loader",
"escapedName": "html-loader",
"rawSpec": "^0.4.5",
"saveSpec": null,
"fetchSpec": "^0.4.5"
},
"_requiredBy": [
"/laravel-mix"
],
"_resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz",
"_shasum": "5fbcd87cd63a5c49a7fce2fe56f425e05729c68c",
"_spec": "html-loader@^0.4.5",
"_where": "D:\\developments\\teaser-inertia\\nova-components\\NovaLeader\\node_modules\\laravel-mix",
"author": {
"name": "Tobias Koppers @sokra"
},
"bugs": {
"url": "https://github.com/webpack/html-loader/issues"
},
"bundleDependencies": false,
"dependencies": {
"es6-templates": "^0.2.2",
"fastparse": "^1.1.1",
"html-minifier": "^3.0.1",
"loader-utils": "^1.0.2",
"object-assign": "^4.1.0"
},
"deprecated": false,
"description": "html loader module for webpack",
"devDependencies": {
"beautify-lint": "^1.0.4",
"codecov.io": "^0.1.6",
"eslint": "^3.1.1",
"istanbul": "^0.4.4",
"js-beautify": "^1.6.3",
"mocha": "^2.5.3",
"should": "^10.0.0"
},
"homepage": "https://github.com/webpack/html-loader#readme",
"license": "MIT",
"name": "html-loader",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/webpack/html-loader.git"
},
"scripts": {
"beautify": "beautify-rewrite lib/**/*.js hot/**/*.js bin/**/*.js benchmark/*.js test/*.js",
"beautify-lint": "beautify-lint lib/**/*.js hot/**/*.js bin/**/*.js benchmark/*.js test/*.js",
"cover": "istanbul cover -x *.runtime.js node_modules/mocha/bin/_mocha",
"lint": "eslint lib bin hot",
"postcover": "npm run lint && npm run beautify-lint",
"pretest": "npm run lint && npm run beautify-lint",
"publish-patch": "npm run lint && npm run beautify-lint && mocha && npm version patch && git push && git push --tags && npm publish",
"test": "mocha --harmony --full-trace --check-leaks",
"travis": "npm run cover -- --report lcovonly"
},
"version": "0.4.5"
}