jq富文本_jquery轻量级富文本编辑器Trumbowyg

/*===========================================================

* trumbowyg.js v1.0

* Core code of Trumbowyg plugin

* http://alex-d.github.com/Trumbowyg

* ===========================================================

* Author : Alexandre Demode (Alex-D)

* Twitter : @AlexandreDemode

* Website : alex-d.fr*/$.trumbowyg={

langs: {

en: {

viewHTML:"View HTML",

formatting:"Formatting",

p:"Paragraph",

blockquote:"Quote",

code:"Code",

header:"Header",

bold:"Bold",

italic:"Italic",

strikethrough:"Stroke",

underline:"Underline",

strong:"Strong",

em:"Emphasis",

del:"Deleted",

unorderedList:"Unordered list",

orderedList:"Ordered list",

insertImage:"Insert Image",

insertVideo:"Insert Video",

link:"Link",

createLink:"Insert link",

unlink:"Remove link",

justifyLeft:"Align Left",

justifyCenter:"Align Center",

justifyRight:"Align Right",

justifyFull:"Align Justify",

horizontalRule:"Insert horizontal rule",

fullscreen:"fullscreen",

close:"Close",

submit:"Confirm",

reset:"Cancel",

invalidUrl:"Invalid URL",

required:"Required",

description:"Description",

title:"Title",

text:"Text"}

},//User default options

opts: {},

btnsGrps: {

design: ['bold', 'italic', 'underline', 'strikethrough'],

semantic: ['strong', 'em', 'del'],

justify: ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],

lists: ['unorderedList', 'orderedList']

}

};

