Markdown Plus is a markdown editor with extra features

Overview

Markdown Plus

Code Climate

Markdown Plus ("M+" or "mdp" for short) is a markdown editor with extra features.

Online demo: mdp.tylingsoft.com

Markdown Plus

Apps

We currently don't accept donations. The best way to support our development is to buy our apps.

Markdown Plus

Markdown Plus is available for both OS X and Windows. You get every feature of the web version plus lots of advanced features.

Markdown Mate

Markdown Mate is a markdown previewer, it's not going to replace your favorite editor but handles everything about markdown.

Features

  • GitHub flavored markdown
  • Live preview with scroll sync
  • Source code highlight
  • Footnote
  • Table of Contents
  • Task list
  • Abbreviation
  • Custom container
  • Definition list
  • Emoji, Font Awesome icon
  • Mathematical formula, AsciiMath
  • Mermaid: Flowchart, Sequence diagram, Gantt diagram, Class diagram
  • Vim mode, Emacs mode
  • Themes
  • Plugins
  • Chart.js: line, bar, radar, polar area, pie, doughnut and bubble

Setup & Run

Optionally this project, then:

fork it
git clone to your local
yarn install
yarn watch
open dist/index.html in your browser

How to use Markdown Plus in your projects

Please take dist/index.html as example.

Thanks

  • Thanks to those who have bought our apps to support our development !
  • Thanks to all the dependent open source projects' authors !
  • Thank ASTND for designing the icon !
  • Thanks to those who have contributed by creating PRs / issues !

License

MIT

Copyright © 2015 - 2017 Tylingsoft




Todo

  • Get rid of jQuery
