Giter Site home page Giter Site logo

xenforoaddonslionstoc's Introduction

Table Of Content Add-On for XenForo 2

Features

  • Provides the following BB codes:
    • TOC: For table of content placement.
    • H1, H2, H3, H4, H5, H6: For various headings level.
  • Editor buttons for headings and table of content.
  • Supports WYSIWYG editor.
  • Supports named anchor so you can reorganize headings in your post without worrying about broken links. Just do [H1=anchor name]My heading[/H1]

Demo

Visit slions.net to see what it looks like.

Release process

Go to the root of your XenForo installation and set the new release Version ID by running:

php cmd.php xf-addon:bump-version Slions/Toc --version-id 2020100

Generate the release archive using the following command:

php cmd.php xf-addon:build-release Slions/Toc

The generated ZIP file can be found in the following folder:

/src/addons/Slions/Toc/_releases

Resources

xenforoaddonslionstoc's People

Contributors

slion avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

xenforoaddonslionstoc's Issues

Error BOLD + HEADING

Hey [USER=151445]@Slion[/USER] !

Thanks for your plugin, but I have a little error.

When I put Bold + Heading 1, I got this alert :

[E_NOTICE] Array to string conversion : src/addons/Slions/Toc/BbCode.php:166

#0 src/addons/Slions/Toc/BbCode.php(166): XF::handlePhpError(8, '[E_NOTICE] Arra...', 's...', 166, Array)
#1 [internal function]: Slions\Toc\BbCode::handleTagH(Array, 'Bonjour+a+tous', Array, Array, Object(XF\BbCode\Renderer\SimpleHtml))
#2 src/XF/BbCode/Renderer/Html.php(307): call_user_func(Array, Array, 'Bonjour+a+tous', Array, Array, Object(XF\BbCode\Renderer\SimpleHtml))
#3 src/XF/BbCode/Traverser.php(61): XF\BbCode\Renderer\Html->renderTag(Array, Array)
#4 src/XF/BbCode/Traverser.php(37): XF\BbCode\Traverser->renderSubTree(Array, Array)
#5 src/XF/BbCode/Traverser.php(20): XF\BbCode\Traverser->renderAst(Array, Object(CMTV\Code\XF\BbCode\RuleSet), Array)
#6 src/XF/SubContainer/BbCode.php(220): XF\BbCode\Traverser->render('[H1=Bonjour+a+t...', Object(XF\BbCode\Parser), Object(CMTV\Code\XF\BbCode\RuleSet), Array)
#7 src/XF/Service/Message/Preparer.php(289): XF\SubContainer\BbCode->render('[H1=Bonjour+a+t...', 'simpleHtml', 'post:prepare', Object(NF\Discord\XF\Entity\Post))
#8 src/XF/Service/Message/Preparer.php(131): XF\Service\Message\Preparer->checkValidity('[H1=Bonjour+a+t...')
#9 src/XF/Service/Post/Preparer.php(98): XF\Service\Message\Preparer->prepare('[H1=Bonjour+a+t...', true)
#10 src/XF/Service/Post/Editor.php(127): XF\Service\Post\Preparer->setMessage('[H1=Bonjour+a+t...', true, true)
#11 src/XF/Pub/Controller/Post.php(58): XF\Service\Post\Editor->setMessage('[H1=Bonjour+a+t...')
#12 src/addons/BS/ScheduledPosting/XF/Pub/Controller/Post.php(12): XF\Pub\Controller\Post->setupPostEdit(Object(NF\Discord\XF\Entity\Post))
#13 src/addons/TickTackk/ChangeContentOwner/XF/Pub/Controller/Post.php(51): BS\ScheduledPosting\XF\Pub\Controller\Post->setupPostEdit(Object(NF\Discord\XF\Entity\Post))
#14 src/XF/Pub/Controller/Post.php(127): TickTackk\ChangeContentOwner\XF\Pub\Controller\Post->setupPostEdit(Object(NF\Discord\XF\Entity\Post))
#15 src/addons/BS/ScheduledPosting/XF/Pub/Controller/Post.php(24): XF\Pub\Controller\Post->actionEdit(Object(XF\Mvc\ParameterBag))
#16 src/addons/TickTackk/ChangeContentOwner/XF/Pub/Controller/Post.php(66): BS\ScheduledPosting\XF\Pub\Controller\Post->actionEdit(Object(XF\Mvc\ParameterBag))
#17 src/addons/SV/MultiPrefix/XF/Pub/Controller/Post.php(49): TickTackk\ChangeContentOwner\XF\Pub\Controller\Post->actionEdit(Object(XF\Mvc\ParameterBag))
#18 src/XF/Mvc/Dispatcher.php(350): SV\MultiPrefix\XF\Pub\Controller\Post->actionEdit(Object(XF\Mvc\ParameterBag))
#19 src/XF/Mvc/Dispatcher.php(257): XF\Mvc\Dispatcher->dispatchClass('XF:Post', 'Edit', Object(XF\Mvc\RouteMatch), Object(SV\MultiPrefix\XF\Pub\Controller\Post), NULL)
#20 src/XF/Mvc/Dispatcher.php(113): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(SV\MultiPrefix\XF\Pub\Controller\Post), NULL)
#21 src/XF/Mvc/Dispatcher.php(55): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#22 src/XF/App.php(2300): XF\Mvc\Dispatcher->run()
#23 src/XF.php(488): XF\App->run()
#24 index.php(20): XF::runApp('XF\\Pub\\App')
#25 {main}
array(4) {
  ["url"] => string(17) "/posts/10340/edit"
  ["referrer"] => string(48) "https://forum.the-programmer.com/post/test.1795/"
  ["_GET"] => array(0) {
  }
  ["_POST"] => array(9) {
    ["message_html"] => string(86) "<h1 data-id="Bonjour+a+tous"><strong>Bonjour a tous,</strong></h1><p>ds</p><p><br></p>"
    ["_xfInlineEdit"] => string(1) "1"
    ["attachment_hash"] => string(32) "bbdd4e6c4e1c100eff3f12196036a8a8"
    ["attachment_hash_combined"] => string(85) "{"type":"post","context":{"post_id":10340},"hash":"bbdd4e6c4e1c100eff3f12196036a8a8"}"
    ["username"] => string(0) ""
    ["_xfToken"] => string(8) "********"
    ["_xfRequestUri"] => string(16) "/post/test.1795/"
    ["_xfWithData"] => string(1) "1"
    ["_xfResponseType"] => string(4) "json"
  }
}

