1. 程式人生 > >UEditor二次開發之新增自定義按鈕

UEditor二次開發之新增自定義按鈕

需求

現狀描述:目前預覽正文內容只是文字框放大的樣式
在這裡插入圖片描述
優化方向:建議點選預覽可直接預覽門戶介面的樣式
在這裡插入圖片描述
也就是現狀我們呼叫的是Ueditor自帶的預覽功能,而需求中的預覽功能則相當於要我們重寫預覽按鈕

在之前老版本的Ueditor中新增按鈕很麻煩,具體可以參考這裡

二次開發

無需對 UEditor 程式碼做任何修改,只需在UEditor之外通過UEditor提供的二次開發介面開發定製功能.這種開發方式不僅避免了修改UEditor原始碼,方便日後UEditor的升級,而且通過介面,可以將開發的定製功能維護到一個檔案中或者一個目錄中,方便日後對其維護。

1.uiname,是你為新新增的UI起的名字,這裡可以是1個或者多個,“uiname”後者是“uiname1 uiname2 uiname3”
2. function

,是實際你要做的事情,這裡提供兩個引數,editor是編輯器例項,如果你有多個編輯器例項,那每個編輯器例項化後,都會呼叫這個function,並且把editor傳進來,uiname,你為ui起的名字,如果前邊你新增的是多個的化,這裡function會被呼叫多次,並且將每一個ui名字傳遞進來.如果函式返回了一個UI 例項,那這個UI例項就會被預設加到工具欄上。當然也可以不返回任何UI。比如希望監控selectionchange事件,在某些場景下彈出浮層,這時就不需要返回任何UI.
3. index,是你想放到toolbar的那個位置,預設是放到最後
4. editorId,當你的頁面上有多個編輯器例項時,你想將這個ui擴充套件到那個編輯器例項上,這裡的editorId是給你編輯器初始化時,傳入的id,預設是每個例項都會加入你的擴充套件

對於 UEditor 的二次開發,一般多為新增按鈕,下拉筐或者是新增一個dialog。基於這幾種常規的方式,我在_examples目錄下分別書寫了3個型別的定製demo。

  1. addCustomizeButton.js 新增一個按鈕
  2. addCustomizeCombox.js 新增一個下拉框
  3. addCustomizeDialog.js 新增一個彈出層

我們根據我們的需求這裡說一下新增一個按鈕SoEasy~~~ 不得吐槽一下以前是真繁瑣 之前不知道有新方式 用老的弄,在之前的版本中,UEditor對於二次開發的支援不夠優化,經常需要開發者不僅要開發相應的功能,例如command命令,plugin外掛等,還要在UEditor上修改多處檔案,差點沒弄吐血
首先我們定義我們自定義按鈕
新增一個按鈕

UE.registerUI('button', function(editor, uiName) {
    //註冊按鈕執行時的command命令,使用命令預設就會帶有回退操作
    editor.registerCommand(uiName, {
        execCommand: function() {
            alert('execCommand:' + uiName)
        }
    });
    //建立一個button
    var btn = new UE.ui.Button({
        //按鈕的名字
        name: uiName,
        //提示
        title: '預覽',
        //新增額外樣式,指定icon圖示,這裡預設使用一個重複的icon
        cssRules: 'background-position: -422px -20px;',
        //點選時執行的命令
        onclick: function() {
            //這裡可以不用執行命令,做你自己的操作也可
            if($("input[name='title']").val()==''){
                layer.msg('必需輸入標題才能預覽!');
                return;
            }
            NewsNotice.saveUeditor();
        }
    });
    //當點到編輯內容上時,按鈕要做的狀態反射
    editor.addListener('selectionchange', function() {
        var state = editor.queryCommandState(uiName);
        if (state == -1) {
            btn.setDisabled(true);
            btn.setChecked(false);
        } else {
            btn.setDisabled(false);
            btn.setChecked(state);
        }
    });
    //因為你是新增button,所以需要返回這個button
    return btn;
});
saveUeditor:function(){
        	$("#hiddenContent").val(UE.getEditor('jsNewsNoticeContent').getContent());

        	var rows = $("#jsAttachmentDg").datagrid('getRows');
        	var temp = '';
        	for(var i=0;i<rows.length;i++){
        		temp += rows[i].fileType+","+rows[i].fileName+";";
			}
			$("#hiddenRowsData").val(temp);
			$("#hiddenRowsCount").val(rows.length);
        	window.open(basePath+'/portal/news/newsNoticeDetail.jhtml');
		},

