Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
893c24f
yolo(Thread view): remove checks for thread count
unenglishable Dec 22, 2023
01b615a
yolo(limits): Reduce limits for posts and threads per page
crod951 Jan 10, 2024
6092209
fix(rankdisplay): add check if metricToRankMaps exists to handle prox…
crod951 Jan 10, 2024
634dee6
fix(threads): Fix display bug for proxy data showing -1 replies to th…
crod951 Jan 10, 2024
b65c05f
refactor(api/index): increase timeout to 10k to reduce timeout errors
unenglishable Feb 16, 2024
fdff01a
Merge pull request #48 from epochtalk/server-migration
unenglishable May 28, 2024
5491f86
refactor(public/index): load backend url from $VUE_APP_BACKEND_URL in…
unenglishable Jun 27, 2024
2e720bc
Merge remote-tracking branch 'origin/server-migration' into proxy
unenglishable Sep 4, 2024
5825cd3
Merge pull request #53 from epochtalk/server-migration
unenglishable Sep 10, 2024
83c7f1a
Merge pull request #56 from epochtalk/server-migration
akinsey Sep 27, 2024
138ab01
fix(recent-threads-boards): decode html entities within board names
akinsey Sep 27, 2024
cbfa508
feat(user-attrs): show merit and title under posts
akinsey Oct 4, 2024
45d3279
Merge pull request #57 from epochtalk/server-migration
unenglishable Oct 4, 2024
93ab238
Merge remote-tracking branch 'origin/server-migration' into proxy
unenglishable Oct 15, 2024
00eb6b3
Merge pull request #59 from epochtalk/server-migration
unenglishable Oct 18, 2024
15736dc
feat(api/index): increase timeout to 15 seconds
unenglishable Oct 21, 2024
bce97af
Merge remote-tracking branch 'origin/server-migration' into proxy
unenglishable Oct 26, 2024
95085fd
feat(proxy-profile): update to make links to user profile functional
akinsey Nov 4, 2024
ef434d4
Merge remote-tracking branch 'origin/server-migration' into proxy
akinsey Nov 4, 2024
ac2bea9
feat(bug-form): Added link in header to bug submission form
crod951 Nov 5, 2024
f90c139
feat(last-seen): change last seen to last post
akinsey Nov 5, 2024
9174ace
feat(profile): update profile page to work with proxy
akinsey Nov 15, 2024
c9044b6
Merge remote-tracking branch 'origin/server-migration' into proxy
akinsey Nov 15, 2024
d3df955
fix(last-post-link): resolve linking to wrong profile in last post info
akinsey Nov 22, 2024
7b074a9
Merge branch 'proxy' into server-migration
crod951 Dec 3, 2024
314e5e4
Merge pull request #68 from epochtalk/server-migration
akinsey Dec 3, 2024
5ec0640
style(signature): Hide signature on posts and profile for proxy data
crod951 Jan 10, 2025
9e1874a
Merge pull request #69 from epochtalk/hide-signature
akinsey Jan 10, 2025
d42370e
Merge pull request #71 from epochtalk/server-migration
crod951 Jan 10, 2025
42ca038
fix(forum-title): set forum title using vue_app_name
akinsey Jan 11, 2025
15c5d40
fix(forum-title): set forum title to bitcoin forum
akinsey Jan 11, 2025
827587b
fix(title): set forum title to bitcoin forum
akinsey Jan 11, 2025
577e99c
fix(pagination-history): use router push instead of replace to mainta…
akinsey Jan 13, 2025
abe1854
feat(api-key): send api key to with requests
akinsey Jan 17, 2025
1016160
feat(example-env): update to add api key
akinsey Jan 17, 2025
213e41b
Merge pull request #73 from epochtalk/api-key
crod951 Jan 17, 2025
0624a21
fix(api-key): attempt to fix api key
akinsey Jan 17, 2025
3055ac8
fix(api-key): temp fix for api key until we can figure out why its no…
akinsey Jan 17, 2025
c451174
fix(profile-breadcrumbs): For profile page, pull username breadcrumb …
crod951 Jan 23, 2025
9afbcd7
Merge pull request #74 from epochtalk/profile-breadcrumbs
akinsey Jan 24, 2025
526a8a0
refactor(api/index): load api key from VUE_APP_API_KEY
unenglishable Jan 24, 2025
a486f9f
fix(src/config.json): add VUE_APP_API_KEY for dev and prod
unenglishable Jan 24, 2025
13b876c
docs(example.env): add note for new env variables (dev/prod)
unenglishable Jan 24, 2025
7cfb761
build(docker): update docker-compose file, add nginx conf
unenglishable Jan 24, 2025
25e12bc
Merge pull request #76 from epochtalk/fix-api-key
crod951 Jan 24, 2025
2e3fa3e
Merge branch 'proxy' into server-migration
akinsey Jan 24, 2025
552372d
build(update-dependencies): Updated node version to current LTS; Upda…
crod951 Feb 27, 2025
781de5e
fix(warnings): fixing warnings in yarn serve and in console from upda…
crod951 Feb 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
elixir 1.11.4-otp-23
erlang 23.3.4.1
nodejs 16.15.0
elixir 1.18.2-otp-27
erlang 27.2.4
nodejs 22.14.0
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# build stage
FROM node:16-alpine as build-stage
FROM node:22-alpine as build-stage
ENV JQ_VERSION=1.6
RUN wget --no-check-certificate https://github.com/stedolan/jq/releases/download/jq-${JQ_VERSION}/jq-linux64 -O /tmp/jq-linux64
RUN cp /tmp/jq-linux64 /usr/bin/jq
Expand Down
44 changes: 44 additions & 0 deletions data/nginx-vue/conf.d/default.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
server {
listen 80;
server_name localhost;

#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
error_page 404 =200 /index.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
40 changes: 2 additions & 38 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,7 @@ services:
build: .
ports:
- "80:80"
links:
- epochtalk
environment:
BASE_URL: "http://localhost:8080"
epochtalk:
image: quay.io/epochtalk/epochtalk:ui-refactor-2020
ports:
- "8080:8080"
- "23958:23958"
depends_on:
- redis
- postgres
- epoch
links:
- redis
- postgres
env_file:
- epochtalk-docker.env
epoch:
image: quay.io/epochtalk/epoch:v1.14.0
depends_on:
- postgres
links:
- postgres
environment:
MIX_ENV: prod
DATABASE_USER: docker
DATABASE_PASSWORD: docker
DATABASE_NAME: epochtalk
DATABASE_HOST: postgres
redis:
image: redis:4.0.1
user: redis
postgres:
image: postgres:11.1
environment:
POSTGRES_USER: docker
POSTGRES_PASSWORD: docker
- epochtalk-vue.env
volumes:
- ./db:/var/lib/postgresql/data
- ./data/nginx-vue/conf.d:/etc/nginx/conf.d
6 changes: 6 additions & 0 deletions example.env
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
# When adding a new env variable,
# make sure to add an entry to:
# src/config.json (dev)
# and
# src/docker-config.json (prod)
VUE_APP_BACKEND_URL=http://localhost:4000
VUE_APP_OLD_BACKEND_URL=http://localhost:8080
VUE_APP_API_KEY=ABC123
34 changes: 17 additions & 17 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,34 +19,34 @@
"url": "git://github.com/epochtalk/epochtalk-vue"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.4.0",
"@vueform/multiselect": "^2.6.2",
"axios": "^1.4.0",
"core-js": "^3.32.0",
"dayjs": "^1.11.8",
"emittery": "^1.0.1",
"jquery": "^3.7.0",
"@fortawesome/fontawesome-free": "^6.7.2",
"@vueform/multiselect": "^2.6.11",
"axios": "^1.8.1",
"core-js": "^3.40.0",
"dayjs": "^1.11.13",
"emittery": "^1.1.0",
"jquery": "^3.7.1",
"nestable": "https://github.com/epochtalk/Nestable.git",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"phoenix": "^1.7.7",
"sass": "^1.64.1",
"phoenix": "^1.7.20",
"sass": "1.77.6",
"slugify": "^1.6.6",
"socketcluster-client": "^17.1.1",
"swrv": "^1.0.3",
"vue": "^3.3.4",
"vue-router": "^4.2.2",
"socketcluster-client": "^19.2.3",
"swrv": "^1.1.0",
"vue": "^3.5.13",
"vue-router": "^4.5.0",
"vuedraggable": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.21.8",
"@babel/eslint-parser": "^7.26.8",
"@vue/cli-plugin-babel": "~5.0.8",
"@vue/cli-plugin-eslint": "~5.0.8",
"@vue/cli-service": "~5.0.8",
"@vue/compiler-sfc": "^3.3.4",
"@vue/compiler-sfc": "^3.5.13",
"eslint": "^8.46.0",
"eslint-plugin-vue": "^9.14.1",
"sass-loader": "^13.3.1"
"eslint-plugin-vue": "^9.32.0",
"sass-loader": "^16.0.5"
},
"eslintConfig": {
"root": true,
Expand Down
6 changes: 3 additions & 3 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="/favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<title>Bitcoin Forum</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
<strong>We're sorry but Bitcoin Forum doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<div id="modals"></div>
<!-- built files will be auto injected -->
<script id="config-remote" async>
window.configScript = document.createElement('script')
window.configScript.src = '<%= process.env.VUE_APP_BACKEND_URL%>/config.js'
window.configScript.src = '<%= process.env.VUE_APP_BACKEND_URL || "$VUE_APP_BACKEND_URL"%>/config.js'
window.configScript.type = 'text/javascript'

// Try to append config from backend
Expand Down
6 changes: 4 additions & 2 deletions src/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@ export const $axios = axios.create({
})
export const $axios2 = axios.create({
baseURL: process.env.VUE_APP_BACKEND_URL || config.VUE_APP_BACKEND_URL,
timeout: 3000,
timeout: 15000,
crossDomain: true
})

const $auth = localStorageCache(0, 'app').get('auth')
const initUser = $auth ? $auth.data : undefined
if (initUser) { $axios2.defaults.headers.common['Authorization'] = `BEARER ${initUser.token}` }
$axios2.defaults.headers.common['api-key'] = process.env.VUE_APP_API_KEY || config.VUE_APP_API_KEY

/* provided methods */
const $http = (path, opts, handleErrors) => {
opts = opts || {}
Expand Down Expand Up @@ -208,7 +210,7 @@ export const usersApi = {
memberSearch: params => $http('/api/search/users', { params }),
lookup: (username, params) => $http(`/api/users/lookup/${username}`, { params }),
update: (userId, data) => $http(`/api/users/${userId}`, { method: 'PUT', data }),
find: username => $http2(`/api/users/${username}`),
find: id => $http2(`/api/users/byid?id=${id}`),
delete: userId => $http(`/api/users/${userId}`, { method: 'DELETE' }),
deactivate: userId => $http(`/api/users/${userId}/deactivate`, { method: 'POST' }),
reactivate: userId => $http(`/api/users/${userId}/reactivate`, { method: 'POST' }),
Expand Down
2 changes: 1 addition & 1 deletion src/assets/scss/_variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ $font-size-tiny: 0.6375rem;
$color-brightness: brightness($color);
$light-text-brightness: brightness($light);
$dark-text-brightness: brightness($dark);
@return if(abs($color-brightness - $light-text-brightness) > abs($color-brightness - $dark-text-brightness), $light, $dark);
@return if(math.abs($color-brightness - $light-text-brightness) > math.abs($color-brightness - $dark-text-brightness), $light, $dark);
}
}
@import '~@/assets/scss/_default-variables.scss';
Expand Down
18 changes: 11 additions & 7 deletions src/components/admin/settings/AdManager.vue
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,11 @@
<section class="ads-container">
<table class="striped ads-table full-width">
<thead>
<th>Number</th>
<th>Display</th>
<th>Actions</th>
<tr>
<th>Number</th>
<th>Display</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr v-for="(ad, index) in ads" :key="ad.id">
Expand Down Expand Up @@ -181,10 +183,12 @@
<section class="factoids-container full-width">
<table class="striped ads-table full-width">
<thead>
<th>Number</th>
<th>Display</th>
<th>Enabled</th>
<th>Actions</th>
<tr>
<th>Number</th>
<th>Display</th>
<th>Enabled</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr v-for="(factoid, index) in factoids" :key="factoid.id">
Expand Down
18 changes: 14 additions & 4 deletions src/components/layout/HeaderComponent.vue
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
<h1 :class="{ 'hide-mobile': adminMode }">
<router-link to="/" v-if="logo"><img :src="logo" id="logo" /></router-link>
<router-link id="logo-text" to="/">
{{decode(title)}}
Bitcoin Forum
</router-link>
<span>&nbsp;{{decode(revision)}}</span>
</h1>
Expand All @@ -84,10 +84,15 @@
<!-- Login Section -->
<ul class="signed-out" v-if="!loggedIn">
<li>
<a href="" @click.prevent="showRegister = true">REGISTER</a>
<!-- <a href="" @click.prevent="showRegister = true" disabled="true">REGISTER</a> -->
<span>REGISTER</span>
</li>
<li>
<a href="" id="login-link" @click.prevent="showLogin = true">LOGIN</a>
<!-- <a href="" id="login-link" @click.prevent="showLogin = true" disabled="true">LOGIN</a> -->
<span>LOGIN</span>
</li>
<li>
<a href="https://forms.clickup.com/57751/f/1rcq-791/HNWSBPWCDSRMDMS9TF" target="_blank">REPORT A BUG</a>
</li>
</ul>

Expand Down Expand Up @@ -659,11 +664,16 @@ header {
cursor: pointer;
}
&.signed-out li { padding-left: 1.25rem; }
&.signed-out li a {
&.signed-out li a, &.signed-out li span {
display: table-cell;
height: inherit;
vertical-align: middle;
}
li span {
cursor: not-allowed;
color: $secondary-font-color;
font-size: $header-login-font-size;
}
li a {
color: $header-login-font-color;
font-size: $header-login-font-size;
Expand Down
2 changes: 1 addition & 1 deletion src/components/layout/Pagination.vue
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export default {
if (query.page === 1 || !query.page) delete query.page
if (query.start) delete query.start
if (props.page !== v.currentPage) {
$router.replace({ name: $route.name, params: params, query: query })
$router.push({ name: $route.name, params: params, query: query })
}
}

Expand Down
50 changes: 26 additions & 24 deletions src/components/modals/profile/ManageBans.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,32 @@
<!-- Manage Bans -->
<label class="bold">User Information</label>
<table v-if="userCopy.username" class="striped" width="100%">
<tr>
<td>Username</td>
<td>{{ userCopy.username }}</td>
</tr>
<tr>
<td>Email</td>
<td>{{ userCopy.email }}</td>
</tr>
<tr>
<td>Register Date</td>
<td>{{ humanDate(userCopy.created_at) }}</td>
</tr>
<tr v-if="userCopy.ban_expiration">
<td>Global Ban Expiration (UTC)</td>
<td>{{ humanDate(dayjs.utc(userCopy.ban_expiration), true) }}</td>
</tr>
<tr v-if="userCopy?.banned_board_names?.length">
<td>Banned From Boards</td>
<td>
<span v-for="(boardName, i) in userCopy.banned_board_names" :key="i">
{{ boardName }}<span v-if="(i + 1) !== userCopy.banned_board_names.length">, </span>
</span>
</td>
</tr>
<tbody>
<tr>
<td>Username</td>
<td>{{ userCopy.username }}</td>
</tr>
<tr>
<td>Email</td>
<td>{{ userCopy.email }}</td>
</tr>
<tr>
<td>Register Date</td>
<td>{{ humanDate(userCopy.created_at) }}</td>
</tr>
<tr v-if="userCopy.ban_expiration">
<td>Global Ban Expiration (UTC)</td>
<td>{{ humanDate(dayjs.utc(userCopy.ban_expiration), true) }}</td>
</tr>
<tr v-if="userCopy?.banned_board_names?.length">
<td>Banned From Boards</td>
<td>
<span v-for="(boardName, i) in userCopy.banned_board_names" :key="i">
{{ boardName }}<span v-if="(i + 1) !== userCopy.banned_board_names.length">, </span>
</span>
</td>
</tr>
</tbody>
</table>
<div v-if="!userCopy.username">
<Multiselect ref="focusInput" v-model="userToBan.value" v-bind="userToBan" />
Expand Down
8 changes: 4 additions & 4 deletions src/components/threads/RecentThreads.vue
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
</a>
</div>
<transition>
<div>
<div v-if="!threads && collapsedCats.indexOf(recentThreadsId) < 0" class="centered-text">
<div v-if="collapsedCats.indexOf(recentThreadsId) < 0">
<div v-if="!threads" class="centered-text">
<h5>No recently updated threads available</h5>
</div>
<div class="threads-container" v-if="threads && collapsedCats.indexOf(recentThreadsId) < 0">
<div class="threads-container" v-if="threads">
<!-- Thread listing -->
<div class="threads-data threads-recent" v-for="thread in threads" :key="thread.id">
<div class="states">
Expand Down Expand Up @@ -62,7 +62,7 @@
<router-link v-if="thread?.board" class="thread-board" :title="decode(thread.board.name)" :to="{ name: 'Threads', params: { boardSlug: thread.board.slug } }" onclick="event.stopPropagation()"><span v-html="decode(thread.board.name)"></span></router-link>
by
<span v-if="thread.deleted">deleted</span>
<router-link onclick="event.stopPropagation()" v-if="!thread.deleted" :to="{ path: '/profile/' + thread?.user?.username.toLowerCase() }">{{thread?.user?.username}}</router-link>
<router-link onclick="event.stopPropagation()" v-if="!thread.deleted" :to="{ path: '/profile/' + thread?.user?.username.toLowerCase(), query: { id: thread?.user?.id } }">{{thread?.user?.username}}</router-link>
</div>
<div class="last-reply">
<div>{{humanDate(thread?.post?.created_at)}}</div>
Expand Down
Loading