/EQT_V2/EQT/EQTWebApp/fckeditor/editor/dialog/fck_div.html

http://sgsoft-las.googlecode.com/ · HTML · 396 lines · 337 code · 37 blank · 22 comment · 0 complexity · 9db5cf9f058382bb35ce007989cbd583 MD5 · raw file

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  2. <!--
  3. * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  4. * Copyright (C) 2003-2009 Frederico Caldeira Knabben
  5. *
  6. * == BEGIN LICENSE ==
  7. *
  8. * Licensed under the terms of any of the following licenses at your
  9. * choice:
  10. *
  11. * - GNU General Public License Version 2 or later (the "GPL")
  12. * http://www.gnu.org/licenses/gpl.html
  13. *
  14. * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  15. * http://www.gnu.org/licenses/lgpl.html
  16. *
  17. * - Mozilla Public License Version 1.1 or later (the "MPL")
  18. * http://www.mozilla.org/MPL/MPL-1.1.html
  19. *
  20. * == END LICENSE ==
  21. *
  22. * Form dialog window.
  23. -->
  24. <html xmlns="http://www.w3.org/1999/xhtml">
  25. <head>
  26. <title></title>
  27. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  28. <meta content="noindex, nofollow" name="robots" />
  29. <script src="common/fck_dialog_common.js" type="text/javascript"></script>
  30. <script type="text/javascript">
  31. var dialog = window.parent ;
  32. var oEditor = dialog.InnerDialogLoaded() ;
  33. var FCK = oEditor.FCK ;
  34. var FCKLang = oEditor.FCKLang ;
  35. var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
  36. var FCKStyles = oEditor.FCKStyles ;
  37. var FCKElementPath = oEditor.FCKElementPath ;
  38. var FCKDomRange = oEditor.FCKDomRange ;
  39. var FCKDomTools = oEditor.FCKDomTools ;
  40. var FCKDomRangeIterator = oEditor.FCKDomRangeIterator ;
  41. var FCKListsLib = oEditor.FCKListsLib ;
  42. var AlwaysCreate = dialog.Args().CustomValue ;
  43. String.prototype.IEquals = function()
  44. {
  45. var thisUpper = this.toUpperCase() ;
  46. var aArgs = arguments ;
  47. // The arguments could also be a single array.
  48. if ( aArgs.length == 1 && aArgs[0].pop )
  49. aArgs = aArgs[0] ;
  50. for ( var i = 0 ; i < aArgs.length ; i++ )
  51. {
  52. if ( thisUpper == aArgs[i].toUpperCase() )
  53. return true ;
  54. }
  55. return false ;
  56. }
  57. var CurrentContainers = [] ;
  58. if ( !AlwaysCreate )
  59. {
  60. dialog.Selection.EnsureSelection() ;
  61. CurrentContainers = FCKDomTools.GetSelectedDivContainers() ;
  62. }
  63. // Add some tabs
  64. dialog.AddTab( 'General', FCKLang.DlgDivGeneralTab );
  65. dialog.AddTab( 'Advanced', FCKLang.DlgDivAdvancedTab ) ;
  66. function AddStyleOption( styleName )
  67. {
  68. var el = GetE( 'selStyle' ) ;
  69. var opt = document.createElement( 'option' ) ;
  70. opt.text = opt.value = styleName ;
  71. if ( FCKBrowserInfo.IsIE )
  72. el.add( opt ) ;
  73. else
  74. el.add( opt, null ) ;
  75. }
  76. function OnDialogTabChange( tabCode )
  77. {
  78. ShowE( 'divGeneral', tabCode == 'General' ) ;
  79. ShowE( 'divAdvanced', tabCode == 'Advanced' ) ;
  80. dialog.SetAutoSize( true ) ;
  81. }
  82. function GetNearestAncestorDirection( node )
  83. {
  84. var dir = 'ltr' ; // HTML default.
  85. while ( ( node = node.parentNode ) )
  86. {
  87. if ( node.dir )
  88. dir = node.dir ;
  89. }
  90. return dir ;
  91. }
  92. window.onload = function()
  93. {
  94. // First of all, translate the dialog box texts
  95. oEditor.FCKLanguageManager.TranslatePage(document) ;
  96. dialog.SetOkButton( true ) ;
  97. dialog.SetAutoSize( true ) ;
  98. // Popuplate the style menu
  99. var styles = FCKStyles.GetStyles() ;
  100. var selectableStyles = {} ;
  101. for ( var i in styles )
  102. {
  103. if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
  104. selectableStyles[i] = styles[i] ;
  105. }
  106. if ( CurrentContainers.length <= 1 )
  107. {
  108. var target = CurrentContainers[0] ;
  109. var match = null ;
  110. for ( var i in selectableStyles )
  111. {
  112. if ( target && styles[i].CheckElementRemovable( target, true ) )
  113. match = i ;
  114. }
  115. if ( !match )
  116. AddStyleOption( "" ) ;
  117. for ( var i in selectableStyles )
  118. AddStyleOption( i ) ;
  119. if ( match )
  120. GetE( 'selStyle' ).value = match ;
  121. // Set the value for other inputs
  122. if ( target )
  123. {
  124. GetE( 'txtClass' ).value = target.className ;
  125. GetE( 'txtId' ).value = target.id ;
  126. GetE( 'txtLang' ).value = target.lang ;
  127. GetE( 'txtInlineStyle').value = target.style.cssText ;
  128. GetE( 'txtTitle' ).value = target.title ;
  129. GetE( 'selLangDir').value = target.dir || GetNearestAncestorDirection( target ) ;
  130. }
  131. }
  132. else
  133. {
  134. GetE( 'txtId' ).disabled = true ;
  135. AddStyleOption( "" ) ;
  136. for ( var i in selectableStyles )
  137. AddStyleOption( i ) ;
  138. }
  139. }
  140. function CreateDiv()
  141. {
  142. var newBlocks = [] ;
  143. var range = new FCKDomRange( FCK.EditorWindow ) ;
  144. range.MoveToSelection() ;
  145. var bookmark = range.CreateBookmark() ;
  146. // Kludge for #1592: if the bookmark nodes are in the beginning of
  147. // $tagName, then move them to the nearest block element in the
  148. // $tagName.
  149. if ( FCKBrowserInfo.IsIE )
  150. {
  151. var bStart = range.GetBookmarkNode( bookmark, true ) ;
  152. var bEnd = range.GetBookmarkNode( bookmark, false ) ;
  153. var cursor ;
  154. if ( bStart
  155. && bStart.parentNode.nodeName.IEquals( 'div' )
  156. && !bStart.previousSibling )
  157. {
  158. cursor = bStart ;
  159. while ( ( cursor = cursor.nextSibling ) )
  160. {
  161. if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
  162. FCKDomTools.MoveNode( bStart, cursor, true ) ;
  163. }
  164. }
  165. if ( bEnd
  166. && bEnd.parentNode.nodeName.IEquals( 'div' )
  167. && !bEnd.previousSibling )
  168. {
  169. cursor = bEnd ;
  170. while ( ( cursor = cursor.nextSibling ) )
  171. {
  172. if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
  173. {
  174. if ( cursor.firstChild == bStart )
  175. FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
  176. else
  177. FCKDomTools.MoveNode( bEnd, cursor, true ) ;
  178. }
  179. }
  180. }
  181. }
  182. var iterator = new FCKDomRangeIterator( range ) ;
  183. var block ;
  184. var paragraphs = [] ;
  185. while ( ( block = iterator.GetNextParagraph() ) )
  186. paragraphs.push( block ) ;
  187. // Make sure all paragraphs have the same parent.
  188. var commonParent = paragraphs[0].parentNode ;
  189. var tmp = [] ;
  190. for ( var i = 0 ; i < paragraphs.length ; i++ )
  191. {
  192. block = paragraphs[i] ;
  193. commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;
  194. }
  195. // The common parent must not be the following tags: table, tbody, tr, ol, ul.
  196. while ( commonParent.nodeName.IEquals( 'table', 'tbody', 'tr', 'ol', 'ul' ) )
  197. commonParent = commonParent.parentNode ;
  198. // Reconstruct the block list to be processed such that all resulting blocks
  199. // satisfy parentNode == commonParent.
  200. var lastBlock = null ;
  201. while ( paragraphs.length > 0 )
  202. {
  203. block = paragraphs.shift() ;
  204. while ( block.parentNode != commonParent )
  205. block = block.parentNode ;
  206. if ( block != lastBlock )
  207. tmp.push( block ) ;
  208. lastBlock = block ;
  209. }
  210. paragraphs = tmp ;
  211. // Split the paragraphs into groups depending on their BlockLimit element.
  212. var groups = [] ;
  213. var lastBlockLimit = null ;
  214. for ( var i = 0 ; i < paragraphs.length ; i++ )
  215. {
  216. block = paragraphs[i] ;
  217. var elementPath = new FCKElementPath( block ) ;
  218. if ( elementPath.BlockLimit != lastBlockLimit )
  219. {
  220. groups.push( [] ) ;
  221. lastBlockLimit = elementPath.BlockLimit ;
  222. }
  223. groups[groups.length - 1].push( block ) ;
  224. }
  225. // Create a DIV container for each group.
  226. for ( var i = 0 ; i < groups.length ; i++ )
  227. {
  228. var divNode = FCK.EditorDocument.createElement( 'div' ) ;
  229. groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;
  230. for ( var j = 0 ; j < groups[i].length ; j++ )
  231. FCKDomTools.MoveNode( groups[i][j], divNode ) ;
  232. newBlocks.push( divNode ) ;
  233. }
  234. range.MoveToBookmark( bookmark ) ;
  235. range.Select() ;
  236. FCK.Focus() ;
  237. FCK.Events.FireEvent( 'OnSelectionChange' ) ;
  238. return newBlocks ;
  239. }
  240. function Ok()
  241. {
  242. oEditor.FCKUndo.SaveUndoStep() ;
  243. if ( CurrentContainers.length < 1 )
  244. CurrentContainers = CreateDiv();
  245. var setValue = function( attrName, inputName )
  246. {
  247. var val = GetE( inputName ).value ;
  248. for ( var i = 0 ; i < CurrentContainers.length ; i++ )
  249. {
  250. if ( val == '' )
  251. CurrentContainers[i].removeAttribute( attrName ) ;
  252. else
  253. CurrentContainers[i].setAttribute( attrName, val ) ;
  254. }
  255. }
  256. // Apply modifications to the DIV container according to dialog inputs.
  257. if ( CurrentContainers.length == 1 )
  258. {
  259. setValue( 'class', 'txtClass' ) ;
  260. setValue( 'id', 'txtId' ) ;
  261. }
  262. setValue( 'lang', 'txtLang' ) ;
  263. if ( FCKBrowserInfo.IsIE )
  264. {
  265. for ( var i = 0 ; i < CurrentContainers.length ; i++ )
  266. CurrentContainers[i].style.cssText = GetE( 'txtInlineStyle' ).value ;
  267. }
  268. else
  269. setValue( 'style', 'txtInlineStyle' ) ;
  270. setValue( 'title', 'txtTitle' ) ;
  271. for ( var i = 0 ; i < CurrentContainers.length ; i++ )
  272. {
  273. var dir = GetE( 'selLangDir' ).value ;
  274. var styleName = GetE( 'selStyle' ).value ;
  275. if ( GetNearestAncestorDirection( CurrentContainers[i] ) != dir )
  276. CurrentContainers[i].dir = dir ;
  277. else
  278. CurrentContainers[i].removeAttribute( 'dir' ) ;
  279. if ( styleName )
  280. FCKStyles.GetStyle( styleName ).ApplyToObject( CurrentContainers[i] ) ;
  281. }
  282. return true ;
  283. }
  284. </script>
  285. </head>
  286. <body style="overflow: hidden">
  287. <div id="divGeneral">
  288. <table cellspacing="0" cellpadding="0" width="100%" border="0">
  289. <colgroup span="2">
  290. <col width="49%" />
  291. <col width="2%" />
  292. <col width="49%" />
  293. </colgroup>
  294. <tr>
  295. <td>
  296. <span fcklang="DlgDivStyle">Style</span><br />
  297. <select id="selStyle" style="width: 100%;">
  298. </select>
  299. </td>
  300. <td>&nbsp;</td>
  301. <td>
  302. <span fcklang="DlgGenClass">Stylesheet Classes</span><br />
  303. <input id="txtClass" style="width: 100%" type="text" />
  304. </td>
  305. </tr>
  306. </table>
  307. </div>
  308. <div id="divAdvanced" style="display: none">
  309. <table cellspacing="0" cellpadding="0" width="100%" border="0">
  310. <colgroup span="2">
  311. <col width="49%" />
  312. <col width="2%" />
  313. <col width="49%" />
  314. </colgroup>
  315. <tr>
  316. <td>
  317. <span fcklang="DlgGenId">Id</span><br />
  318. <input style="width: 100%" type="text" id="txtId" />
  319. </td>
  320. <td>&nbsp;</td>
  321. <td>
  322. <span fcklang="DlgGenLangCode">Language Code</span><br />
  323. <input style="width: 100%" type="text" id="txtLang" />
  324. </td>
  325. </tr>
  326. <tr>
  327. <td colspan="3">&nbsp;</td>
  328. </tr>
  329. <tr>
  330. <td colspan="3">
  331. <span fcklang="DlgDivInlineStyle">Inline Style</span><br />
  332. <input style="width: 100%" type="text" id="txtInlineStyle" />
  333. </td>
  334. </tr>
  335. <tr>
  336. <td colspan="3">&nbsp;</td>
  337. </tr>
  338. <tr>
  339. <td colspan="3">
  340. <span fcklang="DlgGenTitle">Advisory Title</span><br />
  341. <input style="width: 100%" type="text" id="txtTitle" />
  342. </td>
  343. </tr>
  344. <tr>
  345. <td>&nbsp;</td>
  346. </tr>
  347. <tr>
  348. <td>
  349. <span fcklang="DlgGenLangDir">Language Direction</span><br />
  350. <select id="selLangDir">
  351. <option fcklang="DlgGenLangDirLtr" value="ltr">Left to Right (LTR)
  352. <option fcklang="DlgGenLangDirRtl" value="rtl">Right to Left (RTL)
  353. </select>
  354. </td>
  355. </tr>
  356. </table>
  357. </div>
  358. </body>
  359. </html>