Ignore:
Timestamp:
05/18/05 21:15:06 (15 years ago)
Author:
yermol
Message:

htmlarea.js

. added workaround fix for NASTY FIREFOX BUG resulting in the infamous

uneditable area problem (exception on designMode="on" issue -
refer to bug:


https://bugzilla.mozilla.org/show_bug.cgi?id=207842


and this thread:


http://xinha.gogo.co.nz/punbb/viewtopic.php?id=229


. trailing <BR>'s are no longer stripped out of the document. This

was wreaking havoc on EnterParagraphs?. It's not clear whether or not
this is going to have unanticipated side-effects.

plugins/EnterParagraphs/enter-paragraphs.js

NOT FULLY FUNCTIONAL YET - DOESN'T HANDLE ALL CASES CORRECTLY,
but it's much better than it was I think.

. largely reworked.
. changed obfuscated variables names to make it more readable.
. expanded out nested (x ? y : z) constructs to make it more readable.
. added alot of comments.
. fixed a serious bug in findEachNodeUnder() that was not correctly

handling beginning and end node conditions.

. fixed design flaw that selected a non-existent insertion point for

placing the cursor.

. fixed several exceptions.
. now correctly handles lists by passing the back back to the Gecko

engine if we are in a list with the exception of being at the
first position in the first element in which case we insert
a paragraph before the list and move the cursor back to the first
item on the list.

Location:
branches/unified_backend/ddt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/unified_backend/ddt/ddt.js

    r121 r172  
    5252//      Error: uncaught exception: Permission denied to get property Window.DDT_STATUS 
    5353// .    setting the title of the debug window so you can tell which domain it refers to. 
     54// 
     55// 2005-05-12 YmL: 
     56//      .       added _ddtDumpNode() to dump node details along with message. 
     57// 
    5458// ----------------------------- 
     59 
     60 
     61 
     62/** 
     63* browser identification 
     64*/ 
     65 
     66DDT.agt = navigator.userAgent.toLowerCase(); 
     67DDT.is_ie          = ((DDT.agt.indexOf("msie") != -1) && (DDT.agt.indexOf("opera") == -1)); 
     68DDT.is_opera  = (DDT.agt.indexOf("opera") != -1); 
     69DDT.is_mac         = (DDT.agt.indexOf("mac") != -1); 
     70DDT.is_mac_ie = (DDT.is_ie && DDT.is_mac); 
     71DDT.is_win_ie = (DDT.is_ie && !DDT.is_mac); 
     72DDT.is_gecko  = (navigator.product == "Gecko"); 
    5573 
    5674/** 
     
    121139        // 
    122140        // We'll just use the hostname here to make the window name unique. 
    123  
    124         this.popup = window.open( "", "ddt_popup_" + location.host, 
     141        // 
     142        // Something to note, MSIE 6 (at least under win98) throws an exception 
     143        // if there are any "."'s in the window name, so we replace them with underscores here. 
     144 
     145        var window_name = "ddt_popup_" + location.hostname.replace( /[.]/g, "_" ); 
     146 
     147        if (DDT.is_gecko)  
     148                { 
     149                this.popup = window.open( "", "ddt_popup_" + location.host, 
    125150                              "toolbar=no,menubar=no,personalbar=no,width=800,height=450," + 
    126151                              "scrollbars=no,resizable=yes,modal=yes,dependable=yes"); 
     152                } 
     153        else 
     154                { 
     155 
     156                this.popup = window.open("", window_name, 
     157              "toolbar=no,location=no,directories=no,status=no,menubar=no," + 
     158              "scrollbars=no,resizable=yes,width=800,height=450"); 
     159 
     160                } 
     161 
     162        // did we manage to open a window? 
     163 
     164        if (( typeof this.popup == 'undefined' ) || ( this.popup == null )) 
     165                { 
     166                alert( "FAILED TO OPEN DEBUGGING TRACE WINDOW" ); 
     167 
     168                return false; 
     169                } 
    127170 
    128171        // it's possible that the window was left open or we are another object 
    129172        // sharing the same window. 
    130173 
    131         if ( typeof this.popup.DDT_STATUS == 'undefined' ) 
     174        if (( this.popup != null ) && ( typeof this.popup.DDT_STATUS == 'undefined' )) 
    132175                { 
    133176 
     
    207250        } 
    208251 
    209 } 
     252}       // end of _ddt() 
     253 
     254// -------------------------------- 
     255 
     256/** 
     257* dumps key properties from a node. 
     258*/ 
     259 
     260DDT.prototype._ddtDumpNode = function( file, line, msg, node ) 
     261{ 
     262 
     263if ( typeof node == 'undefined' ) 
     264        { 
     265        this._ddt( 
     266                file, line, msg + " -- Node is undefined!" ); 
     267 
     268        return; 
     269        } 
     270 
     271if ( node == null ) 
     272        { 
     273        this._ddt( 
     274                file, line, msg + " -- Node is null!" ); 
     275        } 
     276 
     277this._ddt(  
     278        file, line, msg + "<br>" + this.FragmentToString( node, 0 ) ); 
     279 
     280} // end of _ddtDumpNode() 
    210281 
    211282// -------------------------------- 
     
    255326 
    256327/** 
    257 * dumps an object tree 
    258 * 
    259 * displays a tree of html elements. Design based on method from htmlarea.js 
     328* generates a string description of a document fragment. 
     329* 
     330* returns a tree of html elements. Design based on method from htmlarea.js 
    260331* 
    261332* @see ddtpreproc.php 
    262 * @param root top of tree to display 
     333* @param root top of tree to generate 
    263334* @param level depth level. 
    264335*/ 
    265336 
    266 DDT.prototype._ddtDumpTree = function(root, level)  
     337DDT.prototype.FragmentToString = function(root, level)  
    267338{                                                          
    268 var tag = root.tagName.toLowerCase(), i; 
    269 var ns = HTMLArea.is_ie ? root.scopeName : root.prefix; 
    270  
    271 // FIXME: separated on multiple lines to avoid being picked 
    272 // up by ddtpreproc.php 
    273  
    274 this._ddt(  
    275         ":","0", level + "- " + tag + " [" + ns + "]"  
    276         ); 
    277  
    278 for (i = root.firstChild; i; i = i.nextSibling) 
    279         if (i.nodeType == 1) 
    280                 this._ddtDumpTree(i, level + 2); 
     339 
     340var retval = ""; 
     341 
     342if ( typeof root == 'undefined' ) 
     343        return " root undefined "; 
     344 
     345if ( root == null ) 
     346        return " root is null "; 
     347 
     348// it may be a mozilla range object: 
     349 
     350if ( typeof root.cloneRange != 'undefined' ) 
     351        { 
     352        // we have a range object.  
     353 
     354        retval = "RANGE OBJECT - start offset '" + root.startOffset + "' end offset '" + root.endOffset + "'<br>"; 
     355        retval += "RANGE START:<br>" + this.FragmentToString( root.startContainer, level ); 
     356        retval += "RANGE END:<br>" + this.FragmentToString( root.endContainer, level ); 
     357 
     358        return retval; 
     359        } 
     360 
     361if ( typeof root.childNodes == 'undefined' ) 
     362        return " root is not a node"; 
     363 
     364var childretval = ""; 
     365 
     366// interestingly if you do not declare a local var for the iterator 
     367// it seems to become a static variable which mucks up the recursion 
     368 
     369var i = 0; 
     370 
     371for (i = 0; i < root.childNodes.length; i++) 
     372        { 
     373        childretval += this.FragmentToString( root.childNodes[i], level + 2); 
     374        } 
     375 
     376retval = this.indent( level ) + this._ddtGetNodeType( root ) + " - " + root.childNodes.length + " children <br>" + childretval; 
     377 
     378return retval; 
     379 
    281380}; 
    282381 
     382// ------------------------------------------------- 
     383 
     384/** 
     385* indent by level 
     386*/ 
     387 
     388DDT.prototype.indent = function( level ) 
     389{ 
     390 
     391var retval = ""; 
     392 
     393for (i = 0; i<level; i++ ) 
     394        { 
     395        retval += "&nbsp;&nbsp;"; 
     396        } 
     397 
     398return retval; 
     399 
     400} 
     401// ----------------------------------------- 
     402 
     403/** 
     404* displays node type 
     405*/ 
     406 
     407DDT.prototype._ddtGetNodeType = function( node ) 
     408{ 
     409 
     410var retval = ""; 
     411 
     412if ( typeof node == 'undefined' ) 
     413        { 
     414        return "TYPE_IS_UNDEFINED"; 
     415        } 
     416 
     417if ( node == null ) 
     418        { 
     419        return "TYPE_IS_NULL!"; 
     420        } 
     421 
     422if ( typeof node.nodeType == 'undefined' ) 
     423        { 
     424        return "NOT_A_NODE_OBJECT - type is '" + typeof node + "'"; 
     425        } 
     426 
     427switch ( node.nodeType ) 
     428        { 
     429 
     430        case 1: 
     431                retval = "ELEMENT_NODE - tag '" + node.nodeName + "'"; 
     432                return retval; 
     433                break; 
     434 
     435        case 2: 
     436                return "ATTRIBUTE_NODE"; 
     437                break; 
     438 
     439        case 3: 
     440                retval = "TEXT_NODE"; 
     441                retval = retval + " contents '" + node.nodeValue + "'"; 
     442                return retval; 
     443 
     444                break; 
     445 
     446        case 4: 
     447                return "CDATA_SECTION_NODE"; 
     448                break; 
     449 
     450        case 5: 
     451                return "ENTITY_REFERENCE_NODE"; 
     452                break; 
     453 
     454        case 6: 
     455                return "ENTITY_NODE"; 
     456                break; 
     457 
     458        case 7: 
     459                return "PROCESSING_INSTRUCTION_NODE"; 
     460                break; 
     461 
     462        case 8: 
     463                return "COMMENT_NODE"; 
     464                break; 
     465 
     466        case 9: 
     467                return "DOCUMENT_NODE"; 
     468                break; 
     469 
     470        case 10: 
     471                return "DOCUMENT_TYPE_NODE"; 
     472                break; 
     473 
     474        case 11: 
     475                retval = "DOCUMENT_FRAGMENT_NODE"; 
     476 
     477                return retval; 
     478                break; 
     479 
     480        case 12: 
     481                return "NOTATION_NODE"; 
     482                break; 
     483 
     484        default: 
     485                return "UNKNOWN_NODE!"; 
     486                break; 
     487 
     488        } // end of switch 
     489 
     490};      // end of _ddtDumpNode() 
     491 
     492// ---------------------------------------------------------- 
     493 
     494/** 
     495* getHTMLSource() - returns HTML source for display in a browser window. 
     496*/ 
     497 
     498DDT.prototype.getHTMLSource = function( html ) 
     499{ 
     500 
     501html = html.replace( /</ig, "&lt;" ); 
     502html = html.replace( />/ig, "&gt;" ); 
     503html = html.replace( /&/ig, "&amp;" ); 
     504html = html.replace(/\xA0/g, "&nbsp;"); 
     505html = html.replace(/\x22/g, "&quot;"); 
     506 
     507return html; 
     508 
     509}       // end of showHTML() 
     510 
    283511// END 
    284512 
  • branches/unified_backend/ddt/ddt.php

    r121 r172  
    8989                } 
    9090 
    91         fputs( $fvDEBUG[ "logfile_fp" ], "$msgline" ); 
     91        fwrite( $fvDEBUG[ "logfile_fp" ], $msgline ); 
    9292        fflush( $fvDEBUG[ "logfile_fp" ] ); 
    9393 
Note: See TracChangeset for help on using the changeset viewer.