fcktoolbarstylecombo.js
上传用户:ah_jiwei
上传日期:2022-07-24
资源大小:54044k
文件大小:5k
源码类别:

数据库编程

开发平台:

Visual C++

  1. /*
  2.  * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3.  * Copyright (C) 2003-2007 Frederico Caldeira Knabben
  4.  *
  5.  * == BEGIN LICENSE ==
  6.  *
  7.  * Licensed under the terms of any of the following licenses at your
  8.  * choice:
  9.  *
  10.  *  - GNU General Public License Version 2 or later (the "GPL")
  11.  *    http://www.gnu.org/licenses/gpl.html
  12.  *
  13.  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  14.  *    http://www.gnu.org/licenses/lgpl.html
  15.  *
  16.  *  - Mozilla Public License Version 1.1 or later (the "MPL")
  17.  *    http://www.mozilla.org/MPL/MPL-1.1.html
  18.  *
  19.  * == END LICENSE ==
  20.  *
  21.  * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
  22.  */
  23. var FCKToolbarStyleCombo = function( tooltip, style )
  24. {
  25. if ( tooltip === false )
  26. return ;
  27. this.CommandName = 'Style' ;
  28. this.Label = this.GetLabel() ;
  29. this.Tooltip = tooltip ? tooltip : this.Label ;
  30. this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
  31. this.DefaultLabel = FCKConfig.DefaultStyleLabel || '' ;
  32. }
  33. // Inherit from FCKToolbarSpecialCombo.
  34. FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ;
  35. FCKToolbarStyleCombo.prototype.GetLabel = function()
  36. {
  37. return FCKLang.Style ;
  38. }
  39. FCKToolbarStyleCombo.prototype.GetStyles = function()
  40. {
  41. var styles = {} ;
  42. var allStyles = FCK.ToolbarSet.CurrentInstance.Styles.GetStyles() ;
  43. for ( var styleName in allStyles )
  44. {
  45. var style = allStyles[ styleName ] ;
  46. if ( !style.IsCore )
  47. styles[ styleName ] = style ;
  48. }
  49. return styles ;
  50. }
  51. FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo )
  52. {
  53. var targetDoc = targetSpecialCombo._Panel.Document ;
  54. // Add the Editor Area CSS to the panel so the style classes are previewed correctly.
  55. FCKTools.AppendStyleSheet( targetDoc, FCKConfig.ToolbarComboPreviewCSS ) ;
  56. FCKTools.AppendStyleString( targetDoc, FCKConfig.EditorAreaStyles ) ;
  57. targetDoc.body.className += ' ForceBaseFont' ;
  58. // Add ID and Class to the body.
  59. FCKConfig.ApplyBodyAttributes( targetDoc.body ) ;
  60. // Get the styles list.
  61. var styles = this.GetStyles() ;
  62. for ( var styleName in styles )
  63. {
  64. var style = styles[ styleName ] ;
  65. // Object type styles have no preview.
  66. var caption = style.GetType() == FCK_STYLE_OBJECT ? 
  67. styleName : 
  68. FCKToolbarStyleCombo_BuildPreview( style, style.Label || styleName ) ;
  69. var item = targetSpecialCombo.AddItem( styleName, caption ) ;
  70. item.Style = style ;
  71. }
  72. // We must prepare the list before showing it.
  73. targetSpecialCombo.OnBeforeClick = this.StyleCombo_OnBeforeClick ;
  74. }
  75. FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
  76. {
  77. var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
  78. if ( startElement )
  79. {
  80. var path = new FCKElementPath( startElement ) ;
  81. var elements = path.Elements ;
  82. for ( var e = 0 ; e < elements.length ; e++ )
  83. {
  84. for ( var i in targetSpecialCombo.Items )
  85. {
  86. var item = targetSpecialCombo.Items[i] ;
  87. var style = item.Style ;
  88. if ( style.CheckElementRemovable( elements[ e ], true ) )
  89. {
  90. targetSpecialCombo.SetLabel( style.Label || style.Name ) ;
  91. return ;
  92. }
  93. }
  94. }
  95. }
  96. targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
  97. }
  98. FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
  99. {
  100. // Two things are done here:
  101. // - In a control selection, get the element name, so we'll display styles
  102. //   for that element only.
  103. // - Select the styles that are active for the current selection.
  104. // Clear the current selection.
  105. targetSpecialCombo.DeselectAll() ;
  106. var startElement ;
  107. var path ;
  108. var tagName ;
  109. var selection = FCK.ToolbarSet.CurrentInstance.Selection ;
  110. if ( selection.GetType() == 'Control' )
  111. {
  112. startElement = selection.GetSelectedElement() ;
  113. tagName = startElement.nodeName.toLowerCase() ;
  114. }
  115. else
  116. {
  117. startElement = selection.GetBoundaryParentElement( true ) ;
  118. path = new FCKElementPath( startElement ) ;
  119. }
  120. for ( var i in targetSpecialCombo.Items )
  121. {
  122. var item = targetSpecialCombo.Items[i] ;
  123. var style = item.Style ;
  124. if ( ( tagName && style.Element == tagName ) || ( !tagName && style.GetType() != FCK_STYLE_OBJECT ) )
  125. {
  126. item.style.display = '' ;
  127. if ( ( path && style.CheckActive( path ) ) || ( !path && style.CheckElementRemovable( startElement, true ) ) )
  128. targetSpecialCombo.SelectItem( style.Name ) ;
  129. }
  130. else
  131. item.style.display = 'none' ;
  132. }
  133. }
  134. function FCKToolbarStyleCombo_BuildPreview( style, caption ) 
  135. {
  136. var styleType = style.GetType() ;
  137. var html = [] ;
  138. if ( styleType == FCK_STYLE_BLOCK )
  139. html.push( '<div class="BaseFont">' ) ;
  140. var elementName = style.Element ;
  141. // Avoid <bdo> in the preview.
  142. if ( elementName == 'bdo' )
  143. elementName = 'span' ;
  144. html = [ '<', elementName ] ;
  145. // Assign all defined attributes.
  146. var attribs = style._StyleDesc.Attributes ;
  147. if ( attribs )
  148. {
  149. for ( var att in attribs )
  150. {
  151. html.push( ' ', att, '="', style.GetFinalAttributeValue( att ), '"' ) ;
  152. }
  153. }
  154. // Assign the style attribute.
  155. if ( style._GetStyleText().length > 0 )
  156. html.push( ' style="', style.GetFinalStyleValue(), '"' ) ;
  157. html.push( '>', caption, '</', elementName, '>' ) ;
  158. if ( styleType == FCK_STYLE_BLOCK )
  159. html.push( '</div>' ) ;
  160. return html.join( '' ) ;
  161. }