2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:妹空酱/LyricColorizition.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox/Safari:按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
  • Google Chrome:按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
  • Internet Explorer:按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”
  • Opera:在“工具→首选项”中清除缓存
如果您已登录但该页面出现未登录状态,请尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
添加代码后的本页地址如下:-{R|https://moegirl.icu/User:%E5%A6%B9%E7%A9%BA%E9%85%B1/LyricColorizition.js?_=1}-
/*
  此脚本功能为提供快速的歌词上色方法。
  引入此脚本将在编辑页面右侧显示一个颜色管理面板。
  点击并添加颜色即可。
  '''本脚本属随手作品,代码无可读性,请勿参考'''。
  本脚本仅支持现代浏览器。
  本脚本依赖Wikiplus的前端组件。因此你需要启用Wikiplus。
  
  使用说明:
  单击颜色,可以将当前选中的文字使用color模板着色。再次单击可以取消上色。
  双击颜色,可以删除这一颜色。
  Ctrl+1~Ctrl+9将分别作为颜色的快捷键,例如Ctrl+1就是第一种颜色。
  
  一些调用建议:
  可以新建一个书签,内容为:
  javascript:mw.loader.load('http://zh.moegirl.org/index.php?title=User:%E5%A6%B9%E7%A9%BA%E9%85%B1/LyricColorizition.js&action=raw&ctype=text/javascript');
  需要本脚本时点击书签即可。
*/
/*
  By: Eridanus Sora
*/
/* global Wikiplus */
/* global mw */
'use strict';

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

$(document).ready(function () {
    var LC = (function () {
        function LC(element) {
            _classCallCheck(this, LC);

            var self = this;
            this.area = element;
            this.colorList = [];
            var controlPanel = $('<div>').css({
                'position': 'fixed',
                'top': '40%',
                'right': '0px',
                'min-height': '80px',
                'min-width': '70px',
                'width': 'auto',
                'background-color': '#ffffff',
                'border': '1px black solid'
            }).addClass('LC-Container');
            controlPanel.append(this.generateColorBlock('#FFFFFF', '添加颜色', function () {
                Wikiplus.createDialogBox('添加颜色', $('<div>').append($('<input>').attr({ 'placeholder': '颜色', 'id': 'LC-ColorInput' })).append($('<br>')).append($('<input>').attr({ 'placeholder': '角色名', 'id': 'LC-CharaInput' })).append($('<hr>')).append($('<div>').addClass('Wikiplus-InterBox-Btn').attr('id', 'LC-Apply').text('确认')), 600, function () {
                    $('#LC-Apply').click(function () {
                        var color = $('#LC-ColorInput').val();
                        var chara = $('#LC-CharaInput').val();
                        $('.Wikiplus-InterBox-Close').click();
                        $('.LC-Add').before(self.generateColorBlock(color, chara, function () {
                            console.log(color + ' - ' + chara);
                            var text = self.area.val();
                            var start = self.area[0].selectionStart;
                            var end = self.area[0].selectionEnd;
                            if (start === end) return;
                            var selectedText = self.area.val().slice(start, end);
                            var regResult = selectedText.match(/^{{color[^]*\|[^]*\|([^.]+)[^]*}}$/m);
                            if (regResult !== null && regResult[1] !== undefined) {
                                //去除颜色
                                self.area.val('' + text.slice(0, start) + regResult[1] + text.slice(end, text.length));
                                self.area[0].setSelectionRange(start, start + regResult[1].length);
                            } else {
                                //加上去
                                self.area.val(text.slice(0, start) + '{{color|' + color + '|' + text.slice(start, end) + '}}' + text.slice(end, text.length));
                                self.area[0].setSelectionRange(start, end + 11 + color.length);
                            }
                        }));
                    });
                });
            }, 'LC-Add'));
            $('body').append(controlPanel);
            this.area.keydown(function (e) {
                if (e.ctrlKey && 49 <= e.which && e.which <= 57) {
                    e.preventDefault();
                    $('.LC-Color')[e.which - 49] && $('.LC-Color')[e.which - 49].click();
                }
            });
        }

        _createClass(LC, [{
            key: 'generateColorBlock',
            value: function generateColorBlock(color, text, event) {
                var className = arguments.length <= 3 || arguments[3] === undefined ? 'LC-Color' : arguments[3];

                return $('<div>').css({
                    'width': '50px',
                    'height': '50px',
                    'margin': '10px',
                    'padding': '3px',
                    'font-size': '12px',
                    'line-height': '50px',
                    'font-weight': 'bold',
                    'text-align': 'center',
                    'float': 'left',
                    'background-color': color,
                    'border': '1px black solid',
                    'cursor': 'pointer'
                }).text(text).addClass(className).click(event).dblclick(function () {
                    if (className !== 'LC-Color') return;
                    $(this).fadeOut('fast', function () {
                        $(this).remove();
                    });
                });
            }
        }, {
            key: 'throwError',
            value: function throwError(message) {
                var error = new Error();
                console.log('[CRITICAL] ' + message);
                console.log(error);
            }
        }]);

        return LC;
    })();

    if (mw.config.values.wgAction === 'edit') {
        console.log(new LC($('#wpTextbox1')));
    }
});