fck_link.js
上传用户:zghglow
上传日期:2022-08-09
资源大小:27227k
文件大小:18k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

JavaScript

  1. /*
  2.  * FCKeditor - The text editor for internet
  3.  * Copyright (C) 2003-2006 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.  * "Support Open Source software. What about a donation today?"
  12.  * 
  13.  * File Name: fck_link.js
  14.  *  Scripts related to the Link dialog window (see fck_link.html).
  15.  * 
  16.  * File Authors:
  17.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  18.  *  Dominik Pesch ?dom? (empty selection patch) (d.pesch@11com7.de)
  19.  */
  20. var oEditor = window.parent.InnerDialogLoaded() ;
  21. var FCK = oEditor.FCK ;
  22. var FCKLang = oEditor.FCKLang ;
  23. var FCKConfig = oEditor.FCKConfig ;
  24. //#### Dialog Tabs
  25. // Set the dialog tabs.
  26. window.parent.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
  27. if ( !FCKConfig.LinkDlgHideTarget )
  28. window.parent.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
  29. if ( FCKConfig.LinkUpload )
  30. window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
  31. if ( !FCKConfig.LinkDlgHideAdvanced )
  32. window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
  33. // Function called when a dialog tag is selected.
  34. function OnDialogTabChange( tabCode )
  35. {
  36. ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
  37. ShowE('divTarget' , ( tabCode == 'Target' ) ) ;
  38. ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
  39. ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ;
  40. window.parent.SetAutoSize( true ) ;
  41. }
  42. //#### Regular Expressions library.
  43. var oRegex = new Object() ;
  44. oRegex.UriProtocol = new RegExp('') ;
  45. oRegex.UriProtocol.compile( '^(((http|https|ftp|news)://)|mailto:)', 'gi' ) ;
  46. oRegex.UrlOnChangeProtocol = new RegExp('') ;
  47. oRegex.UrlOnChangeProtocol.compile( '^(http|https|ftp|news)://(?=.)', 'gi' ) ;
  48. oRegex.UrlOnChangeTestOther = new RegExp('') ;
  49. //oRegex.UrlOnChangeTestOther.compile( '^(javascript:|#|/)', 'gi' ) ;
  50. oRegex.UrlOnChangeTestOther.compile( '^((javascript:)|[#/.])', 'gi' ) ; 
  51. oRegex.ReserveTarget = new RegExp('') ;
  52. oRegex.ReserveTarget.compile( '^_(blank|self|top|parent)$', 'i' ) ;
  53. oRegex.PopupUri = new RegExp('') ;
  54. oRegex.PopupUri.compile( "^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$" ) ;
  55. oRegex.PopupFeatures = new RegExp('') ;
  56. oRegex.PopupFeatures.compile( '(?:^|,)([^=]+)=(\d+|yes|no)', 'gi' ) ;
  57. //#### Parser Functions
  58. var oParser = new Object() ;
  59. oParser.ParseEMailUrl = function( emailUrl )
  60. {
  61. // Initializes the EMailInfo object.
  62. var oEMailInfo = new Object() ;
  63. oEMailInfo.Address = '' ;
  64. oEMailInfo.Subject = '' ;
  65. oEMailInfo.Body = '' ;
  66. var oParts = emailUrl.match( /^([^?]+)??(.+)?/ ) ;
  67. if ( oParts )
  68. {
  69. // Set the e-mail address.
  70. oEMailInfo.Address = oParts[1] ;
  71. // Look for the optional e-mail parameters.
  72. if ( oParts[2] )
  73. {
  74. var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ;
  75. if ( oMatch ) oEMailInfo.Subject = unescape( oMatch[2] ) ;
  76. oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ;
  77. if ( oMatch ) oEMailInfo.Body = unescape( oMatch[2] ) ;
  78. }
  79. }
  80. return oEMailInfo ;
  81. }
  82. oParser.CreateEMailUri = function( address, subject, body )
  83. {
  84. var sBaseUri = 'mailto:' + address ;
  85. var sParams = '' ;
  86. if ( subject.length > 0 )
  87. sParams = '?subject=' + escape( subject ) ;
  88. if ( body.length > 0 )
  89. {
  90. sParams += ( sParams.length == 0 ? '?' : '&' ) ;
  91. sParams += 'body=' + escape( body ) ;
  92. }
  93. return sBaseUri + sParams ;
  94. }
  95. //#### Initialization Code
  96. // oLink: The actual selected link in the editor.
  97. var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
  98. if ( oLink )
  99. FCK.Selection.SelectNode( oLink ) ;
  100. window.onload = function()
  101. {
  102. // Translate the dialog box texts.
  103. oEditor.FCKLanguageManager.TranslatePage(document) ;
  104. // Fill the Anchor Names and Ids combos.
  105. LoadAnchorNamesAndIds() ;
  106. // Load the selected link information (if any).
  107. LoadSelection() ;
  108. // Update the dialog box.
  109. SetLinkType( GetE('cmbLinkType').value ) ;
  110. // Show/Hide the "Browse Server" button.
  111. GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
  112. // Show the initial dialog content.
  113. GetE('divInfo').style.display = '' ;
  114. // Set the actual uploader URL.
  115. if ( FCKConfig.LinkUpload )
  116. GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
  117. // Activate the "OK" button.
  118. window.parent.SetOkButton( true ) ;
  119. }
  120. var bHasAnchors ;
  121. function LoadAnchorNamesAndIds()
  122. {
  123. // Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon 
  124. // to edit them. So, we must look for that images now.
  125. var aAnchors = new Array() ;
  126. var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
  127. for( var i = 0 ; i < oImages.length ; i++ )
  128. {
  129. if ( oImages[i].getAttribute('_fckanchor') )
  130. aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
  131. }
  132. var aIds = oEditor.FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
  133. bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
  134. for ( var i = 0 ; i < aAnchors.length ; i++ )
  135. {
  136. var sName = aAnchors[i].name ;
  137. if ( sName && sName.length > 0 )
  138. oEditor.FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ;
  139. }
  140. for ( var i = 0 ; i < aIds.length ; i++ )
  141. {
  142. oEditor.FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
  143. }
  144. ShowE( 'divSelAnchor' , bHasAnchors ) ;
  145. ShowE( 'divNoAnchor' , !bHasAnchors ) ;
  146. }
  147. function LoadSelection()
  148. {
  149. if ( !oLink ) return ;
  150. var sType = 'url' ;
  151. // Get the actual Link href.
  152. var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
  153. if ( sHRef == null )
  154. sHRef = oLink.getAttribute( 'href' , 2 ) + '' ;
  155. // Look for a popup javascript link.
  156. var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
  157. if( oPopupMatch )
  158. {
  159. GetE('cmbTarget').value = 'popup' ;
  160. sHRef = oPopupMatch[1] ;
  161. FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
  162. SetTarget( 'popup' ) ;
  163. }
  164. // Search for the protocol.
  165. var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
  166. if ( sProtocol )
  167. {
  168. sProtocol = sProtocol[0].toLowerCase() ;
  169. GetE('cmbLinkProtocol').value = sProtocol ;
  170. // Remove the protocol and get the remainig URL.
  171. var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
  172. if ( sProtocol == 'mailto:' ) // It is an e-mail link.
  173. {
  174. sType = 'email' ;
  175. var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ;
  176. GetE('txtEMailAddress').value = oEMailInfo.Address ;
  177. GetE('txtEMailSubject').value = oEMailInfo.Subject ;
  178. GetE('txtEMailBody').value = oEMailInfo.Body ;
  179. }
  180. else // It is a normal link.
  181. {
  182. sType = 'url' ;
  183. GetE('txtUrl').value = sUrl ;
  184. }
  185. }
  186. else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link.
  187. {
  188. sType = 'anchor' ;
  189. GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
  190. }
  191. else // It is another type of link.
  192. {
  193. sType = 'url' ;
  194. GetE('cmbLinkProtocol').value = '' ;
  195. GetE('txtUrl').value = sHRef ;
  196. }
  197. if ( !oPopupMatch )
  198. {
  199. // Get the target.
  200. var sTarget = oLink.target ;
  201. if ( sTarget && sTarget.length > 0 )
  202. {
  203. if ( oRegex.ReserveTarget.test( sTarget ) )
  204. {
  205. sTarget = sTarget.toLowerCase() ;
  206. GetE('cmbTarget').value = sTarget ;
  207. }
  208. else
  209. GetE('cmbTarget').value = 'frame' ;
  210. GetE('txtTargetFrame').value = sTarget ;
  211. }
  212. }
  213. // Get Advances Attributes
  214. GetE('txtAttId').value = oLink.id ;
  215. GetE('txtAttName').value = oLink.name ;
  216. GetE('cmbAttLangDir').value = oLink.dir ;
  217. GetE('txtAttLangCode').value = oLink.lang ;
  218. GetE('txtAttAccessKey').value = oLink.accessKey ;
  219. GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
  220. GetE('txtAttTitle').value = oLink.title ;
  221. GetE('txtAttContentType').value = oLink.type ;
  222. GetE('txtAttCharSet').value = oLink.charset ;
  223. if ( oEditor.FCKBrowserInfo.IsIE )
  224. {
  225. GetE('txtAttClasses').value = oLink.getAttribute('className',2) || '' ;
  226. GetE('txtAttStyle').value = oLink.style.cssText ;
  227. }
  228. else
  229. {
  230. GetE('txtAttClasses').value = oLink.getAttribute('class',2) || '' ;
  231. GetE('txtAttStyle').value = oLink.getAttribute('style',2) ;
  232. }
  233. // Update the Link type combo.
  234. GetE('cmbLinkType').value = sType ;
  235. }
  236. //#### Link type selection.
  237. function SetLinkType( linkType )
  238. {
  239. ShowE('divLinkTypeUrl' , (linkType == 'url') ) ;
  240. ShowE('divLinkTypeAnchor' , (linkType == 'anchor') ) ;
  241. ShowE('divLinkTypeEMail' , (linkType == 'email') ) ;
  242. if ( !FCKConfig.LinkDlgHideTarget )
  243. window.parent.SetTabVisibility( 'Target' , (linkType == 'url') ) ;
  244. if ( FCKConfig.LinkUpload )
  245. window.parent.SetTabVisibility( 'Upload' , (linkType == 'url') ) ;
  246. if ( !FCKConfig.LinkDlgHideAdvanced )
  247. window.parent.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ;
  248. if ( linkType == 'email' )
  249. window.parent.SetAutoSize( true ) ;
  250. }
  251. //#### Target type selection.
  252. function SetTarget( targetType )
  253. {
  254. GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ;
  255. GetE('tdPopupName').style.display =
  256. GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
  257. switch ( targetType )
  258. {
  259. case "_blank" :
  260. case "_self" :
  261. case "_parent" :
  262. case "_top" :
  263. GetE('txtTargetFrame').value = targetType ;
  264. break ;
  265. case "" :
  266. GetE('txtTargetFrame').value = '' ;
  267. break ;
  268. }
  269. if ( targetType == 'popup' )
  270. window.parent.SetAutoSize( true ) ;
  271. }
  272. //#### Called while the user types the URL.
  273. function OnUrlChange()
  274. {
  275. var sUrl = GetE('txtUrl').value ;
  276. var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
  277. if ( sProtocol )
  278. {
  279. sUrl = sUrl.substr( sProtocol[0].length ) ;
  280. GetE('txtUrl').value = sUrl ;
  281. GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
  282. }
  283. else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
  284. {
  285. GetE('cmbLinkProtocol').value = '' ;
  286. }
  287. }
  288. //#### Called while the user types the target name.
  289. function OnTargetNameChange()
  290. {
  291. var sFrame = GetE('txtTargetFrame').value ;
  292. if ( sFrame.length == 0 )
  293. GetE('cmbTarget').value = '' ;
  294. else if ( oRegex.ReserveTarget.test( sFrame ) )
  295. GetE('cmbTarget').value = sFrame.toLowerCase() ;
  296. else
  297. GetE('cmbTarget').value = 'frame' ;
  298. }
  299. //#### Builds the javascript URI to open a popup to the specified URI.
  300. function BuildPopupUri( uri )
  301. {
  302. var oReg = new RegExp( "'", "g" ) ;
  303. var sWindowName = "'" + GetE('txtPopupName').value.replace(oReg, "\'") + "'" ;
  304. var sFeatures = '' ;
  305. var aChkFeatures = document.getElementsByName('chkFeature') ;
  306. for ( var i = 0 ; i < aChkFeatures.length ; i++ )
  307. {
  308. if ( i > 0 ) sFeatures += ',' ;
  309. sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
  310. }
  311. if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ;
  312. if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ;
  313. if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ;
  314. if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ;
  315. return ( "javascript:void(window.open('" + uri + "'," + sWindowName + ",'" + sFeatures + "'))" ) ;
  316. }
  317. //#### Fills all Popup related fields.
  318. function FillPopupFields( windowName, features )
  319. {
  320. if ( windowName )
  321. GetE('txtPopupName').value = windowName ;
  322. var oFeatures = new Object() ;
  323. var oFeaturesMatch ;
  324. while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
  325. {
  326. var sValue = oFeaturesMatch[2] ;
  327. if ( sValue == ( 'yes' || '1' ) )
  328. oFeatures[ oFeaturesMatch[1] ] = true ;
  329. else if ( ! isNaN( sValue ) && sValue != 0 )
  330. oFeatures[ oFeaturesMatch[1] ] = sValue ;
  331. }
  332. // Update all features check boxes.
  333. var aChkFeatures = document.getElementsByName('chkFeature') ;
  334. for ( var i = 0 ; i < aChkFeatures.length ; i++ )
  335. {
  336. if ( oFeatures[ aChkFeatures[i].value ] )
  337. aChkFeatures[i].checked = true ;
  338. }
  339. // Update position and size text boxes.
  340. if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ;
  341. if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ;
  342. if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ;
  343. if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ;
  344. }
  345. //#### The OK button was hit.
  346. function Ok()
  347. {
  348. var sUri, sInnerHtml ;
  349. switch ( GetE('cmbLinkType').value )
  350. {
  351. case 'url' :
  352. sUri = GetE('txtUrl').value ;
  353. if ( sUri.length == 0 )
  354. {
  355. alert( FCKLang.DlnLnkMsgNoUrl ) ;
  356. return false ;
  357. }
  358. sUri = GetE('cmbLinkProtocol').value + sUri ;
  359. if( GetE('cmbTarget').value == 'popup' )
  360. {
  361. // Check the window name, according to http://www.w3.org/TR/html4/types.html#type-frame-target (IE throw erros with spaces).
  362. if ( /(^[^a-zA-Z])|(s)/.test( GetE('txtPopupName').value ) )
  363. {
  364. alert( FCKLang.DlnLnkMsgInvPopName ) ;
  365. return false ;
  366. }
  367. sUri = BuildPopupUri( sUri ) ;
  368. }
  369. break ;
  370. case 'email' :
  371. sUri = GetE('txtEMailAddress').value ;
  372. if ( sUri.length == 0 )
  373. {
  374. alert( FCKLang.DlnLnkMsgNoEMail ) ;
  375. return false ;
  376. }
  377. sUri = oParser.CreateEMailUri(
  378. sUri,
  379. GetE('txtEMailSubject').value,
  380. GetE('txtEMailBody').value ) ;
  381. break ;
  382. case 'anchor' :
  383. var sAnchor = GetE('cmbAnchorName').value ;
  384. if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
  385. if ( sAnchor.length == 0 )
  386. {
  387. alert( FCKLang.DlnLnkMsgNoAnchor ) ;
  388. return false ;
  389. }
  390. sUri = '#' + sAnchor ;
  391. break ;
  392. }
  393. // No link selected, so try to create one.
  394. if ( !oLink )
  395. oLink = oEditor.FCK.CreateLink( sUri ) ;
  396. if ( oLink )
  397. sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL).
  398. else
  399. {
  400. // If no selection, use the uri as the link text (by dom, 2006-05-26)
  401. sInnerHtml = sUri;
  402. // Built a better text for empty links.
  403. switch ( GetE('cmbLinkType').value )
  404. {
  405. // anchor: use old behavior --> return true
  406. case 'anchor':
  407. sInnerHtml = sInnerHtml.replace( /^#/, '' ) ;
  408. break ;
  409. // url: try to get path
  410. case 'url':
  411. var oLinkPathRegEx = new RegExp("//?([^?"']+)([?].*)?$") ;
  412. var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
  413. if (asLinkPath != null)
  414. sInnerHtml = asLinkPath[1];  // use matched path
  415. break ;
  416. // mailto: try to get email address
  417. case 'email':
  418. sInnerHtml = GetE('txtEMailAddress').value ;
  419. break ;
  420. }
  421. // Create a new (empty) anchor.
  422. oLink = oEditor.FCK.CreateElement( 'a' ) ;
  423. }
  424. oEditor.FCKUndo.SaveUndoStep() ;
  425. oLink.href = sUri ;
  426. SetAttribute( oLink, '_fcksavedurl', sUri ) ;
  427. oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML
  428. // Target
  429. if( GetE('cmbTarget').value != 'popup' )
  430. SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
  431. else
  432. SetAttribute( oLink, 'target', null ) ;
  433. // Advances Attributes
  434. SetAttribute( oLink, 'id' , GetE('txtAttId').value ) ;
  435. SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ; // No IE. Set but doesnt't update the outerHTML.
  436. SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ;
  437. SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ;
  438. SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
  439. SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
  440. SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ;
  441. SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ;
  442. SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ;
  443. if ( oEditor.FCKBrowserInfo.IsIE )
  444. {
  445. SetAttribute( oLink, 'className', GetE('txtAttClasses').value ) ;
  446. oLink.style.cssText = GetE('txtAttStyle').value ;
  447. }
  448. else
  449. {
  450. SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ;
  451. SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
  452. }
  453. // Select the link.
  454. oEditor.FCKSelection.SelectNode(oLink);
  455. return true ;
  456. }
  457. function BrowseServer()
  458. {
  459. OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ;
  460. }
  461. function SetUrl( url )
  462. {
  463. document.getElementById('txtUrl').value = url ;
  464. OnUrlChange() ;
  465. window.parent.SetSelectedTab( 'Info' ) ;
  466. }
  467. function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
  468. {
  469. switch ( errorNumber )
  470. {
  471. case 0 : // No errors
  472. alert( 'Your file has been successfully uploaded' ) ;
  473. break ;
  474. case 1 : // Custom error
  475. alert( customMsg ) ;
  476. return ;
  477. case 101 : // Custom warning
  478. alert( customMsg ) ;
  479. break ;
  480. case 201 :
  481. alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
  482. break ;
  483. case 202 :
  484. alert( 'Invalid file type' ) ;
  485. return ;
  486. case 203 :
  487. alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
  488. return ;
  489. default :
  490. alert( 'Error on file upload. Error number: ' + errorNumber ) ;
  491. return ;
  492. }
  493. SetUrl( fileUrl ) ;
  494. GetE('frmUpload').reset() ;
  495. }
  496. var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
  497. var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
  498. function CheckUpload()
  499. {
  500. var sFile = GetE('txtUploadFile').value ;
  501. if ( sFile.length == 0 )
  502. {
  503. alert( 'Please select a file to upload' ) ;
  504. return false ;
  505. }
  506. if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
  507. ( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
  508. {
  509. OnUploadCompleted( 202 ) ;
  510. return false ;
  511. }
  512. return true ;
  513. }