[svn r17751] FS#2867 - FCKEditor, customizations plugin. Introducing new javascript routines to deal with relative, semi-absolute and absolute URLs, not activated yet.

skala
Ivan Tcholakov 16 years ago
parent eb8af728c8
commit e4e97cf05a
  1. 423
      main/inc/lib/fckeditor/editor/plugins/customizations/fckplugin.js

@ -49,7 +49,7 @@
/*
**************************************************************************************
* Reading some passed by PHP-scripts options.
* Initialization.
**************************************************************************************
*/
@ -73,6 +73,36 @@ else
FCKConfig.InDocument = false ;
}
// Absolute URL to document repository root.
if ( !FCKConfig.CreateDocumentWebDir )
{
FCKConfig.CreateDocumentWebDir = '' ;
}
// Relative path from the document to the repository root.
if ( !FCKConfig.CreateDocumentDir )
{
FCKConfig.CreateDocumentDir = '' ;
}
// This is the base of the reltive URLs that are used by the dialog system.
if ( !FCKConfig.BaseHref || FCKConfig.BaseHref.toString().length == 0 )
{
if ( FCKConfig.BaseHref.toString().length == 0 )
{
FCKConfig.BaseHref = FCKConfig.CreateDocumentWebDir ;
}
}
FCKConfig.BaseHref = FCKConfig.BaseHref.toString();
if ( FCKConfig.BaseHref.length > 0 )
{
if ( FCKConfig.BaseHref.substr( FCKConfig.BaseHref.length - 1 ) != '/' )
{
FCKConfig.BaseHref = FCKConfig.BaseHref + '/' ;
}
}
/*
**************************************************************************************
@ -998,7 +1028,7 @@ FCK.RegisterDoubleClickHandler(
/*
**************************************************************************************
* Common utilities
* Routines for testing the type of a selected visual object.
**************************************************************************************
*/
@ -1173,6 +1203,395 @@ FCK.GetVideoType = function ( img )
return false ;
} ;
/*
**************************************************************************************
* Routines to deal with conversions of absolute and relative URLs.
**************************************************************************************
*/
// Constants for fundamental URL conversions.
var RELATIVE_URL = 'relative' ;
var ABSOLUTE_URL = 'absolute' ;
var SEMI_ABSOLUTE_URL = 'semi-absolute' ;
FCK.RELATIVE_URL = RELATIVE_URL ;
FCK.ABSOLUTE_URL = ABSOLUTE_URL ;
FCK.SEMI_ABSOLUTE_URL = SEMI_ABSOLUTE_URL ;
// Constants used for conversions of special relative URLs.
var REPOSITORY_RELATIVE_URL = 'repository-relative' ;
var DOCUMENT_RELATIVE_URL = 'document-relative' ;
FCK.REPOSITORY_RELATIVE_URL = REPOSITORY_RELATIVE_URL ;
FCK.DOCUMENT_RELATIVE_URL = DOCUMENT_RELATIVE_URL ;
// Conversion of selected by the file managers URLs.
FCK.GetSelectedUrl = function ( url )
{
url = FCK.GetUrl ( url, DOCUMENT_RELATIVE_URL ) ;
if ( FCK.GetUrlType (url) != RELATIVE_URL )
{
url = FCK.GetUrl ( url, SEMI_ABSOLUTE_URL ) ;
}
return url ;
}
// Conversion of a URL into desired type.
FCK.GetUrl = function ( url, type )
{
if ( !url )
{
return url ;
}
if ( !type )
{
return url ;
}
url = url.toString().Trim() ;
if ( url.indexOf( './' ) == 0 )
{
url = url.substr( 2 );
}
switch ( type )
{
case RELATIVE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
break ;
case ABSOLUTE_URL:
case SEMI_ABSOLUTE_URL:
url = FCK.ConvertUrl( url, RELATIVE_URL, FCKConfig.CreateDocumentWebDir ) ;
if ( FCK.GetUrlType( url ) == RELATIVE_URL )
{
url = FCK.GetUrl( url, DOCUMENT_RELATIVE_URL ) ;
}
break ;
default:
break ;
}
break ;
case REPOSITORY_RELATIVE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
if ( url.indexOf( FCKConfig.CreateDocumentDir) == 0 )
{
url = url.substr( FCKConfig.CreateDocumentDir.length ) ;
}
break ;
case ABSOLUTE_URL:
url = FCK.ConvertUrl( url, RELATIVE_URL, FCKConfig.CreateDocumentWebDir ) ;
break ;
case SEMI_ABSOLUTE_URL:
url = FCK.ConvertUrl( url, RELATIVE_URL, FCKConfig.CreateDocumentWebDir ) ;
break ;
default:
break ;
}
break ;
case DOCUMENT_RELATIVE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
if ( FCKConfig.CreateDocumentDir != '/' )
{
url = FCKConfig.CreateDocumentDir + url ;
}
break ;
case ABSOLUTE_URL:
case SEMI_ABSOLUTE_URL:
url = FCK.ConvertUrl( url, RELATIVE_URL, FCKConfig.CreateDocumentWebDir ) ;
if ( FCK.GetUrlType( url ) == RELATIVE_URL )
{
url = FCK.GetUrl( url, DOCUMENT_RELATIVE_URL ) ;
}
break ;
default:
break ;
}
break ;
case ABSOLUTE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
url = FCK.GetUrl( url, REPOSITORY_RELATIVE_URL ) ;
url = FCK.ConvertUrl( url, ABSOLUTE_URL, FCKConfig.CreateDocumentWebDir) ;
break ;
case ABSOLUTE_URL:
break ;
case SEMI_ABSOLUTE_URL:
url = FCK.ConvertUrl( url, ABSOLUTE_URL, FCKConfig.CreateDocumentWebDir) ;
break ;
default:
break ;
}
break ;
case SEMI_ABSOLUTE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
url = FCK.GetUrl( url, REPOSITORY_RELATIVE_URL ) ;
url = FCK.ConvertUrl( url, SEMI_ABSOLUTE_URL, FCKConfig.CreateDocumentWebDir) ;
break ;
case ABSOLUTE_URL:
url = FCK.ConvertUrl( url, SEMI_ABSOLUTE_URL, FCKConfig.CreateDocumentWebDir) ;
break ;
case SEMI_ABSOLUTE_URL:
break ;
default:
break ;
}
break ;
default:
break ;
}
return url ;
}
// Common URL conversion routine.
FCK.ConvertUrl = function ( url, type, base )
{
if ( !url )
{
return '' ;
}
if ( !type )
{
return '' ;
}
url = url.toString().Trim() ;
if ( url.indexOf( './' ) == 0 )
{
url = url.substr( 2 );
}
type = type.toString().Trim() ;
if ( !base )
{
base = '' ;
}
base = base.toString().Trim() ;
if ( base == '/' )
{
base = '' ;
}
switch ( type )
{
case RELATIVE_URL:
switch ( FCK.GetUrlType( url ) )
{
case ABSOLUTE_URL:
base = FCK.ConvertUrl( base, ABSOLUTE_URL ) ;
if ( url.indexOf( base ) == 0 )
{
url = url.substr( base.length ) ;
}
break ;
case SEMI_ABSOLUTE_URL:
base = FCK.ConvertUrl( base, SEMI_ABSOLUTE_URL ) ;
if ( url.indexOf( base ) == 0 )
{
url = url.substr( base.length ) ;
}
break ;
default:
break ;
}
break ;
case ABSOLUTE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
base = FCK.ConvertUrl( base, ABSOLUTE_URL ) ;
url = base + url ;
break ;
case SEMI_ABSOLUTE_URL:
url = FCK.GetServerBase() + url.substr( 1 ) ;
break ;
default:
break ;
}
break ;
case SEMI_ABSOLUTE_URL:
switch ( FCK.GetUrlType( url ) )
{
case RELATIVE_URL:
base = FCK.ConvertUrl( base, SEMI_ABSOLUTE_URL ) ;
url = base + url ;
break ;
case ABSOLUTE_URL:
var serverBase = FCK.GetServerBase() ;
if ( serverBase == FCK.GetServerBase( url ) )
{
url = '/' + url.substr( serverBase.length ) ;
}
break ;
default:
break ;
}
break ;
default:
break ;
}
return url ;
}
// Returns type of a given URL.
// Returned values:
// RELATIVE_URL ( returned for example for images/image.png )
// SEMI_ABSOLUTE_URL ( /dokeos/courses/TEST/document/images/image.png )
// ABSOLUTE_URL ( http://localhost/dokeos/courses/TEST/document/images/image.png )
// '' - in case of error
FCK.GetUrlType = function ( url )
{
if ( !url )
{
return '' ;
}
url = url.toString().Trim() ;
if ( url.indexOf( '/' ) == 0 )
{
return SEMI_ABSOLUTE_URL ;
}
if ( url.match( /^([^:]+\:)?\/\// ) )
{
return ABSOLUTE_URL ;
}
return RELATIVE_URL ;
} ;
// Extracts the server base from a given URL.
// If the URL is omited, the function returns the base of the server where LMS runs.
// Example:
// Your site is http://www.mysite.org/dokeos
// The server base is http://www.mysite.org/
FCK.GetServerBase = function ( url )
{
if ( !url )
{
if ( FCKConfig.CreateDocumentWebDir )
{
url = FCKConfig.CreateDocumentWebDir ;
}
else
{
url = location.href ;
}
}
url = url.toString().replace( /(https?:\/\/[^\/]*)\/.*/, '$1' ) + '/' ;
return url ;
} ;
/*
**************************************************************************************
* Deprecated routines, to be removed after full adopting the new URL-related routines.
**************************************************************************************
*/
// Makes a URL relative.
FCK.RemoveBasePath = function ( url )
{

Loading…
Cancel
Save