(function($){

$.fn.trumbowyg= function(opts, params){if($.isObject(opts) || opts == null){return this.each(function(){if(!$(this).data('trumbowyg'))

$(this).data('trumbowyg', new Trumbowyg(this, opts));

});

}else if(this.length == 1){try{var t = $(this).data('trumbowyg');switch(opts){//Modal box

case 'openModal':returnt.openModal(params.title, params.content);case 'closeModal':returnt.closeModal();case 'openModalInsert':returnt.openModalInsert(params.title, params.fields, params.callback);//Selection

case 'saveSelection':returnt.saveSelection();case 'getSelection':returnt.selection;case 'getSelectedText':return t.selection+'';case 'restoreSelection':returnt.restoreSelection();//Destroy

case 'destroy':returnt.destroy();//Empty

case 'empty':returnt.empty();//Public options

case 'lang':returnt.lang;case 'duration':returnt.o.duration;//HTML

case 'html':returnt.html(params);

}

}catch(e){}

}return false;

};var Trumbowyg = function(editorElem, opts){//jQuery object of the editor

this.$e =$(editorElem);this.$creator =$(editorElem);//Extend with options

opts = $.extend(true, {}, opts, $.trumbowyg.opts);//Localization management

if(typeof opts.lang === 'undefined' || typeof $.trumbowyg.langs[opts.lang] === 'undefined')this.lang = $.trumbowyg.langs['en'];else

this.lang = $.extend(true, {}, $.trumbowyg.langs['en'], $.trumbowyg.langs[opts.lang]);//Defaults Options

this.o = $.extend(true, {

lang:'en',

dir:'ltr',

duration:200, //Duration of modal box animations

mobile:false,

tablet:true,

closable:false,

fullscreenable:true,

fixedBtnPane:false,

fixedFullWidth:false,

semantic:false,

resetCss:false,

autogrow:false,

prefix:'trumbowyg-',

convertLink:true,

btns: ['viewHTML','|', 'formatting','|', $.trumbowyg.btnsGrps.design,'|', 'link','|', 'insertImage','|', $.trumbowyg.btnsGrps.justify,'|', $.trumbowyg.btnsGrps.lists,'|', 'horizontalRule'],

btnsAdd: [],/**

* When the button is associated to a empty object

* func and title attributs are defined from the button key value

*

* For example

* foo: {}

* is equivalent to :

* foo: {

* func: 'foo',

* title: this.lang.foo

* }*/btnsDef: {

viewHTML: {

func:'toggle'},

p: {

func:'formatBlock'},

blockquote: {

func:'formatBlock'},

h1: {

func:'formatBlock',

title:this.lang.header + ' 1'},

h2: {

func:'formatBlock',

title:this.lang.header + ' 2'},

h3: {

func:'formatBlock',

title:this.lang.header + ' 3'},

h4: {

func:'formatBlock',

title:this.lang.header + ' 4'},

bold: {},

italic: {},

underline: {},

strikethrough: {},

strong: {

func:'bold'},

em: {

func:'italic'},

del: {

func:'strikethrough'},

createLink: {},

unlink: {},

insertImage: {},

justifyLeft: {},

justifyCenter: {},

justifyRight: {},

justifyFull: {},

unorderedList: {

func:'insertUnorderedList'},

orderedList: {

func:'insertOrderedList'},

horizontalRule: {

func:'insertHorizontalRule'},//Dropdowns

formatting: {

dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4']

},

link: {

dropdown: ['createLink', 'unlink']

}

}

}, opts);if(this.o.semantic && !opts.btns)this.o.btns =['viewHTML','|', 'formatting','|', $.trumbowyg.btnsGrps.semantic,'|', 'link','|', 'insertImage','|', $.trumbowyg.btnsGrps.justify,'|', $.trumbowyg.btnsGrps.lists,'|', 'horizontalRule'];else if(opts &&opts.btns)this.o.btns =opts.btns;this.init();

}

Trumbowyg.prototype={

init:function(){this.height = this.$e.css('height');if(this.isEnabled()){this.buildEditor(true);return;

}this.buildEditor();this.buildBtnPane();this.fixedBtnPaneEvents();this.buildOverlay();

},

buildEditor:function(disable){if(disable === true){if(!this.$e.is('textarea')){var textarea = this.buildTextarea().val(this.$e.val());this.$e.hide().after(textarea);

}return;

}this.$box = $('

}this.$e.hide()

.addClass(this.o.prefix + 'textarea');var html = '';if(this.isTextarea){

html= this.$e.val();this.$box.insertAfter(this.$e)

.append(this.$editor)

.append(this.$e);

}else{

html= this.$editor.html();this.$box.insertAfter(this.$editor)

.append(this.$e)

.append(this.$editor);this.syncCode();

}this.$editor.addClass(this.o.prefix + 'editor')

.attr('contenteditable', true)

.attr('dir', this.o.dir)

.html(html);if(this.o.resetCss)this.$editor.addClass(this.o.prefix + 'reset-css');if(!this.o.autogrow){

$.each([this.$editor, this.$e], $.proxy(function(i, $el){

$el.css({

overflow:'auto'});

},this));

}if(this.o.semantic){this.$editor.html(this.$editor.html()

.replace("
", "

")

.replace("&nsbp;", "")

);this.semanticCode();

}var that = this;this.$editor

.on('dblclick', 'img', function(){var $img = $(this);

that.openModalInsert(that.lang.insertImage, {

url: {

label:'URL',

value: $img.attr('src'),

required:true},

alt: {

label:'description',

value: $img.attr('alt')

}

},function(values){

$img.attr('src', values['url']);

$img.attr('alt', values['alt']);

});return false;

})

.on('keyup', function(e){

that.semanticCode(false, e.which === 13);

})

.on('blur', function(){

that.syncCode();

});

},//Build the Textarea which contain HTML generated code

buildTextarea: function(){return $('', {'name': this.$e.attr('id'),'height': this.height

});

},//Build button pane, use o.btns and o.btnsAdd options

buildBtnPane: function(){var t = this;if(t.o.btns === false) return;var pfx =t.o.prefix;

t.$btnPane= $('

$.each(t.o.btns.concat(t.o.btnsAdd), $.proxy(function(i, btn){//Managment of group of buttons

try{var b = btn.split('btnGrp-');if(b[1] !=undefined)

btn= $.trumbowyg.btnsGrps[b[1]];

}catch(e){}if(!$.isArray(btn)) btn =[btn];

$.each(btn, $.proxy(function(i, btn){try { //Prevent buildBtn error

var $li = $('

');if(btn === '|') //It's a separator

$li.addClass(pfx + 'separator');else if(t.isSupportedBtn(btn)){ //It's a supported button

if(btn === 'viewHTML')

$li.addClass(pfx+ 'not-disable');

$li.append(t.buildBtn(btn));

}

t.$btnPane.append($li);

}catch(e){}

}, t));

}, t));//Build right li for fullscreen and close buttons

var $liRight = $('

', {'class': pfx + 'not-disable ' + pfx + 'buttons-right'});//Add the fullscreen button

if(t.o.fullscreenable)

$liRight

.append(t.buildRightBtn('fullscreen')

.on('click', $.proxy(function(e){var cssClass = pfx + 'fullscreen';

t.$box.toggleClass(cssClass);if(t.$box.hasClass(cssClass)){

$('body').css('overflow', 'hidden');

t.$box.css({

position:'fixed',

top:0,

left:0,

width:'100%',

margin:0,

padding:0,

zIndex:99999});

$([t.$editor, t.$e]).each(function(){

$(this).css({

overflow:'auto'});

});

t.$btnPane.css('width', '100%');

$(".trumbowyg-fullscreen .editor").css("height",$(window).height()-65);

}else{

$('body').css('overflow', 'auto');

t.$box.removeAttr('style');if(!t.o.autogrow){

h=t.height;

$([t.$editor, t.$e]).each(function(i, $el){

$el.css('height', h);

});

}

}

$(window).trigger('scroll');

}, t)));//Build and add close button

if(t.o.closable)

$liRight

.append(t.buildRightBtn('close')

.on('click', $.proxy(function(e){var cssClass = pfx + 'fullscreen';if(t.$box.hasClass(cssClass))

$('body').css('overflow', 'auto');

t.destroy();

}, t)));//Add right li only if isn't empty

if($liRight.not(':empty'))

t.$btnPane.append($liRight);

t.$box.prepend(t.$btnPane);

},//Build a button and his action

buildBtn: function(name){var pfx = this.o.prefix,

btnDef= this.o.btnsDef[name],

t= this,

textDef= this.lang[name] || name.charAt(0).toUpperCase() + name.slice(1);var $btn = $('', {'type': 'button','class': pfx + name +'-button' + (btnDef.ico ? ' '+ pfx + btnDef.ico +'-button' : ''),'text': btnDef.text || btnDef.title ||textDef,'title': btnDef.title || btnDef.text ||textDef,'mousedown': function(e){if(!btnDef.dropdown || t.$box.find('.'+name+'-'+pfx + 'dropdown').is(':hidden'))

$('body').trigger('mousedown');if(t.$btnPane.hasClass(pfx + 'disable')&& !$(this).parent().hasClass(pfx + 'not-disable'))return false;

t.execCommand((btnDef.dropdown? 'dropdown' : false) || btnDef.func ||name,

btnDef.param||name);

e.stopPropagation();

e.preventDefault();return false;

}

});if(btnDef.dropdown){

$btn.addClass(pfx+ 'open-dropdown');var cssClass = pfx + 'dropdown';var dropdown = $('

dropdown.append(t.buildSubBtn(btnDef.dropdown[i]));

}this.$box.append(dropdown.hide());

}return$btn;

},//Build a button for dropdown menu

buildSubBtn: function(name){var btnDef = this.o.btnsDef[name];return $('', {'type': 'button','text': btnDef.text || btnDef.title || this.lang[name] ||name,'mousedown': $.proxy(function(e){

$('body').trigger('mousedown');this.execCommand(btnDef.func ||name,

btnDef.param||name);

e.stopPropagation();

e.preventDefault();return false;

},this)

});

},//Build a button for right li

buildRightBtn: function(name){return $('', {'type': 'button','class': this.o.prefix + name+'-button','title': this.lang[name],'text': this.lang[name]

});

},//Check if button is supported

isSupportedBtn: function(btn){return typeof this.o.btnsDef[btn].isSupported !== 'function' || this.o.btnsDef[btn].isSupported()

},//Build overlay for modal box

buildOverlay: function(){return this.$overlay = $('

top:this.$btnPane.outerHeight(),

height: (parseInt(this.$editor.outerHeight()) + 1) + 'px'}).appendTo(this.$box);

},

showOverlay:function(){

$(window).trigger('scroll');this.$overlay.fadeIn(this.o.duration);this.$box.addClass(this.o.prefix + 'box-blur');

},

hideOverlay:function(){this.$overlay.fadeOut(this.o.duration/4);

this.$box.removeClass(this.o.prefix + 'box-blur');

},//Management of fixed button pane

fixedBtnPaneEvents: function(){if(!this.o.fixedBtnPane)return;this.isFixed = false;

$(window).on('scroll', $.proxy(function(e){if(!this.$box)return;this.syncCode();var wScroll =$(window).scrollTop(),

offset= this.$box.offset().top + 1,

toFixed= (wScroll - offset > 0) && ((wScroll - offset - parseInt(this.height)) < 0);if(toFixed){if(!this.isFixed){this.isFixed = true;this.$btnPane.css({

position:'fixed',

top:0,

left: (this.o.fixedFullWidth) ? '0' : 'auto',

width: (this.o.fixedFullWidth) ? '100%' : ((parseInt(this.$box.css('width'))-1) + 'px'),

zIndex:7});this.$editor.css({ marginTop: this.$btnPane.css('height') });this.$e.css({ marginTop: this.$btnPane.css('height') });

}

$('.' + this.o.prefix + 'fixed-top', this.$box).css({

position:this.o.fixedFullWidth ? 'fixed' : 'absolute',

top:this.o.fixedFullWidth ? this.$btnPane.outerHeight() : parseInt(this.$btnPane.outerHeight()) + (wScroll - offset) + 'px',

zIndex:15});

}else if(this.isFixed) {this.isFixed = false;this.$btnPane.css({ position: 'relative'});this.$editor.css({ marginTop: 0});this.$e.css({ marginTop: 0});

$('.' + this.o.prefix + 'fixed-top', this.$box).css({

position:'absolute',

top:this.$btnPane.outerHeight()

});

}

},this));

},//Destroy the editor

destroy: function(){var html = this.html();if(this.isTextarea)this.$box.after(this.$e.css({height: this.height})

.val(html)

.removeClass(this.o.prefix + 'textarea')

.show());else

this.$box.after(this.$editor.css({height: this.height})

.removeClass(this.o.prefix + 'editor')

.attr('contenteditable', false)

.html(html)

.show());this.$box.remove();this.$creator.removeData('trumbowyg');

},//Empty the editor

empty: function(){this.$e.val('');this.syncCode(true);

},//Function call when click on viewHTML button

toggle: function(){this.semanticCode(false, true);this.$editor.toggle();this.$e.toggle();this.$btnPane.toggleClass(this.o.prefix + 'disable');this.$btnPane.find('.'+this.o.prefix + 'viewHTML-button').toggleClass(this.o.prefix + 'active');

},//Open dropdown when click on a button which open that

dropdown: function(name){var pfx = this.o.prefix;var $dropdown = this.$box.find('.'+name+'-'+pfx + 'dropdown'),

$btn= this.$btnPane.find('.'+pfx+name+'-button');if($dropdown.is(':hidden')){

$btn.addClass(this.o.prefix + 'active');

$dropdown.css({

position:'absolute',

top:this.$btnPane.outerHeight(),

left: (this.o.fixedFullWidth && this.isFixed) ? $btn.offset().left+'px' : ($btn.offset().left - this.$btnPane.offset().left)+'px'}).show();

$(window).trigger('scroll');

$('body').on('mousedown', $.proxy(function(e){

$('.' + pfx + 'dropdown').hide();

$('.' + pfx + 'active').removeClass(pfx + 'active');

$('body').off('mousedown');

},this));

}else{

$('body').trigger('mousedown');

}

},//HTML Code management

html: function(html){if(html){this.$e.val(html);this.syncCode(true);returntbw;

}else

return this.$e.val();

},

syncCode:function(force){if(!force && this.$editor.is(':visible'))this.$e.val(this.$editor.html());else

this.$editor.html(this.$e.val());if(this.o.autogrow){this.height = this.$editor.css('height');this.$e.css({ height: this.height });

}

},//Analyse and update to semantic code

//@param force : force to sync code from textarea

//@param full : wrap text nodes in

semanticCode: function(force, full){this.syncCode(force);if(this.o.semantic){this.semanticTag('b', 'strong');this.semanticTag('i', 'em');this.semanticTag('strike', 'del');if(full){//Wrap text nodes in p

this.$editor.contents()

.filter(function(){//Only non-empty text nodes

return this.nodeType === 3 && $.trim(this.nodeValue).length > 0;

}).wrap('

.filter("br").remove();this.saveSelection();this.semanticTag('div', 'p');this.restoreSelection();

}this.$e.val(this.$editor.html());

}

},

semanticTag:function(oldTag, newTag){

$(oldTag,this.$editor).each(function(){

$(this).replaceWith(function(){ return '' + $(this).html() + ''+newTag+'>'; });

});

},//Function call when user click on « Insert Link »

createLink: function(){var that = this;this.saveSelection();this.openModalInsert(this.lang.createLink, {

url: {

label:'URL',

value:'http://',

required:true},

title: {

label:this.lang.title,

value:this.selection

},

text: {

label:this.lang.text,

value:this.selection

}

},function(values){

that.execCommand('createLink', values['url']);var link = $(['a[href="', values['url'], '"]:not([title])'].join(''), that.$box);if($.trim(values['text']).length !== 0)

link.text(values['text']);if($.trim(values['title']).length !== 0)

link.attr('title', values['title']);return true;

});

},

insertImage:function(){ //图片上传

var that = this;this.saveSelection();this.openModalInsert(this.lang.insertImage, {

url: {

label:'URL',

value:'',

required:true},

alt: {

label:'description',

value:this.selection

}

},function(values){

that.execCommand('insertImage', values['url']);

$(['img[src="', values['url'], '"]:not([alt])'].join(''), that.$box).attr('alt', values['alt']);return true;

});

},/** Call method of trumbowyg if exist

* else try to call anonymous function

* and finaly native execCommand*/execCommand:function(cmd, param){if(cmd != 'dropdown')this.$editor.focus();try{this[cmd](param);

}catch(e){try{

cmd(param,this);

}catch(e){this.$editor.focus();if(cmd == 'insertHorizontalRule')

param= null;

document.execCommand(cmd,false, param);

}

}this.syncCode();

},

formatBlock:function(param){if($.browser.msie)

param= '';

document.execCommand('formatBlock', false, param);

},//Open a modal box

openModal: function(title, content){var pfx = this.o.prefix;//No open a modal box when exist other modal box

if($('.' + pfx + 'modal-box', this.$box).size() > 0)return false;this.saveSelection();this.showOverlay();//Disable all btnPane btns

this.$btnPane.addClass(pfx + 'disable');

$('.' + pfx + 'not-disable', this.$btnPane)

.not('.' + pfx + 'buttons-right')

.removeClass(pfx+ 'not-disable')

.addClass(pfx+ 'not-disable-old');//Build out of ModalBox, it's the mask for animations

var $modal = $('

top: (parseInt(this.$btnPane.css('height')) + 1) + 'px'}).appendTo(this.$box);//Click on overflay close modal by cancelling them

this.$overlay.one('click', function(e){

e.preventDefault();

$modal.trigger(pfx+ 'cancel');

});

$e= this.$editor;//Build the form

$form = $('

', {

action:'javascript:void(null);',

html: content

})

.on('submit', function(e){

e.preventDefault();

$modal.trigger(pfx+ 'confirm');

})

.on('reset', function(e){

e.preventDefault();

$modal.trigger(pfx+ 'cancel');

});//Build ModalBox and animate to show them

var $modalBox = $('

html: $form

})

.css({

top:'-' + parseInt(this.$btnPane.outerHeight()) + 'px',

opacity:0})

.appendTo($modal)

.animate({

top:0,

opacity:1},this.o.duration / 2);//Append title

$('', {

text: title,'class': pfx + 'modal-title'}).prependTo($modalBox);//Focus in modal box

$modalBox.find('input:first').focus();//Append Confirm and Cancel buttons

this.buildModalBtn('submit', $modalBox);this.buildModalBtn('reset', $modalBox);

$('body').trigger('scroll');return$modal;

},

buildModalBtn:function(name, modal){return $('', {'class': this.o.prefix + 'modal-button ' + this.o.prefix + 'modal-' +name,'type': name,'text': this.lang[name] ||name

}).appendTo(modal.find('form'));

},//close current modal box

closeModal: function(){var pfx = this.o.prefix;this.$btnPane.removeClass(pfx + 'disable');this.$overlay.off();

$('.' + this.o.prefix + 'not-disable-old', this.$btnPane)

.removeClass(pfx+ 'not-disable-old')

.addClass(pfx+ 'not-disable');var that = this,

$modalBox= $('.' + pfx + 'modal-box', this.$box);

$modalBox.animate({

top:'-' + $modalBox.css('height')

},this.o.duration/2, function(){

$(this).parent().remove();

that.hideOverlay();

});

},//Preformated build and management modal

openModalInsert: function(title, fields, cmd){var html = '',

pfx= this.o.prefix;for(f infields){var fd =fields[f];

label= (fd.label ==undefined)? (this.lang[f] ? this.lang[f] : f.charAt(0).toUpperCase() + f.slice(1))

: (this.lang[fd.label] ? this.lang[fd.label] : fd.label)

;if(fd.name ==undefined)

fd.name=f;if(!fd.pattern && f == 'url'){

fd.pattern= /^(http|https):\/\/([\w~#!:.?+=&%@!\-\/]+)$/;

fd.patternError= this.lang.invalidUrl;

}

html+= ''+label+'';

}var modBox = this.openModal(title, html),

that= this;

modBox

.on(pfx+ 'confirm', function(){var $form = $(this).find('form'),

valid= true,

values={};for(f infields) {var $field = $('input[name="'+f+'"]', $form);

values[f]=$field.val();//Validate value

if(fields[f].required && (values[f] == null || values[f] == undefined || $.trim(values[f]) == "")) {

valid= false;

that.addErrorOnModalField($field, that.lang.required);

}else if(fields[f].pattern && !fields[f].pattern.test(values[f])) {

valid= false;

that.addErrorOnModalField($field, fields[f].patternError);

}

}if(valid) {

that.restoreSelection();if(cmd(values, fields)) {

that.syncCode();

that.closeModal();

modBox.off(pfx+ 'confirm');

}

}

})

.one(pfx+ 'cancel', function(){

modBox.off(pfx+ 'confirm');

that.closeModal();

that.restoreSelection();

});returnmodBox;

},

addErrorOnModalField:function($field, err){var $label =$field.parent(),

pfx= this.o.prefix;

$label.addClass(pfx+ 'input-error');

$field.on('change keyup', function(){ $label.removeClass(pfx + 'input-error'); });

$label.find('input+span').append(''+ err +'');

},//Selection management

saveSelection: function(){this.selection = null;if(window.getSelection){var sel =window.getSelection();if(sel.getRangeAt &&sel.rangeCount)this.selection = sel.getRangeAt(0);

}else if(document.selection &&document.selection.createRange){this.selection =document.selection.createRange();

}

},

restoreSelection:function(){

range= this.selection;if(range){if(window.getSelection){var sel =window.getSelection();

sel.removeAllRanges();

sel.addRange(range);

}else if(document.selection &&range.select){

range.select();

}

}

},//Return true if must enable Trumbowyg on this mobile device

isEnabled: function(){var mobile = "iPhone|iPod|Android|BlackBerry|Windows\sPhone|ZuneWP7";var exprTablet = new RegExp("(iPad|webOS)");var exprMobile = new RegExp("("+mobile+")");return (this.o.tablet === true &&exprTablet.test(navigator.userAgent))|| (this.o.mobile === true &&exprMobile.test(navigator.userAgent));

}

};/*isObject*/

var toString = Object.prototype.toString, hasOwnProp =Object.prototype.hasOwnProperty;

$.isObject= function(obj) { if(toString.call(obj) !== "[object Object]") return false; var key; for(key in obj){} return !key ||hasOwnProp.call(obj, key); };

$.isString= function(str){ return typeof(str) === 'string'};

})(jQuery);functiondel()

{var element=document.getElementById("demoImage");if(element)

{

element.parentNode.removeChild(element);

}

}functionshow_element(e)

{if(!e)

{var e =window.event;

}//获取事件点击元素

var targ =e.target;//获取元素名称

var tname =targ.tagName;var oDiv=document.getElementById('odiv');if(tname=="IMG")

{var scrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);

oDiv.style.left=e.clientX+5+'px';

oDiv.style.top=e.clientY+5+scrollTop+'px';

oDiv.style.display="inline";

targ.width=targ.width;var s=document.getElementById('demoImage');if(s!=null)

{

s.id="";

}

targ.id='demoImage'}else{var wait = setInterval(function(){if (oDiv != 0 && oDiv != null && oDiv !=undefined) {

clearInterval(wait);

oDiv.style.display="none";

}

},50);

}

}functiontim(m)

{var s=document.getElementById('demoImage');

s.width=s.width+m;

s.width=s.width;

}functionsub(m)

{var s=document.getElementById('demoImage');if(s!=null)

{if(m!=0)

{var t=s.width/10;

while(t>0)

{if(m==1)

setTimeout('tim(1)','50');elsesetTimeout('tim(-1);','50');

t=t-1;

}

}elses.width=-1;

s.width=s.width;

}

}/*===========================================================

* zh_cn.js

* Simplified Chinese translation for Trumbowyg

* http://alex-d.github.com/Trumbowyg

* ===========================================================

* Author : Liu Kai (akai)

* Twitter : @akai404

* Github : https://github.com/akai*/$.trumbowyg.langs.zh_cn={

viewHTML:"源代码",

formatting:"格式",

p:"段落",

blockquote:"引用",

code:"代码",

header:"标题",

bold:"加粗",

italic:"斜体",

strikethrough:"删除线",

underline:"下划线",

strong:"加粗",

em:"斜体",

del:"删除线",

unorderedList:"无序列表",

orderedList:"有序列表",

image:"图片",

insertImage:"网络图片",

upload:"本地上传",

uploadError:"上传失败",

insertVideo:"插入视频",

link:"超链接",

createLink:"插入链接",

unlink:"取消链接",

align:"对齐方式",

justifyLeft:"居左对齐",

justifyCenter:"居中对齐",

justifyRight:"居右对齐",

justifyFull:"两端对齐",

horizontalRule:"插入分隔线",

fullscreen:"全屏",

close:"关闭",

submit:"确定",

reset:"取消",

invalidUrl:"无效的 URL",

required:"必需的",

description:"描述",

title:"标题",

text:"文字"}

$(function(){

$.trumbowyg.btnsGrps.test= ['bold','italic','underline','link'];

$('#customized-buttonpane').trumbowyg({

lang:'zh_cn',

fixedBtnPane:true,

btnsDef: {

align: {

dropdown: ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],

ico:'justifyLeft'},

image: {

dropdown: ['insertImage', 'upload'],

ico:'insertImage'}

},

btns: ['viewHTML','|', 'formatting','|', 'btnGrp-test','|', 'align','|', 'btnGrp-lists','|', 'image']

});

$('.editor').on('dblclick', function(e){

$(this).trumbowyg({

lang:'zh_cn',

closable:false,

fixedBtnPane:true});

});

});


版权声明:本文为weixin_39799290原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。