PASTEBIN
| #1 paste tool since 2002
create new paste
tools
api
archive
faq
PASTEBIN
create new paste
trending pastes
sign up
login
my alerts
my settings
my profile
Don't like ads?
PRO users
don't see any ads ;-)
Public Pastes
Code
1 sec ago
Untitled
Lua | 4 sec ago
asdf
6 sec ago
Untitled
Java | 7 sec ago
Untitled
23 sec ago
Untitled
25 sec ago
Untitled
28 sec ago
Untitled
29 sec ago
fckeditor "rel tag for links" hack
By:
eaposztrof
on
Oct 17th, 2012
| syntax:
JavaScript
| size: 36.39 KB | hits: 47 | expires: Never
download
|
raw
|
embed
|
report abuse
|
print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
/*
# fckeditor "rel tag for links" hack by eaposztrof - iCode4Beer.com project
aply to the following file: ckeditor/plugins/link/dialogs/link.js
and you have beautiful rel adding <select> on the Create Link dialog.
+ 115 H('advRel', 'rel');
+ 248 id: 'advRel',
type: 'select',
label: 'The rel attribute specifies the relationship between the current document and the linked document.',
'default': 'alternate',
style: 'width : 100%;',
items: [
['Links to an alternate version of the document (i.e. print page, translated or mirror)','alternate'],
['Links to the author of the document','author'],
['Permanent URL used for bookmarking', 'bookmark'],
['Links to a help document', 'help'],
['Links to copyright information for the document','license'],
['Links to an unendorsed document, like a paid link.','nofollow'],
['Specifies that the browser should not send a HTTP referer header if the user follows the hyperlink','noreferrer'],
['Specifies that the target document should be cached','prefetch'],
['Links to a search tool for the document','search'],
['The previous document in a selection','prev'],
['The next document in a selection', 'next'],
['A tag (keyword) for the current document', 'tag']
],
setup: o,
commit: r
}, {
+ 783 L('advRel', 'rel');
*/
CKEDITOR.
dialog
.
add
(
'link'
,
function
(
a
)
{
var
b
=
function
(
)
{
var
s
=
this
.
getDialog
(
)
,
t
=
s.
getContentElement
(
'target'
,
'popupFeatures'
)
,
u
=
s.
getContentElement
(
'target'
,
'linkTargetName'
)
,
v
=
this
.
getValue
(
)
;
if
(
!
t
||
!
u
)
return
;
t
=
t.
getElement
(
)
;
if
(
v
==
'popup'
)
{
t.
show
(
)
;
u.
setLabel
(
a.
lang
.
link
.
targetPopupName
)
;
}
else
{
t.
hide
(
)
;
u.
setLabel
(
a.
lang
.
link
.
targetFrameName
)
;
this
.
getDialog
(
)
.
setValueOf
(
'target'
,
'linkTargetName'
,
v.
charAt
(
0
)
==
'_'
?
v
:
''
)
;
}
}
,
c
=
function
(
)
{
var
s
=
this
.
getDialog
(
)
,
t
=
[
'urlOptions'
,
'anchorOptions'
,
'emailOptions'
]
,
u
=
this
.
getValue
(
)
,
v
=
s.
definition
.
getContents
(
'upload'
)
.
hidden
;
if
(
u
==
'url'
)
{
if
(
a.
config
.
linkShowTargetTab
)
s.
showPage
(
'target'
)
;
if
(
!
v
)
s.
showPage
(
'upload'
)
;
}
else
{
s.
hidePage
(
'target'
)
;
if
(
!
v
)
s.
hidePage
(
'upload'
)
;
}
for
(
var
w
=
0
;
w
<
t.
length
;
w
++
)
{
var
x
=
s.
getContentElement
(
'info'
,
t
[
w
]
)
;
if
(
!
x
)
continue
;
x
=
x.
getElement
(
)
.
getParent
(
)
.
getParent
(
)
;
if
(
t
[
w
]
==
u
+
'Options'
)
x.
show
(
)
;
else
x.
hide
(
)
;
}
}
,
d
=
/^mailto:([^?]+)(?:\?(.+))?$/
,
e
=
/subject=([^;?:@&=$,\/]*)/
,
f
=
/body=([^;?:@&=$,\/]*)/
,
g
=
/^#(.*)$/
,
h
=
/^((?:http|https|ftp|news):\/\/)?(.*)$/
,
i
=
/^(_(?:self|top|parent|blank))$/
,
j
=
/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/
,
k
=
/(?:^|,)([^=]+)=(\d+|yes|no)/gi
,
l
=
function
(
s
,
t
)
{
var
u
=
t
?
t.
getAttribute
(
'_cke_saved_href'
)
||
t.
getAttribute
(
'href'
)
:
''
,
v
=
''
,
w
=
''
,
x
=
false
,
y
=
{
}
;
if
(
u
)
{
v
=
u.
match
(
d
)
;
w
=
u.
match
(
g
)
;
x
=
u.
match
(
h
)
;
}
if
(
v
)
{
var
z
=
u.
match
(
e
)
,
A
=
u.
match
(
f
)
;
y.
type
=
'email'
;
y.
email
=
{
}
;
y.
email
.
address
=
v
[
1
]
;
z
&&
(
y.
email
.
subject
=
decodeURIComponent
(
z
[
1
]
)
)
;
A
&&
(
y.
email
.
body
=
decodeURIComponent
(
A
[
1
]
)
)
;
}
else
if
(
w
)
{
y.
type
=
'anchor'
;
y.
anchor
=
{
}
;
y.
anchor
.
name
=
y.
anchor
.
id
=
w
[
1
]
;
}
else
if
(
u
&&
x
)
{
y.
type
=
'url'
;
y.
url
=
{
}
;
y.
url
.
protocol
=
x
[
1
]
;
y.
url
.
url
=
x
[
2
]
;
}
else
y.
type
=
'url'
;
if
(
t
)
{
var
B
=
t.
getAttribute
(
'target'
)
;
y.
target
=
{
}
;
y.
adv
=
{
}
;
if
(
!
B
)
{
var
C
=
t.
getAttribute
(
'_cke_pa_onclick'
)
||
t.
getAttribute
(
'onclick'
)
,
D
=
C
&&
C.
match
(
j
)
;
if
(
D
)
{
y.
target
.
type
=
'popup'
;
y.
target
.
name
=
D
[
1
]
;
var
E
;
while
(
E
=
k.
exec
(
D
[
2
]
)
)
if
(
E
[
2
]
==
'yes'
||
E
[
2
]
==
'1'
)
y.
target
[
E
[
1
]
]
=
true
;
else
if
(
isFinite
(
E
[
2
]
)
)
y.
target
[
E
[
1
]
]
=
E
[
2
]
;
}
}
else
{
var
F
=
B.
match
(
i
)
;
if
(
F
)
y.
target
.
type
=
y.
target
.
name
=
B
;
else
{
y.
target
.
type
=
'frame'
;
y.
target
.
name
=
B
;
}
}
var
G
=
this
,
H
=
function
(
N
,
O
)
{
var
P
=
t.
getAttribute
(
O
)
;
if
(
P
!==
null
)
y.
adv
[
N
]
=
P
||
''
;
}
;
H
(
'advId'
,
'id'
)
;
H
(
'advLangDir'
,
'dir'
)
;
H
(
'advAccessKey'
,
'accessKey'
)
;
H
(
'advName'
,
'name'
)
;
H
(
'advLangCode'
,
'lang'
)
;
H
(
'advTabIndex'
,
'tabindex'
)
;
H
(
'advTitle'
,
'title'
)
;
H
(
'advContentType'
,
'type'
)
;
H
(
'advCSSClasses'
,
'class'
)
;
H
(
'advCharset'
,
'charset'
)
;
H
(
'advStyles'
,
'style'
)
;
H
(
'advRel'
,
'rel'
)
;
}
var
I
=
s.
document
.
getElementsByTag
(
'img'
)
,
J
=
new
CKEDITOR.
dom
.
nodeList
(
s.
document
.$.
anchors
)
,
K
=
y.
anchors
=
[
]
;
for
(
var
L
=
0
;
L
<
I.
count
(
)
;
L
++
)
{
var
M
=
I.
getItem
(
L
)
;
if
(
M.
getAttribute
(
'_cke_realelement'
)
&&
M.
getAttribute
(
'_cke_real_element_type'
)
==
'anchor'
)
K.
push
(
s.
restoreRealElement
(
M
)
)
;
}
for
(
L
=
0
;
L
<
J.
count
(
)
;
L
++
)
K.
push
(
J.
getItem
(
L
)
)
;
for
(
L
=
0
;
L
<
K.
length
;
L
++
)
{
M
=
K
[
L
]
;
K
[
L
]
=
{
name
:
M.
getAttribute
(
'name'
)
,
id
:
M.
getAttribute
(
'id'
)
}
;
}
this
._.
selectedElement
=
t
;
return
y
;
}
,
m
=
function
(
s
,
t
)
{
if
(
t
[
s
]
)
this
.
setValue
(
t
[
s
]
[
this
.
id
]
||
''
)
;
}
,
n
=
function
(
s
)
{
return
m.
call
(
this
,
'target'
,
s
)
;
}
,
o
=
function
(
s
)
{
return
m.
call
(
this
,
'adv'
,
s
)
;
}
,
p
=
function
(
s
,
t
)
{
if
(
!
t
[
s
]
)
t
[
s
]
=
{
}
;
t
[
s
]
[
this
.
id
]
=
this
.
getValue
(
)
||
''
;
}
,
q
=
function
(
s
)
{
return
p.
call
(
this
,
'target'
,
s
)
;
}
,
r
=
function
(
s
)
{
return
p.
call
(
this
,
'adv'
,
s
)
;
}
;
return
{
title
:
a.
lang
.
link
.
title
,
minWidth
:
350
,
minHeight
:
230
,
contents
:
[
{
id
:
'info'
,
label
:
a.
lang
.
link
.
info
,
title
:
a.
lang
.
link
.
info
,
elements
:
[
{
id
:
'linkType'
,
type
:
'select'
,
label
:
a.
lang
.
link
.
type
,
'default'
:
'url'
,
items
:
[
[
a.
lang
.
common
.
url
,
'url'
]
,
[
a.
lang
.
link
.
toAnchor
,
'anchor'
]
,
[
a.
lang
.
link
.
toEmail
,
'email'
]
]
,
onChange
:
c
,
setup
:
function
(
s
)
{
if
(
s.
type
)
this
.
setValue
(
s.
type
)
;
}
,
commit
:
function
(
s
)
{
s.
type
=
this
.
getValue
(
)
;
}
}
,
{
type
:
'vbox'
,
id
:
'urlOptions'
,
children
:
[
{
type
:
'hbox'
,
widths
:
[
'25%'
,
'75%'
]
,
children
:
[
{
id
:
'protocol'
,
type
:
'select'
,
label
:
a.
lang
.
common
.
protocol
,
'default'
:
'http://'
,
style
:
'width : 100%;'
,
items
:
[
[
'http://'
]
,
[
'https://'
]
,
[
'ftp://'
]
,
[
'news://'
]
,
[
'<other>'
,
''
]
]
,
setup
:
function
(
s
)
{
if
(
s.
url
)
this
.
setValue
(
s.
url
.
protocol
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
url
)
s.
url
=
{
}
;
s.
url
.
protocol
=
this
.
getValue
(
)
;
}
}
,
{
type
:
'text'
,
id
:
'url'
,
label
:
a.
lang
.
common
.
url
,
onLoad
:
function
(
)
{
this
.
allowOnChange
=
true
;
}
,
onKeyUp
:
function
(
)
{
var
x
=
this
;
x.
allowOnChange
=
false
;
var
s
=
x.
getDialog
(
)
.
getContentElement
(
'info'
,
'protocol'
)
,
t
=
x.
getValue
(
)
,
u
=
/^(http|https|ftp|news):\/\/(?=.)/gi
,
v
=
/^((javascript:)|[#\/\.])/gi
,
w
=
u.
exec
(
t
)
;
if
(
w
)
{
x.
setValue
(
t.
substr
(
w
[
0
]
.
length
)
)
;
s.
setValue
(
w
[
0
]
.
toLowerCase
(
)
)
;
}
else
if
(
v.
test
(
t
)
)
s.
setValue
(
''
)
;
x.
allowOnChange
=
true
;
}
,
onChange
:
function
(
)
{
if
(
this
.
allowOnChange
)
this
.
onKeyUp
(
)
;
}
,
validate
:
function
(
)
{
var
s
=
this
.
getDialog
(
)
;
if
(
s.
getContentElement
(
'info'
,
'linkType'
)
&&
s.
getValueOf
(
'info'
,
'linkType'
)
!=
'url'
)
return
true
;
if
(
this
.
getDialog
(
)
.
fakeObj
)
return
true
;
var
t
=
CKEDITOR.
dialog
.
validate
.
notEmpty
(
a.
lang
.
link
.
noUrl
)
;
return
t.
apply
(
this
)
;
}
,
setup
:
function
(
s
)
{
var
u
=
this
;
u.
allowOnChange
=
false
;
if
(
s.
url
)
u.
setValue
(
s.
url
.
url
)
;
u.
allowOnChange
=
true
;
var
t
=
u.
getDialog
(
)
.
getContentElement
(
'info'
,
'linkType'
)
;
if
(
t
&&
t.
getValue
(
)
==
'url'
)
u.
select
(
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
url
)
s.
url
=
{
}
;
s.
url
.
url
=
this
.
getValue
(
)
;
this
.
allowOnChange
=
false
;
}
}
]
,
setup
:
function
(
s
)
{
if
(
!
this
.
getDialog
(
)
.
getContentElement
(
'info'
,
'linkType'
)
)
this
.
getElement
(
)
.
show
(
)
;
}
}
,
{
id
:
'advRel'
,
type
:
'select'
,
label
:
'The rel attribute specifies the relationship between the current document and the linked document.'
,
'default'
:
'alternate'
,
style
:
'width : 100%;'
,
items
:
[
[
'Links to an alternate version of the document (i.e. print page, translated or mirror)'
,
'alternate'
]
,
[
'Links to the author of the document'
,
'author'
]
,
[
'Permanent URL used for bookmarking'
,
'bookmark'
]
,
[
'Links to a help document'
,
'help'
]
,
[
'Links to copyright information for the document'
,
'license'
]
,
[
'Links to an unendorsed document, like a paid link.'
,
'nofollow'
]
,
[
'Specifies that the browser should not send a HTTP referer header if the user follows the hyperlink'
,
'noreferrer'
]
,
[
'Specifies that the target document should be cached'
,
'prefetch'
]
,
[
'Links to a search tool for the document'
,
'search'
]
,
[
'The previous document in a selection'
,
'prev'
]
,
[
'The next document in a selection'
,
'next'
]
,
[
'A tag (keyword) for the current document'
,
'tag'
]
]
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'button'
,
id
:
'browse'
,
hidden
:
'true'
,
filebrowser
:
'info:url'
,
label
:
a.
lang
.
common
.
browseServer
}
]
}
,
{
type
:
'vbox'
,
id
:
'anchorOptions'
,
width
:
260
,
align
:
'center'
,
padding
:
0
,
children
:
[
{
type
:
'html'
,
id
:
'selectAnchorText'
,
html
:
CKEDITOR.
tools
.
htmlEncode
(
a.
lang
.
link
.
selectAnchor
)
,
setup
:
function
(
s
)
{
if
(
s.
anchors
.
length
>
0
)
this
.
getElement
(
)
.
show
(
)
;
else
this
.
getElement
(
)
.
hide
(
)
;
}
}
,
{
type
:
'html'
,
id
:
'noAnchors'
,
style
:
'text-align: center;'
,
html
:
'<div>'
+
CKEDITOR.
tools
.
htmlEncode
(
a.
lang
.
link
.
noAnchors
)
+
'</div>'
,
setup
:
function
(
s
)
{
if
(
s.
anchors
.
length
<
1
)
this
.
getElement
(
)
.
show
(
)
;
else
this
.
getElement
(
)
.
hide
(
)
;
}
}
,
{
type
:
'hbox'
,
id
:
'selectAnchor'
,
children
:
[
{
type
:
'select'
,
id
:
'anchorName'
,
'default'
:
''
,
label
:
a.
lang
.
link
.
anchorName
,
style
:
'width: 100%;'
,
items
:
[
[
''
]
]
,
setup
:
function
(
s
)
{
var
v
=
this
;
v.
clear
(
)
;
v.
add
(
''
)
;
for
(
var
t
=
0
;
t
<
s.
anchors
.
length
;
t
++
)
if
(
s.
anchors
[
t
]
.
name
)
v.
add
(
s.
anchors
[
t
]
.
name
)
;
if
(
s.
anchor
)
v.
setValue
(
s.
anchor
.
name
)
;
var
u
=
v.
getDialog
(
)
.
getContentElement
(
'info'
,
'linkType'
)
;
if
(
u
&&
u.
getValue
(
)
==
'email'
)
v.
focus
(
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
anchor
)
s.
anchor
=
{
}
;
s.
anchor
.
name
=
this
.
getValue
(
)
;
}
}
,
{
type
:
'select'
,
id
:
'anchorId'
,
'default'
:
''
,
label
:
a.
lang
.
link
.
anchorId
,
style
:
'width: 100%;'
,
items
:
[
[
''
]
]
,
setup
:
function
(
s
)
{
var
u
=
this
;
u.
clear
(
)
;
u.
add
(
''
)
;
for
(
var
t
=
0
;
t
<
s.
anchors
.
length
;
t
++
)
if
(
s.
anchors
[
t
]
.
id
)
u.
add
(
s.
anchors
[
t
]
.
id
)
;
if
(
s.
anchor
)
u.
setValue
(
s.
anchor
.
id
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
anchor
)
s.
anchor
=
{
}
;
s.
anchor
.
id
=
this
.
getValue
(
)
;
}
}
]
,
setup
:
function
(
s
)
{
if
(
s.
anchors
.
length
>
0
)
this
.
getElement
(
)
.
show
(
)
;
else
this
.
getElement
(
)
.
hide
(
)
;
}
}
]
,
setup
:
function
(
s
)
{
if
(
!
this
.
getDialog
(
)
.
getContentElement
(
'info'
,
'linkType'
)
)
this
.
getElement
(
)
.
hide
(
)
;
}
}
,
{
type
:
'vbox'
,
id
:
'emailOptions'
,
padding
:
1
,
children
:
[
{
type
:
'text'
,
id
:
'emailAddress'
,
label
:
a.
lang
.
link
.
emailAddress
,
validate
:
function
(
)
{
var
s
=
this
.
getDialog
(
)
;
if
(
!
s.
getContentElement
(
'info'
,
'linkType'
)
||
s.
getValueOf
(
'info'
,
'linkType'
)
!=
'email'
)
return
true
;
var
t
=
CKEDITOR.
dialog
.
validate
.
notEmpty
(
a.
lang
.
link
.
noEmail
)
;
return
t.
apply
(
this
)
;
}
,
setup
:
function
(
s
)
{
if
(
s.
email
)
this
.
setValue
(
s.
email
.
address
)
;
var
t
=
this
.
getDialog
(
)
.
getContentElement
(
'info'
,
'linkType'
)
;
if
(
t
&&
t.
getValue
(
)
==
'email'
)
this
.
select
(
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
email
)
s.
email
=
{
}
;
s.
email
.
address
=
this
.
getValue
(
)
;
}
}
,
{
type
:
'text'
,
id
:
'emailSubject'
,
label
:
a.
lang
.
link
.
emailSubject
,
setup
:
function
(
s
)
{
if
(
s.
email
)
this
.
setValue
(
s.
email
.
subject
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
email
)
s.
email
=
{
}
;
s.
email
.
subject
=
this
.
getValue
(
)
;
}
}
,
{
type
:
'textarea'
,
id
:
'emailBody'
,
label
:
a.
lang
.
link
.
emailBody
,
rows
:
3
,
'default'
:
''
,
setup
:
function
(
s
)
{
if
(
s.
email
)
this
.
setValue
(
s.
email
.
body
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
email
)
s.
email
=
{
}
;
s.
email
.
body
=
this
.
getValue
(
)
;
}
}
]
,
setup
:
function
(
s
)
{
if
(
!
this
.
getDialog
(
)
.
getContentElement
(
'info'
,
'linkType'
)
)
this
.
getElement
(
)
.
hide
(
)
;
}
}
]
}
,
{
id
:
'target'
,
label
:
a.
lang
.
link
.
target
,
title
:
a.
lang
.
link
.
target
,
elements
:
[
{
type
:
'hbox'
,
widths
:
[
'50%'
,
'50%'
]
,
children
:
[
{
type
:
'select'
,
id
:
'linkTargetType'
,
label
:
a.
lang
.
link
.
target
,
'default'
:
'notSet'
,
style
:
'width : 100%;'
,
items
:
[
[
a.
lang
.
link
.
targetNotSet
,
'notSet'
]
,
[
a.
lang
.
link
.
targetFrame
,
'frame'
]
,
[
a.
lang
.
link
.
targetPopup
,
'popup'
]
,
[
a.
lang
.
link
.
targetNew
,
'_blank'
]
,
[
a.
lang
.
link
.
targetTop
,
'_top'
]
,
[
a.
lang
.
link
.
targetSelf
,
'_self'
]
,
[
a.
lang
.
link
.
targetParent
,
'_parent'
]
]
,
onChange
:
b
,
setup
:
function
(
s
)
{
if
(
s.
target
)
this
.
setValue
(
s.
target
.
type
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
target
)
s.
target
=
{
}
;
s.
target
.
type
=
this
.
getValue
(
)
;
}
}
,
{
type
:
'text'
,
id
:
'linkTargetName'
,
label
:
a.
lang
.
link
.
targetFrameName
,
'default'
:
''
,
setup
:
function
(
s
)
{
if
(
s.
target
)
this
.
setValue
(
s.
target
.
name
)
;
}
,
commit
:
function
(
s
)
{
if
(
!
s.
target
)
s.
target
=
{
}
;
s.
target
.
name
=
this
.
getValue
(
)
;
}
}
]
}
,
{
type
:
'vbox'
,
width
:
260
,
align
:
'center'
,
padding
:
2
,
id
:
'popupFeatures'
,
children
:
[
{
type
:
'html'
,
html
:
CKEDITOR.
tools
.
htmlEncode
(
a.
lang
.
link
.
popupFeatures
)
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'checkbox'
,
id
:
'resizable'
,
label
:
a.
lang
.
link
.
popupResizable
,
setup
:
n
,
commit
:
q
}
,
{
type
:
'checkbox'
,
id
:
'status'
,
label
:
a.
lang
.
link
.
popupStatusBar
,
setup
:
n
,
commit
:
q
}
]
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'checkbox'
,
id
:
'location'
,
label
:
a.
lang
.
link
.
popupLocationBar
,
setup
:
n
,
commit
:
q
}
,
{
type
:
'checkbox'
,
id
:
'toolbar'
,
label
:
a.
lang
.
link
.
popupToolbar
,
setup
:
n
,
commit
:
q
}
]
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'checkbox'
,
id
:
'menubar'
,
label
:
a.
lang
.
link
.
popupMenuBar
,
setup
:
n
,
commit
:
q
}
,
{
type
:
'checkbox'
,
id
:
'fullscreen'
,
label
:
a.
lang
.
link
.
popupFullScreen
,
setup
:
n
,
commit
:
q
}
]
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'checkbox'
,
id
:
'scrollbars'
,
label
:
a.
lang
.
link
.
popupScrollBars
,
setup
:
n
,
commit
:
q
}
,
{
type
:
'checkbox'
,
id
:
'dependent'
,
label
:
a.
lang
.
link
.
popupDependent
,
setup
:
n
,
commit
:
q
}
]
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'text'
,
widths
:
[
'30%'
,
'70%'
]
,
labelLayout
:
'horizontal'
,
label
:
a.
lang
.
link
.
popupWidth
,
id
:
'width'
,
setup
:
n
,
commit
:
q
}
,
{
type
:
'text'
,
labelLayout
:
'horizontal'
,
widths
:
[
'55%'
,
'45%'
]
,
label
:
a.
lang
.
link
.
popupLeft
,
id
:
'left'
,
setup
:
n
,
commit
:
q
}
]
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'text'
,
labelLayout
:
'horizontal'
,
widths
:
[
'30%'
,
'70%'
]
,
label
:
a.
lang
.
link
.
popupHeight
,
id
:
'height'
,
setup
:
n
,
commit
:
q
}
,
{
type
:
'text'
,
labelLayout
:
'horizontal'
,
label
:
a.
lang
.
link
.
popupTop
,
widths
:
[
'55%'
,
'45%'
]
,
id
:
'top'
,
setup
:
n
,
commit
:
q
}
]
}
]
}
]
}
,
{
id
:
'upload'
,
label
:
a.
lang
.
link
.
upload
,
title
:
a.
lang
.
link
.
upload
,
hidden
:
true
,
filebrowser
:
'uploadButton'
,
elements
:
[
{
type
:
'file'
,
id
:
'upload'
,
label
:
a.
lang
.
common
.
upload
,
style
:
'height:40px'
,
size
:
29
}
,
{
type
:
'fileButton'
,
id
:
'uploadButton'
,
label
:
a.
lang
.
common
.
uploadSubmit
,
filebrowser
:
'info:url'
,
'for'
:
[
'upload'
,
'upload'
]
}
]
}
,
{
id
:
'advanced'
,
label
:
a.
lang
.
link
.
advanced
,
title
:
a.
lang
.
link
.
advanced
,
elements
:
[
{
type
:
'vbox'
,
padding
:
1
,
children
:
[
{
type
:
'hbox'
,
widths
:
[
'45%'
,
'35%'
,
'20%'
]
,
children
:
[
{
type
:
'text'
,
id
:
'advId'
,
label
:
a.
lang
.
link
.
id
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'select'
,
id
:
'advLangDir'
,
label
:
a.
lang
.
link
.
langDir
,
'default'
:
''
,
style
:
'width:110px'
,
items
:
[
[
a.
lang
.
link
.
langDirNotSet
,
''
]
,
[
a.
lang
.
link
.
langDirLTR
,
'ltr'
]
,
[
a.
lang
.
link
.
langDirRTL
,
'rtl'
]
]
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'text'
,
id
:
'advAccessKey'
,
width
:
'80px'
,
label
:
a.
lang
.
link
.
acccessKey
,
maxLength
:
1
,
setup
:
o
,
commit
:
r
}
]
}
,
{
type
:
'hbox'
,
widths
:
[
'45%'
,
'35%'
,
'20%'
]
,
children
:
[
{
type
:
'text'
,
label
:
a.
lang
.
link
.
name
,
id
:
'advName'
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'text'
,
label
:
a.
lang
.
link
.
langCode
,
id
:
'advLangCode'
,
width
:
'110px'
,
'default'
:
''
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'text'
,
label
:
a.
lang
.
link
.
tabIndex
,
id
:
'advTabIndex'
,
width
:
'80px'
,
maxLength
:
5
,
setup
:
o
,
commit
:
r
}
]
}
]
}
,
{
type
:
'vbox'
,
padding
:
1
,
children
:
[
{
type
:
'hbox'
,
widths
:
[
'45%'
,
'55%'
]
,
children
:
[
{
type
:
'text'
,
label
:
a.
lang
.
link
.
advisoryTitle
,
'default'
:
''
,
id
:
'advTitle'
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'text'
,
label
:
a.
lang
.
link
.
advisoryContentType
,
'default'
:
''
,
id
:
'advContentType'
,
setup
:
o
,
commit
:
r
}
]
}
,
{
type
:
'hbox'
,
widths
:
[
'45%'
,
'55%'
]
,
children
:
[
{
type
:
'text'
,
label
:
a.
lang
.
link
.
cssClasses
,
'default'
:
''
,
id
:
'advCSSClasses'
,
setup
:
o
,
commit
:
r
}
,
{
type
:
'text'
,
label
:
a.
lang
.
link
.
charset
,
'default'
:
''
,
id
:
'advCharset'
,
setup
:
o
,
commit
:
r
}
]
}
,
{
type
:
'hbox'
,
children
:
[
{
type
:
'text'
,
label
:
a.
lang
.
link
.
styles
,
'default'
:
''
,
id
:
'advStyles'
,
setup
:
o
,
commit
:
r
}
]
}
]
}
]
}
]
,
onShow
:
function
(
)
{
var
y
=
this
;
y.
fakeObj
=
false
;
var
s
=
y.
getParentEditor
(
)
,
t
=
s.
getSelection
(
)
,
u
=
t.
getRanges
(
)
,
v
=
null
,
w
=
y
;
if
(
u.
length
==
1
)
{
var
x
=
u
[
0
]
.
getCommonAncestor
(
true
)
;
v
=
x.
getAscendant
(
'a'
,
true
)
;
if
(
v
&&
v.
getAttribute
(
'href'
)
)
t.
selectElement
(
v
)
;
else
if
(
(
v
=
x.
getAscendant
(
'img'
,
true
)
)
&&
(
v.
getAttribute
(
'_cke_real_element_type'
)
&&
v.
getAttribute
(
'_cke_real_element_type'
)
==
'anchor'
)
)
{
y.
fakeObj
=
v
;
v
=
s.
restoreRealElement
(
y.
fakeObj
)
;
t.
selectElement
(
y.
fakeObj
)
;
}
else
v
=
null
;
}
y.
setupContent
(
l.
apply
(
y
,
[
s
,
v
]
)
)
;
}
,
onOk
:
function
(
)
{
var
s
=
{
href
:
'javascript:void(0)/*'
+
CKEDITOR.
tools
.
getNextNumber
(
)
+
'*/'
}
,
t
=
[
]
,
u
=
{
href
:
s.
href
}
,
v
=
this
,
w
=
this
.
getParentEditor
(
)
;
this
.
commitContent
(
u
)
;
switch
(
u.
type
||
'url'
)
{
case
'url'
:
var
x
=
u.
url
&&
u.
url
.
protocol
!=
undefined
?
u.
url
.
protocol
:
'http://'
,
y
=
u.
url
&&
u.
url
.
url
||
''
;
s._cke_saved_href
=
y.
indexOf
(
'/'
)
===
0
?
y
:
x
+
y
;
break
;
case
'anchor'
:
var
z
=
u.
anchor
&&
u.
anchor
.
name
,
A
=
u.
anchor
&&
u.
anchor
.
id
;
s._cke_saved_href
=
'#'
+
(
z
||
A
||
''
)
;
break
;
case
'email'
:
var
B
=
u.
email
&&
u.
email
.
address
,
C
=
u.
email
&&
encodeURIComponent
(
u.
email
.
subject
||
''
)
,
D
=
u.
email
&&
encodeURIComponent
(
u.
email
.
body
||
''
)
,
E
=
[
'mailto:'
,
B
]
;
if
(
C
||
D
)
{
var
F
=
[
]
;
E.
push
(
'?'
)
;
C
&&
F.
push
(
'subject='
+
C
)
;
D
&&
F.
push
(
'body='
+
D
)
;
E.
push
(
F.
join
(
'&'
)
)
;
}
s._cke_saved_href
=
E.
join
(
''
)
;
break
;
default
:
}
if
(
u.
target
)
if
(
u.
target
.
type
==
'popup'
)
{
var
G
=
[
"window.open(this.href, '"
,
u.
target
.
name
||
''
,
"', '"
]
,
H
=
[
'resizable'
,
'status'
,
'location'
,
'toolbar'
,
'menubar'
,
'fullscreen'
,
'scrollbars'
,
'dependent'
]
,
I
=
H.
length
,
J
=
function
(
T
)
{
if
(
u.
target
[
T
]
)
H.
push
(
T
+
'='
+
u.
target
[
T
]
)
;
}
;
for
(
var
K
=
0
;
K
<
I
;
K
++
)
H
[
K
]
=
H
[
K
]
+
(
u.
target
[
H
[
K
]
]
?
'=yes'
:
'=no'
)
;
J
(
'width'
)
;
J
(
'left'
)
;
J
(
'height'
)
;
J
(
'top'
)
;
G.
push
(
H.
join
(
','
)
,
"'); return false;"
)
;
s
[
CKEDITOR.
env
.
ie
||
CKEDITOR.
env
.
webkit
?
'_cke_pa_onclick'
:
'onclick'
]
=
G.
join
(
''
)
;
}
else
{
if
(
u.
target
.
type
!=
'notSet'
&&
u.
target
.
name
)
s.
target
=
u.
target
.
name
;
t.
push
(
'_cke_pa_onclick'
,
'onclick'
)
;
}
if
(
u.
adv
)
{
var
L
=
function
(
T
,
U
)
{
var
V
=
u.
adv
[
T
]
;
if
(
V
)
s
[
U
]
=
V
;
else
t.
push
(
U
)
;
}
;
if
(
this
._.
selectedElement
)
L
(
'advId'
,
'id'
)
;
L
(
'advLangDir'
,
'dir'
)
;
L
(
'advAccessKey'
,
'accessKey'
)
;
L
(
'advName'
,
'name'
)
;
L
(
'advLangCode'
,
'lang'
)
;
L
(
'advTabIndex'
,
'tabindex'
)
;
L
(
'advTitle'
,
'title'
)
;
L
(
'advContentType'
,
'type'
)
;
L
(
'advCSSClasses'
,
'class'
)
;
L
(
'advCharset'
,
'charset'
)
;
L
(
'advStyles'
,
'style'
)
;
L
(
'advRel'
,
'rel'
)
;
}
if
(
!
this
._.
selectedElement
)
{
var
M
=
w.
getSelection
(
)
,
N
=
M.
getRanges
(
)
;
if
(
N.
length
==
1
&&
N
[
0
]
.
collapsed
)
{
var
O
=
new
CKEDITOR.
dom
.
text
(
s._cke_saved_href
,
w.
document
)
;
N
[
0
]
.
insertNode
(
O
)
;
N
[
0
]
.
selectNodeContents
(
O
)
;
M.
selectRanges
(
N
)
;
}
var
P
=
new
CKEDITOR.
style
(
{
element
:
'a'
,
attributes
:
s
}
)
;
P.
type
=
CKEDITOR.
STYLE_INLINE
;
P.
apply
(
w.
document
)
;
if
(
u.
adv
&&
u.
adv
.
advId
)
{
var
Q
=
this
.
getParentEditor
(
)
.
document
.$.
getElementsByTagName
(
'a'
)
;
for
(
K
=
0
;
K
<
Q.
length
;
K
++
)
if
(
Q
[
K
]
.
href
==
s.
href
)
{
Q
[
K
]
.
id
=
u.
adv
.
advId
;
break
;
}
}
}
else
{
var
R
=
this
._.
selectedElement
;
if
(
CKEDITOR.
env
.
ie
&&
s.
name
!=
R.
getAttribute
(
'name'
)
)
{
var
S
=
new
CKEDITOR.
dom
.
element
(
'<a name="'
+
CKEDITOR.
tools
.
htmlEncode
(
s.
name
)
+
'">'
,
w.
document
)
;
M
=
w.
getSelection
(
)
;
R.
moveChildren
(
S
)
;
R.
copyAttributes
(
S
,
{
name
:
1
}
)
;
S.
replace
(
R
)
;
R
=
S
;
M.
selectElement
(
R
)
;
}
R.
setAttributes
(
s
)
;
R.
removeAttributes
(
t
)
;
if
(
R.
getAttribute
(
'name'
)
)
R.
addClass
(
'cke_anchor'
)
;
else
R.
removeClass
(
'cke_anchor'
)
;
if
(
this
.
fakeObj
)
w.
createFakeElement
(
R
,
'cke_anchor'
,
'anchor'
)
.
replace
(
this
.
fakeObj
)
;
delete
this
._.
selectedElement
;
}
}
,
onLoad
:
function
(
)
{
if
(
!
a.
config
.
linkShowAdvancedTab
)
this
.
hidePage
(
'advanced'
)
;
if
(
!
a.
config
.
linkShowTargetTab
)
this
.
hidePage
(
'target'
)
;
}
}
;
}
)
;
create a
new version
of this paste
RAW Paste Data
/* # fckeditor "rel tag for links" hack by eaposztrof - iCode4Beer.com project aply to the following file: ckeditor/plugins/link/dialogs/link.js and you have beautiful rel adding <select> on the Create Link dialog. + 115 H('advRel', 'rel'); + 248 id: 'advRel', type: 'select', label: 'The rel attribute specifies the relationship between the current document and the linked document.', 'default': 'alternate', style: 'width : 100%;', items: [ ['Links to an alternate version of the document (i.e. print page, translated or mirror)','alternate'], ['Links to the author of the document','author'], ['Permanent URL used for bookmarking', 'bookmark'], ['Links to a help document', 'help'], ['Links to copyright information for the document','license'], ['Links to an unendorsed document, like a paid link.','nofollow'], ['Specifies that the browser should not send a HTTP referer header if the user follows the hyperlink','noreferrer'], ['Specifies that the target document should be cached','prefetch'], ['Links to a search tool for the document','search'], ['The previous document in a selection','prev'], ['The next document in a selection', 'next'], ['A tag (keyword) for the current document', 'tag'] ], setup: o, commit: r }, { + 783 L('advRel', 'rel'); */ CKEDITOR.dialog.add('link', function (a) { var b = function () { var s = this.getDialog(), t = s.getContentElement('target', 'popupFeatures'), u = s.getContentElement('target', 'linkTargetName'), v = this.getValue(); if (!t || !u) return; t = t.getElement(); if (v == 'popup') { t.show(); u.setLabel(a.lang.link.targetPopupName); } else { t.hide(); u.setLabel(a.lang.link.targetFrameName); this.getDialog().setValueOf('target', 'linkTargetName', v.charAt(0) == '_' ? v : ''); } }, c = function () { var s = this.getDialog(), t = ['urlOptions', 'anchorOptions', 'emailOptions'], u = this.getValue(), v = s.definition.getContents('upload').hidden; if (u == 'url') { if (a.config.linkShowTargetTab) s.showPage('target'); if (!v) s.showPage('upload'); } else { s.hidePage('target'); if (!v) s.hidePage('upload'); } for (var w = 0; w < t.length; w++) { var x = s.getContentElement('info', t[w]); if (!x) continue; x = x.getElement().getParent().getParent(); if (t[w] == u + 'Options') x.show(); else x.hide(); } }, d = /^mailto:([^?]+)(?:\?(.+))?$/, e = /subject=([^;?:@&=$,\/]*)/, f = /body=([^;?:@&=$,\/]*)/, g = /^#(.*)$/, h = /^((?:http|https|ftp|news):\/\/)?(.*)$/, i = /^(_(?:self|top|parent|blank))$/, j = /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/, k = /(?:^|,)([^=]+)=(\d+|yes|no)/gi, l = function (s, t) { var u = t ? t.getAttribute('_cke_saved_href') || t.getAttribute('href') : '', v = '', w = '', x = false, y = {}; if (u) { v = u.match(d); w = u.match(g); x = u.match(h); } if (v) { var z = u.match(e), A = u.match(f); y.type = 'email'; y.email = {}; y.email.address = v[1]; z && (y.email.subject = decodeURIComponent(z[1])); A && (y.email.body = decodeURIComponent(A[1])); } else if (w) { y.type = 'anchor'; y.anchor = {}; y.anchor.name = y.anchor.id = w[1]; } else if (u && x) { y.type = 'url'; y.url = {}; y.url.protocol = x[1]; y.url.url = x[2]; } else y.type = 'url'; if (t) { var B = t.getAttribute('target'); y.target = {}; y.adv = {}; if (!B) { var C = t.getAttribute('_cke_pa_onclick') || t.getAttribute('onclick'), D = C && C.match(j); if (D) { y.target.type = 'popup'; y.target.name = D[1]; var E; while (E = k.exec(D[2])) if (E[2] == 'yes' || E[2] == '1') y.target[E[1]] = true; else if (isFinite(E[2])) y.target[E[1]] = E[2]; } } else { var F = B.match(i); if (F) y.target.type = y.target.name = B; else { y.target.type = 'frame'; y.target.name = B; } } var G = this, H = function (N, O) { var P = t.getAttribute(O); if (P !== null) y.adv[N] = P || ''; }; H('advId', 'id'); H('advLangDir', 'dir'); H('advAccessKey', 'accessKey'); H('advName', 'name'); H('advLangCode', 'lang'); H('advTabIndex', 'tabindex'); H('advTitle', 'title'); H('advContentType', 'type'); H('advCSSClasses', 'class'); H('advCharset', 'charset'); H('advStyles', 'style'); H('advRel', 'rel'); } var I = s.document.getElementsByTag('img'), J = new CKEDITOR.dom.nodeList(s.document.$.anchors), K = y.anchors = []; for (var L = 0; L < I.count(); L++) { var M = I.getItem(L); if (M.getAttribute('_cke_realelement') && M.getAttribute('_cke_real_element_type') == 'anchor') K.push(s.restoreRealElement(M)); } for (L = 0; L < J.count(); L++) K.push(J.getItem(L)); for (L = 0; L < K.length; L++) { M = K[L]; K[L] = { name: M.getAttribute('name'), id: M.getAttribute('id') }; } this._.selectedElement = t; return y; }, m = function (s, t) { if (t[s]) this.setValue(t[s][this.id] || ''); }, n = function (s) { return m.call(this, 'target', s); }, o = function (s) { return m.call(this, 'adv', s); }, p = function (s, t) { if (!t[s]) t[s] = {}; t[s][this.id] = this.getValue() || ''; }, q = function (s) { return p.call(this, 'target', s); }, r = function (s) { return p.call(this, 'adv', s); }; return { title: a.lang.link.title, minWidth: 350, minHeight: 230, contents: [{ id: 'info', label: a.lang.link.info, title: a.lang.link.info, elements: [{ id: 'linkType', type: 'select', label: a.lang.link.type, 'default': 'url', items: [ [a.lang.common.url, 'url'], [a.lang.link.toAnchor, 'anchor'], [a.lang.link.toEmail, 'email'] ], onChange: c, setup: function (s) { if (s.type) this.setValue(s.type); }, commit: function (s) { s.type = this.getValue(); } }, { type: 'vbox', id: 'urlOptions', children: [{ type: 'hbox', widths: ['25%', '75%'], children: [{ id: 'protocol', type: 'select', label: a.lang.common.protocol, 'default': 'http://', style: 'width : 100%;', items: [ ['http://'], ['https://'], ['ftp://'], ['news://'], ['<other>', ''] ], setup: function (s) { if (s.url) this.setValue(s.url.protocol); }, commit: function (s) { if (!s.url) s.url = {}; s.url.protocol = this.getValue(); } }, { type: 'text', id: 'url', label: a.lang.common.url, onLoad: function () { this.allowOnChange = true; }, onKeyUp: function () { var x = this; x.allowOnChange = false; var s = x.getDialog().getContentElement('info', 'protocol'), t = x.getValue(), u = /^(http|https|ftp|news):\/\/(?=.)/gi, v = /^((javascript:)|[#\/\.])/gi, w = u.exec(t); if (w) { x.setValue(t.substr(w[0].length)); s.setValue(w[0].toLowerCase()); } else if (v.test(t)) s.setValue(''); x.allowOnChange = true; }, onChange: function () { if (this.allowOnChange) this.onKeyUp(); }, validate: function () { var s = this.getDialog(); if (s.getContentElement('info', 'linkType') && s.getValueOf('info', 'linkType') != 'url') return true; if (this.getDialog().fakeObj) return true; var t = CKEDITOR.dialog.validate.notEmpty(a.lang.link.noUrl); return t.apply(this); }, setup: function (s) { var u = this; u.allowOnChange = false; if (s.url) u.setValue(s.url.url); u.allowOnChange = true; var t = u.getDialog().getContentElement('info', 'linkType'); if (t && t.getValue() == 'url') u.select(); }, commit: function (s) { if (!s.url) s.url = {}; s.url.url = this.getValue(); this.allowOnChange = false; } }], setup: function (s) { if (!this.getDialog().getContentElement('info', 'linkType')) this.getElement().show(); } }, { id: 'advRel', type: 'select', label: 'The rel attribute specifies the relationship between the current document and the linked document.', 'default': 'alternate', style: 'width : 100%;', items: [ ['Links to an alternate version of the document (i.e. print page, translated or mirror)','alternate'], ['Links to the author of the document','author'], ['Permanent URL used for bookmarking', 'bookmark'], ['Links to a help document', 'help'], ['Links to copyright information for the document','license'], ['Links to an unendorsed document, like a paid link.','nofollow'], ['Specifies that the browser should not send a HTTP referer header if the user follows the hyperlink','noreferrer'], ['Specifies that the target document should be cached','prefetch'], ['Links to a search tool for the document','search'], ['The previous document in a selection','prev'], ['The next document in a selection', 'next'], ['A tag (keyword) for the current document', 'tag'] ], setup: o, commit: r }, { type: 'button', id: 'browse', hidden: 'true', filebrowser: 'info:url', label: a.lang.common.browseServer }] }, { type: 'vbox', id: 'anchorOptions', width: 260, align: 'center', padding: 0, children: [{ type: 'html', id: 'selectAnchorText', html: CKEDITOR.tools.htmlEncode(a.lang.link.selectAnchor), setup: function (s) { if (s.anchors.length > 0) this.getElement().show(); else this.getElement().hide(); } }, { type: 'html', id: 'noAnchors', style: 'text-align: center;', html: '<div>' + CKEDITOR.tools.htmlEncode(a.lang.link.noAnchors) + '</div>', setup: function (s) { if (s.anchors.length < 1) this.getElement().show(); else this.getElement().hide(); } }, { type: 'hbox', id: 'selectAnchor', children: [{ type: 'select', id: 'anchorName', 'default': '', label: a.lang.link.anchorName, style: 'width: 100%;', items: [ [''] ], setup: function (s) { var v = this; v.clear(); v.add(''); for (var t = 0; t < s.anchors.length; t++) if (s.anchors[t].name) v.add(s.anchors[t].name); if (s.anchor) v.setValue(s.anchor.name); var u = v.getDialog().getContentElement('info', 'linkType'); if (u && u.getValue() == 'email') v.focus(); }, commit: function (s) { if (!s.anchor) s.anchor = {}; s.anchor.name = this.getValue(); } }, { type: 'select', id: 'anchorId', 'default': '', label: a.lang.link.anchorId, style: 'width: 100%;', items: [ [''] ], setup: function (s) { var u = this; u.clear(); u.add(''); for (var t = 0; t < s.anchors.length; t++) if (s.anchors[t].id) u.add(s.anchors[t].id); if (s.anchor) u.setValue(s.anchor.id); }, commit: function (s) { if (!s.anchor) s.anchor = {}; s.anchor.id = this.getValue(); } }], setup: function (s) { if (s.anchors.length > 0) this.getElement().show(); else this.getElement().hide(); } }], setup: function (s) { if (!this.getDialog().getContentElement('info', 'linkType')) this.getElement().hide(); } }, { type: 'vbox', id: 'emailOptions', padding: 1, children: [{ type: 'text', id: 'emailAddress', label: a.lang.link.emailAddress, validate: function () { var s = this.getDialog(); if (!s.getContentElement('info', 'linkType') || s.getValueOf('info', 'linkType') != 'email') return true; var t = CKEDITOR.dialog.validate.notEmpty(a.lang.link.noEmail); return t.apply(this); }, setup: function (s) { if (s.email) this.setValue(s.email.address); var t = this.getDialog().getContentElement('info', 'linkType'); if (t && t.getValue() == 'email') this.select(); }, commit: function (s) { if (!s.email) s.email = {}; s.email.address = this.getValue(); } }, { type: 'text', id: 'emailSubject', label: a.lang.link.emailSubject, setup: function (s) { if (s.email) this.setValue(s.email.subject); }, commit: function (s) { if (!s.email) s.email = {}; s.email.subject = this.getValue(); } }, { type: 'textarea', id: 'emailBody', label: a.lang.link.emailBody, rows: 3, 'default': '', setup: function (s) { if (s.email) this.setValue(s.email.body); }, commit: function (s) { if (!s.email) s.email = {}; s.email.body = this.getValue(); } }], setup: function (s) { if (!this.getDialog().getContentElement('info', 'linkType')) this.getElement().hide(); } }] }, { id: 'target', label: a.lang.link.target, title: a.lang.link.target, elements: [{ type: 'hbox', widths: ['50%', '50%'], children: [{ type: 'select', id: 'linkTargetType', label: a.lang.link.target, 'default': 'notSet', style: 'width : 100%;', items: [ [a.lang.link.targetNotSet, 'notSet'], [a.lang.link.targetFrame, 'frame'], [a.lang.link.targetPopup, 'popup'], [a.lang.link.targetNew, '_blank'], [a.lang.link.targetTop, '_top'], [a.lang.link.targetSelf, '_self'], [a.lang.link.targetParent, '_parent'] ], onChange: b, setup: function (s) { if (s.target) this.setValue(s.target.type); }, commit: function (s) { if (!s.target) s.target = {}; s.target.type = this.getValue(); } }, { type: 'text', id: 'linkTargetName', label: a.lang.link.targetFrameName, 'default': '', setup: function (s) { if (s.target) this.setValue(s.target.name); }, commit: function (s) { if (!s.target) s.target = {}; s.target.name = this.getValue(); } }] }, { type: 'vbox', width: 260, align: 'center', padding: 2, id: 'popupFeatures', children: [{ type: 'html', html: CKEDITOR.tools.htmlEncode(a.lang.link.popupFeatures) }, { type: 'hbox', children: [{ type: 'checkbox', id: 'resizable', label: a.lang.link.popupResizable, setup: n, commit: q }, { type: 'checkbox', id: 'status', label: a.lang.link.popupStatusBar, setup: n, commit: q }] }, { type: 'hbox', children: [{ type: 'checkbox', id: 'location', label: a.lang.link.popupLocationBar, setup: n, commit: q }, { type: 'checkbox', id: 'toolbar', label: a.lang.link.popupToolbar, setup: n, commit: q }] }, { type: 'hbox', children: [{ type: 'checkbox', id: 'menubar', label: a.lang.link.popupMenuBar, setup: n, commit: q }, { type: 'checkbox', id: 'fullscreen', label: a.lang.link.popupFullScreen, setup: n, commit: q }] }, { type: 'hbox', children: [{ type: 'checkbox', id: 'scrollbars', label: a.lang.link.popupScrollBars, setup: n, commit: q }, { type: 'checkbox', id: 'dependent', label: a.lang.link.popupDependent, setup: n, commit: q }] }, { type: 'hbox', children: [{ type: 'text', widths: ['30%', '70%'], labelLayout: 'horizontal', label: a.lang.link.popupWidth, id: 'width', setup: n, commit: q }, { type: 'text', labelLayout: 'horizontal', widths: ['55%', '45%'], label: a.lang.link.popupLeft, id: 'left', setup: n, commit: q }] }, { type: 'hbox', children: [{ type: 'text', labelLayout: 'horizontal', widths: ['30%', '70%'], label: a.lang.link.popupHeight, id: 'height', setup: n, commit: q }, { type: 'text', labelLayout: 'horizontal', label: a.lang.link.popupTop, widths: ['55%', '45%'], id: 'top', setup: n, commit: q }] }] }] }, { id: 'upload', label: a.lang.link.upload, title: a.lang.link.upload, hidden: true, filebrowser: 'uploadButton', elements: [{ type: 'file', id: 'upload', label: a.lang.common.upload, style: 'height:40px', size: 29 }, { type: 'fileButton', id: 'uploadButton', label: a.lang.common.uploadSubmit, filebrowser: 'info:url', 'for': ['upload', 'upload'] }] }, { id: 'advanced', label: a.lang.link.advanced, title: a.lang.link.advanced, elements: [{ type: 'vbox', padding: 1, children: [{ type: 'hbox', widths: ['45%', '35%', '20%'], children: [{ type: 'text', id: 'advId', label: a.lang.link.id, setup: o, commit: r }, { type: 'select', id: 'advLangDir', label: a.lang.link.langDir, 'default': '', style: 'width:110px', items: [ [a.lang.link.langDirNotSet, ''], [a.lang.link.langDirLTR, 'ltr'], [a.lang.link.langDirRTL, 'rtl'] ], setup: o, commit: r }, { type: 'text', id: 'advAccessKey', width: '80px', label: a.lang.link.acccessKey, maxLength: 1, setup: o, commit: r }] }, { type: 'hbox', widths: ['45%', '35%', '20%'], children: [{ type: 'text', label: a.lang.link.name, id: 'advName', setup: o, commit: r }, { type: 'text', label: a.lang.link.langCode, id: 'advLangCode', width: '110px', 'default': '', setup: o, commit: r }, { type: 'text', label: a.lang.link.tabIndex, id: 'advTabIndex', width: '80px', maxLength: 5, setup: o, commit: r }] }] }, { type: 'vbox', padding: 1, children: [{ type: 'hbox', widths: ['45%', '55%'], children: [{ type: 'text', label: a.lang.link.advisoryTitle, 'default': '', id: 'advTitle', setup: o, commit: r }, { type: 'text', label: a.lang.link.advisoryContentType, 'default': '', id: 'advContentType', setup: o, commit: r }] }, { type: 'hbox', widths: ['45%', '55%'], children: [{ type: 'text', label: a.lang.link.cssClasses, 'default': '', id: 'advCSSClasses', setup: o, commit: r }, { type: 'text', label: a.lang.link.charset, 'default': '', id: 'advCharset', setup: o, commit: r }] }, { type: 'hbox', children: [{ type: 'text', label: a.lang.link.styles, 'default': '', id: 'advStyles', setup: o, commit: r }] }] }] }], onShow: function () { var y = this; y.fakeObj = false; var s = y.getParentEditor(), t = s.getSelection(), u = t.getRanges(), v = null, w = y; if (u.length == 1) { var x = u[0].getCommonAncestor(true); v = x.getAscendant('a', true); if (v && v.getAttribute('href')) t.selectElement(v); else if ((v = x.getAscendant('img', true)) && (v.getAttribute('_cke_real_element_type') && v.getAttribute('_cke_real_element_type') == 'anchor')) { y.fakeObj = v; v = s.restoreRealElement(y.fakeObj); t.selectElement(y.fakeObj); } else v = null; } y.setupContent(l.apply(y, [s, v])); }, onOk: function () { var s = { href: 'javascript:void(0)/*' + CKEDITOR.tools.getNextNumber() + '*/' }, t = [], u = { href: s.href }, v = this, w = this.getParentEditor(); this.commitContent(u); switch (u.type || 'url') { case 'url': var x = u.url && u.url.protocol != undefined ? u.url.protocol : 'http://', y = u.url && u.url.url || ''; s._cke_saved_href = y.indexOf('/') === 0 ? y : x + y; break; case 'anchor': var z = u.anchor && u.anchor.name, A = u.anchor && u.anchor.id; s._cke_saved_href = '#' + (z || A || ''); break; case 'email': var B = u.email && u.email.address, C = u.email && encodeURIComponent(u.email.subject || ''), D = u.email && encodeURIComponent(u.email.body || ''), E = ['mailto:', B]; if (C || D) { var F = []; E.push('?'); C && F.push('subject=' + C); D && F.push('body=' + D); E.push(F.join('&')); } s._cke_saved_href = E.join(''); break; default: } if (u.target) if (u.target.type == 'popup') { var G = ["window.open(this.href, '", u.target.name || '', "', '"], H = ['resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen', 'scrollbars', 'dependent'], I = H.length, J = function (T) { if (u.target[T]) H.push(T + '=' + u.target[T]); }; for (var K = 0; K < I; K++) H[K] = H[K] + (u.target[H[K]] ? '=yes' : '=no'); J('width'); J('left'); J('height'); J('top'); G.push(H.join(','), "'); return false;"); s[CKEDITOR.env.ie || CKEDITOR.env.webkit ? '_cke_pa_onclick' : 'onclick'] = G.join(''); } else { if (u.target.type != 'notSet' && u.target.name) s.target = u.target.name; t.push('_cke_pa_onclick', 'onclick'); } if (u.adv) { var L = function (T, U) { var V = u.adv[T]; if (V) s[U] = V; else t.push(U); }; if (this._.selectedElement) L('advId', 'id'); L('advLangDir', 'dir'); L('advAccessKey', 'accessKey'); L('advName', 'name'); L('advLangCode', 'lang'); L('advTabIndex', 'tabindex'); L('advTitle', 'title'); L('advContentType', 'type'); L('advCSSClasses', 'class'); L('advCharset', 'charset'); L('advStyles', 'style'); L('advRel', 'rel'); } if (!this._.selectedElement) { var M = w.getSelection(), N = M.getRanges(); if (N.length == 1 && N[0].collapsed) { var O = new CKEDITOR.dom.text(s._cke_saved_href, w.document); N[0].insertNode(O); N[0].selectNodeContents(O); M.selectRanges(N); } var P = new CKEDITOR.style({ element: 'a', attributes: s }); P.type = CKEDITOR.STYLE_INLINE; P.apply(w.document); if (u.adv && u.adv.advId) { var Q = this.getParentEditor().document.$.getElementsByTagName('a'); for (K = 0; K < Q.length; K++) if (Q[K].href == s.href) { Q[K].id = u.adv.advId; break; } } } else { var R = this._.selectedElement; if (CKEDITOR.env.ie && s.name != R.getAttribute('name')) { var S = new CKEDITOR.dom.element('<a name="' + CKEDITOR.tools.htmlEncode(s.name) + '">', w.document); M = w.getSelection(); R.moveChildren(S); R.copyAttributes(S, { name: 1 }); S.replace(R); R = S; M.selectElement(R); } R.setAttributes(s); R.removeAttributes(t); if (R.getAttribute('name')) R.addClass('cke_anchor'); else R.removeClass('cke_anchor'); if (this.fakeObj) w.createFakeElement(R, 'cke_anchor', 'anchor').replace(this.fakeObj); delete this._.selectedElement; } }, onLoad: function () { if (!a.config.linkShowAdvancedTab) this.hidePage('advanced'); if (!a.config.linkShowTargetTab) this.hidePage('target'); } }; });