Skip to content

Commit 901b111

Browse files
html & js format
1 parent 2194408 commit 901b111

11 files changed

+1232
-1268
lines changed

cmd/bebop/server.go

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -144,36 +144,36 @@ func newIndexHandler(cfg *config.Config) (http.HandlerFunc, error) {
144144

145145
var indexTemplate = `<!doctype html>
146146
<html>
147-
<head>
148-
<meta charset="utf-8">
149-
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
150-
<meta http-equiv="x-ua-compatible" content="ie=edge">
151-
<title>{{.title}}</title>
152-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" />
153-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-markdown/2.10.0/css/bootstrap-markdown.min.css" integrity="sha256-umMZCcE/LUcJ3F3V/D6NmvQxdm3OWtRMiMApkNnDIOw=" crossorigin="anonymous" />
154-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous" />
155-
<link rel="stylesheet" href="static/-/frontend/css/bebop.css">
156-
</head>
157-
<body>
158-
<div id="app"></div>
159-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
160-
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous"></script>
161-
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.6/vue.min.js" integrity="sha256-cWZZjnj99rynB+b8FaNGUivxc1kJSRa8ZM/E77cDq0I=" crossorigin="anonymous"></script>
162-
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/2.4.0/vue-router.min.js" integrity="sha256-fxzMMjPZbIwP33mgE/4GTQ9BTPM7X1PBAHaJ3Kvz6fo=" crossorigin="anonymous"></script>
163-
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.3.1/vue-resource.min.js" integrity="sha256-vLNsWeWD+1TzgeVJX92ft87XtRoH3UVqKwbfB2nopMY=" crossorigin="anonymous"></script>
164-
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.6/marked.min.js" integrity="sha256-mJAzKDq6kSoKqZKnA6UNLtPaIj8zT2mFnWu/GSouhgQ=" crossorigin="anonymous"></script>
165-
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-markdown/2.10.0/js/bootstrap-markdown.min.js" integrity="sha256-vT9X0tmmfKfNTg0U/Iv0rM9mhu8LA0MaDFrzIflHN9A=" crossorigin="anonymous"></script>
166-
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js" integrity="sha256-1hjUhpc44NwiNg8OwMu2QzJXhD8kcj+sJA3aCQZoUjg=" crossorigin="anonymous"></script>
167-
<script>var appConfig = {{.appConfig}}</script>
168-
<script src="static/-/frontend/js/bebop-init.js"></script>
169-
<script src="static/-/frontend/js/bebop-nav.js"></script>
170-
<script src="static/-/frontend/js/bebop-username-modal.js"></script>
171-
<script src="static/-/frontend/js/bebop-topics.js"></script>
172-
<script src="static/-/frontend/js/bebop-new-topic.js"></script>
173-
<script src="static/-/frontend/js/bebop-comments.js"></script>
174-
<script src="static/-/frontend/js/bebop-new-comment.js"></script>
175-
<script src="static/-/frontend/js/bebop-user.js"></script>
176-
<script src="static/-/frontend/js/bebop-app.js"></script>
177-
</body>
147+
<head>
148+
<meta charset="utf-8">
149+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
150+
<meta http-equiv="x-ua-compatible" content="ie=edge">
151+
<title>{{.title}}</title>
152+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" />
153+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-markdown/2.10.0/css/bootstrap-markdown.min.css" integrity="sha256-umMZCcE/LUcJ3F3V/D6NmvQxdm3OWtRMiMApkNnDIOw=" crossorigin="anonymous" />
154+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous" />
155+
<link rel="stylesheet" href="static/-/frontend/css/bebop.css">
156+
</head>
157+
<body>
158+
<div id="app"></div>
159+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
160+
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous"></script>
161+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.6/vue.min.js" integrity="sha256-cWZZjnj99rynB+b8FaNGUivxc1kJSRa8ZM/E77cDq0I=" crossorigin="anonymous"></script>
162+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/2.4.0/vue-router.min.js" integrity="sha256-fxzMMjPZbIwP33mgE/4GTQ9BTPM7X1PBAHaJ3Kvz6fo=" crossorigin="anonymous"></script>
163+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.3.1/vue-resource.min.js" integrity="sha256-vLNsWeWD+1TzgeVJX92ft87XtRoH3UVqKwbfB2nopMY=" crossorigin="anonymous"></script>
164+
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.6/marked.min.js" integrity="sha256-mJAzKDq6kSoKqZKnA6UNLtPaIj8zT2mFnWu/GSouhgQ=" crossorigin="anonymous"></script>
165+
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-markdown/2.10.0/js/bootstrap-markdown.min.js" integrity="sha256-vT9X0tmmfKfNTg0U/Iv0rM9mhu8LA0MaDFrzIflHN9A=" crossorigin="anonymous"></script>
166+
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js" integrity="sha256-1hjUhpc44NwiNg8OwMu2QzJXhD8kcj+sJA3aCQZoUjg=" crossorigin="anonymous"></script>
167+
<script>var appConfig = {{.appConfig}}</script>
168+
<script src="static/-/frontend/js/bebop-init.js"></script>
169+
<script src="static/-/frontend/js/bebop-nav.js"></script>
170+
<script src="static/-/frontend/js/bebop-username-modal.js"></script>
171+
<script src="static/-/frontend/js/bebop-topics.js"></script>
172+
<script src="static/-/frontend/js/bebop-new-topic.js"></script>
173+
<script src="static/-/frontend/js/bebop-comments.js"></script>
174+
<script src="static/-/frontend/js/bebop-new-comment.js"></script>
175+
<script src="static/-/frontend/js/bebop-user.js"></script>
176+
<script src="static/-/frontend/js/bebop-app.js"></script>
177+
</body>
178178
</html>
179179
`

static/data.go

Lines changed: 9 additions & 9 deletions
Large diffs are not rendered by default.

static/root/frontend/js/bebop-app.js

Lines changed: 143 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,147 @@
1-
const BEBOP_LOCAL_STORAGE_TOKEN_KEY = 'bebop_auth_token'
2-
const BEBOP_OAUTH_RESULT_COOKIE = 'bebop_oauth_result'
1+
const BEBOP_LOCAL_STORAGE_TOKEN_KEY = "bebop_auth_token";
2+
const BEBOP_OAUTH_RESULT_COOKIE = "bebop_oauth_result";
33

44
var BebopApp = new Vue({
5-
el: '#app',
6-
7-
template: `
8-
<div>
9-
<bebop-nav :config="config" :auth="auth"></bebop-nav>
10-
<bebop-username-modal ref="usernameModal"></bebop-username-modal>
11-
<router-view :config="config" :auth="auth"></router-view>
12-
</div>
13-
`,
14-
15-
router: new VueRouter({
16-
routes: [
17-
{ path: '/', component: BebopTopics },
18-
{ path: '/p/:page', component: BebopTopics },
19-
{ path: '/t/:topic', component: BebopComments },
20-
{ path: '/t/:topic/p/:page', component: BebopComments },
21-
{ path: '/t/:topic/p/:page/c/:comment', component: BebopComments },
22-
{ path: '/new-topic', component: BebopNewTopic },
23-
{ path: '/new-comment/:topic', component: BebopNewComment },
24-
{ path: '/me', component: BebopUser },
25-
{ path: '/u/:user', component: BebopUser },
26-
],
27-
scrollBehavior: function(to, from, savedPosition) {
28-
if (savedPosition) {
29-
return savedPosition
30-
} else {
31-
return { x: 0, y: 0 }
32-
}
33-
}
34-
}),
35-
36-
data: function () {
37-
return {
38-
config: appConfig,
39-
auth: {
40-
authenticated: false,
41-
user: {}
42-
},
43-
}
44-
},
45-
46-
mounted: function() {
47-
this.checkAuth()
48-
},
49-
50-
methods: {
51-
signIn: function(provider) {
52-
window.open("oauth/begin/" + provider, "", "width=800,height=600");
53-
},
54-
55-
signOut: function() {
56-
localStorage.removeItem(BEBOP_LOCAL_STORAGE_TOKEN_KEY)
57-
Vue.http.headers.common['Authorization'] = ""
58-
this.auth = {
59-
authenticated: false,
60-
user: {}
61-
}
62-
},
63-
64-
oauthEnd: function() {
65-
var result = this.getCookieByName(BEBOP_OAUTH_RESULT_COOKIE)
66-
var parts = result.split(":")
67-
68-
if (parts.length !== 2) {
69-
this.oauthError("Unknown")
70-
return
71-
}
72-
73-
if (parts[0] === "error") {
74-
this.oauthError(parts[1])
75-
return
76-
}
77-
78-
if (parts[0] !== "success") {
79-
this.oauthError("Unknown")
80-
return
81-
}
82-
83-
this.oauthSuccess(parts[1])
84-
},
85-
86-
getCookieByName: function(name) {
87-
var value = "; " + document.cookie
88-
var parts = value.split("; " + name + "=")
89-
if (parts.length == 2) return parts.pop().split(";").shift()
90-
},
91-
92-
oauthSuccess: function(token) {
93-
localStorage.setItem(BEBOP_LOCAL_STORAGE_TOKEN_KEY, token)
94-
this.checkAuth()
95-
},
96-
97-
oauthError: function(error) {
98-
if (error === "UserBlocked") {
99-
console.log("oauth error: USER IS BLOCKED")
100-
} else {
101-
console.log("oauth error: " + error)
102-
}
103-
this.signOut()
104-
},
105-
106-
checkAuth: function() {
107-
var token = localStorage.getItem(BEBOP_LOCAL_STORAGE_TOKEN_KEY)
108-
if (token) {
109-
Vue.http.headers.common['Authorization'] = 'Bearer ' + token
110-
}
111-
this.getMe()
112-
},
113-
114-
getMe: function() {
115-
this.$http.get('api/v1/me').then(
116-
response => {
117-
this.auth = {
118-
authenticated: response.body.authenticated ? true : false,
119-
user: response.body.authenticated ? response.body.user : {},
120-
}
121-
if (this.auth.authenticated && this.auth.user.name == "") {
122-
this.setMyName()
123-
}
124-
},
125-
response => {
126-
console.log("ERROR: getMe: " + JSON.stringify(response.body))
127-
if (response.status == 401) {
128-
this.signOut()
129-
}
130-
}
131-
)
132-
},
133-
134-
setMyName: function() {
135-
this.$refs.usernameModal.show(
136-
this.auth.user.id,
137-
"",
138-
(success) => {
139-
if (!success) {
140-
this.signOut()
141-
}
142-
this.getMe()
143-
}
144-
)
145-
}
146-
}
147-
148-
})
5+
el: "#app",
6+
7+
template: `
8+
<div>
9+
<bebop-nav :config="config" :auth="auth"></bebop-nav>
10+
<bebop-username-modal ref="usernameModal"></bebop-username-modal>
11+
<router-view :config="config" :auth="auth"></router-view>
12+
</div>
13+
`,
14+
15+
router: new VueRouter({
16+
routes: [
17+
{ path: "/", component: BebopTopics },
18+
{ path: "/p/:page", component: BebopTopics },
19+
{ path: "/t/:topic", component: BebopComments },
20+
{ path: "/t/:topic/p/:page", component: BebopComments },
21+
{ path: "/t/:topic/p/:page/c/:comment", component: BebopComments },
22+
{ path: "/new-topic", component: BebopNewTopic },
23+
{ path: "/new-comment/:topic", component: BebopNewComment },
24+
{ path: "/me", component: BebopUser },
25+
{ path: "/u/:user", component: BebopUser },
26+
],
27+
scrollBehavior: function(to, from, savedPosition) {
28+
if (savedPosition) {
29+
return savedPosition;
30+
} else {
31+
return { x: 0, y: 0 };
32+
}
33+
},
34+
}),
35+
36+
data: function() {
37+
return {
38+
config: appConfig,
39+
auth: {
40+
authenticated: false,
41+
user: {},
42+
},
43+
};
44+
},
45+
46+
mounted: function() {
47+
this.checkAuth();
48+
},
49+
50+
methods: {
51+
signIn: function(provider) {
52+
window.open("oauth/begin/" + provider, "", "width=800,height=600");
53+
},
54+
55+
signOut: function() {
56+
localStorage.removeItem(BEBOP_LOCAL_STORAGE_TOKEN_KEY);
57+
Vue.http.headers.common["Authorization"] = "";
58+
this.auth = {
59+
authenticated: false,
60+
user: {},
61+
};
62+
},
63+
64+
oauthEnd: function() {
65+
var result = this.getCookieByName(BEBOP_OAUTH_RESULT_COOKIE);
66+
var parts = result.split(":");
67+
68+
if (parts.length !== 2) {
69+
this.oauthError("Unknown");
70+
return;
71+
}
72+
73+
if (parts[0] === "error") {
74+
this.oauthError(parts[1]);
75+
return;
76+
}
77+
78+
if (parts[0] !== "success") {
79+
this.oauthError("Unknown");
80+
return;
81+
}
82+
83+
this.oauthSuccess(parts[1]);
84+
},
85+
86+
getCookieByName: function(name) {
87+
var value = "; " + document.cookie;
88+
var parts = value.split("; " + name + "=");
89+
if (parts.length === 2) return parts.pop().split(";").shift();
90+
},
91+
92+
oauthSuccess: function(token) {
93+
localStorage.setItem(BEBOP_LOCAL_STORAGE_TOKEN_KEY, token);
94+
this.checkAuth();
95+
},
96+
97+
oauthError: function(error) {
98+
if (error === "UserBlocked") {
99+
console.log("oauth error: USER IS BLOCKED");
100+
} else {
101+
console.log("oauth error: " + error);
102+
}
103+
this.signOut();
104+
},
105+
106+
checkAuth: function() {
107+
var token = localStorage.getItem(BEBOP_LOCAL_STORAGE_TOKEN_KEY);
108+
if (token) {
109+
Vue.http.headers.common["Authorization"] = "Bearer " + token;
110+
}
111+
this.getMe();
112+
},
113+
114+
getMe: function() {
115+
this.$http.get("api/v1/me").then(
116+
response => {
117+
this.auth = {
118+
authenticated: response.body.authenticated ? true : false,
119+
user: response.body.authenticated ? response.body.user : {},
120+
};
121+
if (this.auth.authenticated && this.auth.user.name === "") {
122+
this.setMyName();
123+
}
124+
},
125+
response => {
126+
console.log("ERROR: getMe: " + JSON.stringify(response.body));
127+
if (response.status === 401) {
128+
this.signOut();
129+
}
130+
}
131+
);
132+
},
133+
134+
setMyName: function() {
135+
this.$refs.usernameModal.show(this.auth.user.id, "", success => {
136+
if (!success) {
137+
this.signOut();
138+
}
139+
this.getMe();
140+
});
141+
},
142+
},
143+
});
149144

150145
function bebopOAuthEnd() {
151-
BebopApp.oauthEnd()
152-
}
146+
BebopApp.oauthEnd();
147+
}

0 commit comments

Comments
 (0)