Merge pull request #1329 from poanetwork/defer-js-to-specific-pages
feat: allow deferring js to specific pagespull/1333/head
commit
44f50b161d
@ -1,56 +1,83 @@ |
|||||||
const path = require('path'); |
const path = require('path'); |
||||||
const ExtractTextPlugin = require('extract-text-webpack-plugin'); |
const ExtractTextPlugin = require('extract-text-webpack-plugin'); |
||||||
const CopyWebpackPlugin = require('copy-webpack-plugin'); |
const CopyWebpackPlugin = require('copy-webpack-plugin'); |
||||||
|
const glob = require("glob"); |
||||||
|
|
||||||
module.exports = { |
function transpileViewScript(file) { |
||||||
entry: './js/app.js', |
return { |
||||||
output: { |
entry: file, |
||||||
filename: 'app.js', |
output: { |
||||||
path: path.resolve(__dirname, '../priv/static/js') |
filename: file.replace('./js/view_specific/', ''), |
||||||
}, |
path: path.resolve(__dirname, '../priv/static/js') |
||||||
module: { |
}, |
||||||
rules: [ |
module: { |
||||||
{ |
rules: [ |
||||||
test: /\.js$/, |
{ |
||||||
exclude: /node_modules/, |
test: /\.js$/, |
||||||
use: { |
exclude: /node_modules/, |
||||||
loader: 'babel-loader' |
use: { |
||||||
} |
loader: 'babel-loader' |
||||||
}, |
} |
||||||
{ |
}, |
||||||
test: /\.scss$/, |
] |
||||||
use: ExtractTextPlugin.extract({ |
} |
||||||
use: [{ |
} |
||||||
loader: "css-loader" |
}; |
||||||
}, { |
|
||||||
loader: "postcss-loader" |
const appJs = |
||||||
}, { |
{ |
||||||
loader: "sass-loader", |
entry: './js/app.js', |
||||||
|
output: { |
||||||
|
filename: 'app.js', |
||||||
|
path: path.resolve(__dirname, '../priv/static/js') |
||||||
|
}, |
||||||
|
module: { |
||||||
|
rules: [ |
||||||
|
{ |
||||||
|
test: /\.js$/, |
||||||
|
exclude: /node_modules/, |
||||||
|
use: { |
||||||
|
loader: 'babel-loader' |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
test: /\.scss$/, |
||||||
|
use: ExtractTextPlugin.extract({ |
||||||
|
use: [{ |
||||||
|
loader: "css-loader" |
||||||
|
}, { |
||||||
|
loader: "postcss-loader" |
||||||
|
}, { |
||||||
|
loader: "sass-loader", |
||||||
|
options: { |
||||||
|
precision: 8, |
||||||
|
includePaths: [ |
||||||
|
'node_modules/bootstrap/scss', |
||||||
|
'node_modules/@fortawesome/fontawesome-free/scss' |
||||||
|
] |
||||||
|
} |
||||||
|
}], |
||||||
|
fallback: 'style-loader' |
||||||
|
}) |
||||||
|
}, { |
||||||
|
test: /\.(svg|ttf|eot|woff|woff2)$/, |
||||||
|
use: { |
||||||
|
loader: 'file-loader', |
||||||
options: { |
options: { |
||||||
precision: 8, |
name: '[name].[ext]', |
||||||
includePaths: [ |
outputPath: '../fonts/', |
||||||
'node_modules/bootstrap/scss', |
publicPath: '../fonts/' |
||||||
'node_modules/@fortawesome/fontawesome-free/scss' |
|
||||||
] |
|
||||||
} |
} |
||||||
}], |
|
||||||
fallback: 'style-loader' |
|
||||||
}) |
|
||||||
}, { |
|
||||||
test: /\.(svg|ttf|eot|woff|woff2)$/, |
|
||||||
use: { |
|
||||||
loader: 'file-loader', |
|
||||||
options: { |
|
||||||
name: '[name].[ext]', |
|
||||||
outputPath: '../fonts/', |
|
||||||
publicPath: '../fonts/' |
|
||||||
} |
} |
||||||
} |
} |
||||||
} |
] |
||||||
|
}, |
||||||
|
plugins: [ |
||||||
|
new ExtractTextPlugin('../css/app.css'), |
||||||
|
new CopyWebpackPlugin([{ from: 'static/', to: '../' }]) |
||||||
] |
] |
||||||
}, |
} |
||||||
plugins: [ |
|
||||||
new ExtractTextPlugin('../css/app.css'), |
const viewScripts = glob.sync('./js/view_specific/**/*.js').map(transpileViewScript); |
||||||
new CopyWebpackPlugin([{ from: 'static/', to: '../' }]) |
|
||||||
] |
module.exports = viewScripts.concat(appJs); |
||||||
}; |
|
||||||
|
@ -0,0 +1,28 @@ |
|||||||
|
defmodule BlockScoutWeb.Views.ScriptHelpers do |
||||||
|
@moduledoc """ |
||||||
|
Helpers for rendering view specific script tags. |
||||||
|
""" |
||||||
|
|
||||||
|
import Phoenix.HTML, only: [sigil_E: 2] |
||||||
|
import BlockScoutWeb.Router.Helpers, only: [static_path: 2] |
||||||
|
|
||||||
|
def render_scripts(conn, file_names) do |
||||||
|
conn |
||||||
|
|> files(file_names) |
||||||
|
|> Enum.map(fn file -> |
||||||
|
~E""" |
||||||
|
<script src="<%= file %>"> </script> |
||||||
|
""" |
||||||
|
end) |
||||||
|
end |
||||||
|
|
||||||
|
defp files(conn, file_names) do |
||||||
|
file_names |
||||||
|
|> List.wrap() |
||||||
|
|> Enum.map(fn file -> |
||||||
|
path = "/" <> Path.join("js", file) |
||||||
|
|
||||||
|
static_path(conn, path) |
||||||
|
end) |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue