欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

fckeditor 代碼語法高亮

 更新時間:2009年06月21日 15:54:13   作者:  
這兩個星期有點空,就再研究了一下語法高亮的問題,找了一下FCKeditor官方網(wǎng)站,發(fā)現(xiàn)2.5.1穩(wěn)定版已經(jīng)出來了,首先替換掉舊的2.0。呵呵,我喜歡使用新版。
先是IE:
1、遺留的問題:隱藏的源碼和格式化后的代碼有會有問題。
經(jīng)上次研究的結(jié)果,兩處的代碼有可能不對,主要是HTML的特別代碼,像代碼里有標(biāo)簽<div>,JavaScript代碼里有&alt等。這里的解決方法很簡單:只要替換一下就可以了,不過要注意,在進行格式化之前就進行替換。因為隱藏的代碼也是要替換的,最后取的時候也要替換回去,但是要反順序。代碼如下:
復(fù)制代碼 代碼如下:

.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g,'&gt;');

2、在FCKeditor里很多控件都有右鍵菜單可以修改其屬性,代碼高亮我也想增加一個!到FCKeditor官方網(wǎng)站找了一遍成功的增加了,代碼如下(代碼放在fckplugin.js):
復(fù)制代碼 代碼如下:

// 添加右鍵菜單
FCK.ContextMenu.RegisterListener( {
AddItems : function( menu, tag, tagName )
{
if (!tag)
return;

var oDiv = tag;

// 循環(huán)的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

// under what circumstances do we display this option
if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )//&& (tag._FCKHighLighter || tag.parentElement._FCKHighLighter) )
{
FCKSelection.SelectNode( oDiv ) ;
// when the option is displayed, show a separator the command
menu.AddSeparator() ;
// the command needs the registered command name, the title for the context menu, and the icon path
menu.AddItem( 'HighLighter', FCKLang['DlgSyntaxHighLighterProperty'], oHighLighterItem.IconPath ) ;
}
}}
);

3、試用了一下效果,發(fā)現(xiàn)雙擊修改時只能雙擊代碼行數(shù)左邊的灰色才能彈出修改。我覺得不大方便,如果雙擊代碼處也可以彈出修改就方便多了!嘿嘿,答案是肯定的,之前的代碼已經(jīng)注冊了DIV標(biāo)簽的雙擊事件,所以再注冊一下格式化后的代碼用到的SPAN和LI標(biāo)簽就可以了,代碼如下(代碼放在fckplugin.js):
復(fù)制代碼 代碼如下:

// 添加雙擊事件
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, usingTag ) ; // 雙擊灰色欄
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'SPAN' ) ; // 雙擊代碼
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'LI' ) ; // 雙擊代碼區(qū)空白
// 添加雙擊事件
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, usingTag ) ; // 雙擊灰色欄
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'SPAN' ) ; // 雙擊代碼
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'LI' ) ; // 雙擊代碼區(qū)空白

4、再試一下,發(fā)現(xiàn)雙擊代碼行數(shù)這里可以進行修改。但是雙擊代碼就不行,拿不到隱藏的源碼。原因是因為在代碼里雙擊的不是頂層元素,那簡單,修改一下雙擊的代碼,取得頂層元素就OK了(代碼放在fckplugin.js):
復(fù)制代碼 代碼如下:

/ /雙擊事件處理代碼
FCKHighLighter.OnDoubleClick = function( div ){
var oDiv = div;

// 循環(huán)的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

if(oDiv.tagName == usingTag && oDiv.className == usingFlag) {
FCKSelection.SelectNode( oDiv ) ;
FCKCommands.GetCommand( 'HighLighter' ).Execute() ;
}
}