Comments
  • 一定要放置<boby>的直接子结点上吗?

    一定要放置的直接子结点上吗?

    一定要放在<boby>的直接子结点上吗? 貌似放到子节点的子节点上就报错??

    UI Layout Initialization Error
    The center-pane element does not exist.
    The center-pane is a required element
    

    能嵌入到某个div内吗,然后自己搞全屏或非全屏吗?

    opened by xaero7 14
  • 考虑加入数学inline公式支持?

    考虑加入数学inline公式支持?

    目前数学公式似乎只能由

    ``math
    x ^ 2 + y ^ 2 = z ^ 2
    ``
    

    给出,是否考虑加入行内公式呢? 例如:

    Let $latex S(n)$ be the n-th partial sum of series $latex a_n$. 
    

    另外我很喜欢markdown-plus的LaTeX显示,因为比Mou加载速度更快!

    opened by songsuoyuan 12
  • Hangs if I have large images (desktop)

    Hangs if I have large images (desktop)

    This is a bug report for desktop version.

    When I have markup like this:

    foo
    
    ![](img/foo1.png)
    
    ![](img/foo2.png)
    
    bar
    
    ![](img/bar.PNG)
    
    abc
    
    ![](img/abc.PNG)
    
    xyz
    
    ...
    

    (all images are cropped screenshots, about 1600x500px), the program stops to respond and I forced to close it without saving.

    As I understand, it's because program cannot correctly sync code and preview panes, since the images are quite big (in pixels measurement, not in megabytes).

    opened by john-cj 7
  • 中文支持问题

    中文支持问题

    不知道作者用的是什么环境,我放到tomcat容器中,使用EDGE打开,正常。如果是用chrome+tomcat的环境,输入中文会出现一系列的问题。 f xdzvogecw5 s8ycxng 8 qj56kj sokby fti uc 9r 8 2dzcius ur 05f 3 qw 如图所示,当输入中文时,当输入结束后,字符不会立马出现,当再打个空格时,空格会跑到中文的前面,中文较多时,更加有问题。把之前输入的中文内容删除后,输入新的内容,原来删除的内容也会奇怪的再次出现

    opened by zipzou 6
  • Math formulas

    Math formulas

    Math formulas are little bit crazy.

    I follow https://meta.wikimedia.org/wiki/Help:Displaying_a_formula

    σ => \sigma and so long.. But how to write & symbol syntax \And throw error Also \mathbb{letter} does not work

    opened by petrleocompel 6
  • Custom JS not working for mermaid

    Custom JS not working for mermaid

    I'm passing in some custom JS to the mermaid sequenceDiagram config. It is not working. I think perhaps the JS gets included before the mermaid object gets created? If that is the case it would be nice to be able to upload JS runs after everything else. Or perhaps there is an loaded event I can hook into?

    example JS:

    mermaid.sequenceConfig = { diagramMarginX:50, diagramMarginY:10, boxTextMargin:5, noteMargin:10, messageMargin:35, mirrorActors:true };

    opened by michaelritsema 5
  • sequenceDiagram arrowhead disappeared in exported html

    sequenceDiagram arrowhead disappeared in exported html

    I'm using markdown plus app purchased on AppStore.

    Create new md file, write more than one sequenceDiagram and export to html, open it in browser, you could see the arrowheads are missing except the last one. While pdf export is correct.

    sequenceDiagram
    a->>b: the arrowhead is missing
    
    sequenceDiagram
    c->>d: only the last one is ok
    

    购买的markdown plus,画多个序列图,导出成html,只有最后一个序列图有箭头,之前的只剩横线没有箭头了。

    opened by Bryant-Yang 4
  • Blog Content by markdown-plus

    Blog Content by markdown-plus

    I want to create blog system and use markdown-core for display my markdown files

    and can I use markdown-plus to edit .md file and save it ? last one how to use markdown-plus plugin

    autosave because I not seem a textarea. Sorry for my bad language because it not my own language

    opened by Braraear 4
  • Bought your app today on App Store

    Bought your app today on App Store

    Would love the ability to show/hide the toolbar... I find it quite distracting since I know markdown and don't use the toolbar buttons for formatting etc. Any chance we can get an update with the ability to turn it off?

    opened by jocubeit 4
  • enhacement: replacing underscore with plain JS

    enhacement: replacing underscore with plain JS

    _.debounce function is replaced with plain JS. (sorry I dont use git)

    var editor;
    
    //http://davidwalsh.name/javascript-debounce-function
    function debounce(func, wait, immediate) {
        var timeout;
        return function() {
            var context = this, args = arguments;
            var later = function() {
                timeout = null;
                if (!immediate) func.apply(context, args);
            };
            var callNow = immediate && !timeout;
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
            if (callNow) func.apply(context, args);
        };
    };
    
    $(document).ready(function() {
    
      $.getJSON('bower.json', function(json) {
        $('#version-string').html(json.version); // 从 bower.json 读取版本号
      });
    
      // 构造上中右三个面板
      $('body').layout({
        resizerDblClickToggle: false,
        resizable: false,
        slidable: false,
        togglerLength_open: '100%',
        togglerLength_closed: '100%',
        north: {
          size: '1px', // 只是占位,真实大小由内容决定
          togglerTip_open: 'Hide Toolbar',
          togglerTip_closed: 'Show Toolbar'
        },
        east: {
          size: '50%',
          togglerTip_open: 'Hide Preview',
          togglerTip_closed: 'Show Preview',
          onresize: function() {
            editor.session.setUseWrapMode(false); // ACE的wrap貌似有问题,这里手动触发一下。
            editor.session.setUseWrapMode(true);
          }
        }
      });
    
      // 左侧编辑器
      editor = ace.edit("editor");
      editor.$blockScrolling = Infinity;
      editor.renderer.setShowPrintMargin(false);
      editor.session.setMode("ace/mode/markdown");
      editor.session.setUseWrapMode(true);
      editor.setFontSize('14px');
      editor.focus();
    
      // 编辑器的一些拓展方法
      editor.selection.smartRange = function() {
        var range = editor.selection.getRange();
        if(!range.isEmpty()) {
          return range; // 用户手动选中了一些文字,直接用这个
        }
        // 没有选中任何东西
        var _range = range; // 备份原始range
        range = editor.selection.getWordRange(range.start.row, range.start.column); // 当前单词的range
        if(editor.session.getTextRange(range).trim().length == 0) { // 选中的东西是空或者全空白
          range = _range; // 还使用原始的range
        }
        return range;
      };
    
      // 设置marked
      var renderer = new marked.Renderer();
      renderer.listitem = function(text) {
        if(!/^\[[ x]\]\s/.test(text)) {
          return marked.Renderer.prototype.listitem(text);
        }
        // 任务列表
        var checkbox = $('<input type="checkbox" class="taskbox" disabled="disabled"/>');
        if(/^\[x\]\s/.test(text)) { // 完成的任务列表
          checkbox.attr('checked', true);
        }
        return $(marked.Renderer.prototype.listitem(text.substring(4))).addClass('nostyle').prepend(checkbox)[0].outerHTML;
      }
      var mermaidError;
      mermaid.parseError = function(err, hash){
        mermaidError = err;
      };
      renderer.code = function(code, language) {
        code = code.trim();
        var firstLine = code.split(/\n/)[0].trim();
        if(language === 'math') { // 数学公式
          var tex = '';
          code.split(/\n\n/).forEach(function(line){ // 连续两个换行,则开始下一个公式
            line = line.trim();
            if(line.length > 0) {
              try {
                tex += katex.renderToString(line, { displayMode: true });
              } catch(err) {
                tex += '<pre>' + err + '</pre>';
              }
            }
          });
          return tex;
        } else if(firstLine === 'sequenceDiagram' || firstLine.match(/^graph (?:TB|BT|RL|LR|TD);?$/)) {
          if(firstLine === 'sequenceDiagram') {
            code += '\n'; // 如果末尾没有空行,则语法错误
          }
          if(mermaid.parse(code)) {
            return '<div class="mermaid">' + code + '</div>';
          } else {
            return '<pre>' + mermaidError + '</pre>';
          }
        } else {
          return marked.Renderer.prototype.code.apply(this, arguments);
        }
      }
      marked.setOptions({
        renderer: renderer,
        gfm: true,
        tables: true,
        breaks: false,
        pedantic: false,
        sanitize: false,
        smartLists: true,
        smartypants: true
      });
    
      // 实时监听用户的编辑
      editor.session.on('change', function() {
        lazy_change();
      });
    
      var lazy_change = debounce(function() { // 用户停止输入256毫秒之后才会触发
        $('.markdown-body').empty().append(marked(editor.session.getValue())); // 实时预览
        console.log(editor.session.getValue())
        $('pre').addClass('prettyprint').addClass('linenums');
        prettyPrint(); // 语法高亮
        $('img[src^="emoji/"]').each(function() { // 转换emoji路径
          $(this).attr('src', 'bower_components/emoji-icons/' + $(this).attr('src').substring(6) + '.png');
        });
        mermaid.init(); // 生成流程图,顺序图等
      }, 256, false);
    
      // h1 - h6 heading
      $('.heading-icon').click(function() {
        var level = $(this).data('level');
        var p = editor.getCursorPosition();
        p.column += level + 1; // 光标位置会产生偏移
        editor.navigateTo(editor.getSelectionRange().start.row, 0); // navigateLineStart 在 wrap 的时候有问题
        editor.insert('#'.repeat(level) + ' ');
        editor.moveCursorToPosition(p); // 恢复光标位置
        editor.focus();
      });
    
      // styling icons
      $('.styling-icon').click(function() {
        var modifier = $(this).data('modifier');
        var range = editor.selection.smartRange();
        var p = editor.getCursorPosition();
        p.column += modifier.length; // 光标位置会产生偏移
        editor.session.replace(range, modifier + editor.session.getTextRange(range) + modifier);
        editor.moveCursorToPosition(p); // 恢复光标位置
        editor.selection.clearSelection(); // 不知为何上一个语句会选中一部分文字
        editor.focus();
      });
    
      // <hr/>
      $('#horizontal-rule').click(function() {
        var p = editor.getCursorPosition();
        if(p.column == 0) { // 光标在行首
          editor.selection.clearSelection();
          editor.insert('\n---\n');
        } else {
          editor.navigateTo(editor.getSelectionRange().start.row, Number.MAX_VALUE); // navigateLineEnd 在 wrap 的时候有问题
          editor.insert('\n\n---\n');
        }
        editor.focus();
      });
    
      // list icons
      $('.list-icon').click(function() {
        var prefix = $(this).data('prefix');
        var p = editor.getCursorPosition();
        p.column += prefix.length; // 光标位置会产生偏移
        var range = editor.selection.getRange();
        for(var i = range.start.row + 1; i < range.end.row + 2; i++) {
          editor.gotoLine(i);
          editor.insert(prefix);
        }
        editor.moveCursorToPosition(p); // 恢复光标位置
        editor.focus();
      });
    
      $('#link-icon').click(function() {
        var range = editor.selection.smartRange();
        var text = editor.session.getTextRange(range);
        if(text.trim().length == 0) {
          text = 'link description';
        }
        editor.session.replace(range, '[' + text +'](http://example.com/ "optional title")');
        editor.focus();
      });
    
      $('#image-icon').click(function() {
        var text = editor.session.getTextRange(editor.selection.getRange()).trim();
        if(text.length == 0) {
          text = 'image description';
        }
        editor.insert('![' + text + '](http://example.com/example.png)');
        editor.focus();
      });
    
      $('#code-icon').click(function() {
        var text = editor.session.getTextRange(editor.selection.getRange()).trim();
        if(text.length == 0) {
          text = 'enter code here';
        }
        editor.insert('\n```\n' + text + '\n```\n');
        editor.focus();
      });
    
      $('#table-icon').click(function() {
        var tableTemplate = 'header 1 | header 2\n---|---\nrow 1 col 1 | row 1 col 2\nrow 2 col 1 | row 2 col 2';
        editor.insert(''); // 删除选中的部分
        var p = editor.getCursorPosition();
        if(p.column == 0) { // 光标在行首
          editor.selection.clearSelection();
          editor.insert('\n' + tableTemplate + '\n\n');
        } else {
          editor.navigateTo(editor.getSelectionRange().start.row, Number.MAX_VALUE);
          editor.insert('\n\n' + tableTemplate + '\n');
        }
        editor.focus();
      });
    
      // emoji icon
      $(document).on('opened', '#emoji-modal', function() {
        $('#emoji-code').focus();
      });
      $('#emoji-code').keyup(function(e) {
       if(e.which == 13) { // 回车键确认
          $('#emoji-confirm').click();
        }
      });
      $(document).on('confirm', '#emoji-modal', function() {
        var emoji_code = $('#emoji-code').val().trim();
        if(emoji_code.length > 0) {
          editor.insert('<img src="emoji/' + emoji_code + '" width="18"/>');
          $('#emoji-code').val('');
        }
      });
    
      // Font Awesome icon
      $(document).on('opened', '#fa-modal', function() {
        $('#fa-code').focus();
      });
      $('#fa-code').keyup(function(e) {
       if(e.which == 13) { // 回车键确认
          $('#fa-confirm').click();
        }
      });
      $(document).on('confirm', '#fa-modal', function() {
        var fa_code = $('#fa-code').val().trim();
        if(fa_code.length > 0) {
          editor.insert('<i class="fa fa-' + fa_code + '"/>');
          $('#fa-code').val('');
        }
      });
    
      // Ionicons icon
      $(document).on('opened', '#ion-modal', function() {
        $('#ion-code').focus();
      });
      $('#ion-code').keyup(function(e) {
       if(e.which == 13) { // 回车键确认
          $('#ion-confirm').click();
        }
      });
      $(document).on('confirm', '#ion-modal', function() {
        var ion_code = $('#ion-code').val().trim();
        if(ion_code.length > 0) {
          editor.insert('<i class="icon ion-' + ion_code + '"/>');
          $('#ion-code').val('');
        }
      });
    
      $('#math-icon').click(function(){
        var text = editor.session.getTextRange(editor.selection.getRange()).trim();
        if(text.length == 0) {
          text = 'E = mc^2';
        }
        editor.insert('\n```math\n' + text + '\n```\n');
        editor.focus();
      });
    
      $('#flow-icon').click(function(){
        var text = editor.session.getTextRange(editor.selection.getRange()).trim();
        if(text.length == 0) {
          text = 'graph LR\nA-->B';
        }
        editor.insert('\n```\n' + text + '\n```\n');
        editor.focus();
      });
    
      $('#seq-icon').click(function(){
        var text = editor.session.getTextRange(editor.selection.getRange()).trim();
        if(text.length == 0) {
          text = 'sequenceDiagram\nA->>B: How are you?\nB->>A: Great!';
        }
        editor.insert('\n```\n' + text + '\n```\n');
        editor.focus();
      });
    
      // modals
      $(document).on('close', '.remodal', function(e) {
        editor.focus(); // 关闭modal,编辑器自动获得焦点
      });
    
    });
    
    opened by mintyowl 4
  • Lated commit bugs

    Lated commit bugs

    The latest commit looks for a bundle.js and css that don't exist in the repository.

    We are including this project as part of a larger page and are getting some incompatibility errors with Select2.js and slimscroll with the version we downloaded last week.

    When it is included on the page, the editor, toolbar and preview disappear after a moment unless the container is given an absolute size in pixels. It didn't seem to establish any size for itself, which then triggered the overflow hidden, but if I disable that property it has overlapping content positioned atop it. Putting it in an outer div and specifying the size helped, but we can't do a responsive layout with it.

    Great project, we are looking forward to using it and chose it because of your activity in updating the project, and the activity you show in responding to issues. Thanks you very much and look forward to your thoughts.

    opened by ajhalls 3
  • Online real-time collaborative edition?

    Online real-time collaborative edition?

    Hello,

    I'm not sure it's the right place for asking a feature-related question... at https://github.com/tracim/tracim we are working on markdownplus integration. A recurrent feature requested for all online edition is real-time collaborative edition.

    Is there any plans to add this feature in markdownplus?

    Thanks for your answer

    opened by lebouquetin 0
  • Include license as a file

    Include license as a file

    Our legal department believes it to be mandatory that an open source project includes the license explicitly. This is also the recommendation from github

    Some projects include information about their license in their README. For example, a project's README may include a note saying "This project is licensed under the terms of the MIT license."

    As a best practice, we encourage you to include the license file with your project.

    opened by surfmuggle 0
  • MDP Registered Last Versión Failed to Save As

    MDP Registered Last Versión Failed to Save As

    I inform that by using the "Save as" function of the Markdown Plus, the program saved me an earlier version, and I lost the advances I had made in it. I had also activated the "save" plugin, but later I tried to deactivate it and the problem persisted.

    opened by nelbren 0
  • 请问怎么把代码弄成index.bundle.js,yarn watch时报这个错

    请问怎么把代码弄成index.bundle.js,yarn watch时报这个错

    请问怎么把代码弄成index.bundle.js

    yarn watch时报这个错: ` D:\ws_now\markdown-plus>yarn watch yarn run v1.9.4 $ yarn build -- --watch warning From Yarn 1.0 onwards, scripts don't require "--" for options to be forwarded. In a future version, any explicit "--" will be forwarded as-is to the scripts. $ node -r babel-register node_modules/.bin/webpack --progress --colors --watch D:\ws_now\markdown-plus\node_modules.bin\webpack:2 basedir=$(dirname "$(echo "$0" | sed -e 's,,/,g')") ^^^^^^^

    SyntaxError: missing ) after argument list at new Script (vm.js:73:7) at createScript (vm.js:245:10) at Object.runInThisContext (vm.js:297:10) at Module._compile (internal/modules/cjs/loader.js:657:28) at Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Object.require.extensions.(anonymous function) [as .js] (D:\ws_now\markdown-plus\node_modules\babel-register\lib\node.js:152:7) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3) at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

    D:\ws_now\markdown-plus>yarn run test -o --watch yarn run v1.9.4 error Command "test" not found. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. `

    opened by lizhouxx 0
