parent
02a1b46e26
commit
76ea93f735
@ -1,56 +1,85 @@ |
||||
const path = require('path'); |
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin'); |
||||
const CopyWebpackPlugin = require('copy-webpack-plugin'); |
||||
const glob = require("glob"); |
||||
|
||||
module.exports = { |
||||
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", |
||||
const viewScripts = glob.sync('./js/view_specific/**/*.js'); |
||||
|
||||
function transpileViewScript(file) { |
||||
return { |
||||
entry: file, |
||||
output: { |
||||
filename: file.replace('./js/view_specific/', ''), |
||||
path: path.resolve(__dirname, '../priv/static/js') |
||||
}, |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.js$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: 'babel-loader' |
||||
} |
||||
}, |
||||
] |
||||
} |
||||
} |
||||
}; |
||||
|
||||
|
||||
|
||||
const appJs = |
||||
{ |
||||
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: { |
||||
precision: 8, |
||||
includePaths: [ |
||||
'node_modules/bootstrap/scss', |
||||
'node_modules/@fortawesome/fontawesome-free/scss' |
||||
] |
||||
name: '[name].[ext]', |
||||
outputPath: '../fonts/', |
||||
publicPath: '../fonts/' |
||||
} |
||||
}], |
||||
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'), |
||||
new CopyWebpackPlugin([{ from: 'static/', to: '../' }]) |
||||
] |
||||
}; |
||||
} |
||||
|
||||
module.exports = viewScripts.map(transpileViewScript).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