新增多個按鈕

UE.registerUI('bold italic redo undo underline strikethrough', function(editor, uiName) {
    //註冊按鈕執行時的command命令,使用命令預設就會帶有回退操作
    editor.registerCommand(uiName, {
        execCommand: function() {
            alert('execCommand:' + uiName)
        }
    });
    //建立一個button
    var btn = new UE.ui.Button({
        //按鈕的名字
        name: uiName,
        //提示
        title: uiName,
        //新增額外樣式,指定icon圖示,這裡預設使用一個重複的icon
        cssRules: 'background-position: -500px 0;',
        //點選時執行的命令
        onclick: function() {
            //這裡可以不用執行命令,做你自己的操作也可
            editor.execCommand(uiName);
        }
    });
    //當點到編輯內容上時,按鈕要做的狀態反射
    editor.addListener('selectionchange', function() {
        var state = editor.queryCommandState(uiName);
        if (state == -1) {
            btn.setDisabled(true);
            btn.setChecked(false);
        } else {
            btn.setDisabled(false);
            btn.setChecked(state);
        }
    });
    //因為你是新增button,所以需要返回這個button
    return btn;
});

最後只需要在我們的頁面中引入我們新增按鈕所在的js即可 是不是很easy

<script type="text/javascript" charset="utf-8" src="/assets/js/modules/form/form_preview_notice.js?v=${assets_v}"></script>

哈哈哈嗝 大功告成!!!
最後再說一句 真是用過老方式才知道新的新增按鈕介面有多爽 歐耶

相關推薦

UEditor開發新增定義按鈕

需求 現狀描述:目前預覽正文內容只是文字框放大的樣式 優化方向:建議點選預覽可直接預覽門戶介面的樣式 也就是現狀我們呼叫的是Ueditor自帶的預覽功能,而需求中的預覽功能則相當於要我們重寫預覽按鈕 在之前老版本的Ueditor中新增按鈕很麻煩,具體可以參考

009-Ambari開發新增定義元件Redis()

上一篇我們主要介紹了Ambari新增元件的答題流程並以REDIS為例說明了流程,本篇在上一篇的基礎上,進一步完善說明流程並介紹如何給元件新增metric 掃描二維碼,關注BearData,獲取最新文章 上篇中,我們已經制作出了redis的rpm包,並重新編譯了我們修改後的Ambar

008-Ambari開發新增定義元件Redis(一)

Ambari目前支援的元件有HDFS、YARN、HBase、Hive、Pig、ZooKeeper、Sqoop、Storm、Flume、Tez、Oozie、Falcon、Storm、Altas、Knox、Spark、Ranger、Mahout、Kerberos等,已經涵蓋了從大資料應用的

車機開發新增定義

S700平臺即安卓5.1.1系統新增額外的自定義鍵值按鍵: 在Android的原生系統中鍵值預設情況下是92個,從0-91;一般情況下,這些鍵值是夠用的,但是如果想擴充的話,還是需要新增新的鍵值的;像我們做車機專案的,新增新按鍵鍵值太易見了,比如將倒車檢測做成新自定義鍵值按鍵,我們需要到多個

IntelliJ Idea外掛開發新增定義庫(Library)

在一些程式碼工程沒有用ivy,maven這些庫檔案管理工具,jar包要麼和工程檔案放在一起或是存在本地的目錄中然後通過開發工具匯入。還有一種就是庫檔案打包在中介軟體中,開發時需要引入,不方便用ivy,maven進行依賴管理,這時候可能就需要開發一個IntelliJ Idea外

docker k8s開發(一) 註冊定義api

