사용자:하늘/addArticleMenuItem.js: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
/**
/**
  * 문서 메뉴에 버튼을 추가하는 기능을 추가합니다.
  * 문서 메뉴에 버튼을 추가하는 기능을 추가합니다.
* @date 2023. 12. 31. - 오전 12:12:53
  *
  *
  * @param {HTMLElement} htmlObject
  * @class addArticleButtonItem
* @typedef {addArticleButtonItem}
  */
  */
function addArticleMenuItem(htmlObject) {
class addArticleButtonItem {


     this.menuitem = htmlObject;
     /**
    * @constructor
    * @param {string} selector
    */
    constructor(selector) {
        this.menuitem = document.querySelector(selector);
    }


     this.AddItem = function (buttontitle, buttonname, callbackOrUrl) {
     /**
    * Add Button
    *
    * @param {string} buttontitle
    * @param {string} buttonname
    * @param {string|function} callbackOrUrl
    */
    AddItem (buttontitle, buttonname, callbackOrUrl) {
         let newItem = this.menuitem.cloneNode(true);
         let newItem = this.menuitem.cloneNode(true);
         this.menuitem.after(newItem);
         this.menuitem.after(newItem);
25번째 줄: 38번째 줄:
         newItem.title = buttontitle;
         newItem.title = buttontitle;


       
         try {
         try {
             newItem.href = new URL(callbackOrUrl);
             newItem.href = new URL(callbackOrUrl);
33번째 줄: 47번째 줄:
         }
         }
     };
     };
    this.SetMenuItem = function (htmlObject) { this.menuitem = htmlObject; };
}
}


40번째 줄: 52번째 줄:
     ['liberty']: ".content-tools .dropdown-item:last-child",
     ['liberty']: ".content-tools .dropdown-item:last-child",
     ['timeless']: ".mw-portlet-body #ca-move.mw-list-item"
     ['timeless']: ".mw-portlet-body #ca-move.mw-list-item"
}
};


window.extendedDropdownItemArray = new addArticleMenuItem(skinContentTool[mw.config.get('skin')]);
window.extendedDropdownItemArray = new addArticleButtonItem(skinContentTool[mw.config.get('skin')]);

2023년 12월 31일 (일) 00:34 판

/**
 * 문서 메뉴에 버튼을 추가하는 기능을 추가합니다.
 *
 * @class addArticleButtonItem
 * @typedef {addArticleButtonItem}
 */
class addArticleButtonItem {

    /**
     * @constructor
     * @param {string} selector
     */
    constructor(selector) {
        this.menuitem = document.querySelector(selector);
    }

    /**
     * Add Button
     *
     * @param {string} buttontitle
     * @param {string} buttonname
     * @param {string|function} callbackOrUrl
     */
    AddItem (buttontitle, buttonname, callbackOrUrl) {
        let newItem = this.menuitem.cloneNode(true);
        this.menuitem.after(newItem);

        if (newItem.nodeName != "A") {
            newItem.innerHTML = "";
            let linkItem = document.createElement('a');
            newItem.append(linkItem);
            newItem = linkItem;
        }

        newItem.innerHTML = buttonname;
        newItem.accessKey = '';
        newItem.style.cursor = 'pointer';
        newItem.title = buttontitle;

        
        try {
            newItem.href = new URL(callbackOrUrl);
        } catch (e) {
            newItem.href = 'javascript:;'; // 'Invalid URL'
            newItem.onclick = callbackOrUrl;
            return;
        }
    };
}

var skinContentTool = {
    ['liberty']: ".content-tools .dropdown-item:last-child",
    ['timeless']: ".mw-portlet-body #ca-move.mw-list-item"
};

window.extendedDropdownItemArray = new addArticleButtonItem(skinContentTool[mw.config.get('skin')]);