Can you fix it please ?

Emoji not rendered in headers

Emoji in headers are not rendered thus user just gets her platform native unicode emoji instead of the rendered version from XenForo.

Hx BB code named option id syntax does not survive WYSIWIG toggle

Have a heading like:

[H1 id='myid']my heading[/H1]ฬ€

Toggle between WYSIWIG and BB code editor modes.
Your header is now shown like:

[H1=myid]my heading[/H1]ฬ€

It has no impact on functionality but we should really default to the newer syntax.
See: Slions\Toc\XF\Html\Renderer\BbCode.php function handleTagH.

Improve paragraph button using javascript

By default XenForo only provides three level of headings in the WYSIWYG editor, from h2 to h4. We ought to do better than that, looks like some javascript hook is needed to configure our editor.
Search for Heading 1 in the XenForo code base I guess.

TOC not rendered when saving without change

Try it on:
https://staging.slions.net/threads/slions-toc-debug.79/

  • Load page
  • Edit post
  • Save post without doing any change

Notice the TOC BbCodes and emojis are not rendered.
It has to do with the fact that our parser is not set in that case for some reason.

To fix this for good we should really remove our parser hack and avoid rendering headings anew just for our TOC.
Instead I would collect our renderer headings as they are processed and inject our TOC from an overridden filterFinalOutput.

Support named fragment

We should be able to support named fragment to avoid the automatically generated ones being outdated when headers order is changed. I guess the one we generate could also be based on the title content rather than just the index.

It could like that for the name ones I guess:
[h1 href="#title"]Title[/h1]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.