fck_image.js
上传用户:saigedz
上传日期:2019-10-14
资源大小:997k
文件大小:13k
源码类别:

中间件编程

开发平台:

HTML/CSS

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