Take your boring markdown document and add some columns to it

Take your boring markdown document and add some columns to it! With Multi Column Markdown rather than limiting your document layout to a single linear file you can now define blocks of data to be layed out horizontally next to each other. This additional functionality gives you the freedom to structure your notes in more creative ways.

Cameron Robinson 91 Jan 2, 2023
WebNote is a simple, plain-text note-taking app for the web with Markdown support.

WebNote is a simple, plain-text note-taking app for the web with Markdown support. What you see is what you paste. No WYSIWIG, no formatting pasted from the web, and no features you don't need or want.

Ivan Kuznietsov 3 Feb 7, 2022
Vite plugin to convert markdown to html with front-matter extraction and build-time syntax highlighting

Vite plugin to convert markdown to html with front-matter extraction and build-time syntax highlighting

Saurabh Daware 9 Sep 18, 2022
Convert a well formed GitHub Issue Form populated Markdown body into a JSON data file in the repository

Convert a well formed GitHub Issue Form populated Markdown body into a JSON data file in the repository

Zach Leatherman 16 Sep 28, 2022
A collection of plug-ins that extend the Markdown-it parser

markdown-it-plugins A collection of plug-ins that extend the Markdown-it parser. Install npm i markdown-it-plugins -D Usage import MarkdownIt from 'ma

