mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2026-07-23 14:23:39 -04:00
Added full JSX support to build pipeline
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"presets": ["es2015"],
|
||||
"plugins": [
|
||||
"add-module-exports",
|
||||
["transform-react-jsx", {
|
||||
"pragma": "createElement"
|
||||
}]
|
||||
]
|
||||
}
|
||||
@@ -20,6 +20,7 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
const path = require("path")
|
||||
const webpack = require("webpack")
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
@@ -34,7 +35,7 @@ module.exports = karma => {
|
||||
/* Include babel polyfill to support older browsers */
|
||||
files: [
|
||||
"node_modules/babel-polyfill/dist/polyfill.js",
|
||||
"tests/unit/*.spec.jsx"
|
||||
"tests/unit/*.spec.+(js|jsx)"
|
||||
],
|
||||
|
||||
/* Test reporters */
|
||||
@@ -47,27 +48,47 @@ module.exports = karma => {
|
||||
|
||||
/* Preprocess test files */
|
||||
preprocessors: {
|
||||
"tests/unit/*.spec.jsx": ["webpack", "sourcemap"]
|
||||
"tests/unit/*.spec.+(js|jsx)": ["webpack", "sourcemap"]
|
||||
},
|
||||
|
||||
/* Configuration for webpack */
|
||||
webpack: {
|
||||
devtool: "inline-source-map",
|
||||
plugins: [
|
||||
|
||||
/* Inject DOM node creation helper for JSX support */
|
||||
new webpack.ProvidePlugin({
|
||||
createElement: "./_lib/create-element.js"
|
||||
})
|
||||
],
|
||||
module: {
|
||||
|
||||
/* Transpile ES6 to ES5 with Babel */
|
||||
loaders: [
|
||||
{
|
||||
test: /\.jsx?$/,
|
||||
loader: "babel-loader"
|
||||
loader: "babel-loader",
|
||||
test: /\.jsx?$/
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
|
||||
/* Don't emit assets that include errors */
|
||||
new webpack.NoErrorsPlugin(),
|
||||
|
||||
/* Provide JSX helper */
|
||||
new webpack.ProvidePlugin({
|
||||
JSX: path.join(process.cwd(), "lib/providers/jsx.js")
|
||||
})
|
||||
],
|
||||
|
||||
/* Module resolver */
|
||||
resolve: {
|
||||
modulesDirectories: [
|
||||
"src/assets/javascripts",
|
||||
"node_modules"
|
||||
],
|
||||
extensions: [
|
||||
"",
|
||||
".js",
|
||||
".jsx"
|
||||
]
|
||||
},
|
||||
|
||||
/* Sourcemap support */
|
||||
devtool: "inline-source-map"
|
||||
},
|
||||
|
||||
/* Suppress messages by webpack */
|
||||
@@ -85,12 +106,13 @@ module.exports = karma => {
|
||||
}
|
||||
|
||||
/* Setup for continuous integration */
|
||||
if (process.env.CONTINUOUS_INTEGRATION) {
|
||||
if (process.env.CI) {
|
||||
// TODO TBD
|
||||
|
||||
/* Setup for local development environment */
|
||||
} else if (process.env.GULP) {
|
||||
} else if (process.env.WATCH) {
|
||||
delete config.reporters
|
||||
delete config.client.captureConsole
|
||||
|
||||
/* Setup for local testing */
|
||||
} else {
|
||||
|
||||
@@ -1,24 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* 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 NON-INFRINGEMENT. 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.
|
||||
*/
|
||||
|
||||
import chai from "chai"
|
||||
|
||||
import Marker from
|
||||
"../../src/assets/javascripts/components/Material/Sidebar/Marker"
|
||||
|
||||
describe("Karma test runner", function() {
|
||||
chai.should()
|
||||
|
||||
let sandbox = null
|
||||
|
||||
// TODO: sandbox shit! should be okay once?
|
||||
beforeEach(function() {
|
||||
sandbox = (
|
||||
<ul class="list">
|
||||
{[...Array(10)].map((x, i) => {
|
||||
return <li class={`foo-${i + 1}`}>Element {i + 1}</li>
|
||||
|
||||
for (let i = 0; i < 25; i++)
|
||||
document.body.appendChild(
|
||||
<p id={`anchor_${i + 1}`}>{i + 1}</p>
|
||||
)
|
||||
|
||||
document.body.appendChild(
|
||||
<ul>
|
||||
{[...Array(25)].map((_, i) => {
|
||||
return (
|
||||
<li>
|
||||
<a href={`#anchor_${i + 1}`}>{i + 1}</a>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
)
|
||||
})
|
||||
|
||||
it("should compile JSX correctly", function() {
|
||||
document.body.appendChild(sandbox)
|
||||
return true
|
||||
})
|
||||
it("should compile JSX correctly",
|
||||
shouldCompileJSXCorrectly)
|
||||
})
|
||||
|
||||
// iframe?
|
||||
function shouldCompileJSXCorrectly(cb) {
|
||||
const marker = new Marker("a")
|
||||
marker.listen()
|
||||
|
||||
// window.location.hash = "#_5"
|
||||
// window.addEventListener("hashchange", function(e) {
|
||||
// console.log(document.querySelectorAll("[data-md-marked]"))
|
||||
// cb()
|
||||
// })
|
||||
window.scrollTo(200, 200)
|
||||
setTimeout(() => {
|
||||
console.log(document.querySelectorAll("[data-md-marked]"))
|
||||
cb()
|
||||
}, 100)
|
||||
|
||||
// console.log(marker)
|
||||
// return true
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Martin Donath <martin.donath@squidfunk.com>
|
||||
*
|
||||
* 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 NON-INFRINGEMENT. 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.
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Definition
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Create a native DOM node
|
||||
*
|
||||
* @param {string} tag - Tag name
|
||||
* @param {object} properties - Properties
|
||||
* @param {string|number|Array} children - Child nodes
|
||||
* @return {HTMLElement} Native DOM node
|
||||
*/
|
||||
const createElement = (tag, properties, ...children) => {
|
||||
const el = document.createElement(tag)
|
||||
|
||||
/* Set all properties */
|
||||
for (const attr of Object.keys(properties))
|
||||
el.setAttribute(attr, properties[attr])
|
||||
|
||||
/* Iterate child nodes */
|
||||
const iterateChildNodes = nodes => {
|
||||
for (const node of nodes) {
|
||||
|
||||
/* Directly append content */
|
||||
if (typeof node === "string" ||
|
||||
typeof node === "number") {
|
||||
el.textContent += node
|
||||
|
||||
/* Recurse, if we got an array */
|
||||
} else if (Array.isArray(node)) {
|
||||
iterateChildNodes(node)
|
||||
|
||||
/* Append regular nodes */
|
||||
} else {
|
||||
el.appendChild(node)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Iterate child nodes */
|
||||
iterateChildNodes(children)
|
||||
|
||||
/* Return element */
|
||||
return el
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Exports
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
export default createElement
|
||||
Reference in New Issue
Block a user