Skip to content

Commit

Permalink
fix: 修复 chapters 子组件 reload() 方法的BUG导致的 outline.reload() 失败的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
yaohaixiao committed Jan 17, 2024
1 parent 6b79ce3 commit b3b4626
Show file tree
Hide file tree
Showing 30 changed files with 74 additions and 49 deletions.
2 changes: 1 addition & 1 deletion anchors.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion anchors.min.js.map

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions api/pug/examples/fixed.pug
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,8 @@ html(lang='en')
console.log('top', top)
}
outline = new Outline(Outline.DEFAULTS)

// outline.reload({
// position: 'relative',
// hasToolbar: true
// })
2 changes: 1 addition & 1 deletion base.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class Base {
}

reload(options) {
this.destroy().initialize(this.attr(options))
this.destroy().initialize(options)
return this
}

Expand Down
41 changes: 27 additions & 14 deletions chapters.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,19 @@ class Chapters extends Base {

this.attrs = cloneDeep(Chapters.DEFAULTS)

this._reset()
this._init()

this.offsetWidth = 0
this.playing = false
this.scrollTimer = null
this.resizeTimer = null
this.observerTimer = null
this.Observer = null

if (options) {
this.initialize(options)
}
}

_reset() {
_init() {
this.$el = null
this.$title = null
this.$main = null
Expand All @@ -52,7 +51,9 @@ class Chapters extends Base {

this.chapters = []
this.active = 0
this.offsetWidth = 0
this.offsetTop = 0
this.playing = false
this.closed = false

return this
Expand Down Expand Up @@ -304,10 +305,17 @@ class Chapters extends Base {
}

highlight(id) {
const $el = this.$el
const animationCurrent = this.attr('animationCurrent')
const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)
const ACTIVE = 'outline-chapters_active'
const HIGHLIGHT = 'outline-chapters_highlight'
let $anchor = null

if (!$el) {
return this
}

$anchor = $el.querySelector(`#chapter__anchor-${id}`)

if (!$anchor) {
return this
Expand Down Expand Up @@ -466,9 +474,7 @@ class Chapters extends Base {
}

this.removeListeners()
this.$parentElement.removeChild(this.$el)

this.attr(Chapters.DEFAULTS)._reset()
this.attr(Chapters.DEFAULTS)

if (this.scrollTimer) {
clearTimeout(this.scrollTimer)
Expand All @@ -480,20 +486,27 @@ class Chapters extends Base {
this.resizeTimer = null
}

if (isFunction(afterDestroy)) {
afterDestroy.call(this)
if (this.observerTimer) {
clearTimeout(this.observerTimer)
this.observerTimer = null
}

if (this.Observer) {
this.Observer = null
}

this.$parentElement.removeChild(this.$el)
this._init()

if (isFunction(afterDestroy)) {
afterDestroy.call(this)
}

return this
}

onObserver() {
const selector = this.attr('selector')
let timer = null

this.Observer = intersection(
($heading) => {
Expand All @@ -503,11 +516,11 @@ class Chapters extends Base {
return false
}

if (timer) {
clearTimeout(timer)
if (this.observerTimer) {
clearTimeout(this.observerTimer)
}

timer = later(() => {
this.observerTimer = later(() => {
this.highlight(id)
}, 100)
},
Expand Down
2 changes: 1 addition & 1 deletion chapters.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion chapters.min.js.map

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion docs/examples/fixed.html
Original file line number Diff line number Diff line change
Expand Up @@ -1204,4 +1204,9 @@
defaults.afterScroll = function(top) {
console.log('top', top)
}
outline = new Outline(Outline.DEFAULTS)</script></body></html>
outline = new Outline(Outline.DEFAULTS)

// outline.reload({
// position: 'relative',
// hasToolbar: true
// })</script></body></html>
2 changes: 1 addition & 1 deletion docs/js/anchors.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/anchors.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/chapters.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/chapters.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/drawer.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/drawer.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/message.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/message.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/outline.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/outline.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/toolbar.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/js/toolbar.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion drawer.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion drawer.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion message.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion message.min.js.map

Large diffs are not rendered by default.

18 changes: 10 additions & 8 deletions outline.js
Original file line number Diff line number Diff line change
Expand Up @@ -515,28 +515,30 @@ class Outline extends Base {
document.body.removeChild($print)
}

if (count > 0) {
if (count > 0 && chapters) {
isOutside = chapters.isOutside()

chapters.destroy()
chapters = null

if (isOutside) {
if (isOutside && drawer) {
drawer.destroy()
drawer = null
}
}

toolbar.destroy()
toolbar = null
if (anchors) {
anchors.destroy()
anchors = null
}

anchors.destroy()
anchors = null
if (toolbar) {
toolbar.destroy()
toolbar = null
}

this.attr(Outline.DEFAULTS)

this.$emit('destroyed')

return this
}

Expand Down
2 changes: 1 addition & 1 deletion outline.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion outline.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@yaohaixiao/outline.js",
"version": "3.30.2",
"version": "3.30.3",
"description": "outline.js - 自动生成文章导读(Table of Contents)导航的 JavaScript 工具。",
"main": "outline.min.js",
"files": [
Expand Down
2 changes: 1 addition & 1 deletion toolbar.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion toolbar.min.js.map

Large diffs are not rendered by default.

0 comments on commit b3b4626

Please sign in to comment.