Chestnut 8 Mar 22, 2022
This extensions adds blocks to help you create your own carnival games in MakeCode Arcade using throwable balls, extra timer functions, and extra game-over options.

Usage This extensions adds blocks to help you create your own carnival games in MakeCode Arcade using throwable balls, extra timer functions, and extr

Microsoft 6 Nov 16, 2022
Pure JS Auto Complete plugin with extra features.

Cndk.AutoComplete.js Cndk.AutoComplete.js is a pure JavaScript plugin. It performs auto-complete operations within an INPUT. Installation Include the

ILKERC 1 Jan 25, 2022
A chrome extension which helps change ace editor to monaco editor in web pages, supporting all features including autocompletes.

Monaco-It Monaco-It is a chrome extension turning Ace Editor into Monaco Editor, supporting all features including autocompletes. 一些中文说明 Supported Lan

null 3 May 17, 2022
A simple, beautiful, and embeddable JavaScript Markdown editor. Delightful editing for beginners and experts alike. Features built-in autosaving and spell checking.

SimpleMDE - Markdown Editor A drop-in JavaScript textarea replacement for writing beautiful and understandable Markdown. The WYSIWYG-esque editor allo

Sparksuite 9.3k Jan 4, 2023
A markdown editor. http://lab.lepture.com/editor/

