eskander / [MyAnimeList] Advanced BBCode Editor

// ==UserScript==
// @name         [MyAnimeList] Advanced BBCode Editor
// @namespace    https://github.com/eskander
// @version      0.4.2-alpha
// @description  Advanced BBCode Editor for MyAnimeList.net
// @author       eskander
// @license      MIT

// @include      *://myanimelist.net/mymessages*
// @include      *://myanimelist.net/editprofile*
// @include      *://myanimelist.net/myblog*
// @include      *://myanimelist.net/clubs*
// @include      *://myanimelist.net/profile*
// @include      *://myanimelist.net/editprofile
// @include      *://myanimelist.net/comtocom*
// @include      *://myanimelist.net/comments*
// @include      *://myanimelist.net/editlist*
// @include      *://myanimelist.net/panel*
// @include      *://myanimelist.net/people*
// @include      *://myanimelist.net/myfriends*
// @include      *://myanimelist.net/blog*

// @exclude      *://myanimelist.net/forum*
// @exclude      *://myanimelist.net/editprofile.php?go=stylepref&do=cssadv&id=*

// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/sceditor.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/icons/monocons.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/formats/bbcode.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/plugins/autosave.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/plugins/autoyoutube.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/plugins/plaintext.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/plugins/undo.js
// @require      https://cdn.rawgit.com/eskander/userscripts-collection/eab22971ff8dc64d19727b083751f2bc9df71b54/MyAnimeList%20Advanced%20BBCode%20Editor/plugins/alternative-lists.js

// @icon         https://www.google.com/s2/favicons?domain=myanimelist.net
// @homepage     https://github.com/eskander/userscripts-collection
// @supportURL   https://github.com/eskander/userscripts-collection/issues
// @compatible   firefox Tested with Tampermonkey
// @compatible   chrome Tested with Tampermonkey
// @compatible   opera Tested with Tampermonkey Beta
// @grant        none
// ==/UserScript==

'use strict';

(function() {

    $("head").append ('<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/themes/square.min.css" >');

    sceditor.command.set('date', {
        exec: function () {
            function _date(editor) {
                var	now = new Date(),
                    year = now.getYear(),
                    month = now.getMonth() + 1,
                    day = now.getDate();

                if (year < 2000) {
                    year = 1900 + year;
                }

                if (month < 10) {
                    month = '0' + month;
                }

                if (day < 10) {
                    day = '0' + day;
                }

                var mm = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
                month = mm[month - 1];

                return editor.opts.dateFormat
                    .replace(/year/i, year)
                    .replace(/month/i, month)
                    .replace(/day/i, day);
            }
            this.insertText(_date(this));
        },
        txtExec: function () {
            this.insertText(_date(this));
        },
        tooltip: 'Insert current date'
    },);

    sceditor.command.set('time', {
        exec: function () {
            function _time() {
                var	now = new Date(),
                    hours = now.getHours(),
                    mins = now.getMinutes(),
                    suf = ' AM';

                if (hours > 12) {
                    hours = hours-12;
                    suf = ' PM';
                }

                if (hours < 10) {
                    hours = '0' + hours;
                }

                if (mins < 10) {
                    mins = '0' + mins;
                }

                return hours + ':' + mins + suf;
            }
            this.insertText(_time());
        },
        txtExec: function () {
            this.insertText(_time());
        },
        tooltip: 'Insert current time'
    },);

    for (var i = 0; i < $('.textarea').length; i++) {
        var textarea = $('.textarea')[i];
        sceditor.create(textarea, {
            format: 'bbcode',
            icons: 'monocons',
            dateFormat: 'month day, year',
            style: '//cdnjs.cloudflare.com/ajax/libs/sceditor/2.1.3/themes/content/default.min.css',
            plugins: 'autosave,autoyoutube,plaintext,undo,alternative-lists',
            toolbar: 'source|bold,italic,underline,strike|center,right|color,removeformat|bulletlist,orderedlist|code,quote,image,youtube|link,unlink|date,time|maximize',
            //toolbar: 'source|bold,italic,underline,strike|left,center,right|size,color,removeformat|bulletlist,orderedlist|code,quote,image,youtube|link,unlink|date,time|maximize',
            emoticonsEnabled: false,
            autoExpand: true,
            enablePasteFiltering: true,
            autosave: {
                storageKey: 'sce-autodraft-' + i.toString() + location.pathname + location.search,
                expires: 180000
            },
        });
    }

})();