Code Monkey home page Code Monkey logo

markdown-it-reddit-spoiler's Introduction


markdown-it-reddit-spoiler

npm

Reddit style spoilers for markdown-it by ${Mr.DJA}.


This is a plugin for markdown-it uses markdown-it-regexp to render spoilers like those on Reddit: >!spoiler!<. Sounds good huh? ^-^

Install:

Node.js:

To install the plugin simply use this command:

npm install markdown-it-reddit-spoiler --save

Then simply require it:

const markdownitRedditSpoiler = require("markdown-it-reddit-spoiler");
// => object

This method will work on Node, but it can also work on browser after compiling it using Webpack.

Browser:

A pre-compiled version for browser is available on JsDeliver CDN:

<script src='https://cdn.jsdelivr.net/gh/iMrDJAi/markdown-it-reddit-spoiler/dist/main.js'></script>

It will be declared as window.markdownitRedditSpoiler:

const markdownitRedditSpoiler = window.markdownitRedditSpoiler;
// => object

Usage:

You will see these methods and properties on the returned object:

Name Description
spoiler This will render spoilers for you <3
blockquote This is required to stop blockquotes from overriding spoilers
nestedRenderer This is required to render the nested tags inside spoilers
env This is needed to enable references outside spoilers
openTag This is used to customize the open tag of spoilers since HTML doesn't have a real spoiler tag
closeTag This one is for customizing the spoilers close tag

This is a simple example:

const markdownit = require('markdown-it'); //Our markdown renderer
const markdownitRedditSpoiler = require('markdown-it-reddit-spoiler'); //Our package

function renderMarkdown(text) { //A function to render markdown from a given string

    //This will deal with references
    let env = {};
    markdownit('zero').enable('reference').parse(text, env);
    markdownitRedditSpoiler.env = env;

    //The main renderer
    var mdRender = markdownit({
        linkify: true,
    }).use(markdownitRedditSpoiler.spoiler) //Spoilers enabled
    .use(markdownitRedditSpoiler.blockquote); //Spoilers friendly block quotes enabled

    return mdRender.render(text); //Render Markdown!
}

Then add some css:

.md-spoiler {
  display: inline-block;
  background: #1b1b1b;
  border-radius: 4px;
  padding: 4px;
}

.md-spoiler>* {
  z-index: -1;
  opacity: 0;
  position: relative;
}

.md-unhidenspoiler>* {
  opacity: 1 !important;
  z-index: 1 !important;
}

Preview:

image

A more advanced example:

const markdownit = require('markdown-it'); //Our markdown renderer
const markdownitIns = require('markdown-it-ins'); //Another optional plugin
const markdownitRedditSpoiler = require('markdown-it-reddit-spoiler'); //Our package

function renderMarkdown(text) { //A function to render markdown from a given string

    //This will deal with references
    let env = {};
    markdownit('zero').enable('reference').parse(text, env);
    markdownitRedditSpoiler.env = env;

    //This one is for customizing the nested tags renderer
    markdownitRedditSpoiler.nestedRenderer = function () {
        let renderer = markdownit({
             linkify: true,
        }).disable('table').disable('list').disable('heading')
        .disable('lheading').disable('fence')
        .disable('blockquote').disable('code').disable('hr')
        .use(markdownitIns); //Now markdownitIns will work inside spoilers
        return renderer;
    }

    //It's very simple to customize the open/close tag of spoilers
    markdownitRedditSpoiler.openTag = '<details><summary>Spoiler ⚠</summary>';
    markdownitRedditSpoiler.closeTag = '</details>';

    //The main renderer
    var mdRender = markdownit({
        linkify: true,
    }).use(markdownitIns)
    .use(markdownitRedditSpoiler.spoiler) //Spoilers enabled
    .use(markdownitRedditSpoiler.blockquote); //Spoilers friendly block quotes enabled

    return mdRender.render(text); //Render Markdown!
}

Preview:

image

Enjoy <3.

Dependents Projects:

Wanna use markdown-it-reddit-spoiler on your next big project? Let me now and it will be listed here! :)

Notes:

  • This package has made by ${Mr.DJA}.
  • Do you like it? Gimme a star ⭐ and I'll smile 😃.
  • You are free to suggest anything and I will try to add it soon if I found it useful.
  • If you found any mistake (including the README file) feel free to help to fix it.
  • Please report any bugs.
  • Made with ❤ in Algeria 🇩🇿.

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.