2007-05-31 22:43:05 +00:00
Linker . _pluginInfo = { name : "Linker" , version : "1.0" , developer : "James Sleeman" , developer _url : "http://www.gogo.co.nz/" , c _owner : "Gogo Internet Services" , license : "htmlArea" , sponsor : "Gogo Internet Services" , sponsor _url : "http://www.gogo.co.nz/" } ;
Xinha . loadStyle ( "dTree/dtree.css" , "Linker" ) ;
Xinha . Config . prototype . Linker = { "treeCaption" : document . location . host , "backend" : _editor _url + "plugins/Linker/scan.php" , "backend_data" : null , "files" : null } ;
function Linker ( _1 , _2 ) {
this . editor = _1 ;
this . lConfig = _1 . config . Linker ;
var _3 = this ;
if ( _1 . config . btnList . createlink ) {
_1 . config . btnList . createlink [ 3 ] = function ( e , _5 , _6 ) {
_3 . _createLink ( _3 . _getSelectedAnchor ( ) ) ;
2005-09-30 02:25:07 +00:00
} ;
2007-05-31 22:43:05 +00:00
} else {
_1 . config . registerButton ( "createlink" , "Insert/Modify Hyperlink" , [ _editor _url + "images/ed_buttons_main.gif" , 6 , 1 ] , false , function ( e , _8 , _9 ) {
_3 . _createLink ( _3 . _getSelectedAnchor ( ) ) ;
} ) ;
}
_1 . config . addToolbarElement ( "createlink" , "createlink" , 0 ) ;
}
Linker . prototype . _lc = function ( _a ) {
return Xinha . _lc ( _a , "Linker" ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . prototype . _createLink = function ( a ) {
if ( ! a && this . editor . selectionEmpty ( this . editor . getSelection ( ) ) ) {
alert ( this . _lc ( "You must select some text before making a new link." ) ) ;
return false ;
}
var _c = { type : "url" , href : "http://www.example.com/" , target : "" , p _width : "" , p _height : "" , p _options : [ "menubar=no" , "toolbar=yes" , "location=no" , "status=no" , "scrollbars=yes" , "resizeable=yes" ] , to : "alice@example.com" , subject : "" , body : "" , anchor : "" } ;
if ( a && a . tagName . toLowerCase ( ) == "a" ) {
var _d = this . editor . fixRelativeLinks ( a . getAttribute ( "href" ) ) ;
var m = _d . match ( /^mailto:(.*@[^?&]*)(\?(.*))?$/ ) ;
var _f = _d . match ( /^#(.*)$/ ) ;
if ( m ) {
_c . type = "mailto" ;
_c . to = m [ 1 ] ;
if ( m [ 3 ] ) {
var _10 = m [ 3 ] . split ( "&" ) ;
for ( var x = 0 ; x < _10 . length ; x ++ ) {
var j = _10 [ x ] . match ( /(subject|body)=(.*)/ ) ;
if ( j ) {
_c [ j [ 1 ] ] = decodeURIComponent ( j [ 2 ] ) ;
}
}
}
} else {
if ( _f ) {
_c . type = "anchor" ;
_c . anchor = _f [ 1 ] ;
} else {
if ( a . getAttribute ( "onclick" ) ) {
var m = a . getAttribute ( "onclick" ) . match ( /window\.open\(\s*this\.href\s*,\s*'([a-z0-9_]*)'\s*,\s*'([a-z0-9_=,]*)'\s*\)/i ) ;
_c . href = _d ? _d : "" ;
_c . target = "popup" ;
_c . p _name = m [ 1 ] ;
_c . p _options = [ ] ;
var _10 = m [ 2 ] . split ( "," ) ;
for ( var x = 0 ; x < _10 . length ; x ++ ) {
var i = _10 [ x ] . match ( /(width|height)=([0-9]+)/ ) ;
if ( i ) {
_c [ "p_" + i [ 1 ] ] = parseInt ( i [ 2 ] ) ;
} else {
_c . p _options . push ( _10 [ x ] ) ;
}
}
} else {
_c . href = _d ;
_c . target = a . target ;
}
}
}
}
var _14 = this ;
this . a = a ;
var _15 = function ( ) {
var a = _14 . a ;
var _17 = _14 . _dialog . hide ( ) ;
var atr = { href : "" , target : "" , title : "" , onclick : "" } ;
if ( _17 . type == "url" ) {
if ( _17 . href ) {
atr . href = _17 . href ;
atr . target = _17 . target ;
if ( _17 . target == "popup" ) {
if ( _17 . p _width ) {
_17 . p _options . push ( "width=" + _17 . p _width ) ;
}
if ( _17 . p _height ) {
_17 . p _options . push ( "height=" + _17 . p _height ) ;
}
atr . onclick = "if(window.top && window.top.Xinha){return false}window.open(this.href, '" + ( _17 . p _name . replace ( /[^a-z0-9_]/i , "_" ) ) + "', '" + _17 . p _options . join ( "," ) + "');return false;" ;
}
}
} else {
if ( _17 . type == "anchor" ) {
if ( _17 . anchor ) {
atr . href = _17 . anchor . value ;
}
} else {
if ( _17 . to ) {
atr . href = "mailto:" + _17 . to ;
if ( _17 . subject ) {
atr . href += "?subject=" + encodeURIComponent ( _17 . subject ) ;
}
if ( _17 . body ) {
atr . href += ( _17 . subject ? "&" : "?" ) + "body=" + encodeURIComponent ( _17 . body ) ;
}
}
}
}
if ( a && a . tagName . toLowerCase ( ) == "a" ) {
if ( ! atr . href ) {
if ( confirm ( _14 . _dialog . _lc ( "Are you sure you wish to remove this link?" ) ) ) {
var p = a . parentNode ;
while ( a . hasChildNodes ( ) ) {
p . insertBefore ( a . removeChild ( a . childNodes [ 0 ] ) , a ) ;
}
p . removeChild ( a ) ;
_14 . editor . updateToolbar ( ) ;
return ;
}
} else {
for ( var i in atr ) {
a . setAttribute ( i , atr [ i ] ) ;
}
if ( Xinha . is _ie ) {
if ( /mailto:([^?<>]*)(\?[^<]*)?$/i . test ( a . innerHTML ) ) {
a . innerHTML = RegExp . $1 ;
}
}
}
} else {
if ( ! atr . href ) {
return true ;
}
var tmp = Xinha . uniq ( "http://www.example.com/Link" ) ;
_14 . editor . _doc . execCommand ( "createlink" , false , tmp ) ;
var _1c = _14 . editor . _doc . getElementsByTagName ( "a" ) ;
for ( var i = 0 ; i < _1c . length ; i ++ ) {
var _1d = _1c [ i ] ;
if ( _1d . href == tmp ) {
if ( ! a ) {
a = _1d ;
}
for ( var j in atr ) {
_1d . setAttribute ( j , atr [ j ] ) ;
}
}
}
}
_14 . editor . selectNodeContents ( a ) ;
_14 . editor . updateToolbar ( ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
this . _dialog . show ( _c , _15 ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . prototype . _getSelectedAnchor = function ( ) {
var sel = this . editor . getSelection ( ) ;
var rng = this . editor . createRange ( sel ) ;
var a = this . editor . activeElement ( sel ) ;
if ( a != null && a . tagName . toLowerCase ( ) == "a" ) {
return a ;
} else {
a = this . editor . _getFirstAncestor ( sel , "a" ) ;
if ( a != null ) {
return a ;
}
}
return null ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . prototype . onGenerateOnce = function ( ) {
this . _dialog = new Linker . Dialog ( this ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . Dialog _dTrees = [ ] ;
Linker . Dialog = function ( _22 ) {
var _23 = this ;
this . Dialog _nxtid = 0 ;
this . linker = _22 ;
this . id = { } ;
this . ready = false ;
this . files = false ;
this . html = false ;
this . dialog = false ;
this . _prepareDialog ( ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . Dialog . prototype . _prepareDialog = function ( ) {
var _24 = this ;
var _25 = this . linker ;
if ( typeof dTree == "undefined" ) {
Xinha . _loadback ( _editor _url + "plugins/Linker/dTree/dtree.js" , function ( ) {
_24 . _prepareDialog ( ) ;
} ) ;
return ;
}
if ( this . files == false ) {
if ( _25 . lConfig . backend ) {
Xinha . _postback ( _25 . lConfig . backend , _25 . lConfig . backend _data , function ( txt ) {
try {
_24 . files = eval ( txt ) ;
}
catch ( Error ) {
_24 . files = [ { url : "" , title : Error . toString ( ) } ] ;
}
_24 . _prepareDialog ( ) ;
} ) ;
} else {
if ( _25 . lConfig . files != null ) {
_24 . files = _25 . lConfig . files ;
_24 . _prepareDialog ( ) ;
}
}
return ;
}
var _27 = this . files ;
if ( this . html == false ) {
Xinha . _getback ( _editor _url + "plugins/Linker/dialog.html" , function ( txt ) {
_24 . html = txt ;
_24 . _prepareDialog ( ) ;
} ) ;
return ;
}
var _29 = this . html ;
var _2a = this . dialog = new Xinha . Dialog ( _25 . editor , this . html , "Linker" ) ;
var _2b = Xinha . uniq ( "dTree_" ) ;
this . dTree = new dTree ( _2b , _editor _url + "plugins/Linker/dTree/" ) ;
eval ( _2b + " = this.dTree" ) ;
this . dTree . add ( this . Dialog _nxtid ++ , - 1 , _25 . lConfig . treeCaption , null , _25 . lConfig . treeCaption ) ;
this . makeNodes ( _27 , 0 ) ;
var _2c = this . dialog . getElementById ( "dTree" ) ;
_2c . innerHTML = "" ;
_2c . style . position = "absolute" ;
_2c . style . left = 1 + "px" ;
_2c . style . top = 0 + "px" ;
_2c . style . overflow = "auto" ;
_2c . style . backgroundColor = "white" ;
this . ddTree = _2c ;
this . dTree . _linker _premade = this . dTree . toString ( ) ;
var _2d = this . dialog . getElementById ( "options" ) ;
_2d . style . position = "absolute" ;
_2d . style . top = 0 + "px" ;
_2d . style . right = 0 + "px" ;
_2d . style . width = 320 + "px" ;
_2d . style . overflow = "auto" ;
this . dialog . onresize = function ( ) {
var h = parseInt ( _2a . height ) - _2a . getElementById ( "h1" ) . offsetHeight ;
var w = parseInt ( _2a . width ) - 322 ;
if ( w < 0 ) {
w = 0 ;
}
if ( h < 0 ) {
h = 0 ;
}
_2d . style . height = _2c . style . height = h + "px" ;
_2c . style . width = w + "px" ;
} ;
this . ready = true ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . Dialog . prototype . makeNodes = function ( _30 , _31 ) {
for ( var i = 0 ; i < _30 . length ; i ++ ) {
if ( typeof _30 [ i ] == "string" ) {
this . dTree . add ( Linker . nxtid ++ , _31 , _30 [ i ] . replace ( /^.*\// , "" ) , "javascript:document.getElementsByName('" + this . dialog . id . href + "')[0].value=decodeURIComponent('" + encodeURIComponent ( _30 [ i ] ) + "');document.getElementsByName('" + this . dialog . id . type + "')[0].click();document.getElementsByName('" + this . dialog . id . href + "')[0].focus();void(0);" , _30 [ i ] ) ;
} else {
if ( _30 [ i ] . length ) {
var id = this . Dialog _nxtid ++ ;
this . dTree . add ( id , _31 , _30 [ i ] [ 0 ] . replace ( /^.*\// , "" ) , null , _30 [ i ] [ 0 ] ) ;
this . makeNodes ( _30 [ i ] [ 1 ] , id ) ;
} else {
if ( typeof _30 [ i ] == "object" ) {
if ( _30 [ i ] . children ) {
var id = this . Dialog _nxtid ++ ;
} else {
var id = Linker . nxtid ++ ;
}
if ( _30 [ i ] . title ) {
var _34 = _30 [ i ] . title ;
} else {
if ( _30 [ i ] . url ) {
var _34 = _30 [ i ] . url . replace ( /^.*\// , "" ) ;
} else {
var _34 = "no title defined" ;
}
}
if ( _30 [ i ] . url ) {
var _35 = "javascript:document.getElementsByName('" + this . dialog . id . href + "')[0].value=decodeURIComponent('" + encodeURIComponent ( _30 [ i ] . url ) + "');document.getElementsByName('" + this . dialog . id . type + "')[0].click();document.getElementsByName('" + this . dialog . id . href + "')[0].focus();void(0);" ;
} else {
var _35 = "" ;
}
this . dTree . add ( id , _31 , _34 , _35 , _34 ) ;
if ( _30 [ i ] . children ) {
this . makeNodes ( _30 [ i ] . children , id ) ;
}
}
}
}
}
} ;
Linker . Dialog . prototype . _lc = Linker . prototype . _lc ;
Linker . Dialog . prototype . show = function ( _36 , ok , _38 ) {
if ( ! this . ready ) {
var _39 = this ;
window . setTimeout ( function ( ) {
_39 . show ( _36 , ok , _38 ) ;
} , 100 ) ;
return ;
}
if ( this . ddTree . innerHTML == "" ) {
this . ddTree . innerHTML = this . dTree . _linker _premade ;
}
if ( _36 . type == "url" ) {
this . dialog . getElementById ( "urltable" ) . style . display = "" ;
this . dialog . getElementById ( "mailtable" ) . style . display = "none" ;
this . dialog . getElementById ( "anchortable" ) . style . display = "none" ;
} else {
if ( _36 . type == "anchor" ) {
this . dialog . getElementById ( "urltable" ) . style . display = "none" ;
this . dialog . getElementById ( "mailtable" ) . style . display = "none" ;
this . dialog . getElementById ( "anchortable" ) . style . display = "" ;
} else {
this . dialog . getElementById ( "urltable" ) . style . display = "none" ;
this . dialog . getElementById ( "mailtable" ) . style . display = "" ;
this . dialog . getElementById ( "anchortable" ) . style . display = "none" ;
}
}
if ( _36 . target == "popup" ) {
this . dialog . getElementById ( "popuptable" ) . style . display = "" ;
} else {
this . dialog . getElementById ( "popuptable" ) . style . display = "none" ;
}
var _3a = this . dialog . getElementById ( "anchor" ) ;
for ( var i = _3a . length ; i >= 0 ; i -- ) {
_3a [ i ] = null ;
}
var _3c = this . linker . editor . getHTML ( ) ;
var _3d = new Array ( ) ;
var m = _3c . match ( /<a[^>]+name="([^"]+)"/gi ) ;
if ( m ) {
for ( i = 0 ; i < m . length ; i ++ ) {
var n = m [ i ] . match ( /name="([^"]+)"/i ) ;
if ( ! _3d . contains ( n [ 1 ] ) ) {
_3d . push ( n [ 1 ] ) ;
}
}
}
m = _3c . match ( /id="([^"]+)"/gi ) ;
if ( m ) {
for ( i = 0 ; i < m . length ; i ++ ) {
n = m [ i ] . match ( /id="([^"]+)"/i ) ;
if ( ! _3d . contains ( n [ 1 ] ) ) {
_3d . push ( n [ 1 ] ) ;
}
}
}
for ( i = 0 ; i < _3d . length ; i ++ ) {
var opt = new Option ( _3d [ i ] , "#" + _3d [ i ] , false , ( _36 . anchor == _3d [ i ] ) ) ;
_3a [ _3a . length ] = opt ;
}
if ( _3a . length == 0 ) {
this . dialog . getElementById ( "anchorfieldset" ) . style . display = "none" ;
}
if ( _36 . href == "http://www.example.com/" && _36 . to == "alice@example.com" ) {
this . dialog . getElementById ( "clear" ) . style . display = "none" ;
} else {
this . dialog . getElementById ( "clear" ) . style . display = "" ;
}
var _41 = this . dialog ;
var _39 = this ;
if ( ok ) {
this . dialog . getElementById ( "ok" ) . onclick = ok ;
} else {
this . dialog . getElementById ( "ok" ) . onclick = function ( ) {
_39 . hide ( ) ;
} ;
}
if ( _38 ) {
this . dialog . getElementById ( "cancel" ) . onclick = _38 ;
} else {
this . dialog . getElementById ( "cancel" ) . onclick = function ( ) {
_39 . hide ( ) ;
} ;
}
this . linker . editor . disableToolbar ( [ "fullscreen" , "linker" ] ) ;
this . dialog . show ( _36 ) ;
this . dialog . onresize ( ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00
Linker . Dialog . prototype . hide = function ( ) {
this . linker . editor . enableToolbar ( ) ;
return this . dialog . hide ( ) ;
2005-12-07 03:37:36 +00:00
} ;
2007-05-31 22:43:05 +00:00