fckxhtml_ie.js
上传用户:wlfwy2004
上传日期:2016-12-12
资源大小:33978k
文件大小:6k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2.  * FCKeditor - The text editor for internet
  3.  * Copyright (C) 2003-2005 Frederico Caldeira Knabben
  4.  * 
  5.  * Licensed under the terms of the GNU Lesser General Public License:
  6.  *  http://www.opensource.org/licenses/lgpl-license.php
  7.  * 
  8.  * For further information visit:
  9.  *  http://www.fckeditor.net/
  10.  * 
  11.  * File Name: fckxhtml_ie.js
  12.  *  Defines the FCKXHtml object, responsible for the XHTML operations.
  13.  *  IE specific.
  14.  * 
  15.  * File Authors:
  16.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  17.  */
  18. FCKXHtml._GetMainXmlString = function()
  19. {
  20. return this.MainNode.xml ;
  21. }
  22. FCKXHtml._AppendEntity = function( xmlNode, entity )
  23. {
  24. xmlNode.appendChild( this.XML.createEntityReference( entity ) ) ;
  25. }
  26. FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName )
  27. {
  28. var aAttributes = htmlNode.attributes ;
  29. for ( var n = 0 ; n < aAttributes.length ; n++ )
  30. {
  31. var oAttribute = aAttributes[n] ;
  32. if ( oAttribute.specified )
  33. {
  34. var sAttName = oAttribute.nodeName.toLowerCase() ;
  35. var sAttValue ;
  36. // The "_fckxhtmljob" attribute is used to mark the already processed elements.
  37. if ( sAttName == '_fckxhtmljob' )
  38. continue ;
  39. // The following must be done because of a bug on IE regarding the style
  40. // attribute. It returns "null" for the nodeValue.
  41. else if ( sAttName == 'style' )
  42. sAttValue = htmlNode.style.cssText ;
  43. // There are two cases when the oAttribute.nodeValue must be used:
  44. // - for the "class" attribute
  45. // - for events attributes (on IE only).
  46. else if ( sAttName == 'class' || sAttName.indexOf('on') == 0 )
  47. sAttValue = oAttribute.nodeValue ;
  48. else if ( nodeName == 'body' && sAttName == 'contenteditable' )
  49. continue ;
  50. // XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked".
  51. else if ( oAttribute.nodeValue === true )
  52. sAttValue = sAttName ;
  53. // We must use getAttribute to get it exactly as it is defined.
  54. else if ( ! (sAttValue = htmlNode.getAttribute( sAttName, 2 ) ) )
  55. sAttValue = oAttribute.nodeValue ;
  56. if ( FCKConfig.ForceSimpleAmpersand && sAttValue.replace )
  57. sAttValue = sAttValue.replace( /&/g, '___FCKAmp___' ) ;
  58. this._AppendAttribute( node, sAttName, sAttValue ) ;
  59. }
  60. }
  61. }
  62. FCKXHtml.TagProcessors['meta'] = function( node, htmlNode )
  63. {
  64. var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ;
  65. if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 )
  66. {
  67. // Get the http-equiv value from the outerHTML.
  68. var sHttpEquiv = htmlNode.outerHTML.match( FCKRegexLib.MetaHttpEquiv ) ;
  69. if ( sHttpEquiv )
  70. {
  71. sHttpEquiv = sHttpEquiv[1] ;
  72. FCKXHtml._AppendAttribute( node, 'http-equiv', sHttpEquiv ) ;
  73. }
  74. }
  75. return node ;
  76. }
  77. // IE automaticaly changes <FONT> tags to <FONT size=+0>.
  78. FCKXHtml.TagProcessors['font'] = function( node, htmlNode )
  79. {
  80. if ( node.attributes.length == 0 )
  81. node = FCKXHtml.XML.createDocumentFragment() ;
  82. FCKXHtml._AppendChildNodes( node, htmlNode ) ;
  83. return node ;
  84. }
  85. // IE doens't see the value attribute as an attribute for the <INPUT> tag.
  86. FCKXHtml.TagProcessors['input'] = function( node, htmlNode )
  87. {
  88. if ( htmlNode.name )
  89. FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
  90. if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) )
  91. FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ;
  92. return node ;
  93. }
  94. // IE ignores the "SELECTED" attribute so we must add it manually.
  95. FCKXHtml.TagProcessors['option'] = function( node, htmlNode )
  96. {
  97. if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) )
  98. FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ;
  99. FCKXHtml._AppendChildNodes( node, htmlNode ) ;
  100. return node ;
  101. }
  102. // There is a BUG in IE regarding the ABBR tag.
  103. FCKXHtml.TagProcessors['abbr'] = function( node, htmlNode )
  104. {
  105. var oNextNode = htmlNode.nextSibling ;
  106. while ( true )
  107. {
  108. if ( oNextNode && oNextNode.nodeName != '/ABBR' )
  109. {
  110. FCKXHtml._AppendNode( node, oNextNode ) ;
  111. oNextNode = oNextNode.nextSibling ;
  112. }
  113. else
  114. break ;
  115. }
  116. return node ;
  117. }
  118. // IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually.
  119. FCKXHtml.TagProcessors['area'] = function( node, htmlNode )
  120. {
  121. if ( ! node.attributes.getNamedItem( 'coords' ) )
  122. {
  123. var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
  124. if ( sCoords && sCoords != '0,0,0' )
  125. FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ;
  126. }
  127. if ( ! node.attributes.getNamedItem( 'shape' ) )
  128. {
  129. var sCoords = htmlNode.getAttribute( 'shape', 2 ) ;
  130. if ( sCoords && sCoords.length > 0 )
  131. FCKXHtml._AppendAttribute( node, 'shape', sCoords ) ;
  132. }
  133. return node ;
  134. }
  135. FCKXHtml.TagProcessors['label'] = function( node, htmlNode )
  136. {
  137. if ( htmlNode.htmlFor.length > 0 )
  138. FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ;
  139. FCKXHtml._AppendChildNodes( node, htmlNode ) ;
  140. return node ;
  141. }
  142. FCKXHtml.TagProcessors['form'] = function( node, htmlNode )
  143. {
  144. if ( htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset != 'UNKNOWN' )
  145. FCKXHtml._AppendAttribute( node, 'accept-charset', htmlNode.acceptCharset ) ;
  146. if ( htmlNode.name ) 
  147. FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; 
  148. FCKXHtml._AppendChildNodes( node, htmlNode ) ;
  149. return node ;
  150. }
  151. // IE doens't hold the name attribute as an attribute for the <TEXTAREA> and <SELECT> tags.
  152. FCKXHtml.TagProcessors['textarea'] = FCKXHtml.TagProcessors['select'] = function( node, htmlNode )
  153. if ( htmlNode.name ) 
  154. FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; 
  155. FCKXHtml._AppendChildNodes( node, htmlNode ) ; 
  156.  
  157. return node ;