Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F886121
fckplugin.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
fckplugin.js
View Options
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2007 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Plugin to insert "Placeholders" in the editor.
*/
// Register the related command.
FCKCommands
.
RegisterCommand
(
'Placeholder'
,
new
FCKDialogCommand
(
'Placeholder'
,
FCKLang
.
PlaceholderDlgTitle
,
FCKPlugins
.
Items
[
'placeholder'
].
Path
+
'fck_placeholder.html'
,
340
,
170
)
)
;
// Create the "Plaholder" toolbar button.
var
oPlaceholderItem
=
new
FCKToolbarButton
(
'Placeholder'
,
FCKLang
.
PlaceholderBtn
)
;
oPlaceholderItem
.
IconPath
=
FCKPlugins
.
Items
[
'placeholder'
].
Path
+
'placeholder.gif'
;
FCKToolbarItems
.
RegisterItem
(
'Placeholder'
,
oPlaceholderItem
)
;
// The object used for all Placeholder operations.
var
FCKPlaceholders
=
new
Object
()
;
// Add a new placeholder at the actual selection.
FCKPlaceholders
.
Add
=
function
(
name
)
{
var
oSpan
=
FCK
.
CreateElement
(
'SPAN'
)
;
this
.
SetupSpan
(
oSpan
,
name
)
;
}
FCKPlaceholders
.
SetupSpan
=
function
(
span
,
name
)
{
span
.
innerHTML
=
'[[ '
+
name
+
' ]]'
;
span
.
style
.
backgroundColor
=
'#ffff00'
;
span
.
style
.
color
=
'#000000'
;
if
(
FCKBrowserInfo
.
IsGecko
)
span
.
style
.
cursor
=
'default'
;
span
.
_fckplaceholder
=
name
;
span
.
contentEditable
=
false
;
// To avoid it to be resized.
span
.
onresizestart
=
function
()
{
FCK
.
EditorWindow
.
event
.
returnValue
=
false
;
return
false
;
}
}
// On Gecko we must do this trick so the user select all the SPAN when clicking on it.
FCKPlaceholders
.
_SetupClickListener
=
function
()
{
FCKPlaceholders
.
_ClickListener
=
function
(
e
)
{
if
(
e
.
target
.
tagName
==
'SPAN'
&&
e
.
target
.
_fckplaceholder
)
FCKSelection
.
SelectNode
(
e
.
target
)
;
}
FCK
.
EditorDocument
.
addEventListener
(
'click'
,
FCKPlaceholders
.
_ClickListener
,
true
)
;
}
// Open the Placeholder dialog on double click.
FCKPlaceholders
.
OnDoubleClick
=
function
(
span
)
{
if
(
span
.
tagName
==
'SPAN'
&&
span
.
_fckplaceholder
)
FCKCommands
.
GetCommand
(
'Placeholder'
).
Execute
()
;
}
FCK
.
RegisterDoubleClickHandler
(
FCKPlaceholders
.
OnDoubleClick
,
'SPAN'
)
;
// Check if a Placholder name is already in use.
FCKPlaceholders
.
Exist
=
function
(
name
)
{
var
aSpans
=
FCK
.
EditorDocument
.
getElementsByTagName
(
'SPAN'
)
;
for
(
var
i
=
0
;
i
<
aSpans
.
length
;
i
++
)
{
if
(
aSpans
[
i
].
_fckplaceholder
==
name
)
return
true
;
}
return
false
;
}
if
(
FCKBrowserInfo
.
IsIE
)
{
FCKPlaceholders
.
Redraw
=
function
()
{
if
(
FCK
.
EditMode
!=
FCK_EDITMODE_WYSIWYG
)
return
;
var
aPlaholders
=
FCK
.
EditorDocument
.
body
.
innerText
.
match
(
/\[\[[^\[\]]+\]\]/g
)
;
if
(
!
aPlaholders
)
return
;
var
oRange
=
FCK
.
EditorDocument
.
body
.
createTextRange
()
;
for
(
var
i
=
0
;
i
<
aPlaholders
.
length
;
i
++
)
{
if
(
oRange
.
findText
(
aPlaholders
[
i
]
)
)
{
var
sName
=
aPlaholders
[
i
].
match
(
/\[\[\s*([^\]]*?)\s*\]\]/
)[
1
]
;
oRange
.
pasteHTML
(
'<span style="color: #000000; background-color: #ffff00" contenteditable="false" _fckplaceholder="'
+
sName
+
'">'
+
aPlaholders
[
i
]
+
'</span>'
)
;
}
}
}
}
else
{
FCKPlaceholders
.
Redraw
=
function
()
{
if
(
FCK
.
EditMode
!=
FCK_EDITMODE_WYSIWYG
)
return
;
var
oInteractor
=
FCK
.
EditorDocument
.
createTreeWalker
(
FCK
.
EditorDocument
.
body
,
NodeFilter
.
SHOW_TEXT
,
FCKPlaceholders
.
_AcceptNode
,
true
)
;
var
aNodes
=
new
Array
()
;
while
(
(
oNode
=
oInteractor
.
nextNode
()
)
)
{
aNodes
[
aNodes
.
length
]
=
oNode
;
}
for
(
var
n
=
0
;
n
<
aNodes
.
length
;
n
++
)
{
var
aPieces
=
aNodes
[
n
].
nodeValue
.
split
(
/(\[\[[^\[\]]+\]\])/g
)
;
for
(
var
i
=
0
;
i
<
aPieces
.
length
;
i
++
)
{
if
(
aPieces
[
i
].
length
>
0
)
{
if
(
aPieces
[
i
].
indexOf
(
'[['
)
==
0
)
{
var
sName
=
aPieces
[
i
].
match
(
/\[\[\s*([^\]]*?)\s*\]\]/
)[
1
]
;
var
oSpan
=
FCK
.
EditorDocument
.
createElement
(
'span'
)
;
FCKPlaceholders
.
SetupSpan
(
oSpan
,
sName
)
;
aNodes
[
n
].
parentNode
.
insertBefore
(
oSpan
,
aNodes
[
n
]
)
;
}
else
aNodes
[
n
].
parentNode
.
insertBefore
(
FCK
.
EditorDocument
.
createTextNode
(
aPieces
[
i
]
)
,
aNodes
[
n
]
)
;
}
}
aNodes
[
n
].
parentNode
.
removeChild
(
aNodes
[
n
]
)
;
}
FCKPlaceholders
.
_SetupClickListener
()
;
}
FCKPlaceholders
.
_AcceptNode
=
function
(
node
)
{
if
(
/\[\[[^\[\]]+\]\]/
.
test
(
node
.
nodeValue
)
)
return
NodeFilter
.
FILTER_ACCEPT
;
else
return
NodeFilter
.
FILTER_SKIP
;
}
}
FCK
.
Events
.
AttachEvent
(
'OnAfterSetHTML'
,
FCKPlaceholders
.
Redraw
)
;
// We must process the SPAN tags to replace then with the real resulting value of the placeholder.
FCKXHtml
.
TagProcessors
[
'span'
]
=
function
(
node
,
htmlNode
)
{
if
(
htmlNode
.
_fckplaceholder
)
node
=
FCKXHtml
.
XML
.
createTextNode
(
'[['
+
htmlNode
.
_fckplaceholder
+
']]'
)
;
else
FCKXHtml
.
_AppendChildNodes
(
node
,
htmlNode
,
false
)
;
return
node
;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 6, 22:35 (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26215
Default Alt Text
fckplugin.js (5 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment