Ignorar:
Timestamp:
02/08/2014 23:16:04 (6 anos atrás)
Autor:
gustavolepri
Mensagem:

correção do bug no momento de salvar o expediente

Arquivo:
1 editado

Legenda:

Não Modificado
Adicionado
Removido
  • ILSAPL/trunk/skins/sk_sapl/javascript/jquery.cleditor.js.dtml

    r6791 r7608  
    11(function($){
    2 $.cleditor={
    3 defaultOptions:{
    4 width:500,
    5 height:250,
    6 controls:
    7 "bold italic underline strikethrough subscript superscript | font size "+
    8 "style | color highlight removeformat | bullets numbering | outdent "+
    9 "indent | alignleft center alignright justify | undo redo | "+
    10 "rule image link unlink | cut copy paste pastetext | print source",
    11 colors:
    12 "FFF FCC FC9 FF9 FFC 9F9 9FF CFF CCF FCF "+
    13 "CCC F66 F96 FF6 FF3 6F9 3FF 6FF 99F F9F "+
    14 "BBB F00 F90 FC6 FF0 3F3 6CC 3CF 66C C6C "+
    15 "999 C00 F60 FC3 FC0 3C0 0CC 36F 63F C3C "+
    16 "666 900 C60 C93 990 090 399 33F 60C 939 "+
    17 "333 600 930 963 660 060 366 009 339 636 "+
    18 "000 300 630 633 330 030 033 006 309 303",
    19 fonts:
    20 "Arial,Arial Black,Comic Sans MS,Courier New,Narrow,Garamond,"+
    21 "Georgia,Impact,Sans Serif,Serif,Tahoma,Trebuchet MS,Verdana",
    22 sizes:
    23 "1,2,3,4,5,6,7",
    24 styles:
    25 [["Parágrafo","<p>"],["Cabeçalho 1","<h1>"],["Cabeçalho 2","<h2>"],
    26 ["Cabeçalho 3","<h3>"],["Cabeçalho 4","<h4>"],["Cabeçalho 5","<h5>"],
    27 ["Cabeçalho 6","<h6>"]],
    28 useCSS:false,
    29 docType:
    30 '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
    31 docCSSFile:
    32 "",
    33 bodyStyle:
    34 "margin:4px; font:12px Arial, Verdana, Helvetica, sans-serif; color: #444; cursor:text"
    35 },
    36 buttons:{
    37 init:
    38 "bold,Negrito,|"+
    39 "italic,Itálico,|"+
    40 "underline,Sublinhado,|"+
    41 "strikethrough,Tachado,|"+
    42 "subscript,Subscrito,|"+
    43 "superscript,Sobrescrito,|"+
    44 "font,Fonte,fontname,|"+
    45 "size,Tamanho da Fonte,fontsize,|"+
    46 "style,Estilo,formatblock,|"+
    47 "color,Cor da Fonte,forecolor,|"+
    48 "highlight,Cor de Destaque,hilitecolor,color|"+
    49 "removeformat,Remover Formatação,|"+
    50 "bullets,Marcadores,insertunorderedlist|"+
    51 "numbering,Lista Numerada,insertorderedlist|"+
    52 "outdent,Diminuir Recuo,|"+
    53 "indent,Aumentar Recuo,|"+
    54 "alignleft,Alinhar à Esquerda,justifyleft|"+
    55 "center,Centralizar,justifycenter|"+
    56 "alignright,Alinhar à Direita,justifyright|"+
    57 "justify,Justificar,justifyfull|"+
    58 "undo,Desfazer,|"+
    59 "redo,Refazer,|"+
    60 "rule,Inserir Linha Horizontal,inserthorizontalrule|"+
    61 "image,Inserir Imagem,insertimage,url|"+
    62 "link,Inserir Link,createlink,url|"+
    63 "unlink,Remover Link,|"+
    64 "cut,Recortar,|"+
    65 "copy,Copiar,|"+
    66 "paste,Colar,|"+
    67 "pastetext,Colar como Texto,inserthtml,|"+
    68 "print,Imprimir,|"+
    69 "source,Código-fonte"
    70 },
    71 imagesPath:function(){return imagesPath();}
    72 };
    73 $.fn.cleditor=function(options){
    74 var $result=$([]);
    75 this.each(function(idx,elem){
    76 if(elem.tagName=="TEXTAREA"){
    77 var data=$.data(elem,CLEDITOR);
    78 if(!data)data=new cleditor(elem,options);
    79 $result=$result.add(data);
    80 }
    81 });
    82 return $result;
    83 };
    84 var
    85 BACKGROUND_COLOR="backgroundColor",
    86 BUTTON="button",
    87 BUTTON_NAME="buttonName",
    88 CHANGE="change",
    89 CLEDITOR="cleditor",
    90 CLICK="click",
    91 DISABLED="disabled",
    92 DIV_TAG="<div>",
    93 TRANSPARENT="transparent",
    94 UNSELECTABLE="unselectable",
    95 MAIN_CLASS="cleditorMain",
    96 TOOLBAR_CLASS="cleditorToolbar",
    97 GROUP_CLASS="cleditorGroup",
    98 BUTTON_CLASS="cleditorButton",
    99 DISABLED_CLASS="cleditorDisabled",
    100 DIVIDER_CLASS="cleditorDivider",
    101 POPUP_CLASS="cleditorPopup",
    102 LIST_CLASS="cleditorList",
    103 COLOR_CLASS="cleditorColor",
    104 PROMPT_CLASS="cleditorPrompt",
    105 MSG_CLASS="cleditorMsg",
    106 ie=$.browser.msie,
    107 ie6=/msie\s6/i.test(navigator.userAgent),
    108 iOS=/iphone|ipad|ipod/i.test(navigator.userAgent),
    109 popups={},
    110 documentClickAssigned,
    111 buttons=$.cleditor.buttons;
    112 $.each(buttons.init.split("|"),function(idx,button){
    113 var items=button.split(","),name=items[0];
    114 buttons[name]={
    115 stripIndex:idx,
    116 name:name,
    117 title:items[1]===""?name.charAt(0).toUpperCase()+name.substr(1):items[1],
    118 command:items[2]===""?name:items[2],
    119 popupName:items[3]===""?name:items[3]
    120 };
    121 });
    122 delete buttons.init;
    123 cleditor=function(area,options){
    124 var editor=this;
    125 editor.options=options=$.extend({},$.cleditor.defaultOptions,options);
    126 var $area=editor.$area=$(area)
    127 .hide()
    128 .data(CLEDITOR,editor)
    129 .blur(function(){
    130 updateFrame(editor,true);
    131 });
    132 var $main=editor.$main=$(DIV_TAG)
    133 .addClass(MAIN_CLASS)
    134 .width(options.width)
    135 .height(options.height);
    136 var $toolbar=editor.$toolbar=$(DIV_TAG)
    137 .addClass(TOOLBAR_CLASS)
    138 .appendTo($main);
    139 var $group=$(DIV_TAG)
    140 .addClass(GROUP_CLASS)
    141 .appendTo($toolbar);
    142 $.each(options.controls.split(" "),function(idx,buttonName){
    143 if(buttonName==="")return true;
    144 if(buttonName=="|"){
    145 var $div=$(DIV_TAG)
    146 .addClass(DIVIDER_CLASS)
    147 .appendTo($group);
    148 $group=$(DIV_TAG)
    149 .addClass(GROUP_CLASS)
    150 .appendTo($toolbar);
    151 }
    152 else{
    153 var button=buttons[buttonName];
    154 var $buttonDiv=$(DIV_TAG)
    155 .data(BUTTON_NAME,button.name)
    156 .addClass(BUTTON_CLASS)
    157 .attr("title",button.title)
    158 .bind(CLICK,$.proxy(buttonClick,editor))
    159 .appendTo($group)
    160 .hover(hoverEnter,hoverLeave);
    161 var map={};
    162 if(button.css)map=button.css;
    163 else if(button.image)map.backgroundImage=imageUrl(button.image);
    164 if(button.stripIndex)map.backgroundPosition=button.stripIndex*-24;
    165 $buttonDiv.css(map);
    166 if(ie)
    167 $buttonDiv.attr(UNSELECTABLE,"on");
    168 if(button.popupName)
    169 createPopup(button.popupName,options,button.popupClass,
    170 button.popupContent,button.popupHover);
    171 }
    172 });
    173 $main.insertBefore($area)
    174 .append($area);
    175 if(!documentClickAssigned){
    176 $(document).click(function(e){
    177 var $target=$(e.target);
    178 if(!$target.add($target.parents()).is("."+PROMPT_CLASS))
    179 hidePopups();
    180 });
    181 documentClickAssigned=true;
    182 }
    183 if(/auto|%/.test(""+options.width+options.height))
    184 $(window).resize(function(){refresh(editor);});
    185 refresh(editor);
    186 };
    187 var fn=cleditor.prototype,
    188 methods=[
    189 ["clear",clear],
    190 ["disable",disable],
    191 ["execCommand",execCommand],
    192 ["focus",focus],
    193 ["hidePopups",hidePopups],
    194 ["sourceMode",sourceMode,true],
    195 ["refresh",refresh],
    196 ["select",select],
    197 ["selectedHTML",selectedHTML,true],
    198 ["selectedText",selectedText,true],
    199 ["showMessage",showMessage],
    200 ["updateFrame",updateFrame],
    201 ["updateTextArea",updateTextArea]
    202 ];
    203 $.each(methods,function(idx,method){
    204 fn[method[0]]=function(){
    205 var editor=this,args=[editor];
    206 for(var x=0;x<arguments.length;x++){args.push(arguments[x]);}
    207 var result=method[1].apply(editor,args);
    208 if(method[2])return result;
    209 return editor;
    210 };
    211 });
    212 fn.change=function(handler){
    213 var $this=$(this);
    214 return handler?$this.bind(CHANGE,handler):$this.trigger(CHANGE);
    215 };
    216 function buttonClick(e){
    217 var editor=this,
    218 buttonDiv=e.target,
    219 buttonName=$.data(buttonDiv,BUTTON_NAME),
    220 button=buttons[buttonName],
    221 popupName=button.popupName,
    222 popup=popups[popupName];
    223 if(editor.disabled||$(buttonDiv).attr(DISABLED)==DISABLED)
    224 return;
    225 var data={
    226 editor:editor,
    227 button:buttonDiv,
    228 buttonName:buttonName,
    229 popup:popup,
    230 popupName:popupName,
    231 command:button.command,
    232 useCSS:editor.options.useCSS
    233 };
    234 if(button.buttonClick&&button.buttonClick(e,data)===false)
    235 return false;
    236 if(buttonName=="source"){
    237 if(sourceMode(editor)){
    238 delete editor.range;
    239 editor.$area.hide();
    240 editor.$frame.show();
    241 buttonDiv.title=button.title;
    242 }
    243 else{
    244 editor.$frame.hide();
    245 editor.$area.show();
    246 buttonDiv.title="Show Rich Text";
    247 }
    248 setTimeout(function(){refreshButtons(editor);},100);
    249 }
    250 else if(!sourceMode(editor)){
    251 if(popupName){
    252 var $popup=$(popup);
    253 if(popupName=="url"){
    254 if(buttonName=="link"&&selectedText(editor)===""){
    255 showMessage(editor,"É necessário selecionar o texto para inserir um link.",buttonDiv);
    256 return false;
    257 }
    258 $popup.children(":button")
    259 .unbind(CLICK)
    260 .bind(CLICK,function(){
    261 var $text=$popup.find(":text"),
    262 url=$.trim($text.val());
    263 if(url!=="")
    264 execCommand(editor,data.command,url,null,data.button);
    265 $text.val("http://");
    266 hidePopups();
    267 focus(editor);
    268 });
    269 }
    270 else if(popupName=="pastetext"){
    271 $popup.children(":button")
    272 .unbind(CLICK)
    273 .bind(CLICK,function(){
    274 var $textarea=$popup.find("textarea"),
    275 text=$textarea.val().replace(/\n/g,"<br />");
    276 if(text!=="")
    277 execCommand(editor,data.command,text,null,data.button);
    278 $textarea.val("");
    279 hidePopups();
    280 focus(editor);
    281 });
    282 }
    283 if(buttonDiv!==$.data(popup,BUTTON)){
    284 showPopup(editor,popup,buttonDiv);
    285 return false;
    286 }
    287 return;
    288 }
    289 else if(buttonName=="print")
    290 editor.$frame[0].contentWindow.print();
    291 else if(!execCommand(editor,data.command,data.value,data.useCSS,buttonDiv))
    292 return false;
    293 }
    294 focus(editor);
    295 }
    296 function hoverEnter(e){
    297 var $div=$(e.target).closest("div");
    298 $div.css(BACKGROUND_COLOR,$div.data(BUTTON_NAME)?"#FFF":"#FFC");
    299 }
    300 function hoverLeave(e){
    301 $(e.target).closest("div").css(BACKGROUND_COLOR,"transparent");
    302 }
    303 function popupClick(e){
    304 var editor=this,
    305 popup=e.data.popup,
    306 target=e.target;
    307 if(popup===popups.msg||$(popup).hasClass(PROMPT_CLASS))
    308 return;
    309 var buttonDiv=$.data(popup,BUTTON),
    310 buttonName=$.data(buttonDiv,BUTTON_NAME),
    311 button=buttons[buttonName],
    312 command=button.command,
    313 value,
    314 useCSS=editor.options.useCSS;
    315 if(buttonName=="font")
    316 value=target.style.fontFamily.replace(/"/g,"");
    317 else if(buttonName=="size"){
    318 if(target.tagName=="DIV")
    319 target=target.children[0];
    320 value=target.innerHTML;
    321 }
    322 else if(buttonName=="style")
    323 value="<"+target.tagName+">";
    324 else if(buttonName=="color")
    325 value=hex(target.style.backgroundColor);
    326 else if(buttonName=="highlight"){
    327 value=hex(target.style.backgroundColor);
    328 if(ie)command='backcolor';
    329 else useCSS=true;
    330 }
    331 var data={
    332 editor:editor,
    333 button:buttonDiv,
    334 buttonName:buttonName,
    335 popup:popup,
    336 popupName:button.popupName,
    337 command:command,
    338 value:value,
    339 useCSS:useCSS
    340 };
    341 if(button.popupClick&&button.popupClick(e,data)===false)
    342 return;
    343 if(data.command&&!execCommand(editor,data.command,data.value,data.useCSS,buttonDiv))
    344 return false;
    345 hidePopups();
    346 focus(editor);
    347 }
    348 function checksum(text)
    349 {
    350 var a=1,b=0;
    351 for(var index=0;index<text.length;++index){
    352 a=(a+text.charCodeAt(index))%65521;
    353 b=(b+a)%65521;
    354 }
    355 return(b<<16)|a;
    356 }
    357 function clear(editor){
    358 editor.$area.val("");
    359 updateFrame(editor);
    360 }
    361 function createPopup(popupName,options,popupTypeClass,popupContent,popupHover){
    362 if(popups[popupName])
    363 return popups[popupName];
    364 var $popup=$(DIV_TAG)
    365 .hide()
    366 .addClass(POPUP_CLASS)
    367 .appendTo("body");
    368 if(popupContent)
    369 $popup.html(popupContent);
    370 else if(popupName=="color"){
    371 var colors=options.colors.split(" ");
    372 if(colors.length<10)
    373 $popup.width("auto");
    374 $.each(colors,function(idx,color){
    375 $(DIV_TAG).appendTo($popup)
    376 .css(BACKGROUND_COLOR,"#"+color);
    377 });
    378 popupTypeClass=COLOR_CLASS;
    379 }
    380 else if(popupName=="font")
    381 $.each(options.fonts.split(","),function(idx,font){
    382 $(DIV_TAG).appendTo($popup)
    383 .css("fontFamily",font)
    384 .html(font);
    385 });
    386 else if(popupName=="size")
    387 $.each(options.sizes.split(","),function(idx,size){
    388 $(DIV_TAG).appendTo($popup)
    389 .html("<font size="+size+">"+size+"</font>");
    390 });
    391 else if(popupName=="style")
    392 $.each(options.styles,function(idx,style){
    393 $(DIV_TAG).appendTo($popup)
    394 .html(style[1]+style[0]+style[1].replace("<","</"));
    395 });
    396 else if(popupName=="url"){
    397 $popup.html('Enter URL:<br><input type=text value="http://" size=35><br><input type=button value="Submit">');
    398 popupTypeClass=PROMPT_CLASS;
    399 }
    400 else if(popupName=="pastetext"){
    401 $popup.html('Cole aqui o texto formato e pressione o botão<br /><textarea cols=40 rows=3></textarea><br /><input type=button value=Inserir>');
    402 popupTypeClass=PROMPT_CLASS;
    403 }
    404 if(!popupTypeClass&&!popupContent)
    405 popupTypeClass=LIST_CLASS;
    406 $popup.addClass(popupTypeClass);
    407 if(ie){
    408 $popup.attr(UNSELECTABLE,"on")
    409 .find("div,font,p,h1,h2,h3,h4,h5,h6")
    410 .attr(UNSELECTABLE,"on");
    411 }
    412 if($popup.hasClass(LIST_CLASS)||popupHover===true)
    413 $popup.children().hover(hoverEnter,hoverLeave);
    414 popups[popupName]=$popup[0];
    415 return $popup[0];
    416 }
    417 function disable(editor,disabled){
    418 if(disabled){
    419 editor.$area.attr(DISABLED,DISABLED);
    420 editor.disabled=true;
    421 }
    422 else{
    423 editor.$area.removeAttr(DISABLED);
    424 delete editor.disabled;
    425 }
    426 try{
    427 if(ie)editor.doc.body.contentEditable=!disabled;
    428 else editor.doc.designMode=!disabled?"on":"off";
    429 }
    430 catch(err){}
    431 refreshButtons(editor);
    432 }
    433 function execCommand(editor,command,value,useCSS,button){
    434 restoreRange(editor);
    435 if(!ie){
    436 if(useCSS===undefined||useCSS===null)
    437 useCSS=editor.options.useCSS;
    438 editor.doc.execCommand("styleWithCSS",0,useCSS.toString());
    439 }
    440 var success=true,description;
    441 if(ie&&command.toLowerCase()=="inserthtml")
    442 getRange(editor).pasteHTML(value);
    443 else{
    444 try{success=editor.doc.execCommand(command,0,value||null);}
    445 catch(err){description=err.description;success=false;}
    446 if(!success){
    447 if("cutcopypaste".indexOf(command)>-1)
    448 showMessage(editor,"Por questão de segurança, seu browser não suporta o comando "+
    449 command+". Tente utilizar as teclas de atalho ou menu contextual em vez disso.",
    450 button);
    451 else
    452 showMessage(editor,
    453 (description?description:"Error executing the "+command+" command."),
    454 button);
    455 }
    456 }
    457 refreshButtons(editor);
    458 return success;
    459 }
    460 function focus(editor){
    461 setTimeout(function(){
    462 if(sourceMode(editor))editor.$area.focus();
    463 else editor.$frame[0].contentWindow.focus();
    464 refreshButtons(editor);
    465 },0);
    466 }
    467 function getRange(editor){
    468 if(ie)return getSelection(editor).createRange();
    469 return getSelection(editor).getRangeAt(0);
    470 }
    471 function getSelection(editor){
    472 if(ie)return editor.doc.selection;
    473 return editor.$frame[0].contentWindow.getSelection();
    474 }
    475 function hex(s){
    476 var m=/rgba?\((\d+), (\d+), (\d+)/.exec(s),
    477 c=s.split("");
    478 if(m){
    479 s=(m[1]<<16|m[2]<<8|m[3]).toString(16);
    480 while(s.length<6)
    481 s="0"+s;
    482 }
    483 return"#"+(s.length==6?s:c[1]+c[1]+c[2]+c[2]+c[3]+c[3]);
    484 }
    485 function hidePopups(){
    486 $.each(popups,function(idx,popup){
    487 $(popup)
    488 .hide()
    489 .unbind(CLICK)
    490 .removeData(BUTTON);
    491 });
    492 }
    493 function imagesPath(){
    494 var cssFile="jquery.cleditor.css",
    495 href=$("link[href$='"+cssFile+"']").attr("href");
    496 return href.substr(0,href.length-cssFile.length)+"images/";
    497 }
    498 function imageUrl(filename){
    499 return"url("+imagesPath()+filename+")";
    500 }
    501 function refresh(editor){
    502 var $main=editor.$main,
    503 options=editor.options;
    504 if(editor.$frame)
    505 editor.$frame.remove();
    506 var $frame=editor.$frame=$('<iframe frameborder="0" src="javascript:true;">')
    507 .hide()
    508 .appendTo($main);
    509 var contentWindow=$frame[0].contentWindow,
    510 doc=editor.doc=contentWindow.document,
    511 $doc=$(doc);
    512 doc.open();
    513 doc.write(
    514 options.docType+
    515 '<html>'+
    516 ((options.docCSSFile==='')?'':'<head><link rel="stylesheet" type="text/css" href="'+options.docCSSFile+'" /></head>')+
    517 '<body style="'+options.bodyStyle+'"></body></html>'
    518 );
    519 doc.close();
    520 if(ie)
    521 $doc.click(function(){focus(editor);});
    522 updateFrame(editor);
    523 if(ie){
    524 $doc.bind("beforedeactivate beforeactivate selectionchange keypress",function(e){
    525 if(e.type=="beforedeactivate")
    526 editor.inactive=true;
    527 else if(e.type=="beforeactivate"){
    528 if(!editor.inactive&&editor.range&&editor.range.length>1)
    529 editor.range.shift();
    530 delete editor.inactive;
    531 }
    532 else if(!editor.inactive){
    533 if(!editor.range)
    534 editor.range=[];
    535 editor.range.unshift(getRange(editor));
    536 while(editor.range.length>2)
    537 editor.range.pop();
    538 }
    539 });
    540 $frame.focus(function(){
    541 restoreRange(editor);
    542 });
    543 }
    544 ($.browser.mozilla?$doc:$(contentWindow)).blur(function(){
    545 updateTextArea(editor,true);
    546 });
    547 $doc.click(hidePopups)
    548 .bind("keyup mouseup",function(){
    549 refreshButtons(editor);
    550 });
    551 if(iOS)editor.$area.show();
    552 else $frame.show();
    553 $(function(){
    554 var $toolbar=editor.$toolbar,
    555 $group=$toolbar.children("div:last"),
    556 wid=$main.width();
    557 var hgt=$group.offset().top+$group.outerHeight()-$toolbar.offset().top+1;
    558 $toolbar.height(hgt);
    559 hgt=(/%/.test(""+options.height)?$main.height():parseInt(options.height))-hgt;
    560 $frame.width(wid).height(hgt);
    561 editor.$area.width(wid).height(ie6?hgt-2:hgt);
    562 disable(editor,editor.disabled);
    563 refreshButtons(editor);
    564 });
    565 }
    566 function refreshButtons(editor){
    567 if(!iOS&&$.browser.webkit&&!editor.focused){
    568 editor.$frame[0].contentWindow.focus();
    569 window.focus();
    570 editor.focused=true;
    571 }
    572 var queryObj=editor.doc;
    573 if(ie)queryObj=getRange(editor);
    574 var inSourceMode=sourceMode(editor);
    575 $.each(editor.$toolbar.find("."+BUTTON_CLASS),function(idx,elem){
    576 var $elem=$(elem),
    577 button=$.cleditor.buttons[$.data(elem,BUTTON_NAME)],
    578 command=button.command,
    579 enabled=true;
    580 if(editor.disabled)
    581 enabled=false;
    582 else if(button.getEnabled){
    583 var data={
    584 editor:editor,
    585 button:elem,
    586 buttonName:button.name,
    587 popup:popups[button.popupName],
    588 popupName:button.popupName,
    589 command:button.command,
    590 useCSS:editor.options.useCSS
    591 };
    592 enabled=button.getEnabled(data);
    593 if(enabled===undefined)
    594 enabled=true;
    595 }
    596 else if(((inSourceMode||iOS)&&button.name!="source")||
    597 (ie&&(command=="undo"||command=="redo")))
    598 enabled=false;
    599 else if(command&&command!="print"){
    600 if(ie&&command=="hilitecolor")
    601 command="backcolor";
    602 if(!ie||command!="inserthtml"){
    603 try{enabled=queryObj.queryCommandEnabled(command);}
    604 catch(err){enabled=false;}
    605 }
    606 }
    607 if(enabled){
    608 $elem.removeClass(DISABLED_CLASS);
    609 $elem.removeAttr(DISABLED);
    610 }
    611 else{
    612 $elem.addClass(DISABLED_CLASS);
    613 $elem.attr(DISABLED,DISABLED);
    614 }
    615 });
    616 }
    617 function restoreRange(editor){
    618 if(ie&&editor.range)
    619 editor.range[0].select();
    620 }
    621 function select(editor){
    622 setTimeout(function(){
    623 if(sourceMode(editor))editor.$area.select();
    624 else execCommand(editor,"selectall");
    625 },0);
    626 }
    627 function selectedHTML(editor){
    628 restoreRange(editor);
    629 var range=getRange(editor);
    630 if(ie)
    631 return range.htmlText;
    632 var layer=$("<layer>")[0];
    633 layer.appendChild(range.cloneContents());
    634 var html=layer.innerHTML;
    635 layer=null;
    636 return html;
    637 }
    638 function selectedText(editor){
    639 restoreRange(editor);
    640 if(ie)return getRange(editor).text;
    641 return getSelection(editor).toString();
    642 }
    643 function showMessage(editor,message,button){
    644 var popup=createPopup("msg",editor.options,MSG_CLASS);
    645 popup.innerHTML=message;
    646 showPopup(editor,popup,button);
    647 }
    648 function showPopup(editor,popup,button){
    649 var offset,left,top,$popup=$(popup);
    650 if(button){
    651 var $button=$(button);
    652 offset=$button.offset();
    653 left=--offset.left;
    654 top=offset.top+$button.height();
    655 }
    656 else{
    657 var $toolbar=editor.$toolbar;
    658 offset=$toolbar.offset();
    659 left=Math.floor(($toolbar.width()-$popup.width())/2)+offset.left;
    660 top=offset.top+$toolbar.height()-2;
    661 }
    662 hidePopups();
    663 $popup.css({left:left,top:top})
    664 .show();
    665 if(button){
    666 $.data(popup,BUTTON,button);
    667 $popup.bind(CLICK,{popup:popup},$.proxy(popupClick,editor));
    668 }
    669 setTimeout(function(){
    670 $popup.find(":text,textarea").eq(0).focus().select();
    671 },100);
    672 }
    673 function sourceMode(editor){
    674 return editor.$area.is(":visible");
    675 }
    676 function updateFrame(editor,checkForChange){
    677 var code=editor.$area.val(),
    678 options=editor.options,
    679 updateFrameCallback=options.updateFrame,
    680 $body=$(editor.doc.body);
    681 if(updateFrameCallback){
    682 var sum=checksum(code);
    683 if(checkForChange&&editor.areaChecksum==sum)
    684 return;
    685 editor.areaChecksum=sum;
    686 }
    687 var html=updateFrameCallback?updateFrameCallback(code):code;
    688 html=html.replace(/<(?=\/?script)/ig,"&lt;");
    689 if(options.updateTextArea)
    690 editor.frameChecksum=checksum(html);
    691 if(html!=$body.html()){
    692 $body.html(html);
    693 $(editor).triggerHandler(CHANGE);
    694 }
    695 }
    696 function updateTextArea(editor,checkForChange){
    697 var html=$(editor.doc.body).html(),
    698 options=editor.options,
    699 updateTextAreaCallback=options.updateTextArea,
    700 $area=editor.$area;
    701 if(updateTextAreaCallback){
    702 var sum=checksum(html);
    703 if(checkForChange&&editor.frameChecksum==sum)
    704 return;
    705 editor.frameChecksum=sum;
    706 }
    707 var code=updateTextAreaCallback?updateTextAreaCallback(html):html;
    708 if(options.updateFrame)
    709 editor.areaChecksum=checksum(code);
    710 if(code!=$area.val()){
    711 $area.val(code);
    712 $(editor).triggerHandler(CHANGE);
    713 }
    714 }
     2    $.cleditor={
     3        defaultOptions:{
     4            width:500,
     5            height:250,
     6            controls:
     7                "bold italic underline strikethrough subscript superscript | font size "+
     8                    "style | color highlight removeformat | bullets numbering | outdent "+
     9                    "indent | alignleft center alignright justify | undo redo | "+
     10                    "rule image link unlink | cut copy paste pastetext | print source",
     11            colors:
     12                "FFF FCC FC9 FF9 FFC 9F9 9FF CFF CCF FCF "+
     13                    "CCC F66 F96 FF6 FF3 6F9 3FF 6FF 99F F9F "+
     14                    "BBB F00 F90 FC6 FF0 3F3 6CC 3CF 66C C6C "+
     15                    "999 C00 F60 FC3 FC0 3C0 0CC 36F 63F C3C "+
     16                    "666 900 C60 C93 990 090 399 33F 60C 939 "+
     17                    "333 600 930 963 660 060 366 009 339 636 "+
     18                    "000 300 630 633 330 030 033 006 309 303",
     19            fonts:
     20                "Arial,Arial Black,Comic Sans MS,Courier New,Narrow,Garamond,"+
     21                    "Georgia,Impact,Sans Serif,Serif,Tahoma,Trebuchet MS,Verdana",
     22            sizes:
     23                "1,2,3,4,5,6,7",
     24            styles:
     25                [["Parágrafo","<p>"],["Cabeçalho 1","<h1>"],["Cabeçalho 2","<h2>"],
     26                    ["Cabeçalho 3","<h3>"],["Cabeçalho 4","<h4>"],["Cabeçalho 5","<h5>"],
     27                    ["Cabeçalho 6","<h6>"]],
     28            useCSS:false,
     29            docType:
     30                '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
     31            docCSSFile:
     32                "",
     33            bodyStyle:
     34                "margin:4px; font:12px Arial, Verdana, Helvetica, sans-serif; color: #444; cursor:text"
     35        },
     36        buttons:{
     37            init:
     38                "bold,Negrito,|"+
     39                    "italic,Itálico,|"+
     40                    "underline,Sublinhado,|"+
     41                    "strikethrough,Tachado,|"+
     42                    "subscript,Subscrito,|"+
     43                    "superscript,Sobrescrito,|"+
     44                    "font,Fonte,fontname,|"+
     45                    "size,Tamanho da Fonte,fontsize,|"+
     46                    "style,Estilo,formatblock,|"+
     47                    "color,Cor da Fonte,forecolor,|"+
     48                    "highlight,Cor de Destaque,hilitecolor,color|"+
     49                    "removeformat,Remover Formatação,|"+
     50                    "bullets,Marcadores,insertunorderedlist|"+
     51                    "numbering,Lista Numerada,insertorderedlist|"+
     52                    "outdent,Diminuir Recuo,|"+
     53                    "indent,Aumentar Recuo,|"+
     54                    "alignleft,Alinhar à Esquerda,justifyleft|"+
     55                    "center,Centralizar,justifycenter|"+
     56                    "alignright,Alinhar à Direita,justifyright|"+
     57                    "justify,Justificar,justifyfull|"+
     58                    "undo,Desfazer,|"+
     59                    "redo,Refazer,|"+
     60                    "rule,Inserir Linha Horizontal,inserthorizontalrule|"+
     61                    "image,Inserir Imagem,insertimage,url|"+
     62                    "link,Inserir Link,createlink,url|"+
     63                    "unlink,Remover Link,|"+
     64                    "cut,Recortar,|"+
     65                    "copy,Copiar,|"+
     66                    "paste,Colar,|"+
     67                    "pastetext,Colar como Texto,inserthtml,|"+
     68                    "print,Imprimir,|"+
     69                    "source,Código-fonte"
     70        },
     71        imagesPath:function(){return imagesPath();}
     72    };
     73    $.fn.cleditor=function(options){
     74        var $result=$([]);
     75        this.each(function(idx,elem){
     76            if(elem.tagName=="TEXTAREA"){
     77                var data=$.data(elem,CLEDITOR);
     78                if(!data)data=new cleditor(elem,options);
     79                $result=$result.add(data);
     80            }
     81        });
     82        return $result;
     83    };
     84    var
     85        BACKGROUND_COLOR="backgroundColor",
     86        BUTTON="button",
     87        BUTTON_NAME="buttonName",
     88        CHANGE="change",
     89        CLEDITOR="cleditor",
     90        CLICK="click",
     91        DISABLED="disabled",
     92        DIV_TAG="<div>",
     93        TRANSPARENT="transparent",
     94        UNSELECTABLE="unselectable",
     95        MAIN_CLASS="cleditorMain",
     96        TOOLBAR_CLASS="cleditorToolbar",
     97        GROUP_CLASS="cleditorGroup",
     98        BUTTON_CLASS="cleditorButton",
     99        DISABLED_CLASS="cleditorDisabled",
     100        DIVIDER_CLASS="cleditorDivider",
     101        POPUP_CLASS="cleditorPopup",
     102        LIST_CLASS="cleditorList",
     103        COLOR_CLASS="cleditorColor",
     104        PROMPT_CLASS="cleditorPrompt",
     105        MSG_CLASS="cleditorMsg",
     106        ie=$.browser.msie,
     107        ie6=/msie\s6/i.test(navigator.userAgent),
     108        iOS=/iphone|ipad|ipod/i.test(navigator.userAgent),
     109        popups={},
     110        documentClickAssigned,
     111        buttons=$.cleditor.buttons;
     112    $.each(buttons.init.split("|"),function(idx,button){
     113        var items=button.split(","),name=items[0];
     114        buttons[name]={
     115            stripIndex:idx,
     116            name:name,
     117            title:items[1]===""?name.charAt(0).toUpperCase()+name.substr(1):items[1],
     118            command:items[2]===""?name:items[2],
     119            popupName:items[3]===""?name:items[3]
     120        };
     121    });
     122    delete buttons.init;
     123    cleditor=function(area,options){
     124        var editor=this;
     125        editor.options=options=$.extend({},$.cleditor.defaultOptions,options);
     126        var $area=editor.$area=$(area)
     127            .hide()
     128            .data(CLEDITOR,editor)
     129            .blur(function(){
     130                updateFrame(editor,true);
     131            });
     132        var $main=editor.$main=$(DIV_TAG)
     133            .addClass(MAIN_CLASS)
     134            .width(options.width)
     135            .height(options.height);
     136        var $toolbar=editor.$toolbar=$(DIV_TAG)
     137            .addClass(TOOLBAR_CLASS)
     138            .appendTo($main);
     139        var $group=$(DIV_TAG)
     140            .addClass(GROUP_CLASS)
     141            .appendTo($toolbar);
     142        $.each(options.controls.split(" "),function(idx,buttonName){
     143            if(buttonName==="")return true;
     144            if(buttonName=="|"){
     145                var $div=$(DIV_TAG)
     146                    .addClass(DIVIDER_CLASS)
     147                    .appendTo($group);
     148                $group=$(DIV_TAG)
     149                    .addClass(GROUP_CLASS)
     150                    .appendTo($toolbar);
     151            }
     152            else{
     153                var button=buttons[buttonName];
     154                var $buttonDiv=$(DIV_TAG)
     155                    .data(BUTTON_NAME,button.name)
     156                    .addClass(BUTTON_CLASS)
     157                    .attr("title",button.title)
     158                    .bind(CLICK,$.proxy(buttonClick,editor))
     159                    .appendTo($group)
     160                    .hover(hoverEnter,hoverLeave);
     161                var map={};
     162                if(button.css)map=button.css;
     163                else if(button.image)map.backgroundImage=imageUrl(button.image);
     164                if(button.stripIndex)map.backgroundPosition=button.stripIndex*-24;
     165                $buttonDiv.css(map);
     166                if(ie)
     167                    $buttonDiv.attr(UNSELECTABLE,"on");
     168                if(button.popupName)
     169                    createPopup(button.popupName,options,button.popupClass,
     170                        button.popupContent,button.popupHover);
     171            }
     172        });
     173        $main.insertBefore($area)
     174            .append($area);
     175        if(!documentClickAssigned){
     176            $(document).click(function(e){
     177                var $target=$(e.target);
     178                if(!$target.add($target.parents()).is("."+PROMPT_CLASS))
     179                    hidePopups();
     180            });
     181            documentClickAssigned=true;
     182        }
     183        if(/auto|%/.test(""+options.width+options.height))
     184            $(window).resize(function(){refresh(editor);});
     185        refresh(editor);
     186    };
     187    var fn=cleditor.prototype,
     188        methods=[
     189            ["clear",clear],
     190            ["disable",disable],
     191            ["execCommand",execCommand],
     192            ["focus",focus],
     193            ["hidePopups",hidePopups],
     194            ["sourceMode",sourceMode,true],
     195            ["refresh",refresh],
     196            ["select",select],
     197            ["selectedHTML",selectedHTML,true],
     198            ["selectedText",selectedText,true],
     199            ["showMessage",showMessage],
     200            ["updateFrame",updateFrame],
     201            ["updateTextArea",updateTextArea]
     202        ];
     203    $.each(methods,function(idx,method){
     204        fn[method[0]]=function(){
     205            var editor=this,args=[editor];
     206            for(var x=0;x<arguments.length;x++){args.push(arguments[x]);}
     207            var result=method[1].apply(editor,args);
     208            if(method[2])return result;
     209            return editor;
     210        };
     211    });
     212    fn.change=function(handler){
     213        var $this=$(this);
     214        return handler?$this.bind(CHANGE,handler):$this.trigger(CHANGE);
     215    };
     216    function buttonClick(e){
     217        var editor=this,
     218            buttonDiv=e.target,
     219            buttonName=$.data(buttonDiv,BUTTON_NAME),
     220            button=buttons[buttonName],
     221            popupName=button.popupName,
     222            popup=popups[popupName];
     223        if(editor.disabled||$(buttonDiv).attr(DISABLED)==DISABLED)
     224            return;
     225        var data={
     226            editor:editor,
     227            button:buttonDiv,
     228            buttonName:buttonName,
     229            popup:popup,
     230            popupName:popupName,
     231            command:button.command,
     232            useCSS:editor.options.useCSS
     233        };
     234        if(button.buttonClick&&button.buttonClick(e,data)===false)
     235            return false;
     236        if(buttonName=="source"){
     237            if(sourceMode(editor)){
     238                delete editor.range;
     239                editor.$area.hide();
     240                editor.$frame.show();
     241                buttonDiv.title=button.title;
     242            }
     243            else{
     244                editor.$frame.hide();
     245                editor.$area.show();
     246                buttonDiv.title="Show Rich Text";
     247            }
     248            setTimeout(function(){refreshButtons(editor);},100);
     249        }
     250        else if(!sourceMode(editor)){
     251            if(popupName){
     252                var $popup=$(popup);
     253                if(popupName=="url"){
     254                    if(buttonName=="link"&&selectedText(editor)===""){
     255                        showMessage(editor,"É necessário selecionar o texto para inserir um link.",buttonDiv);
     256                        return false;
     257                    }
     258                    $popup.children(":button")
     259                        .unbind(CLICK)
     260                        .bind(CLICK,function(){
     261                            var $text=$popup.find(":text"),
     262                                url=$.trim($text.val());
     263                            if(url!=="")
     264                                execCommand(editor,data.command,url,null,data.button);
     265                            $text.val("http://");
     266                            hidePopups();
     267                            focus(editor);
     268                        });
     269                }
     270                else if(popupName=="pastetext"){
     271                    $popup.children(":button")
     272                        .unbind(CLICK)
     273                        .bind(CLICK,function(){
     274                            var $textarea=$popup.find("textarea"),
     275                                text=$textarea.val().replace(/\n/g,"<br />");
     276                            if(text!=="")
     277                                execCommand(editor,data.command,text,null,data.button);
     278                            $textarea.val("");
     279                            hidePopups();
     280                            focus(editor);
     281                        });
     282                }
     283                if(buttonDiv!==$.data(popup,BUTTON)){
     284                    showPopup(editor,popup,buttonDiv);
     285                    return false;
     286                }
     287                return;
     288            }
     289            else if(buttonName=="print")
     290                editor.$frame[0].contentWindow.print();
     291            else if(!execCommand(editor,data.command,data.value,data.useCSS,buttonDiv))
     292                return false;
     293        }
     294        focus(editor);
     295    }
     296    function hoverEnter(e){
     297        var $div=$(e.target).closest("div");
     298        $div.css(BACKGROUND_COLOR,$div.data(BUTTON_NAME)?"#FFF":"#FFC");
     299    }
     300    function hoverLeave(e){
     301        $(e.target).closest("div").css(BACKGROUND_COLOR,"transparent");
     302    }
     303    function popupClick(e){
     304        var editor=this,
     305            popup=e.data.popup,
     306            target=e.target;
     307        if(popup===popups.msg||$(popup).hasClass(PROMPT_CLASS))
     308            return;
     309        var buttonDiv=$.data(popup,BUTTON),
     310            buttonName=$.data(buttonDiv,BUTTON_NAME),
     311            button=buttons[buttonName],
     312            command=button.command,
     313            value,
     314            useCSS=editor.options.useCSS;
     315        if(buttonName=="font")
     316            value=target.style.fontFamily.replace(/"/g,"");
     317        else if(buttonName=="size"){
     318            if(target.tagName=="DIV")
     319                target=target.children[0];
     320            value=target.innerHTML;
     321        }
     322        else if(buttonName=="style")
     323            value="<"+target.tagName+">";
     324        else if(buttonName=="color")
     325            value=hex(target.style.backgroundColor);
     326        else if(buttonName=="highlight"){
     327            value=hex(target.style.backgroundColor);
     328            if(ie)command='backcolor';
     329            else useCSS=true;
     330        }
     331        var data={
     332            editor:editor,
     333            button:buttonDiv,
     334            buttonName:buttonName,
     335            popup:popup,
     336            popupName:button.popupName,
     337            command:command,
     338            value:value,
     339            useCSS:useCSS
     340        };
     341        if(button.popupClick&&button.popupClick(e,data)===false)
     342            return;
     343        if(data.command&&!execCommand(editor,data.command,data.value,data.useCSS,buttonDiv))
     344            return false;
     345        hidePopups();
     346        focus(editor);
     347    }
     348    function checksum(text)
     349    {
     350        var a=1,b=0;
     351        for(var index=0;index<text.length;++index){
     352            a=(a+text.charCodeAt(index))%65521;
     353            b=(b+a)%65521;
     354        }
     355        return(b<<16)|a;
     356    }
     357    function clear(editor){
     358        editor.$area.val("");
     359        updateFrame(editor);
     360    }
     361    function createPopup(popupName,options,popupTypeClass,popupContent,popupHover){
     362        if(popups[popupName])
     363            return popups[popupName];
     364        var $popup=$(DIV_TAG)
     365            .hide()
     366            .addClass(POPUP_CLASS)
     367            .appendTo("body");
     368        if(popupContent)
     369            $popup.html(popupContent);
     370        else if(popupName=="color"){
     371            var colors=options.colors.split(" ");
     372            if(colors.length<10)
     373                $popup.width("auto");
     374            $.each(colors,function(idx,color){
     375                $(DIV_TAG).appendTo($popup)
     376                    .css(BACKGROUND_COLOR,"#"+color);
     377            });
     378            popupTypeClass=COLOR_CLASS;
     379        }
     380        else if(popupName=="font")
     381            $.each(options.fonts.split(","),function(idx,font){
     382                $(DIV_TAG).appendTo($popup)
     383                    .css("fontFamily",font)
     384                    .html(font);
     385            });
     386        else if(popupName=="size")
     387            $.each(options.sizes.split(","),function(idx,size){
     388                $(DIV_TAG).appendTo($popup)
     389                    .html("<font size="+size+">"+size+"</font>");
     390            });
     391        else if(popupName=="style")
     392            $.each(options.styles,function(idx,style){
     393                $(DIV_TAG).appendTo($popup)
     394                    .html(style[1]+style[0]+style[1].replace("<","</"));
     395            });
     396        else if(popupName=="url"){
     397            $popup.html('Enter URL:<br><input type=text value="http://" size=35><br><input type=button value="Submit">');
     398            popupTypeClass=PROMPT_CLASS;
     399        }
     400        else if(popupName=="pastetext"){
     401            $popup.html('Cole aqui o texto formato e pressione o botão<br /><textarea cols=40 rows=3></textarea><br /><input type=button value=Inserir>');
     402            popupTypeClass=PROMPT_CLASS;
     403        }
     404        if(!popupTypeClass&&!popupContent)
     405            popupTypeClass=LIST_CLASS;
     406        $popup.addClass(popupTypeClass);
     407        if(ie){
     408            $popup.attr(UNSELECTABLE,"on")
     409                .find("div,font,p,h1,h2,h3,h4,h5,h6")
     410                .attr(UNSELECTABLE,"on");
     411        }
     412        if($popup.hasClass(LIST_CLASS)||popupHover===true)
     413            $popup.children().hover(hoverEnter,hoverLeave);
     414        popups[popupName]=$popup[0];
     415        return $popup[0];
     416    }
     417    function disable(editor,disabled){
     418        if(disabled){
     419            editor.$area.attr(DISABLED,DISABLED);
     420            editor.disabled=true;
     421        }
     422        else{
     423            editor.$area.removeAttr(DISABLED);
     424            delete editor.disabled;
     425        }
     426        try{
     427            if(ie)editor.doc.body.contentEditable=!disabled;
     428            else editor.doc.designMode=!disabled?"on":"off";
     429        }
     430        catch(err){}
     431        refreshButtons(editor);
     432    }
     433    function execCommand(editor,command,value,useCSS,button){
     434        restoreRange(editor);
     435        if(!ie){
     436            if(useCSS===undefined||useCSS===null)
     437                useCSS=editor.options.useCSS;
     438            editor.doc.execCommand("styleWithCSS",0,useCSS.toString());
     439        }
     440        var success=true,description;
     441        if(ie&&command.toLowerCase()=="inserthtml")
     442            getRange(editor).pasteHTML(value);
     443        else{
     444            try{success=editor.doc.execCommand(command,0,value||null);}
     445            catch(err){description=err.description;success=false;}
     446            if(!success){
     447                if("cutcopypaste".indexOf(command)>-1)
     448                    showMessage(editor,"Por questão de segurança, seu browser não suporta o comando "+
     449                        command+". Tente utilizar as teclas de atalho ou menu contextual em vez disso.",
     450                        button);
     451                else
     452                    showMessage(editor,
     453                        (description?description:"Error executing the "+command+" command."),
     454                        button);
     455            }
     456        }
     457        refreshButtons(editor);
     458        return success;
     459    }
     460    function focus(editor){
     461        setTimeout(function(){
     462            if(sourceMode(editor))editor.$area.focus();
     463            else editor.$frame[0].contentWindow.focus();
     464            refreshButtons(editor);
     465        },0);
     466    }
     467    function getRange(editor){
     468        if(ie)return getSelection(editor).createRange();
     469        return getSelection(editor).getRangeAt(0);
     470    }
     471    function getSelection(editor){
     472        if(ie)return editor.doc.selection;
     473        return editor.$frame[0].contentWindow.getSelection();
     474    }
     475    function hex(s){
     476        var m=/rgba?\((\d+), (\d+), (\d+)/.exec(s),
     477            c=s.split("");
     478        if(m){
     479            s=(m[1]<<16|m[2]<<8|m[3]).toString(16);
     480            while(s.length<6)
     481                s="0"+s;
     482        }
     483        return"#"+(s.length==6?s:c[1]+c[1]+c[2]+c[2]+c[3]+c[3]);
     484    }
     485    function hidePopups(){
     486        $.each(popups,function(idx,popup){
     487            $(popup)
     488                .hide()
     489                .unbind(CLICK)
     490                .removeData(BUTTON);
     491        });
     492    }
     493    function imagesPath(){
     494        var cssFile="jquery.cleditor.css",
     495            href=$("link[href$='"+cssFile+"']").attr("href");
     496        return href.substr(0,href.length-cssFile.length)+"images/";
     497    }
     498    function imageUrl(filename){
     499        return"url("+imagesPath()+filename+")";
     500    }
     501    function refresh(editor){
     502        var $main=editor.$main,
     503            options=editor.options;
     504        if(editor.$frame)
     505            editor.$frame.remove();
     506        var $frame=editor.$frame=$('<iframe frameborder="0" src="javascript:true;">')
     507            .hide()
     508            .appendTo($main);
     509        var contentWindow=$frame[0].contentWindow,
     510            doc=editor.doc=contentWindow.document,
     511            $doc=$(doc);
     512        doc.open();
     513        doc.write(
     514            options.docType+
     515                '<html>'+
     516                ((options.docCSSFile==='')?'':'<head><link rel="stylesheet" type="text/css" href="'+options.docCSSFile+'" /></head>')+
     517                '<body style="'+options.bodyStyle+'"></body></html>'
     518        );
     519        doc.close();
     520        if(ie)
     521            $doc.click(function(){focus(editor);});
     522        updateFrame(editor);
     523        if(ie){
     524            $doc.bind("beforedeactivate beforeactivate selectionchange keypress",function(e){
     525                if(e.type=="beforedeactivate")
     526                    editor.inactive=true;
     527                else if(e.type=="beforeactivate"){
     528                    if(!editor.inactive&&editor.range&&editor.range.length>1)
     529                        editor.range.shift();
     530                    delete editor.inactive;
     531                }
     532                else if(!editor.inactive){
     533                    if(!editor.range)
     534                        editor.range=[];
     535                    editor.range.unshift(getRange(editor));
     536                    while(editor.range.length>2)
     537                        editor.range.pop();
     538                }
     539            });
     540            $frame.focus(function(){
     541                restoreRange(editor);
     542            });
     543        }
     544        ($.browser.mozilla?$doc:$(contentWindow)).blur(function(){
     545            updateTextArea(editor,true);
     546        });
     547        $doc.click(hidePopups)
     548            .bind("keyup mouseup",function(){
     549                refreshButtons(editor);
     550            });
     551        if(iOS)editor.$area.show();
     552        else $frame.show();
     553        $(function(){
     554            var $toolbar=editor.$toolbar,
     555                $group=$toolbar.children("div:last"),
     556                wid=$main.width();
     557            var hgt=$group.offset().top+$group.outerHeight()-$toolbar.offset().top+1;
     558            $toolbar.height(hgt);
     559            hgt=(/%/.test(""+options.height)?$main.height():parseInt(options.height))-hgt;
     560            $frame.width(wid).height(hgt);
     561            editor.$area.width(wid).height(ie6?hgt-2:hgt);
     562            disable(editor,editor.disabled);
     563            refreshButtons(editor);
     564        });
     565    }
     566    function refreshButtons(editor){
     567        if(!iOS&&$.browser.webkit&&!editor.focused){
     568            editor.$frame[0].contentWindow.focus();
     569            window.focus();
     570            editor.focused=true;
     571        }
     572        var queryObj=editor.doc;
     573        if(ie)queryObj=getRange(editor);
     574        var inSourceMode=sourceMode(editor);
     575        $.each(editor.$toolbar.find("."+BUTTON_CLASS),function(idx,elem){
     576            var $elem=$(elem),
     577                button=$.cleditor.buttons[$.data(elem,BUTTON_NAME)],
     578                command=button.command,
     579                enabled=true;
     580            if(editor.disabled)
     581                enabled=false;
     582            else if(button.getEnabled){
     583                var data={
     584                    editor:editor,
     585                    button:elem,
     586                    buttonName:button.name,
     587                    popup:popups[button.popupName],
     588                    popupName:button.popupName,
     589                    command:button.command,
     590                    useCSS:editor.options.useCSS
     591                };
     592                enabled=button.getEnabled(data);
     593                if(enabled===undefined)
     594                    enabled=true;
     595            }
     596            else if(((inSourceMode||iOS)&&button.name!="source")||
     597                (ie&&(command=="undo"||command=="redo")))
     598                enabled=false;
     599            else if(command&&command!="print"){
     600                if(ie&&command=="hilitecolor")
     601                    command="backcolor";
     602                if(!ie||command!="inserthtml"){
     603                    try{enabled=queryObj.queryCommandEnabled(command);}
     604                    catch(err){enabled=false;}
     605                }
     606            }
     607            if(enabled){
     608                $elem.removeClass(DISABLED_CLASS);
     609                $elem.removeAttr(DISABLED);
     610            }
     611            else{
     612                $elem.addClass(DISABLED_CLASS);
     613                $elem.attr(DISABLED,DISABLED);
     614            }
     615        });
     616    }
     617    function restoreRange(editor){
     618        if(ie&&editor.range)
     619            editor.range[0].select();
     620    }
     621    function select(editor){
     622        setTimeout(function(){
     623            if(sourceMode(editor))editor.$area.select();
     624            else execCommand(editor,"selectall");
     625        },0);
     626    }
     627    function selectedHTML(editor){
     628        restoreRange(editor);
     629        var range=getRange(editor);
     630        if(ie)
     631            return range.htmlText;
     632        var layer=$("<layer>")[0];
     633        layer.appendChild(range.cloneContents());
     634        var html=layer.innerHTML;
     635        layer=null;
     636        return html;
     637    }
     638    function selectedText(editor){
     639        restoreRange(editor);
     640        if(ie)return getRange(editor).text;
     641        return getSelection(editor).toString();
     642    }
     643    function showMessage(editor,message,button){
     644        var popup=createPopup("msg",editor.options,MSG_CLASS);
     645        popup.innerHTML=message;
     646        showPopup(editor,popup,button);
     647    }
     648    function showPopup(editor,popup,button){
     649        var offset,left,top,$popup=$(popup);
     650        if(button){
     651            var $button=$(button);
     652            offset=$button.offset();
     653            left=--offset.left;
     654            top=offset.top+$button.height();
     655        }
     656        else{
     657            var $toolbar=editor.$toolbar;
     658            offset=$toolbar.offset();
     659            left=Math.floor(($toolbar.width()-$popup.width())/2)+offset.left;
     660            top=offset.top+$toolbar.height()-2;
     661        }
     662        hidePopups();
     663        $popup.css({left:left,top:top})
     664            .show();
     665        if(button){
     666            $.data(popup,BUTTON,button);
     667            $popup.bind(CLICK,{popup:popup},$.proxy(popupClick,editor));
     668        }
     669        setTimeout(function(){
     670            $popup.find(":text,textarea").eq(0).focus().select();
     671        },100);
     672    }
     673    function sourceMode(editor){
     674        return editor.$area.is(":visible");
     675    }
     676    function updateFrame(editor,checkForChange){
     677        var code=editor.$area.val(),
     678            options=editor.options,
     679            updateFrameCallback=options.updateFrame,
     680            $body=$(editor.doc.body);
     681        if(updateFrameCallback){
     682            var sum=checksum(code);
     683            if(checkForChange&&editor.areaChecksum==sum)
     684                return;
     685            editor.areaChecksum=sum;
     686        }
     687        var html=updateFrameCallback?updateFrameCallback(code):code;
     688        html=html.replace(/<(?=\/?script)/ig,"&lt;");
     689        if(options.updateTextArea)
     690            editor.frameChecksum=checksum(html);
     691        if(html!=$body.html()){
     692            $body.html(html);
     693            $(editor).triggerHandler(CHANGE);
     694        }
     695    }
     696    function updateTextArea(editor,checkForChange){
     697        var html=$(editor.doc.body).html(),
     698            options=editor.options,
     699            updateTextAreaCallback=options.updateTextArea,
     700            $area=editor.$area;
     701        if(updateTextAreaCallback){
     702            var sum=checksum(html);
     703            if(checkForChange&&editor.frameChecksum==sum)
     704                return;
     705            editor.frameChecksum=sum;
     706        }
     707        var code=updateTextAreaCallback?updateTextAreaCallback(html):html;
     708        if(options.updateFrame)
     709            editor.areaChecksum=checksum(code);
     710        if(code!=$area.val()){
     711            $area.val(code);
     712            $(editor).triggerHandler(CHANGE);
     713        }
     714    }
    715715})(jQuery);
    716716var is={
    717 ie:navigator.appName=='Microsoft Internet Explorer',
    718 java:navigator.javaEnabled(),
    719 ns:navigator.appName=='Netscape',
    720 ua:navigator.userAgent.toLowerCase(),
    721 version:parseFloat(navigator.appVersion.substr(21))||
    722 parseFloat(navigator.appVersion),
    723 win:navigator.platform=='Win32'
     717    ie:navigator.appName=='Microsoft Internet Explorer',
     718    java:navigator.javaEnabled(),
     719    ns:navigator.appName=='Netscape',
     720    ua:navigator.userAgent.toLowerCase(),
     721    version:parseFloat(navigator.appVersion.substr(21))||
     722        parseFloat(navigator.appVersion),
     723    win:navigator.platform=='Win32'
    724724}
    725725is.mac=is.ua.indexOf('mac')>=0;
    726726if(is.ua.indexOf('opera')>=0){
    727 is.ie=is.ns=false;
    728 is.opera=true;
     727    is.ie=is.ns=false;
     728    is.opera=true;
    729729}
    730730if(is.ua.indexOf('gecko')>=0){
    731 is.ie=is.ns=false;
    732 is.gecko=true;
     731    is.ie=is.ns=false;
     732    is.gecko=true;
    733733}
Note: Veja TracChangeset para ajuda no uso do visualizador de conjunto de mudanças.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.