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

数据库编程

开发平台:

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.  * Scripts related to the Image dialog window (see fck_image.html).
  22.  */
  23. var oEditor = window.parent.InnerDialogLoaded() ;
  24. var FCK = oEditor.FCK ;
  25. var FCKLang = oEditor.FCKLang ;
  26. var FCKConfig = oEditor.FCKConfig ;
  27. var FCKDebug = oEditor.FCKDebug ;
  28. var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
  29. //#### Dialog Tabs
  30. // Set the dialog tabs.
  31. window.parent.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
  32. if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
  33. window.parent.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
  34. if ( FCKConfig.ImageUpload )
  35. window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
  36. if ( !FCKConfig.ImageDlgHideAdvanced )
  37. window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
  38. // Function called when a dialog tag is selected.
  39. function OnDialogTabChange( tabCode )
  40. {
  41. ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
  42. ShowE('divLink' , ( tabCode == 'Link' ) ) ;
  43. ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
  44. ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
  45. }
  46. // Get the selected image (if available).
  47. var oImage = FCK.Selection.GetSelectedElement() ;
  48. if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
  49. oImage = null ;
  50. // Get the active link.
  51. var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
  52. var oImageOriginal ;
  53. function UpdateOriginal( resetSize )
  54. {
  55. if ( !eImgPreview )
  56. return ;
  57. if ( GetE('txtUrl').value.length == 0 )
  58. {
  59. oImageOriginal = null ;
  60. return ;
  61. }
  62. oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ;
  63. if ( resetSize )
  64. {
  65. oImageOriginal.onload = function()
  66. {
  67. this.onload = null ;
  68. ResetSizes() ;
  69. }
  70. }
  71. oImageOriginal.src = eImgPreview.src ;
  72. }
  73. var bPreviewInitialized ;
  74. window.onload = function()
  75. {
  76. // Translate the dialog box texts.
  77. oEditor.FCKLanguageManager.TranslatePage(document) ;
  78. GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
  79. GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
  80. // Load the selected element information (if any).
  81. LoadSelection() ;
  82. // Show/Hide the "Browse Server" button.
  83. GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ;
  84. GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
  85. UpdateOriginal() ;
  86. // Set the actual uploader URL.
  87. if ( FCKConfig.ImageUpload )
  88. GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
  89. window.parent.SetAutoSize( true ) ;
  90. // Activate the "OK" button.
  91. window.parent.SetOkButton( true ) ;
  92. }
  93. function LoadSelection()
  94. {
  95. if ( ! oImage ) return ;
  96. var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
  97. if ( sUrl == null )
  98. sUrl = GetAttribute( oImage, 'src', '' ) ;
  99. GetE('txtUrl').value    = sUrl ;
  100. GetE('txtAlt').value    = GetAttribute( oImage, 'alt', '' ) ;
  101. GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ;
  102. GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ;
  103. GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ;
  104. GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ;
  105. var iWidth, iHeight ;
  106. var regexSize = /^s*(d+)pxs*$/i ;
  107. if ( oImage.style.width )
  108. {
  109. var aMatchW  = oImage.style.width.match( regexSize ) ;
  110. if ( aMatchW )
  111. {
  112. iWidth = aMatchW[1] ;
  113. oImage.style.width = '' ;
  114. SetAttribute( oImage, 'width' , iWidth ) ;
  115. }
  116. }
  117. if ( oImage.style.height )
  118. {
  119. var aMatchH  = oImage.style.height.match( regexSize ) ;
  120. if ( aMatchH )
  121. {
  122. iHeight = aMatchH[1] ;
  123. oImage.style.height = '' ;
  124. SetAttribute( oImage, 'height', iHeight ) ;
  125. }
  126. }
  127. GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
  128. GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
  129. // Get Advances Attributes
  130. GetE('txtAttId').value = oImage.id ;
  131. GetE('cmbAttLangDir').value = oImage.dir ;
  132. GetE('txtAttLangCode').value = oImage.lang ;
  133. GetE('txtAttTitle').value = oImage.title ;
  134. GetE('txtLongDesc').value = oImage.longDesc ;
  135. if ( oEditor.FCKBrowserInfo.IsIE )
  136. {
  137. GetE('txtAttClasses').value = oImage.className || '' ;
  138. GetE('txtAttStyle').value = oImage.style.cssText ;
  139. }
  140. else
  141. {
  142. GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
  143. GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
  144. }
  145. if ( oLink )
  146. {
  147. var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
  148. if ( sLinkUrl == null )
  149. sLinkUrl = oLink.getAttribute('href',2) ;
  150. GetE('txtLnkUrl').value = sLinkUrl ;
  151. GetE('cmbLnkTarget').value = oLink.target ;
  152. }
  153. UpdatePreview() ;
  154. }
  155. //#### The OK button was hit.
  156. function Ok()
  157. {
  158. if ( GetE('txtUrl').value.length == 0 )
  159. {
  160. window.parent.SetSelectedTab( 'Info' ) ;
  161. GetE('txtUrl').focus() ;
  162. alert( FCKLang.DlgImgAlertUrl ) ;
  163. return false ;
  164. }
  165. var bHasImage = ( oImage != null ) ;
  166. if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
  167. {
  168. if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
  169. oImage = null ;
  170. }
  171. else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
  172. {
  173. if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
  174. oImage = null ;
  175. }
  176. oEditor.FCKUndo.SaveUndoStep() ;
  177. if ( !bHasImage )
  178. {
  179. if ( bImageButton )
  180. {
  181. oImage = FCK.EditorDocument.createElement( 'input' ) ;
  182. oImage.type = 'image' ;
  183. oImage = FCK.InsertElement( oImage ) ;
  184. }
  185. else
  186. oImage = FCK.InsertElement( 'img' ) ;
  187. }
  188. UpdateImage( oImage ) ;
  189. var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
  190. if ( sLnkUrl.length == 0 )
  191. {
  192. if ( oLink )
  193. FCK.ExecuteNamedCommand( 'Unlink' ) ;
  194. }
  195. else
  196. {
  197. if ( oLink ) // Modifying an existent link.
  198. oLink.href = sLnkUrl ;
  199. else // Creating a new link.
  200. {
  201. if ( !bHasImage )
  202. oEditor.FCKSelection.SelectNode( oImage ) ;
  203. oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
  204. if ( !bHasImage )
  205. {
  206. oEditor.FCKSelection.SelectNode( oLink ) ;
  207. oEditor.FCKSelection.Collapse( false ) ;
  208. }
  209. }
  210. SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
  211. SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
  212. }
  213. return true ;
  214. }
  215. function UpdateImage( e, skipId )
  216. {
  217. e.src = GetE('txtUrl').value ;
  218. SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
  219. SetAttribute( e, "alt"   , GetE('txtAlt').value ) ;
  220. SetAttribute( e, "width" , GetE('txtWidth').value ) ;
  221. SetAttribute( e, "height", GetE('txtHeight').value ) ;
  222. SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
  223. SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
  224. SetAttribute( e, "border", GetE('txtBorder').value ) ;
  225. SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
  226. // Advances Attributes
  227. if ( ! skipId )
  228. SetAttribute( e, 'id', GetE('txtAttId').value ) ;
  229. SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ;
  230. SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ;
  231. SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
  232. SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ;
  233. if ( oEditor.FCKBrowserInfo.IsIE )
  234. {
  235. e.className = GetE('txtAttClasses').value ;
  236. e.style.cssText = GetE('txtAttStyle').value ;
  237. }
  238. else
  239. {
  240. SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ;
  241. SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
  242. }
  243. }
  244. var eImgPreview ;
  245. var eImgPreviewLink ;
  246. function SetPreviewElements( imageElement, linkElement )
  247. {
  248. eImgPreview = imageElement ;
  249. eImgPreviewLink = linkElement ;
  250. UpdatePreview() ;
  251. UpdateOriginal() ;
  252. bPreviewInitialized = true ;
  253. }
  254. function UpdatePreview()
  255. {
  256. if ( !eImgPreview || !eImgPreviewLink )
  257. return ;
  258. if ( GetE('txtUrl').value.length == 0 )
  259. eImgPreviewLink.style.display = 'none' ;
  260. else
  261. {
  262. UpdateImage( eImgPreview, true ) ;
  263. if ( GetE('txtLnkUrl').value.Trim().length > 0 )
  264. eImgPreviewLink.href = 'javascript:void(null);' ;
  265. else
  266. SetAttribute( eImgPreviewLink, 'href', '' ) ;
  267. eImgPreviewLink.style.display = '' ;
  268. }
  269. }
  270. var bLockRatio = true ;
  271. function SwitchLock( lockButton )
  272. {
  273. bLockRatio = !bLockRatio ;
  274. lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
  275. lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
  276. if ( bLockRatio )
  277. {
  278. if ( GetE('txtWidth').value.length > 0 )
  279. OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
  280. else
  281. OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
  282. }
  283. }
  284. // Fired when the width or height input texts change
  285. function OnSizeChanged( dimension, value )
  286. {
  287. // Verifies if the aspect ration has to be maintained
  288. if ( oImageOriginal && bLockRatio )
  289. {
  290. var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
  291. if ( value.length == 0 || isNaN( value ) )
  292. {
  293. e.value = '' ;
  294. return ;
  295. }
  296. if ( dimension == 'Width' )
  297. value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value  / oImageOriginal.width ) ) ;
  298. else
  299. value = value == 0 ? 0 : Math.round( oImageOriginal.width  * ( value / oImageOriginal.height ) ) ;
  300. if ( !isNaN( value ) )
  301. e.value = value ;
  302. }
  303. UpdatePreview() ;
  304. }
  305. // Fired when the Reset Size button is clicked
  306. function ResetSizes()
  307. {
  308. if ( ! oImageOriginal ) return ;
  309. GetE('txtWidth').value  = oImageOriginal.width ;
  310. GetE('txtHeight').value = oImageOriginal.height ;
  311. UpdatePreview() ;
  312. }
  313. function BrowseServer()
  314. {
  315. OpenServerBrowser(
  316. 'Image',
  317. FCKConfig.ImageBrowserURL,
  318. FCKConfig.ImageBrowserWindowWidth,
  319. FCKConfig.ImageBrowserWindowHeight ) ;
  320. }
  321. function LnkBrowseServer()
  322. {
  323. OpenServerBrowser(
  324. 'Link',
  325. FCKConfig.LinkBrowserURL,
  326. FCKConfig.LinkBrowserWindowWidth,
  327. FCKConfig.LinkBrowserWindowHeight ) ;
  328. }
  329. function OpenServerBrowser( type, url, width, height )
  330. {
  331. sActualBrowser = type ;
  332. OpenFileBrowser( url, width, height ) ;
  333. }
  334. var sActualBrowser ;
  335. function SetUrl( url, width, height, alt )
  336. {
  337. if ( sActualBrowser == 'Link' )
  338. {
  339. GetE('txtLnkUrl').value = url ;
  340. UpdatePreview() ;
  341. }
  342. else
  343. {
  344. GetE('txtUrl').value = url ;
  345. GetE('txtWidth').value = width ? width : '' ;
  346. GetE('txtHeight').value = height ? height : '' ;
  347. if ( alt )
  348. GetE('txtAlt').value = alt;
  349. UpdatePreview() ;
  350. UpdateOriginal( true ) ;
  351. }
  352. window.parent.SetSelectedTab( 'Info' ) ;
  353. }
  354. function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
  355. {
  356. switch ( errorNumber )
  357. {
  358. case 0 : // No errors
  359. alert( 'Your file has been successfully uploaded' ) ;
  360. break ;
  361. case 1 : // Custom error
  362. alert( customMsg ) ;
  363. return ;
  364. case 101 : // Custom warning
  365. alert( customMsg ) ;
  366. break ;
  367. case 201 :
  368. alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
  369. break ;
  370. case 202 :
  371. alert( 'Invalid file type' ) ;
  372. return ;
  373. case 203 :
  374. alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
  375. return ;
  376. default :
  377. alert( 'Error on file upload. Error number: ' + errorNumber ) ;
  378. return ;
  379. }
  380. sActualBrowser = '' ;
  381. SetUrl( fileUrl ) ;
  382. GetE('frmUpload').reset() ;
  383. }
  384. var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
  385. var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
  386. function CheckUpload()
  387. {
  388. var sFile = GetE('txtUploadFile').value ;
  389. if ( sFile.length == 0 )
  390. {
  391. alert( 'Please select a file to upload' ) ;
  392. return false ;
  393. }
  394. if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
  395. ( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
  396. {
  397. OnUploadCompleted( 202 ) ;
  398. return false ;
  399. }
  400. return true ;
  401. }