artalk 2.1.5 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.html CHANGED
@@ -33,7 +33,7 @@
33
33
  <body>
34
34
  <div class="card billboard artalk-fade-in">
35
35
  <div class="title"><a href="https://github.com/ArtalkJS/Artalk" target="_blank"><span>『 </span>Artalk<span> 』</span></a></div>
36
- <div class="desc">一款简洁的自托管评论系统</div>
36
+ <div class="desc">一款简洁的自托管评论系统 <span id="ArtalkPV"></span></div>
37
37
  <div class="social">
38
38
  <a href="https://www.npmjs.com/package/artalk" target="_blank"><img src="https://img.shields.io/npm/v/artalk.svg?style=flat-square"></a>
39
39
  <a href="https://www.npmjs.com/package/artalk" target="_blank"><img src="https://img.shields.io/npm/dt/artalk.svg?style=flat-square"></a>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "artalk",
3
- "version": "2.1.5",
3
+ "version": "2.1.6",
4
4
  "license": "GPL-3.0",
5
5
  "description": "A Selfhosted Comment System",
6
6
  "keywords": [
package/src/api/index.ts CHANGED
@@ -252,6 +252,18 @@ export default class Api {
252
252
  return POST(this.ctx, `${this.baseURL}/mark-read`, params)
253
253
  }
254
254
 
255
+ /** PV */
256
+ public async pv() {
257
+ const params: any = {
258
+ site_name: this.ctx.conf.site || '',
259
+ page_key: this.ctx.conf.pageKey || '',
260
+ page_title: this.ctx.conf.pageTitle || ''
261
+ }
262
+
263
+ const p = await POST<any>(this.ctx, `${this.baseURL}/pv`, params)
264
+ return p.pv as number
265
+ }
266
+
255
267
  // ============================
256
268
  // 验证码
257
269
  // ============================
package/src/artalk.ts CHANGED
@@ -11,6 +11,7 @@ import SidebarLayer from './components/sidebar-layer'
11
11
 
12
12
  import { GetLayerWrap } from './components/layer'
13
13
  import { EventPayloadMap, Handler } from '~/types/event'
14
+ import Api from './api'
14
15
 
15
16
  /**
16
17
  * Artalk
@@ -76,6 +77,9 @@ export default class Artalk {
76
77
 
77
78
  // 事件绑定初始化
78
79
  this.initEventBind()
80
+
81
+ // 其他
82
+ this.initPV()
79
83
  }
80
84
 
81
85
  /** 事件绑定 · 初始化 */
@@ -93,8 +97,12 @@ export default class Artalk {
93
97
 
94
98
  // for layer
95
99
  const { $wrap: $layerWrap } = GetLayerWrap(this.ctx)
96
- if ($layerWrap)
97
- $layerWrap.querySelectorAll<HTMLElement>(`[atk-only-admin-show]`).forEach(item => items.push(item))
100
+ if ($layerWrap) $layerWrap.querySelectorAll<HTMLElement>(`[atk-only-admin-show]`).forEach(item => items.push(item))
101
+
102
+ // for sidebar
103
+ // TODO: 这个其实应该写在 packages/artalk-sidebar 里面的
104
+ const $sidebarEl = document.querySelector<HTMLElement>('.atk-sidebar')
105
+ if ($sidebarEl) $sidebarEl.querySelectorAll<HTMLElement>(`[atk-only-admin-show]`).forEach(item => items.push(item))
98
106
 
99
107
  items.forEach(($item: HTMLElement) => {
100
108
  if (this.ctx.user.data.isAdmin)
@@ -143,6 +151,20 @@ export default class Artalk {
143
151
  this.initDarkMode()
144
152
  }
145
153
 
154
+ /** PV */
155
+ public async initPV() {
156
+ if (!this.conf.pvEl || !document.querySelector(this.conf.pvEl))
157
+ return
158
+
159
+ const $pv = document.querySelector<HTMLElement>(this.conf.pvEl)!
160
+ // $pv.innerText = '-' // 默认占位符
161
+ const pvNum = await new Api(this.ctx).pv()
162
+ if (Number.isNaN(Number(pvNum)))
163
+ return
164
+
165
+ $pv.innerText = String(pvNum)
166
+ }
167
+
146
168
  /** 监听事件 */
147
169
  public on<K extends keyof EventPayloadMap>(name: K, handler: Handler<EventPayloadMap[K]>) {
148
170
  this.ctx.on(name, handler, 'external')
@@ -106,7 +106,7 @@ export default class SidebarLayer extends Component {
106
106
  Ui.hideLoading(this.$iframeWrap)
107
107
  }
108
108
 
109
- this.checkReqStatus(src)
109
+ // this.checkReqStatus(src) // 判不准,删了,没啥用
110
110
  }
111
111
 
112
112
  loadingTimer: number|null = null
package/src/defaults.ts CHANGED
@@ -17,6 +17,7 @@ const defaults: ArtalkConfig = {
17
17
  vote: true,
18
18
  voteDown: false,
19
19
  uaBadge: true,
20
+ pvEl: '#ArtalkPV',
20
21
  flatMode: 'auto',
21
22
  maxNesting: 3,
22
23
  gravatar: {
@@ -248,7 +248,7 @@ i.atk-icon {
248
248
  & > .atk-layer-dialog-content {
249
249
  .atk-captcha-img {
250
250
  cursor: pointer;
251
- width: 100px;
251
+ width: 170px;
252
252
  height: auto;
253
253
  margin-right: 10px;
254
254
  padding-right: 10px;
@@ -32,6 +32,7 @@
32
32
  display: flex;
33
33
  flex-direction: row;
34
34
  align-items: center;
35
+ z-index: 99999;
35
36
 
36
37
  .atk-sidebar-close {
37
38
  display: flex;
@@ -62,6 +62,9 @@ export default interface ArtalkConfig {
62
62
  /** 评论投票反对按钮 */
63
63
  voteDown?: boolean
64
64
 
65
+ /** PV 元素 Selector */
66
+ pvEl?: string
67
+
65
68
  /** 暗黑模式 */
66
69
  darkMode?: boolean
67
70