5
assets/.babelrc
Normal file
5
assets/.babelrc
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"presets": [
|
||||
"@babel/preset-env"
|
||||
]
|
||||
}
|
||||
0
assets/css/anonbb.css
Normal file
0
assets/css/anonbb.css
Normal file
4
assets/css/app.css
Normal file
4
assets/css/app.css
Normal file
@@ -0,0 +1,4 @@
|
||||
/* This file is for your main application css. */
|
||||
|
||||
@import "./bootstrap.min.css";
|
||||
@import "./anonbb.css";
|
||||
7
assets/css/bootstrap.min.css
vendored
Normal file
7
assets/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
17
assets/js/app.js
Normal file
17
assets/js/app.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import css from "../css/app.css"
|
||||
|
||||
// webpack automatically bundles all modules in your
|
||||
// entry points. Those entry points can be configured
|
||||
// in "webpack.config.js".
|
||||
//
|
||||
// Import dependencies
|
||||
//
|
||||
import "phoenix_html"
|
||||
|
||||
// Import local files
|
||||
//
|
||||
import socket from "./socket"
|
||||
import room from "./room"
|
||||
|
||||
window.room = room;
|
||||
window.socket = socket;
|
||||
7
assets/js/room.js
Normal file
7
assets/js/room.js
Normal file
@@ -0,0 +1,7 @@
|
||||
let room = document.location.pathname.match(/\/room\/([^\/]+)/);
|
||||
if (room) {
|
||||
room = room[1];
|
||||
} else {
|
||||
room = null;
|
||||
}
|
||||
export default room;
|
||||
56
assets/js/socket.js
Normal file
56
assets/js/socket.js
Normal file
@@ -0,0 +1,56 @@
|
||||
// NOTE: The contents of this file will only be executed if
|
||||
// you uncomment its entry in "assets/js/app.js".
|
||||
|
||||
// To use Phoenix channels, the first step is to import Socket,
|
||||
// and connect at the socket path in "lib/web/endpoint.ex".
|
||||
//
|
||||
// Pass the token on params as below. Or remove it
|
||||
// from the params if you are not using authentication.
|
||||
import {Socket} from "phoenix"
|
||||
|
||||
let socket = new Socket("/socket", {params: {token: window.userToken}})
|
||||
|
||||
// When you connect, you'll often need to authenticate the client.
|
||||
// For example, imagine you have an authentication plug, `MyAuth`,
|
||||
// which authenticates the session and assigns a `:current_user`.
|
||||
// If the current user exists you can assign the user's token in
|
||||
// the connection for use in the layout.
|
||||
//
|
||||
// In your "lib/web/router.ex":
|
||||
//
|
||||
// pipeline :browser do
|
||||
// ...
|
||||
// plug MyAuth
|
||||
// plug :put_user_token
|
||||
// end
|
||||
//
|
||||
// defp put_user_token(conn, _) do
|
||||
// if current_user = conn.assigns[:current_user] do
|
||||
// token = Phoenix.Token.sign(conn, "user socket", current_user.id)
|
||||
// assign(conn, :user_token, token)
|
||||
// else
|
||||
// conn
|
||||
// end
|
||||
// end
|
||||
//
|
||||
// Now you need to pass this token to JavaScript. You can do so
|
||||
// inside a script tag in "lib/web/templates/layout/app.html.eex":
|
||||
//
|
||||
// <script>window.userToken = "<%= assigns[:user_token] %>";</script>
|
||||
//
|
||||
// You will need to verify the user token in the "connect/3" function
|
||||
// in "lib/web/channels/user_socket.ex":
|
||||
//
|
||||
// def connect(%{"token" => token}, socket, _connect_info) do
|
||||
// # max_age: 1209600 is equivalent to two weeks in seconds
|
||||
// case Phoenix.Token.verify(socket, "user socket", token, max_age: 1209600) do
|
||||
// {:ok, user_id} ->
|
||||
// {:ok, assign(socket, :user, user_id)}
|
||||
// {:error, reason} ->
|
||||
// :error
|
||||
// end
|
||||
// end
|
||||
//
|
||||
socket.connect();
|
||||
|
||||
export default socket;
|
||||
6440
assets/package-lock.json
generated
Normal file
6440
assets/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
24
assets/package.json
Normal file
24
assets/package.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"repository": {},
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"deploy": "webpack --mode production",
|
||||
"watch": "webpack --mode development --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"phoenix": "file:../deps/phoenix",
|
||||
"phoenix_html": "file:../deps/phoenix_html"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.0.0",
|
||||
"@babel/preset-env": "^7.0.0",
|
||||
"babel-loader": "^8.0.0",
|
||||
"copy-webpack-plugin": "^4.5.0",
|
||||
"css-loader": "^2.1.1",
|
||||
"mini-css-extract-plugin": "^0.4.0",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.3",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"webpack": "4.4.0",
|
||||
"webpack-cli": "^3.3.9"
|
||||
}
|
||||
}
|
||||
BIN
assets/static/favicon.ico
Normal file
BIN
assets/static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/static/images/phoenix.png
Normal file
BIN
assets/static/images/phoenix.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
7
assets/static/js/bootstrap.min.js
vendored
Normal file
7
assets/static/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
assets/static/js/jquery-3.3.1.slim.min.js
vendored
Normal file
2
assets/static/js/jquery-3.3.1.slim.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
assets/static/js/popper.min.js
vendored
Normal file
5
assets/static/js/popper.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
assets/static/robots.txt
Normal file
5
assets/static/robots.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
|
||||
#
|
||||
# To ban all spiders from the entire site uncomment the next two lines:
|
||||
# User-agent: *
|
||||
# Disallow: /
|
||||
41
assets/webpack.config.js
Normal file
41
assets/webpack.config.js
Normal file
@@ -0,0 +1,41 @@
|
||||
const path = require('path');
|
||||
const glob = require('glob');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
||||
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||
|
||||
module.exports = (env, options) => ({
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new UglifyJsPlugin({ cache: true, parallel: true, sourceMap: false }),
|
||||
new OptimizeCSSAssetsPlugin({})
|
||||
]
|
||||
},
|
||||
entry: {
|
||||
'./js/app.js': glob.sync('./vendor/**/*.js').concat(['./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: /\.css$/,
|
||||
use: [MiniCssExtractPlugin.loader, 'css-loader']
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new MiniCssExtractPlugin({ filename: '../css/app.css' }),
|
||||
new CopyWebpackPlugin([{ from: 'static/', to: '../' }])
|
||||
]
|
||||
});
|
||||
Reference in New Issue
Block a user