Huiji.Snippets.Coppermind

code snippets for huiji wiki editors

// ==UserScript==
// @name         Huiji.Snippets.Coppermind
// @namespace    Huiji
// @version      0.2.1
// @description  code snippets for huiji wiki editors
// @author       lianzhao
// @match        http://coppermind.huiji.wiki/index.php?title=*&action=edit*
// @grant        none
// ==/UserScript==

window.onload = function () {
    function insertAtCaret(areaId, text) {
        var txtarea = document.getElementById(areaId);
        var scrollPos = txtarea.scrollTop;
        var strPos = 0;
        var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
			"ff" : (document.selection ? "ie" : false));
        if (br == "ie") {
            txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart('character', -txtarea.value.length);
            strPos = range.text.length;
        }
        else if (br == "ff") strPos = txtarea.selectionStart;

        var front = (txtarea.value).substring(0, strPos);
        var back = (txtarea.value).substring(strPos, txtarea.value.length);
        txtarea.value = front + text + back;
        strPos = strPos + text.length;
        if (br == "ie") {
            txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart('character', -txtarea.value.length);
            range.moveStart('character', strPos);
            range.moveEnd('character', 0);
            range.select();
        }
        else if (br == "ff") {
            txtarea.selectionStart = strPos;
            txtarea.selectionEnd = strPos;
            txtarea.focus();
        }
        txtarea.scrollTop = scrollPos;
    }

    function insertItem(text, displayText) {
        if (!displayText) {
            displayText = text;
        }

        var tag = $('<button type="button" class="btn btn-default">' + displayText + '</button>').click(function () {
            insertAtCaret('wpTextbox1', text)
        });
        $('#insertItems').append(tag);
    }
	
	function insertItemToGroup(group, text, displayText) {
        if (!displayText) {
            displayText = text;
        }

        var tag = $('<li><button type="button" class="btn btn-default btn-xs">' + displayText + '</button></li>').click(function () {
            insertAtCaret('wpTextbox1', text)
        });
        group.append(tag);
	}

    function createGroup(id, displayText) {
        var group = toMultiLineString(function () {/*
		<div class="btn-group btn-group-xs" role="group">
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      displayTextPlaceHolder
      <span class="caret"></span>
    </button>
    <ul id="idPlaceholder" class="dropdown-menu">
    </ul>
  </div>
  */}).replace('idPlaceholder', id)
			.replace('displayTextPlaceHolder', displayText);
        $('#insertItems').append(group);
    }

    function toMultiLineString(raw) {
        var lines = raw.toString();
        return lines.substring(lines.indexOf("/*") + 3, lines.lastIndexOf("*/"));
    }

    window.setTimeout(function () {
        $('.section-advanced > .group-insert').append('<div id="insertItems" class="btn-group btn-group-xs" role="group"></div>');
        insertItem('{{正在施工|~~~~}}\n', '{{正在施工}}');
        insertItem('{{需要翻译}}\n', '{{需要翻译}}');
        insertItem('{{需要帮助}}\n', '{{需要帮助}}');
        insertItem('==引用与注释==\n{{reflist|30em}}\n', '引用与注释');
        insertItem('{{CmPermission}}\n', '{{CmPermission}}');
        insertItem('__TOC__\n', 'TOC');

        var infoboxDropDown = createGroup('infoboxDropDown', 'Infobox');
		
		var infoboxCharacter = toMultiLineString(function(){
			/* {{Infobox character
| 人名       = 
| 分类       = 
| 图像	         = 
| 图像信息  = 
| 发音         = 
| 别名         = 
| 其他译名     =  
| 性别        =   
| 头衔        =   
| 出生时间     =                     
| 出生地点     =     
| 死亡时间    =  
| 死亡地点     = 
| 阵营        = 
| 种族        =        
| 民族        =       
| 文化        =         
| 语言        =         
| 宗教        = 
| 职业        =     
| 发色        = 
| 瞳色        = 
| 肤色        = 
| 服装        = 
| 饰品        = 
| 武器        = 
| 工具        = 
| 坐骑        = 
| 其他补充    = 
| 阶职        = 
| 体系        = 
| 能力        = 
| 契约对象    = 
| 家族        = 
| 祖先        = 
| 父亲        = 
| 母亲        = 
| 亲戚        = 
| 同辈        = 
| 配偶        = 
| 子嗣        = 
| 继承人      = 
| 后代        = 
| 恋人        = 
| 好友        = 
| 仇敌        = 
| 上级        = 
| 下属        = 
| 师从        = 
| 学徒        = 
| 侍从        = 
| 村镇        = 
| 城市        = 
| 国家        = 
| 大陆        = 
| 世界        = 
| 小说        = 
| 漫画        = 
| 图画小说    = 
| 动画        = 
| 电影        = 
| 电视剧      = 
| 电子游戏    = 
| 桌上游戏    = 
| 电影演员    =
| 电视剧演员  =
| 动画配音    =
| 游戏配音    =

}}
*/});
        
        var infoboxLocation = toMultiLineString(function(){
            /* {{Infobox location
| 地名     = 
| 图像     = 
| 图像信息 = 

| 发音     = 
| 别名     = 
| 其他译名 = 
| 世界     = 
| 星系     = 
| 宇宙     = 
| 神瑛     = 
| 神能     = 
| 神潭     = 
| 涉及书目 = 

| 类型     = 
| 所属市县 = 
| 所属公国 = 
| 所属区域 = 
| 所属国家 = 
| 首都     = 
| 首府     = 
| 政体     = 
| 统治者   = 
| 所有者   = 
| 执法者   = 
| 主要民族 = 
| 主要宗教 = 
| 官方语言 = 
| 前身     = 
| 用途     = 

| 位置     = 
| 地形     = 
| 气候     = 
| 物产资源 = 
| 经济     = 
| 文化     = 
| 特色饮食 = 
| 传统服饰 = 

| 建立年份 = 
| 毁灭年份 = 
| 历代统治者 = 
| 历代执法者 = 
| 大事记 = 
}}*/});

var infoboxNobleHouse = toMultiLineString(function(){
            /* {{Infobox noble house
| 家族名   = 
| 图像     = 
| 图像信息 = 
| 发音     = 
| 别名     = 
| 其他译名 = 
| 类型     = 
| 世界     = [[斯卡德瑞尔]]
| 涉及书目 = [[《执法镕金》]]

| 祖先    = 
| 族长    = 
| 前任族长    = 
}}*/});
        insertItemToGroup($('#infoboxDropDown'), infoboxCharacter, 'infobox character');
        insertItemToGroup($('#infoboxDropDown'), infoboxLocation, 'infobox location');
        insertItemToGroup($('#infoboxDropDown'), infoboxNobleHouse, 'infobox noble house');
    }, 3000);
}