5、把編輯轉(zhuǎn)到源代碼再轉(zhuǎn)回來的時候發(fā)現(xiàn)高亮的代碼已經(jīng)不可以編輯了。研究之下發(fā)現(xiàn)是用于標(biāo)識的屬性沒有了,因為這個標(biāo)識的屬性是非標(biāo)準(zhǔn)的HTML屬性。這個也好辦,反正頂層的class屬性沒用,就直接拿來用就可以了。這個簡單,我就不給代碼了。
IE里的修改算是完成了,而且比較完美。
再來FF:
  本人用系統(tǒng),用軟件都用得比較雜,有時候會用用FF,所以修改的東西一定要支持FF。再說,F(xiàn)CKeditor本身是兼容IE和FF的,增加的插件只支持IE有點說不過去。
1、首先試用了一下效果:發(fā)現(xiàn)已經(jīng)可以插入,不過不可以修改。雙擊事件也有效,但也是不能修改。這個原因是因為FF跟IE不同,IE里可以把DIV標(biāo)簽直接選擇,F(xiàn)F里不可以。所以要加一個單擊的事件,讓代碼幫助FF選擇頂層元素,原始代碼是從FCKeditor的Placeholder插件里COPY過來的(代碼放在fckplugin.js):
復(fù)制代碼 代碼如下:

// 單擊事件處理代碼
FCKHighLighter._ClickListener = function( e )
{
var oDiv = e.target;

// 循環(huán)的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )
FCKSelection.SelectNode( oDiv ) ;
}

FCKHighLighter._SetupClickListener = function (){
if (FCKBrowserInfo.IsGecko)
FCK.EditorDocument.addEventListener( 'click', FCKHighLighter._ClickListener, true ) ;
}

// 添加單擊事件
FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKHighLighter._SetupClickListener ) ;

// 添加右鍵菜單
FCK.ContextMenu.RegisterListener( {
AddItems : function( menu, tag, tagName )
{
if (!tag)
return;

var oDiv = tag;

// 循環(huán)的作用看一下代碼就知道了,是為了選擇高亮代碼的最頂層元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

// under what circumstances do we display this option
if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )//&& (tag._FCKHighLighter || tag.parentElement._FCKHighLighter) )
{
FCKSelection.SelectNode( oDiv ) ;
// when the option is displayed, show a separator the command
menu.AddSeparator() ;
// the command needs the registered command name, the title for the context menu, and the icon path
menu.AddItem( 'HighLighter', FCKLang['DlgSyntaxHighLighterProperty'], oHighLighterItem.IconPath ) ;
}
}}
);

注明:這個需要修改FCKeditor的核心代碼,因為我發(fā)現(xiàn)在2.5.1版本在FF下不可以修改選擇的元素,但是最新的2.6測試版就可以。所以需要修改_source\internals\fckselection_gecko.js文件里的GetSelectedElement函數(shù),并且使用官方工具fckpackager.exe重新打包JavaScript代碼,這個我有空再寫一下。
  到這里已經(jīng)差不多了,其中還有一些小問題沒有說,例如:高亮的代碼里可以直接修改(為標(biāo)簽增加一個contentEditable='false'就完了),JS代碼兼容要使用parentNode不要使用parentElement等。
  本來想在添加代碼的窗口也增加一個實時語法高亮的編輯器,不過上網(wǎng)找了一下用得比較多的CodePress和EditArea都存在一些BUG,特別是在IE7下,所以還是暫時不添加了。日后再修改。
  增加這個插件修改的容易比較多,如果你遇到什么問題可以留言,我會盡力為你解答。
  下一步再為FCKeditor增加一個在線上傳圖片的插件,這樣在別處轉(zhuǎn)載文章時就方便多了,點一下就可以自動上傳所有圖片,哈哈哈。。。

