Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
913a3bec5e | ||
|
|
2770c13a56 | ||
|
|
0a4d94f133 | ||
|
|
3384b6abe9 | ||
|
|
7d79beaf7c | ||
|
|
d4d1729b0f | ||
|
|
3e793c55db | ||
|
|
8cb439c1b9 | ||
|
|
231ff2bbbf | ||
|
|
1b8b809122 | ||
|
|
4222adae59 |
No files matched your search
+2
-2
@@ -15,7 +15,7 @@
|
||||
"@typescript-eslint/eslint-plugin": "5.25.0",
|
||||
"@typescript-eslint/parser": "5.25.0",
|
||||
"autoprefixer": "10.4.7",
|
||||
"eslint": "8.15.0",
|
||||
"eslint": "8.16.0",
|
||||
"eslint-config-airbnb-base": "15.0.0",
|
||||
"eslint-config-airbnb-typescript": "17.0.0",
|
||||
"eslint-config-prettier": "8.5.0",
|
||||
@@ -25,7 +25,7 @@
|
||||
"less": "4.1.2",
|
||||
"postcss": "8.4.14",
|
||||
"prettier": "2.6.2",
|
||||
"rollup": "2.74.0",
|
||||
"rollup": "2.74.1",
|
||||
"typescript": "4.6.4",
|
||||
"vite": "2.9.9",
|
||||
"vite-tsconfig-paths": "3.4.1"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@font-family: "Helvetica Neue", "PingFangSC-Light", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
|
||||
@font-size: 14px;
|
||||
@line-height: 1.6em;
|
||||
@block-radius: 4px;
|
||||
@block-radius: 6px;
|
||||
@@ -1,6 +1,10 @@
|
||||
@header-height: 60px;
|
||||
@nav-height: 40px;
|
||||
|
||||
.artalk, .atk-layer-wrap {
|
||||
font-family: @font-family;
|
||||
}
|
||||
|
||||
.atk-sidebar {
|
||||
@width: 430px;
|
||||
position: fixed;
|
||||
@@ -469,6 +473,10 @@
|
||||
.atk-view-name-pages, .atk-view-name-comments {
|
||||
padding-bottom: 55px;
|
||||
|
||||
.atk-comment-wrap {
|
||||
border-bottom: 1px solid var(--at-color-border);
|
||||
}
|
||||
|
||||
.atk-pagination-wrap {
|
||||
z-index: 200;
|
||||
position: fixed;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "artalk",
|
||||
"version": "2.3.0",
|
||||
"version": "2.3.2",
|
||||
"backendMinVersion": "2.1.7",
|
||||
"license": "LGPL-3.0",
|
||||
"description": "A Selfhosted Comment System",
|
||||
|
||||
+99
-121
@@ -2,9 +2,11 @@ import './style/main.less'
|
||||
|
||||
import ArtalkConfig from '~/types/artalk-config'
|
||||
import { EventPayloadMap, Handler } from '~/types/event'
|
||||
import ArtalkPlug from '~/types/plug'
|
||||
import Context from '~/types/context'
|
||||
import ConcreteContext from './context'
|
||||
import defaults from './defaults'
|
||||
import { internal as internalLocales } from './i18n'
|
||||
|
||||
import CheckerLauncher from './lib/checker'
|
||||
import Editor from './editor'
|
||||
@@ -12,9 +14,9 @@ import List from './list'
|
||||
import SidebarLayer from './layer/sidebar-layer'
|
||||
|
||||
import Layer, { GetLayerWrap } from './layer'
|
||||
import Api from './api'
|
||||
import * as Utils from './lib/utils'
|
||||
import * as Ui from './lib/ui'
|
||||
import * as Stat from './lib/stat'
|
||||
|
||||
/**
|
||||
* Artalk
|
||||
@@ -24,90 +26,45 @@ import * as Ui from './lib/ui'
|
||||
export default class Artalk {
|
||||
public static readonly defaults: ArtalkConfig = defaults
|
||||
|
||||
public ctx!: Context
|
||||
public conf!: ArtalkConfig
|
||||
public ctx!: Context
|
||||
public $root!: HTMLElement
|
||||
|
||||
public api!: Api
|
||||
public checkerLauncher!: CheckerLauncher
|
||||
public editor!: Editor
|
||||
public list!: List
|
||||
public sidebarLayer!: SidebarLayer
|
||||
|
||||
protected static Plugins: ArtalkPlug[] = [
|
||||
Stat.PvCountWidget
|
||||
]
|
||||
|
||||
constructor(customConf: Partial<ArtalkConfig>) {
|
||||
// 配置
|
||||
this.conf = Utils.mergeDeep(Artalk.defaults, customConf)
|
||||
this.conf.server = this.conf.server.replace(/\/$/, '').replace(/\/api\/?$/, '')
|
||||
/* 初始化基本配置 */
|
||||
this.conf = Artalk.HandelBaseConf(customConf)
|
||||
if (this.conf.el instanceof HTMLElement) this.$root = this.conf.el
|
||||
|
||||
// 默认 pageKey
|
||||
if (!this.conf.pageKey) {
|
||||
// @link http://bl.ocks.org/abernier/3070589
|
||||
this.conf.pageKey = `${window.location.pathname}`
|
||||
}
|
||||
/* 初始化 Context */
|
||||
this.ctx = new ConcreteContext(this.conf, this.$root)
|
||||
|
||||
// 默认 pageTitle
|
||||
if (!this.conf.pageTitle) {
|
||||
this.conf.pageTitle = `${document.title}`
|
||||
}
|
||||
// @ts-ignore 远程加载引用后端的配置
|
||||
if (this.conf.useBackendConf) return this.loadConfRemoteAndInitComponents()
|
||||
|
||||
// 列表显示模式
|
||||
if (this.conf.nestMax && this.conf.nestMax <= 1) {
|
||||
this.conf.flatMode = true
|
||||
}
|
||||
|
||||
// 装载元素
|
||||
this.conf.el = this.conf.el || document.createElement('div') // 允许 this.conf.el 为空
|
||||
|
||||
if (this.conf.el instanceof HTMLElement) {
|
||||
this.$root = this.conf.el
|
||||
} else {
|
||||
try {
|
||||
const $root = document.querySelector<HTMLElement>(this.conf.el)
|
||||
if (!$root) throw Error(`Target element "${this.conf.el}" was not found.`)
|
||||
this.$root = $root
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
throw new Error('Please check your Artalk `el` config.')
|
||||
}
|
||||
}
|
||||
|
||||
// Context 初始化
|
||||
this.ctx = new ConcreteContext(this.$root, this.conf)
|
||||
|
||||
// API 初始化
|
||||
this.api = new Api(this.ctx)
|
||||
this.ctx.setApi(this.api)
|
||||
|
||||
// 界面初始化
|
||||
this.$root.classList.add('artalk')
|
||||
this.$root.innerHTML = ''
|
||||
|
||||
// 初始化组件
|
||||
if (this.conf.useBackendConf) {
|
||||
// 复用后端的配置
|
||||
// @ts-ignore
|
||||
return (async () => {
|
||||
await this.loadConfRemote()
|
||||
this.initCore()
|
||||
return this // Promise<Artalk>
|
||||
})()
|
||||
}
|
||||
|
||||
this.initCore()
|
||||
/* 初始化组件 */
|
||||
this.initComponents()
|
||||
}
|
||||
|
||||
private initCore() {
|
||||
/* 组件初始化 */
|
||||
/** 组件初始化 */
|
||||
private initComponents() {
|
||||
this.initLocale()
|
||||
this.initLayer()
|
||||
this.initDarkMode()
|
||||
Utils.initMarked(this.ctx)
|
||||
|
||||
// CheckerLauncher
|
||||
this.checkerLauncher = new CheckerLauncher(this.ctx)
|
||||
this.ctx.setCheckerLauncher(this.checkerLauncher)
|
||||
|
||||
// 初始化 marked
|
||||
Utils.initMarked(this.ctx)
|
||||
|
||||
// 编辑器
|
||||
this.editor = new Editor(this.ctx)
|
||||
this.ctx.setEditor(this.editor)
|
||||
@@ -129,18 +86,55 @@ export default class Artalk {
|
||||
// 事件绑定初始化
|
||||
this.initEventBind()
|
||||
|
||||
// 其他
|
||||
this.initCountAndPV()
|
||||
|
||||
// 插件初始化
|
||||
Artalk.Plugins.forEach(plugin => {
|
||||
if (typeof plugin === 'function') {
|
||||
if (typeof plugin === 'function')
|
||||
plugin(this.ctx)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 获取远程配置 */
|
||||
/** 基本配置初始化 */
|
||||
private static HandelBaseConf(customConf: Partial<ArtalkConfig>): ArtalkConfig {
|
||||
// 合并默认配置
|
||||
const conf: ArtalkConfig = Utils.mergeDeep(Artalk.defaults, customConf)
|
||||
|
||||
// 绑定元素
|
||||
if (typeof conf.el === 'string' && !!conf.el) {
|
||||
try {
|
||||
const findEl = document.querySelector<HTMLElement>(conf.el)
|
||||
if (!findEl) throw Error(`Target element "${conf.el}" was not found.`)
|
||||
conf.el = findEl
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
throw new Error('Please check your Artalk `el` config.')
|
||||
}
|
||||
}
|
||||
|
||||
// 服务器配置
|
||||
conf.server = conf.server.replace(/\/$/, '').replace(/\/api\/?$/, '')
|
||||
|
||||
// 默认 pageKey
|
||||
if (!conf.pageKey) {
|
||||
// @link http://bl.ocks.org/abernier/3070589
|
||||
conf.pageKey = `${window.location.pathname}`
|
||||
}
|
||||
|
||||
// 默认 pageTitle
|
||||
if (!conf.pageTitle) {
|
||||
conf.pageTitle = `${document.title}`
|
||||
}
|
||||
|
||||
return conf
|
||||
}
|
||||
|
||||
/** 初始化组件根据远程加载的配置 */
|
||||
private async loadConfRemoteAndInitComponents() {
|
||||
await this.loadConfRemote()
|
||||
this.initComponents()
|
||||
return this
|
||||
}
|
||||
|
||||
/** 远程加载配置 */
|
||||
private async loadConfRemote() {
|
||||
Ui.showLoading(this.$root)
|
||||
let backendConf = {}
|
||||
@@ -151,7 +145,7 @@ export default class Artalk {
|
||||
Ui.hideLoading(this.$root)
|
||||
}
|
||||
|
||||
/** 事件绑定 · 初始化 */
|
||||
/** 事件绑定初始化 */
|
||||
private initEventBind() {
|
||||
// 锚点快速跳转评论
|
||||
window.addEventListener('hashchange', () => {
|
||||
@@ -166,20 +160,34 @@ export default class Artalk {
|
||||
})
|
||||
}
|
||||
|
||||
/** 重新加载 */
|
||||
public reload() {
|
||||
this.list.fetchComments(0)
|
||||
/** 语言初始化 */
|
||||
private initLocale() {
|
||||
if (typeof this.conf.locale === 'string') {
|
||||
if (this.conf.locale === 'auto') { // 自动切换
|
||||
this.conf.locale = ((navigator.languages) ? navigator.languages[0] : navigator.language)
|
||||
}
|
||||
|
||||
this.conf.locale = this.conf.locale.replace(
|
||||
/^([a-zA-Z]+)(-[a-zA-Z]+)?$/,
|
||||
(_, p1: string, p2: string) => (p1.toLowerCase() + (p2 || '').toUpperCase())
|
||||
)
|
||||
|
||||
if (!internalLocales[this.conf.locale]) { // 语言不存在时,使用 en
|
||||
console.log(`Locale "${this.conf.locale}" not found.`)
|
||||
this.conf.locale = 'en'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Layer 初始化 */
|
||||
initLayer() {
|
||||
private initLayer() {
|
||||
// 记录页面原始 Styles
|
||||
Layer.BodyOrgOverflow = document.body.style.overflow
|
||||
Layer.BodyOrgPaddingRight = document.body.style.paddingRight
|
||||
}
|
||||
|
||||
/** 暗黑模式 · 初始化 */
|
||||
public initDarkMode() {
|
||||
/** 暗黑模式初始化 */
|
||||
private initDarkMode() {
|
||||
if (this.conf.darkMode === 'auto') {
|
||||
// 自动切换暗黑模式,事件监听
|
||||
const darkModeMedia = window.matchMedia('(prefers-color-scheme: dark)')
|
||||
@@ -190,7 +198,7 @@ export default class Artalk {
|
||||
}
|
||||
}
|
||||
|
||||
/** 暗黑模式 · 设定 */
|
||||
/** 设置暗黑模式 */
|
||||
public setDarkMode(darkMode: boolean) {
|
||||
const darkModeClassName = 'atk-dark-mode'
|
||||
|
||||
@@ -214,45 +222,6 @@ export default class Artalk {
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化评论数和 PV 数量展示元素 */
|
||||
public async initCountAndPV() {
|
||||
// 评论数
|
||||
const countEl = this.conf.countEl
|
||||
if (countEl && document.querySelector(countEl)) {
|
||||
this.handleStatCount({ api: 'page_comment', countEl })
|
||||
}
|
||||
|
||||
// PV
|
||||
const curtPagePvNum = await this.ctx.getApi().pv()
|
||||
const pvEl = this.conf.pvEl
|
||||
if (pvEl && document.querySelector(pvEl)) {
|
||||
this.handleStatCount({ api: 'page_pv', countEl: pvEl, curtPageCount: curtPagePvNum })
|
||||
}
|
||||
}
|
||||
|
||||
private async handleStatCount(args: { api: 'page_pv'|'page_comment', countEl: string, curtPageCount?: number }) {
|
||||
let pageCounts: {[key: string]: number} = {}
|
||||
|
||||
// 当前页面的统计数
|
||||
const curtPageKey = this.ctx.conf.pageKey
|
||||
if (args.curtPageCount) pageCounts[curtPageKey] = args.curtPageCount
|
||||
|
||||
// 查询其他页面的统计数
|
||||
let queryPageKeys = Array.from(document.querySelectorAll(args.countEl))
|
||||
.map(e => e.getAttribute('data-page-key') || curtPageKey)
|
||||
.filter(pageKey => pageCounts[pageKey] === undefined)
|
||||
queryPageKeys = [...new Set(queryPageKeys)] // 去重
|
||||
if (queryPageKeys.length > 0) {
|
||||
const counts: any = await this.ctx.getApi().stat(args.api, queryPageKeys)
|
||||
pageCounts = { ...pageCounts, ...counts }
|
||||
}
|
||||
|
||||
document.querySelectorAll(args.countEl).forEach((el) => {
|
||||
const pageKey = el.getAttribute('data-page-key') || curtPageKey
|
||||
el.innerHTML = `${Number(pageCounts[pageKey] || 0)}`
|
||||
})
|
||||
}
|
||||
|
||||
/** 监听事件 */
|
||||
public on<K extends keyof EventPayloadMap>(name: K, handler: Handler<EventPayloadMap[K]>) {
|
||||
this.ctx.on(name, handler, 'external')
|
||||
@@ -268,11 +237,20 @@ export default class Artalk {
|
||||
this.ctx.trigger(name, payload, 'external')
|
||||
}
|
||||
|
||||
/** Plugins */
|
||||
protected static Plugins: ((ctx: Context) => void)[] = []
|
||||
/** 重新加载 */
|
||||
public reload() {
|
||||
this.ctx.listReload()
|
||||
}
|
||||
|
||||
/** Enable Plugin */
|
||||
public static Use(plugin: ((ctx: Context) => void)) {
|
||||
/** Use Plugin */
|
||||
public static Use(plugin: ArtalkPlug) {
|
||||
this.Plugins.push(plugin)
|
||||
}
|
||||
|
||||
/** 装载数量统计元素 */
|
||||
public static LoadCountWidget(customConf: Partial<ArtalkConfig>) {
|
||||
const conf = this.HandelBaseConf(customConf)
|
||||
const ctx = new ConcreteContext(conf)
|
||||
Stat.initCountWidget({ ctx, pvAdd: false })
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import Api from '../api'
|
||||
import Comment from './comment'
|
||||
import ActionBtn from '../components/action-btn'
|
||||
|
||||
|
||||
@@ -37,13 +37,17 @@ export default class Context implements ContextApi {
|
||||
/* 订阅者模式 */
|
||||
private eventList: Event[] = []
|
||||
|
||||
public constructor($root: HTMLElement, conf: ArtalkConfig) {
|
||||
public constructor(conf: ArtalkConfig, $root?: HTMLElement) {
|
||||
this.cid = +new Date()
|
||||
this.conf = conf
|
||||
this.user = new User(this)
|
||||
|
||||
this.$root = $root
|
||||
this.$root = $root || document.createElement('div')
|
||||
this.$root.setAttribute('atk-run-id', this.cid.toString())
|
||||
this.$root.classList.add('artalk')
|
||||
this.$root.innerHTML = ''
|
||||
|
||||
this.api = new Api(this)
|
||||
}
|
||||
|
||||
/* 设置持有的同事类 */
|
||||
|
||||
@@ -5,7 +5,6 @@ import Context from '~/types/context'
|
||||
import Component from '../lib/component'
|
||||
import * as Utils from '../lib/utils'
|
||||
import * as Ui from '../lib/ui'
|
||||
import Api from '../api'
|
||||
|
||||
import EditorHTML from './editor.html?raw'
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
border-radius: 2px;
|
||||
border-radius: (@block-radius / 2);
|
||||
font-size: 16px;
|
||||
min-width: 35px;
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import Api from '@/api'
|
||||
import Editor from '../editor'
|
||||
import EditorPlug from './editor-plug'
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as Utils from '@/lib/utils'
|
||||
import Api from '@/api'
|
||||
import Editor from '../editor'
|
||||
import EditorPlug from './editor-plug'
|
||||
|
||||
@@ -83,7 +82,7 @@ export default class UploadPlug extends EditorPlug {
|
||||
|
||||
// 未登录提示
|
||||
if (!this.ctx.user.checkHasBasicUserInfo()) {
|
||||
this.editor.showNotify('填入你的名字邮箱才能上传哦', 'w')
|
||||
this.editor.showNotify(this.ctx.$t('uploadLoginMsg'), 'w')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -103,7 +102,7 @@ export default class UploadPlug extends EditorPlug {
|
||||
resp = await this.ctx.getApi().imgUpload(file)
|
||||
} else {
|
||||
// 使用自定义的图片上传器
|
||||
resp = await this.ctx.conf.imgUploader(file)
|
||||
resp = {img_url: await this.ctx.conf.imgUploader(file)}
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.error(err)
|
||||
|
||||
@@ -13,6 +13,7 @@ export default {
|
||||
commentFail: 'Failed to comment',
|
||||
restoredMsg: 'Content has been restored',
|
||||
onlyAdminCanReply: 'Only admin can reply',
|
||||
uploadLoginMsg: 'Please fill in your name and email to upload',
|
||||
|
||||
/* List */
|
||||
counter: '{count} Comments',
|
||||
|
||||
@@ -15,6 +15,7 @@ const zhCN: I18n = {
|
||||
commentFail: '评论失败',
|
||||
restoredMsg: '内容已自动恢复',
|
||||
onlyAdminCanReply: '仅管理员可评论',
|
||||
uploadLoginMsg: '填入你的名字邮箱才能上传哦',
|
||||
|
||||
/* List */
|
||||
counter: '{count} 条评论',
|
||||
|
||||
@@ -6,7 +6,6 @@ import * as Utils from '@/lib/utils'
|
||||
import * as Ui from '@/lib/ui'
|
||||
import SidebarHTML from './sidebar-layer.html?raw'
|
||||
import Layer from './layer'
|
||||
import Api from '../api'
|
||||
|
||||
export interface SidebarShowPayload {
|
||||
view?: 'comments'|'sites'|'pages'|'transfer'
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import Api from '@/api'
|
||||
import * as Utils from '../utils'
|
||||
import { Checker } from '.'
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import Api from '@/api'
|
||||
import * as Utils from '../utils'
|
||||
import * as Ui from '../ui'
|
||||
import { Checker } from '.'
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import ContextApi from '~/types/context'
|
||||
import ArtalkPlug from '~/types/plug'
|
||||
|
||||
export interface CountConf {
|
||||
ctx: ContextApi
|
||||
|
||||
/** 是否增加当前页面 PV 数 */
|
||||
pvAdd?: boolean
|
||||
}
|
||||
|
||||
export const PvCountWidget: ArtalkPlug = (ctx: ContextApi) => {
|
||||
initCountWidget({ ctx, pvAdd: true })
|
||||
}
|
||||
|
||||
/** 初始化评论数和 PV 数量展示元素 */
|
||||
export async function initCountWidget(p: CountConf) {
|
||||
// 评论数
|
||||
const countEl = p.ctx.conf.countEl
|
||||
if (countEl && document.querySelector(countEl)) {
|
||||
handleStatCount(p, { api: 'page_comment', countEl })
|
||||
}
|
||||
|
||||
// PV
|
||||
const curtPagePvNum = p.pvAdd ? await p.ctx.getApi().pv() : undefined
|
||||
const pvEl = p.ctx.conf.pvEl
|
||||
if (pvEl && document.querySelector(pvEl)) {
|
||||
handleStatCount(p, {
|
||||
api: 'page_pv',
|
||||
countEl: pvEl,
|
||||
curtPageCount: curtPagePvNum,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export async function handleStatCount(
|
||||
p: CountConf,
|
||||
args: {
|
||||
api: 'page_pv' | 'page_comment'
|
||||
countEl: string
|
||||
curtPageCount?: number
|
||||
}
|
||||
) {
|
||||
let pageCounts: { [key: string]: number } = {}
|
||||
|
||||
// 当前页面的统计数
|
||||
const curtPageKey = p.ctx.conf.pageKey
|
||||
if (args.curtPageCount) pageCounts[curtPageKey] = args.curtPageCount
|
||||
|
||||
// 查询其他页面的统计数
|
||||
let queryPageKeys = Array.from(document.querySelectorAll(args.countEl))
|
||||
.map((e) => e.getAttribute('data-page-key') || curtPageKey)
|
||||
.filter((pageKey) => pageCounts[pageKey] === undefined)
|
||||
queryPageKeys = [...new Set(queryPageKeys)] // 去重
|
||||
if (queryPageKeys.length > 0) {
|
||||
const counts: any = await p.ctx.getApi().stat(args.api, queryPageKeys)
|
||||
pageCounts = { ...pageCounts, ...counts }
|
||||
}
|
||||
|
||||
document.querySelectorAll(args.countEl).forEach((el) => {
|
||||
const pageKey = el.getAttribute('data-page-key') || curtPageKey
|
||||
el.innerHTML = `${Number(pageCounts[pageKey] || 0)}`
|
||||
})
|
||||
}
|
||||
@@ -2,7 +2,8 @@ import * as Utils from './utils'
|
||||
|
||||
/** 显示加载 */
|
||||
export function showLoading(parentElem: HTMLElement, conf?: { transparentBg?: boolean }) {
|
||||
let $loading = parentElem.querySelector<HTMLElement>('.atk-loading')
|
||||
// Use :scope https://developer.mozilla.org/en-US/docs/Web/CSS/:scope
|
||||
let $loading = parentElem.querySelector<HTMLElement>(':scope > .atk-loading')
|
||||
if (!$loading) {
|
||||
$loading = Utils.createElement(
|
||||
`<div class="atk-loading atk-fade-in" style="display: none;">
|
||||
@@ -27,7 +28,7 @@ export function showLoading(parentElem: HTMLElement, conf?: { transparentBg?: bo
|
||||
|
||||
/** 隐藏加载 */
|
||||
export function hideLoading(parentElem: HTMLElement) {
|
||||
const $loading = parentElem.querySelector<HTMLElement>('.atk-loading')
|
||||
const $loading = parentElem.querySelector<HTMLElement>(':scope > .atk-loading')
|
||||
if ($loading) $loading.style.display = 'none'
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ import Context from '~/types/context'
|
||||
import Component from '../lib/component'
|
||||
import * as Utils from '../lib/utils'
|
||||
import * as Ui from '../lib/ui'
|
||||
import Api from '../api'
|
||||
import Comment from '../comment'
|
||||
import Pagination from '../components/pagination'
|
||||
import ReadMoreBtn from '../components/read-more-btn'
|
||||
|
||||
@@ -4,7 +4,6 @@ import { ListData, NotifyData } from '~/types/artalk-data'
|
||||
import Context from '~/types/context'
|
||||
import * as Utils from '../lib/utils'
|
||||
import * as Ui from '../lib/ui'
|
||||
import Api from '../api'
|
||||
import ListHTML from './list.html?raw'
|
||||
import ListLite from './list-lite'
|
||||
|
||||
@@ -26,14 +25,15 @@ export default class List extends ListLite {
|
||||
this.$el = el
|
||||
|
||||
// 平铺模式
|
||||
let flatMode = false
|
||||
if (this.ctx.conf.flatMode === 'auto') {
|
||||
if (this.ctx.conf.flatMode === true) {
|
||||
this.flatMode = true // 遵循配置总是开启平铺模式
|
||||
} else if (this.conf.nestMax && this.conf.nestMax <= 1) {
|
||||
this.flatMode = true // 嵌套层数值无效时,强制开启平铺模式
|
||||
} else if (this.ctx.conf.flatMode === 'auto') {
|
||||
// 自动判断启用平铺模式
|
||||
if (window.matchMedia("(max-width: 768px)").matches)
|
||||
flatMode = true
|
||||
} else if (this.ctx.conf.flatMode === true) {
|
||||
flatMode = true
|
||||
this.flatMode = true
|
||||
}
|
||||
this.flatMode = flatMode
|
||||
|
||||
// 分页模式
|
||||
this.pageMode = this.conf.pagination.readMore ? 'read-more' : 'pagination'
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
@font-family: "Helvetica Neue", "PingFangSC-Light", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
|
||||
@font-size: 14px;
|
||||
@line-height: 1.6em;
|
||||
@block-radius: 4px;
|
||||
@block-radius: 6px;
|
||||
@@ -51,7 +51,7 @@
|
||||
img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 3px;
|
||||
border-radius: (@block-radius / 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
& > .atk-header {
|
||||
line-height: 1;
|
||||
font-size: 13px;
|
||||
margin-bottom: 3px;
|
||||
margin-bottom: .5em;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
display: flex;
|
||||
@@ -114,7 +114,7 @@
|
||||
background: var(--at-color-bg-grey);
|
||||
padding: 0px 6px;
|
||||
line-height: 17px;
|
||||
border-radius: 3px;
|
||||
border-radius: (@block-radius / 2);
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: 6px;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
font-size: 14px;
|
||||
background: transparent;
|
||||
border: 2px solid transparent;
|
||||
border-radius: calc(@block-radius / 2);
|
||||
border-radius: (@block-radius / 2);
|
||||
padding: 6px 5px;
|
||||
resize: none;
|
||||
outline: none;
|
||||
@@ -44,7 +44,7 @@
|
||||
font-size: 15px;
|
||||
background-color: var(--at-color-bg);
|
||||
border: 2px solid transparent;
|
||||
border-radius: calc(@block-radius / 2);
|
||||
border-radius: (@block-radius / 2);
|
||||
width: 100%;
|
||||
min-height: 120px;
|
||||
margin-top: 2px;
|
||||
@@ -61,6 +61,7 @@
|
||||
background-color: var(--at-color-bg);
|
||||
border-top: 1px solid var(--at-color-border);
|
||||
padding: 5px 15px;
|
||||
margin-top: 10px;
|
||||
// background: repeating-linear-gradient(145deg, #f2f2f2, #f2f2f2 15px, #fff 0, #fff 30px);
|
||||
}
|
||||
|
||||
@@ -68,8 +69,8 @@
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
right: 7px;
|
||||
bottom: 8px;
|
||||
max-width: calc(100% - 20px);
|
||||
bottom: 2px;
|
||||
max-width: (100% - 20px);
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 14px;
|
||||
@@ -79,7 +80,7 @@
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
border-radius: @block-radius;
|
||||
border-radius: (@block-radius / 2);
|
||||
|
||||
.atk-text {
|
||||
}
|
||||
@@ -125,11 +126,12 @@
|
||||
|
||||
.atk-plug-btn {
|
||||
padding: 0 8px;
|
||||
line-height: 24px;
|
||||
cursor: pointer;
|
||||
color: var(--at-color-grey);
|
||||
font-size: @font-size;
|
||||
user-select: none;
|
||||
border-radius: @block-radius;
|
||||
border-radius: (@block-radius / 2);
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: 2px;
|
||||
@@ -169,7 +171,7 @@
|
||||
cursor: pointer;
|
||||
transition: opacity 0.3s ease-in-out;
|
||||
outline: none;
|
||||
border-radius: @block-radius;
|
||||
border-radius: (@block-radius / 2);
|
||||
|
||||
&:active {
|
||||
opacity: 0.9;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
border-left: 3px solid transparent;
|
||||
border-right: 3px solid transparent;
|
||||
margin-top: -1px;
|
||||
margin-left: 0.4rem;
|
||||
margin-left: 0.8rem;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
padding: 0.6rem 0;
|
||||
border: 1px solid var(--at-color-border);
|
||||
text-align: center;
|
||||
border-radius: 0.25rem;
|
||||
border-radius: @block-radius;
|
||||
white-space: nowrap;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
}
|
||||
|
||||
.artalk, .atk-layer-wrap {
|
||||
line-height: @line-height;
|
||||
color: var(--at-color-font);
|
||||
font-family: @font-family;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
|
||||
@@ -64,6 +62,7 @@
|
||||
padding: 10px 20px 10px 20px;
|
||||
background: var(--at-color-bg-grey);
|
||||
border-left: 4px solid #687a86;
|
||||
color: var(--at-color-font);
|
||||
}
|
||||
|
||||
p:first-child {
|
||||
@@ -311,10 +310,10 @@ i.atk-icon {
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
line-height: calc(@formInputHeight + 4px);
|
||||
line-height: (@formInputHeight + 4px);
|
||||
background-color: var(--at-color-bg);
|
||||
border: 1px solid var(--at-color-border);
|
||||
border-radius: calc(@block-radius / 2);
|
||||
border-radius: (@block-radius / 2);
|
||||
outline: none;
|
||||
padding: 0 6px;
|
||||
display: block;
|
||||
@@ -335,7 +334,7 @@ i.atk-icon {
|
||||
border: 1px solid var(--at-color-main);
|
||||
background: transparent;
|
||||
color: var(--at-color-main);
|
||||
border-radius: calc(@block-radius / 2);
|
||||
border-radius: (@block-radius / 2);
|
||||
padding: 0 15px;
|
||||
line-height: @formInputHeight;
|
||||
outline: none;
|
||||
@@ -405,10 +404,10 @@ i.atk-icon {
|
||||
overflow: hidden;
|
||||
background-color: #2c2c2c;
|
||||
color: #FFF;
|
||||
border-radius: 2px;
|
||||
border-radius: (@block-radius / 2);
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
padding: 4px 15px;
|
||||
padding: 5px 15px;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-bottom: 3px;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<script src="../dist/Artalk.js"></script>
|
||||
|
||||
<div class="pv" data-page-key="https://artalk.js.org/">0</div>
|
||||
<div class="pv" data-page-key="https://artalk.js.org/guide/intro.html">0</div>
|
||||
|
||||
<div class="count" data-page-key="https://artalk.js.org/">0</div>
|
||||
<div class="count" data-page-key="https://artalk.js.org/guide/intro.html">0</div>
|
||||
|
||||
<script>
|
||||
var artalk = Artalk.LoadCountWidget({
|
||||
server: 'http://localhost:23366',
|
||||
site: 'ArtalkDocs',
|
||||
pvEl: '.pv',
|
||||
countEl: ".count",
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,15 @@
|
||||
<link rel="stylesheet" href="../dist/Artalk.css">
|
||||
<script src="../dist/Artalk.js"></script>
|
||||
|
||||
<div id="comments"></div>
|
||||
|
||||
<script>
|
||||
var artalk = new Artalk({
|
||||
el: '#comments',
|
||||
pageKey: 'https://artalk.js.org/',
|
||||
pageTitle: 'Artalk Home',
|
||||
server: 'http://localhost:23366',
|
||||
site: 'ArtalkDocs',
|
||||
locale: 'auto',
|
||||
});
|
||||
</script>
|
||||
@@ -1,15 +1,15 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||
<!-- <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> -->
|
||||
<link rel="stylesheet" href="../dist/ArtalkLite.css">
|
||||
<script src="../dist/ArtalkLite.js"></script>
|
||||
|
||||
<div id="comments"></div>
|
||||
|
||||
<script>
|
||||
var artalk = new Artalk({
|
||||
el: '#comments',
|
||||
pageKey: 'https://artalk.js.org/',
|
||||
pageTitle: 'Artalk Home',
|
||||
server: 'http://localhost:23366',
|
||||
site: 'ArtalkDocs',
|
||||
});
|
||||
var artalk = new Artalk({
|
||||
el: '#comments',
|
||||
pageKey: 'https://artalk.js.org/',
|
||||
pageTitle: 'Artalk Home',
|
||||
server: 'http://localhost:23366',
|
||||
site: 'ArtalkDocs',
|
||||
});
|
||||
</script>
|
||||
+1
-1
@@ -98,7 +98,7 @@ export default interface ArtalkConfig {
|
||||
imgUpload: boolean
|
||||
|
||||
/** 图片上传器 */
|
||||
imgUploader?: (file: File) => Promise<{ img_url: string }>
|
||||
imgUploader?: (file: File) => Promise<string>
|
||||
|
||||
/** 版本检测 */
|
||||
versionCheck: boolean
|
||||
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
import ContextApi from './context'
|
||||
|
||||
type ArtalkPlug = (ctx: ContextApi) => void
|
||||
export default ArtalkPlug
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"artalk": "workspace: *",
|
||||
"katex": "^0.15.3"
|
||||
"katex": "^0.15.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/katex": "0.14.0"
|
||||
|
||||
Generated
+68
-68
@@ -9,7 +9,7 @@ importers:
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0
|
||||
'@typescript-eslint/parser': 5.25.0
|
||||
autoprefixer: 10.4.7
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
eslint-config-airbnb-base: 15.0.0
|
||||
eslint-config-airbnb-typescript: 17.0.0
|
||||
eslint-config-prettier: 8.5.0
|
||||
@@ -19,27 +19,27 @@ importers:
|
||||
less: 4.1.2
|
||||
postcss: 8.4.14
|
||||
prettier: 2.6.2
|
||||
rollup: 2.74.0
|
||||
rollup: 2.74.1
|
||||
typescript: 4.6.4
|
||||
vite: 2.9.9
|
||||
vite-tsconfig-paths: 3.4.1
|
||||
devDependencies:
|
||||
'@rollup/plugin-dynamic-import-vars': 1.4.3_rollup@2.74.0
|
||||
'@rollup/plugin-dynamic-import-vars': 1.4.3_rollup@2.74.1
|
||||
'@types/node': 16.11.36
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0_qo2hgs5jt7x2a3p77h2rutcdae
|
||||
'@typescript-eslint/parser': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0_jorowkvdqu6pwramweg5le7ncu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
autoprefixer: 10.4.7_postcss@8.4.14
|
||||
eslint: 8.15.0
|
||||
eslint-config-airbnb-base: 15.0.0_gwd37gqv3vjv3xlpl7ju3ag2qu
|
||||
eslint-config-airbnb-typescript: 17.0.0_j24moc6fxpksz6plqhrv2fyfqe
|
||||
eslint-config-prettier: 8.5.0_eslint@8.15.0
|
||||
eslint-import-resolver-typescript: 2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu
|
||||
eslint-plugin-compat: 4.0.2_eslint@8.15.0
|
||||
eslint-plugin-import: 2.26.0_cubvsak2fflmoxzlyy3qtfibly
|
||||
eslint: 8.16.0
|
||||
eslint-config-airbnb-base: 15.0.0_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-config-airbnb-typescript: 17.0.0_ap2wief2ko4jllacu34d7dt3q4
|
||||
eslint-config-prettier: 8.5.0_eslint@8.16.0
|
||||
eslint-import-resolver-typescript: 2.7.1_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-plugin-compat: 4.0.2_eslint@8.16.0
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
less: 4.1.2
|
||||
postcss: 8.4.14
|
||||
prettier: 2.6.2
|
||||
rollup: 2.74.0
|
||||
rollup: 2.74.1
|
||||
typescript: 4.6.4
|
||||
vite: 2.9.9_less@4.1.2
|
||||
vite-tsconfig-paths: 3.4.1_vite@2.9.9
|
||||
@@ -69,10 +69,10 @@ importers:
|
||||
specifiers:
|
||||
'@types/katex': 0.14.0
|
||||
artalk: 'workspace: *'
|
||||
katex: ^0.15.3
|
||||
katex: ^0.15.6
|
||||
dependencies:
|
||||
artalk: link:../artalk
|
||||
katex: 0.15.3
|
||||
katex: 0.15.6
|
||||
devDependencies:
|
||||
'@types/katex': 0.14.0
|
||||
|
||||
@@ -82,14 +82,14 @@ packages:
|
||||
resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==}
|
||||
dev: true
|
||||
|
||||
/@eslint/eslintrc/1.2.3:
|
||||
resolution: {integrity: sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==}
|
||||
/@eslint/eslintrc/1.3.0:
|
||||
resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dependencies:
|
||||
ajv: 6.12.6
|
||||
debug: 4.3.4
|
||||
espree: 9.3.2
|
||||
globals: 13.13.0
|
||||
globals: 13.15.0
|
||||
ignore: 5.2.0
|
||||
import-fresh: 3.3.0
|
||||
js-yaml: 4.1.0
|
||||
@@ -143,7 +143,7 @@ packages:
|
||||
fastq: 1.13.0
|
||||
dev: true
|
||||
|
||||
/@rollup/plugin-dynamic-import-vars/1.4.3_rollup@2.74.0:
|
||||
/@rollup/plugin-dynamic-import-vars/1.4.3_rollup@2.74.1:
|
||||
resolution: {integrity: sha512-VYP9BBVI0pcYpLp/DkFT8YP+EmqmWFMmWXoTObDH6OouERxJyPsIj0tC3HxhjNBOKgcRc7eV75IQItzELt7QSg==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
peerDependencies:
|
||||
@@ -153,7 +153,7 @@ packages:
|
||||
estree-walker: 2.0.2
|
||||
fast-glob: 3.2.11
|
||||
magic-string: 0.25.9
|
||||
rollup: 2.74.0
|
||||
rollup: 2.74.1
|
||||
dev: true
|
||||
|
||||
/@rollup/pluginutils/4.2.1:
|
||||
@@ -184,7 +184,7 @@ packages:
|
||||
resolution: {integrity: sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA==}
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/eslint-plugin/5.25.0_qo2hgs5jt7x2a3p77h2rutcdae:
|
||||
/@typescript-eslint/eslint-plugin/5.25.0_jorowkvdqu6pwramweg5le7ncu:
|
||||
resolution: {integrity: sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
@@ -195,12 +195,12 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/scope-manager': 5.25.0
|
||||
'@typescript-eslint/type-utils': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/utils': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/type-utils': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
'@typescript-eslint/utils': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
debug: 4.3.4
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
functional-red-black-tree: 1.0.1
|
||||
ignore: 5.2.0
|
||||
regexpp: 3.2.0
|
||||
@@ -211,7 +211,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/parser/5.25.0_hcfsmds2fshutdssjqluwm76uu:
|
||||
/@typescript-eslint/parser/5.25.0_utdtartgf6fqqgkivzeynh76la:
|
||||
resolution: {integrity: sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
@@ -225,7 +225,7 @@ packages:
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/typescript-estree': 5.25.0_typescript@4.6.4
|
||||
debug: 4.3.4
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
typescript: 4.6.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -239,7 +239,7 @@ packages:
|
||||
'@typescript-eslint/visitor-keys': 5.25.0
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/type-utils/5.25.0_hcfsmds2fshutdssjqluwm76uu:
|
||||
/@typescript-eslint/type-utils/5.25.0_utdtartgf6fqqgkivzeynh76la:
|
||||
resolution: {integrity: sha512-B6nb3GK3Gv1Rsb2pqalebe/RyQoyG/WDy9yhj8EE0Ikds4Xa8RR28nHz+wlt4tMZk5bnAr0f3oC8TuDAd5CPrw==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
@@ -249,9 +249,9 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/utils': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/utils': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
debug: 4.3.4
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
tsutils: 3.21.0_typescript@4.6.4
|
||||
typescript: 4.6.4
|
||||
transitivePeerDependencies:
|
||||
@@ -284,7 +284,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/utils/5.25.0_hcfsmds2fshutdssjqluwm76uu:
|
||||
/@typescript-eslint/utils/5.25.0_utdtartgf6fqqgkivzeynh76la:
|
||||
resolution: {integrity: sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
@@ -294,9 +294,9 @@ packages:
|
||||
'@typescript-eslint/scope-manager': 5.25.0
|
||||
'@typescript-eslint/types': 5.25.0
|
||||
'@typescript-eslint/typescript-estree': 5.25.0_typescript@4.6.4
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
eslint-scope: 5.1.1
|
||||
eslint-utils: 3.0.0_eslint@8.15.0
|
||||
eslint-utils: 3.0.0_eslint@8.16.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
@@ -867,7 +867,7 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/eslint-config-airbnb-base/15.0.0_gwd37gqv3vjv3xlpl7ju3ag2qu:
|
||||
/eslint-config-airbnb-base/15.0.0_btspkuwbqkl4adpiufzbathtpi:
|
||||
resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
peerDependencies:
|
||||
@@ -875,14 +875,14 @@ packages:
|
||||
eslint-plugin-import: ^2.25.2
|
||||
dependencies:
|
||||
confusing-browser-globals: 1.0.11
|
||||
eslint: 8.15.0
|
||||
eslint-plugin-import: 2.26.0_cubvsak2fflmoxzlyy3qtfibly
|
||||
eslint: 8.16.0
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
object.assign: 4.1.2
|
||||
object.entries: 1.1.5
|
||||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/eslint-config-airbnb-typescript/17.0.0_j24moc6fxpksz6plqhrv2fyfqe:
|
||||
/eslint-config-airbnb-typescript/17.0.0_ap2wief2ko4jllacu34d7dt3q4:
|
||||
resolution: {integrity: sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/eslint-plugin': ^5.13.0
|
||||
@@ -890,20 +890,20 @@ packages:
|
||||
eslint: ^7.32.0 || ^8.2.0
|
||||
eslint-plugin-import: ^2.25.3
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0_qo2hgs5jt7x2a3p77h2rutcdae
|
||||
'@typescript-eslint/parser': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
eslint: 8.15.0
|
||||
eslint-config-airbnb-base: 15.0.0_gwd37gqv3vjv3xlpl7ju3ag2qu
|
||||
eslint-plugin-import: 2.26.0_cubvsak2fflmoxzlyy3qtfibly
|
||||
'@typescript-eslint/eslint-plugin': 5.25.0_jorowkvdqu6pwramweg5le7ncu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
eslint: 8.16.0
|
||||
eslint-config-airbnb-base: 15.0.0_btspkuwbqkl4adpiufzbathtpi
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
dev: true
|
||||
|
||||
/eslint-config-prettier/8.5.0_eslint@8.15.0:
|
||||
/eslint-config-prettier/8.5.0_eslint@8.16.0:
|
||||
resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
eslint: '>=7.0.0'
|
||||
dependencies:
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
dev: true
|
||||
|
||||
/eslint-import-resolver-node/0.3.6:
|
||||
@@ -915,7 +915,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/eslint-import-resolver-typescript/2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu:
|
||||
/eslint-import-resolver-typescript/2.7.1_btspkuwbqkl4adpiufzbathtpi:
|
||||
resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
@@ -923,8 +923,8 @@ packages:
|
||||
eslint-plugin-import: '*'
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
eslint: 8.15.0
|
||||
eslint-plugin-import: 2.26.0_cubvsak2fflmoxzlyy3qtfibly
|
||||
eslint: 8.16.0
|
||||
eslint-plugin-import: 2.26.0_fc3ah3mafsevgtah47p4cah6me
|
||||
glob: 7.2.0
|
||||
is-glob: 4.0.3
|
||||
resolve: 1.22.0
|
||||
@@ -951,16 +951,16 @@ packages:
|
||||
eslint-import-resolver-webpack:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
debug: 3.2.7
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
eslint-import-resolver-typescript: 2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu
|
||||
eslint-import-resolver-typescript: 2.7.1_btspkuwbqkl4adpiufzbathtpi
|
||||
find-up: 2.1.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-compat/4.0.2_eslint@8.15.0:
|
||||
/eslint-plugin-compat/4.0.2_eslint@8.16.0:
|
||||
resolution: {integrity: sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==}
|
||||
engines: {node: '>=9.x'}
|
||||
peerDependencies:
|
||||
@@ -971,13 +971,13 @@ packages:
|
||||
browserslist: 4.20.2
|
||||
caniuse-lite: 1.0.30001332
|
||||
core-js: 3.22.4
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
find-up: 5.0.0
|
||||
lodash.memoize: 4.1.2
|
||||
semver: 7.3.5
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-import/2.26.0_cubvsak2fflmoxzlyy3qtfibly:
|
||||
/eslint-plugin-import/2.26.0_fc3ah3mafsevgtah47p4cah6me:
|
||||
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
@@ -987,12 +987,12 @@ packages:
|
||||
'@typescript-eslint/parser':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.25.0_hcfsmds2fshutdssjqluwm76uu
|
||||
'@typescript-eslint/parser': 5.25.0_utdtartgf6fqqgkivzeynh76la
|
||||
array-includes: 3.1.4
|
||||
array.prototype.flat: 1.3.0
|
||||
debug: 2.6.9
|
||||
doctrine: 2.1.0
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
eslint-module-utils: 2.7.3_rak4pgp43wdbzd6xmlhzgag4yu
|
||||
has: 1.0.3
|
||||
@@ -1024,13 +1024,13 @@ packages:
|
||||
estraverse: 5.3.0
|
||||
dev: true
|
||||
|
||||
/eslint-utils/3.0.0_eslint@8.15.0:
|
||||
/eslint-utils/3.0.0_eslint@8.16.0:
|
||||
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
|
||||
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
|
||||
peerDependencies:
|
||||
eslint: '>=5'
|
||||
dependencies:
|
||||
eslint: 8.15.0
|
||||
eslint: 8.16.0
|
||||
eslint-visitor-keys: 2.1.0
|
||||
dev: true
|
||||
|
||||
@@ -1044,12 +1044,12 @@ packages:
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dev: true
|
||||
|
||||
/eslint/8.15.0:
|
||||
resolution: {integrity: sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==}
|
||||
/eslint/8.16.0:
|
||||
resolution: {integrity: sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@eslint/eslintrc': 1.2.3
|
||||
'@eslint/eslintrc': 1.3.0
|
||||
'@humanwhocodes/config-array': 0.9.5
|
||||
ajv: 6.12.6
|
||||
chalk: 4.1.2
|
||||
@@ -1058,7 +1058,7 @@ packages:
|
||||
doctrine: 3.0.0
|
||||
escape-string-regexp: 4.0.0
|
||||
eslint-scope: 7.1.1
|
||||
eslint-utils: 3.0.0_eslint@8.15.0
|
||||
eslint-utils: 3.0.0_eslint@8.16.0
|
||||
eslint-visitor-keys: 3.3.0
|
||||
espree: 9.3.2
|
||||
esquery: 1.4.0
|
||||
@@ -1067,7 +1067,7 @@ packages:
|
||||
file-entry-cache: 6.0.1
|
||||
functional-red-black-tree: 1.0.1
|
||||
glob-parent: 6.0.2
|
||||
globals: 13.13.0
|
||||
globals: 13.15.0
|
||||
ignore: 5.2.0
|
||||
import-fresh: 3.3.0
|
||||
imurmurhash: 0.1.4
|
||||
@@ -1269,8 +1269,8 @@ packages:
|
||||
path-is-absolute: 1.0.1
|
||||
dev: true
|
||||
|
||||
/globals/13.13.0:
|
||||
resolution: {integrity: sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==}
|
||||
/globals/13.15.0:
|
||||
resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
type-fest: 0.20.2
|
||||
@@ -1529,8 +1529,8 @@ packages:
|
||||
minimist: 1.2.6
|
||||
dev: true
|
||||
|
||||
/katex/0.15.3:
|
||||
resolution: {integrity: sha512-Al6V7RJsmjklT9QItyHWGaQCt+NYTle1bZwB1e9MR/tLoIT1MXaHy9UpfGSB7eaqDgjjqqRxQOaQGrALCrEyBQ==}
|
||||
/katex/0.15.6:
|
||||
resolution: {integrity: sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
commander: 8.3.0
|
||||
@@ -1914,8 +1914,8 @@ packages:
|
||||
glob: 7.2.0
|
||||
dev: true
|
||||
|
||||
/rollup/2.74.0:
|
||||
resolution: {integrity: sha512-RRwXTX5+ObPJhcMV6zP3RdHvy90/lBOUfbzL7IKkFjMJGAqeBGZiv9nZWm/DoTESaTE3GBkkzbU9QVN2AuCkjw==}
|
||||
/rollup/2.74.1:
|
||||
resolution: {integrity: sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
@@ -2158,7 +2158,7 @@ packages:
|
||||
less: 4.1.2
|
||||
postcss: 8.4.14
|
||||
resolve: 1.22.0
|
||||
rollup: 2.74.0
|
||||
rollup: 2.74.1
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
Reference in new issue
Block a user