package main import ( "fmt" "math/rand" "os" "time" "wdcp-build/apiserver/app" "wdcp-build/apiserver/options" "github.com/spf1

10.Jmeter-開發,實現定義函式外掛

1.前提:有時候,Jmeter自帶的函式,可能不能滿足於業務的需求,這時候,我們可以自己寫一個函式外掛;2.建立maven工程一直next,輸入GroupID,ArtifactId->finsh3.編輯pom.xml建立好maven工程後,引入Jmeter的jar包,注

Revit開發 定義選項卡排在最前端

引用AdWindows.dll類庫  Autodesk.Windows.RibbonControl ribbon = AutodeskWindows.ComponentManager.Ribbon;        

superset開發旅__如何新增echarts圖表韋恩圖

superset是airbnb開源的一款BI產品,支援多種資料庫連線,擁有豐富的圖表型別,其部署方便,製作看板迅速,是小企業自助BI的不錯選擇。但是,裡面的圖表型別雖然多,很多常見的圖表依然沒有,最近遇到一個需求:新增echarts到superset圖表型別。以

(6)微信開發 微信文本消息接口實現

微信 odin link 消息處理 nal puts 算法 帳號 接口實現 p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px SimSun } p.p2 { margin:

revit 開發基於族獲得實例

相關 space typeof cef doc 過濾 list eric category Revit並沒有直接開放基於族獲取實例元素的過濾器。不過有兩個相關的過濾器,一個是FamilySymbolFilter(ElementId familyId),可以基於族ID過濾出所

踏上Revit開發路 2 從“HelloWorld”入手

import none 工具 環境變量 各級 style first app ati 2 從“HelloWorld”入手 在歐特克的官方網頁上有個叫《My First Plug-in Training》的項目,號稱可以讓一個完全沒有編程基礎的人照著做出一個插件來。我快速瀏覽

織夢DedeCMS的開發數據庫類操作

高亮顯示 delete from 進行 往裏面 參考 如何 tps .com 1.創建數據表 為了讓講解更加的貼合實際,天涯版主創建了一個名為"dede_test"的表,裏面就2個字段,1個id,作為唯一標識,另一個name作為名稱。然後往裏面添加測試數據,這個操作類似於A

DT開發-常量全局變量說明及使用

DT二次開發 常量全局變量 什麽是destoon常量?destoon常量是指destoon官方的開發者在開發時封裝在destoon程序中的一些系統設置參數這些參數是固定的,我們是不能修改的,也不需要去修改。(PS:只要你牛掰,系統全改了也行)比如我們的網站首頁地址:DT_PATH,站點安裝目錄路

Revit開發載入族

return mes 刪除 開發 urn com tar 失敗 commit 載入族 此方法載入族無法覆蓋原有族,即若存在相同名稱的族則會載入失敗 1 Family family = null; //族 2 3 Transaction transact

中控考勤機的開發數據秒上傳至服務器功能

程序 做到 監控 選擇 環境 客戶 出現 員工 參考 1.客戶選擇了中控考勤機:IFACE系列 2.客戶需要在WEB端實時看到員工的考勤情況 3.需要做到客戶員工數據及時傳遞到服務器 實現方法如下: 1.安裝中控DLL(一定要註意操作系統是32位還是64位,折騰死人

中控考勤機的開發靈活調配職工功能

客戶 考勤 靈活 二次 容量 代碼 功能 參考 以及 客戶新增需求 1.客戶員工需要不定時的外派或支援 2.客戶員工發適時的到分公司去打卡 3.客戶員工的打卡數據需要及時的發放到目標分公司 4.實現功能如下: 1)各分公司需要及時從考勤機上取得員工的打卡驗證數據

012-Ambari開發元件Zookeeper,Kafka,Hadoop編譯

Zookeeper是大資料生態圈元件之間協調的基礎元件。本篇我們開始編譯基於HDP3.0版本棧的Zookeeper。 關注微信公眾號,獲取更多內容 Zookeeper編譯 安裝ant,Zookeeper依賴於ANT編譯,所以需要安裝ant yum install ant

011-Ambari開發元件編譯概述

Ambari元件即大資料生態圈的元件,如Hadoop,Zookeeper,HBase,Hive,Spark,Kafka等。當我們業務需要修改原始碼時,我們需要重新編譯打包元件。Ambari的元件包是以RPM包的形式存在的,並且Ambari元件包檔案路徑存放位置和原生方式安裝是不同的,所以我們

007-Ambari開發棧名修改

在介紹如何修改棧名稱之前,我們先要了解一下stack的相關概念及在什麼情況下需要修改棧名稱。 掃描二維碼,關注BearData,獲取最新文章 Ambari-stack 表示HDP的某個發行版本,例如HDP-1.0.0,在用ambari建立一個叢集時,首先要通過呼叫restfulAPI