相關(guān)文章

  • 讓 FCKeditor 支持多用戶Web環(huán)境(以PHP為例)

    讓 FCKeditor 支持多用戶Web環(huán)境(以PHP為例)

    FCKeditor 是個很優(yōu)秀的 Web 編輯器,很多項目甚至產(chǎn)品中都在用它。但它默認的上傳文件目錄為/userfiles/,也就是說,如果在編輯器中上傳了圖片等文件的話
    2009-06-06
  • myFocus 一個KindEditor的焦點圖插件

    myFocus 一個KindEditor的焦點圖插件

    使用KindEditor(富文本編輯器)提供的接口將myFocus(焦點圖庫)集成在KindEditor上
    2011-04-04
  • fckeditor常用Js,獲取fckeditor內(nèi)容,統(tǒng)計fckeditor字數(shù),向fckeditor寫入指定代碼

    fckeditor常用Js,獲取fckeditor內(nèi)容,統(tǒng)計fckeditor字數(shù),向fckeditor寫入指定代碼

    fckeditor常用Js,獲取fckeditor內(nèi)容,統(tǒng)計fckeditor字數(shù),向fckeditor寫入指定代碼
    2010-08-08
  • asp.net CKEditor和CKFinder的應(yīng)用

    asp.net CKEditor和CKFinder的應(yīng)用

    CKEditor和CKFinder在ASP.NET中的應(yīng)用,需要的朋友可以參考下。
    2010-01-01
  • 寶麗通實現(xiàn)連續(xù)播放實現(xiàn)代碼

    寶麗通實現(xiàn)連續(xù)播放實現(xiàn)代碼

    最近在研究如何才能實現(xiàn)連續(xù)播放功能,之前本打算用Asp生成asx播放列表,再交給寶利通播放, 不過看似有點麻煩,仔細翻閱官方開發(fā)文檔,發(fā)現(xiàn)播放器有個事件
    2008-09-09
  • FCKeditor 圖片上傳進度條不動的解決方法

    FCKeditor 圖片上傳進度條不動的解決方法

    開發(fā)的“歷史五千年”網(wǎng)站,使用FCKeditor,在本地上傳圖片一切正常,但昨天晚上實際向網(wǎng)絡(luò)服務(wù)器(Windows Server 2003)發(fā)送圖片時,發(fā)送圖像進度條一直在滾動,無法關(guān)閉,通過FTP服務(wù)器查看服務(wù)器,圖片已經(jīng)傳送上去,但這個滾動條卻無法結(jié)束。
    2011-08-08
  • 徹底解決ewebeditor網(wǎng)站后臺不能上傳圖片的方法

    徹底解決ewebeditor網(wǎng)站后臺不能上傳圖片的方法

    隨著windows操作系統(tǒng)和IE瀏覽器版本的不斷推出,很多客戶都漸漸放棄了IE6,IE7,使用上了IE8瀏覽器,但是突然發(fā)現(xiàn)自己網(wǎng)站后臺里面的eWebEditor文本編輯器的插入圖片等等按鈕失效了,鼠標(biāo)點擊后什么反應(yīng)都沒有,IE瀏覽器左下角顯示一個黃色的感嘆號提示錯誤,就以為是網(wǎng)站空間、服務(wù)器中毒了呢,一時間紛紛都來找我們詢問
    2012-03-03
  • IE8 Fckedit2.6.X不兼容

    IE8 Fckedit2.6.X不兼容

    經(jīng)過測試IE8和FCKEditer出現(xiàn)不兼容的情況,表現(xiàn)在提交數(shù)據(jù)時Fckediter對象里面的數(shù)據(jù)為空
    2009-04-04
  • ASP FCKeditor在線編輯器使用方法

    ASP FCKeditor在線編輯器使用方法

    我用的是asp,FCKeditor沒有使用幫助,網(wǎng)上google以下資料很多,但不是很全,不適合剛?cè)腴T的菜鳥使用,通過我半天的使用經(jīng)歷,稍微做了些整理,便于大家學(xué)習(xí).
    2009-12-12
  • FCKEditor 自定義用戶目錄的修改步驟 (附源碼)

    FCKEditor 自定義用戶目錄的修改步驟 (附源碼)

    FCKEditor 自定義用戶目錄的修改步驟 (附源碼) ,需要的朋友可以參考下。
    2010-03-03

最新評論