Editor A markdown editor you really want. Sponsors Editor is sponsored by Typlog. Overview Editor is not a WYSIWYG editor, it is a plain text markdown

Hsiaoming Yang 2.8k Dec 19, 2022
A solid, fast Promises/A+ and when() implementation, plus other async goodies.

when.js When.js is a rock solid, battle-tested Promises/A+ and when() implementation, including a complete ES6 Promise shim. It's a powerful combinati

The Javascript Architectural Toolkit 3.4k Dec 18, 2022
🎉🎉使用Vite + Vue3 + TypeScript + Element-plus + Mock开发的后台管理系统🎉🎉

Vite-Vue-Admin 介绍 Cli 配置 vue3.X vuex@4 vue-router@4 vite@2 typescript mock 内置 element-plus 二开封装 upload-file (文件上传,支持指定文件格式,文件大小) powerful-table (多功能表格

PengXiaoShuai 103 Dec 17, 2022
🎉 基于 vite 2.0 + vue 3.0 + vue-router 4.0 + vuex 4.0 + element-plus 的后台管理系统vue3-element-admin

vue3-element-admin ?? 基于 Vite 2.0 + Vue3.0 + Vue-Router 4.0 + Vuex 4.0 + element-plus 的后台管理系统 简介 vue3-element-admin 是一个后台前端解决方案,它基于 vue3 和 element-plu

雪月欧巴 84 Nov 28, 2022
Animate Plus is a JavaScript animation library focusing on performance and authoring flexibility

Animate Plus Animate Plus is a JavaScript animation library focusing on performance and authoring flexibility. It aims to deliver a steady 60 FPS and

Benjamin De Cock 5.9k Jan 2, 2023
Awesome critique of crypto / web3. Curated list of high quality critique plus background. Seek to be as constructive as possible.

Awesome critique of crypto/web3 Awesome critique of crypto/web3, etc. Contributions are welcome. Critique General Stephen Diehl series - https://www.s

Rufus Pollock 1.5k Jan 1, 2023
A curated collection of all country flags in SVG — plus the CSS for easier integration

flag-icons A curated collection of all country flags in SVG — plus the CSS for easier integration. See the demo. Install You can either download the w

Lipis 9.1k Jan 4, 2023
TypeScript + Nextjs + Tailwind => TNT🧨 (plus Prettier and ESLint configuration).

Bye bye next boilerplate, welcome to TNT! About This is TNT, Nextjs boilerplate powered by Typescript, Tailwind. This template also has customized ESL

Arvîn mostafaei 15 Aug 7, 2022
Extra JavaScript string methods.

string.js string.js, or simply S is a lightweight (< 5 kb minified and gzipped) JavaScript library for the browser or for Node.js that provides extra

JP Richardson 1.8k Dec 17, 2022
An Easy to use and advanced working multiguild Waitingroom Bot written in discord.js v13 without any extra modules.

Multiguild-Waitingroom-v13 An Easy to use and advanced working multiguild Waitingroom Bot written in discord.js v13 without any extra modules. It is m

Tomato6966 17 Dec 11, 2022