root/trunk/campsite/implementation/management/priv/articles/editor_load_xinha.php
| Revision 4395 (by paul, 01/25/06 21:35:19) |
|---|
<?php
/**
* @param array p_dbColumns
* @param User p_user
* @return void
*/
function editor_load_xinha($p_dbColumns, $p_user) {
global $Campsite;
$stylesheetFile = $Campsite['HTML_COMMON_DIR']
."/priv/articles/article_stylesheet.css";
?>
<script type="text/javascript">
//<![CDATA[
_editor_url = "/javascript/xinha/";
_editor_lang = "<?php p($_REQUEST['TOL_Language']); ?>";
_campsite_article_id = <?php echo $_REQUEST['f_article_number']; ?>;
//]]>
</script>
<!-- Load the HTMLArea file -->
<script type="text/javascript" src="/javascript/xinha/htmlarea.js"></script>
<!-- Special Campsite functionality -->
<script type="text/javascript">
function CampsiteSubhead(editor, objectName, object) {
if (!HTMLArea.is_ie) {
// This statement crashes in the most bizarre way on IE.
// If you remove the "parent = " here, then it doesnt crash.
// So IE will allow subheads within subheads (bad), while
// the code below will prevent that for the other browsers.
parent = editor.getParentElement();
if ((parent.tagName.toLowerCase() == "span") &&
(parent.className.toLowerCase()=="campsite_subhead")) {
editor.selectNodeContents(parent);
editor.updateToolbar();
return false;
} else {
editor.surroundHTML('<span class="campsite_subhead">', '</span>');
}
} else {
editor.surroundHTML('<span class="campsite_subhead">', '</span>');
}
} // fn CampsiteSubhead
/**
* Handler for creating an internal campsite link.
* This is a copy of the _createlink function, except that it calls
* a different popup window.
*/
function CampsiteInternalLink(editor, objectName, object, link) {
var outparam = null;
if (typeof link == "undefined") {
link = editor.getParentElement();
if (link) {
if (/^img$/i.test(link.tagName)) {
link = link.parentNode;
}
if (!/^a$/i.test(link.tagName)) {
link = null;
}
}
}
popupWindowTarget = "campsite_internal_link.php?TOL_Language=<?php p($_REQUEST["TOL_Language"]); ?>";
if (!link) {
var sel = editor._getSelection();
var range = editor._createRange(sel);
var compare = 0;
if (HTMLArea.is_ie) {
compare = range.compareEndPoints("StartToEnd", range);
}
else {
compare = range.compareBoundaryPoints(range.START_TO_END, range);
}
if (compare == 0) {
alert(HTMLArea._lc("You need to select some text before creating a link"));
return;
}
outparam = {
f_href : '',
f_title : '',
f_target : '',
f_usetarget : editor.config.makeLinkShowsTarget
};
}
else {
outparam = {
f_href : HTMLArea.is_ie ? editor.stripBaseURL(link.href) : link.getAttribute("href"),
f_title : link.title,
f_target : link.target,
f_usetarget : editor.config.makeLinkShowsTarget
};
// Pass the arguments to the popup window so that it
// can populate the dropdown controls.
popupWindowTarget += "&" + outparam["f_href"].replace("campsite_internal_link?", "");
}
editor._popupDialog(popupWindowTarget, function(param) {
if (!param) {
return false;
}
var a = link;
if (!a) {
try {
editor._doc.execCommand("createlink", false, param.f_href);
a = editor.getParentElement();
var sel = editor._getSelection();
var range = editor._createRange(sel);
if (!HTMLArea.is_ie) {
a = range.startContainer;
if (!/^a$/i.test(a.tagName)) {
a = a.nextSibling;
if (a == null) {
a = range.startContainer.parentNode;
}
}
}
}
catch(e) {}
}
else {
var href = param.f_href.trim();
editor.selectNodeContents(a);
if (href == "") {
editor._doc.execCommand("unlink", false, null);
editor.updateToolbar();
return false;
}
else {
a.href = href;
}
}
if (!(a && /^a$/i.test(a.tagName))) {
return false;
}
a.target = param.f_target.trim();
a.title = param.f_title.trim();
editor.selectNodeContents(a);
editor.updateToolbar();
}, outparam);
};
xinha_editors = null;
xinha_init = null;
xinha_config = null;
xinha_plugins = null;
// This contains the names of textareas we will make into Xinha editors
xinha_init = xinha_init ? xinha_init : function()
{
/** STEP 1 ***************************************************************
* First, what are the plugins you will be using in the editors on this
* page. List all the plugins you will need, even if not all the editors
* will use all the plugins.
************************************************************************/
xinha_plugins = xinha_plugins ? xinha_plugins :
[
<?php if ($p_user->hasPermission("EditorImage")) { ?>
'ImageManager',
<?php } ?>
<?php if ($p_user->hasPermission('EditorTable')) { ?>
'TableOperations',
<?php } ?>
<?php if ($p_user->hasPermission('EditorListNumber')) { ?>
'ListType',
<?php } ?>
<?php if ($p_user->hasPermission("EditorEnlarge")) { ?>
'FullScreen',
<?php } ?>
'WordPaste',
'CharacterMap',
'FindReplace',
//'RemoveParagraphs'
];
// THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING :)
if(!HTMLArea.loadPlugins(xinha_plugins, xinha_init)) return;
/** STEP 2 ***************************************************************
* Now, what are the names of the textareas you will be turning into
* editors?
************************************************************************/
xinha_editors = xinha_editors ? xinha_editors :
[
<?php
$xinhaEditors = array();
foreach ($p_dbColumns as $dbColumn) {
if (stristr($dbColumn->getType(), "blob")) {
$xinhaEditors[] = "'".$dbColumn->getName()."'";
}
}
echo implode(",", $xinhaEditors);
?>
];
/** STEP 3 ***************************************************************
* We create a default configuration to be used by all the editors.
* If you wish to configure some of the editors differently this will be
* done in step 4.
*
* If you want to modify the default config you might do something like this.
*
* xinha_config = new HTMLArea.Config();
* xinha_config.width = 640;
* xinha_config.height = 420;
*
*************************************************************************/
xinha_config = xinha_config ? xinha_config : new HTMLArea.Config();
xinha_config.statusBar = false;
xinha_config.htmlareaPaste = true;
xinha_config.killWordOnPaste = true;
xinha_config.flowToolbars = false;
xinha_config.mozParaHandler = "built-in";
// Change the built-in icon for "web link"
linkIcon = _editor_url + xinha_config.imgURL + "ed_campsite_link.gif";
xinha_config.btnList["createlink"] = [ "Insert Web Link", linkIcon, false, function(e) {e._createLink();} ],
// Change the removeformat button to work in text mode.
xinha_config.btnList["removeformat"] = [ "Remove formatting", ["ed_buttons_main.gif",4,4], true, function(e) {e.execCommand("removeformat");} ],
// Put the "find-replace" plugin in a better location
xinha_config.addToolbarElement([], ["FR-findreplace"], 0);
// Add in our style sheet for the "subheads".
xinha_config.pageStyle = "<?php echo str_replace("n", "", file_get_contents($stylesheetFile)); ?>";
<?php if ($p_user->hasPermission('EditorSubhead')) { ?>
subheadTooltip = HTMLArea._lc('Subhead', 'Campsite');
xinha_config.registerButton({
// The ID of the button.
id : "campsite-subhead",
// The tooltip.
tooltip : subheadTooltip,
// Image to be displayed in the toolbar.
image : "/javascript/xinha/images/campsite_subhead.gif",
// TRUE = enabled in text mode
// FALSE = disabled in text mode
textMode : false,
// Called when the button is clicked.
action : CampsiteSubhead,
// The button will be disabled if outside
// the specified element.
context : ''
});
<?php } ?>
<?php if ($p_user->hasPermission('EditorLink')) { ?>
internalLinkTooltip = HTMLArea._lc('Insert Internal Link', 'Campsite');
xinha_config.registerButton({
// The ID of the button.
id : "campsite-internal-link",
// The tooltip.
tooltip : internalLinkTooltip,
// Image to be displayed in the toolbar.
image : "/javascript/xinha/images/campsite_internal_link.gif",
// TRUE = enabled in text mode
// FALSE = disabled in text mode
textMode : false,
// Called when the button is clicked.
action : CampsiteInternalLink,
// The button will be disabled if outside
// the specified element.
context : ''
});
<?php }
$toolbar1 = array();
if ($p_user->hasPermission('EditorBold')) {
$toolbar1[] = ""bold"";
}
if ($p_user->hasPermission('EditorItalic')) {
$toolbar1[] = ""italic"";
}
if ($p_user->hasPermission('EditorUnderline')) {
$toolbar1[] = ""underline"";
}
if ($p_user->hasPermission('EditorStrikethrough')) {
$toolbar1[] = ""strikethrough"";
}
if ($p_user->hasPermission('EditorTextAlignment')) {
$toolbar1[] = ""justifyleft"";
$toolbar1[] = ""justifycenter"";
$toolbar1[] = ""justifyright"";
$toolbar1[] = ""justifyfull"";
}
if ($p_user->hasPermission('EditorIndent')) {
$toolbar1[] = ""outdent"";
$toolbar1[] = ""indent"";
}
if ($p_user->hasPermission('EditorCopyCutPaste')) {
$toolbar1[] = ""copy"";
$toolbar1[] = ""cut"";
$toolbar1[] = ""paste"";
$toolbar1[] = ""space"";
}
if ($p_user->hasPermission('EditorUndoRedo')) {
$toolbar1[] = ""undo"";
$toolbar1[] = ""redo"";
}
if ($p_user->hasPermission('EditorTextDirection')) {
$toolbar1[] = ""lefttoright"";
$toolbar1[] = ""righttoleft"";
}
if ($p_user->hasPermission('EditorLink')) {
$toolbar1[] = ""campsite-internal-link"";
$toolbar1[] = ""createlink"";
}
if ($p_user->hasPermission('EditorSubhead')) {
$toolbar1[] = ""campsite-subhead"";
}
if ($p_user->hasPermission('EditorImage')) {
$toolbar1[] = ""insertimage"";
}
if ($p_user->hasPermission('EditorSourceView')) {
$toolbar1[] = ""htmlmode"";
}
if ($p_user->hasPermission('EditorEnlarge')) {
$toolbar1[] = ""popupeditor"";
}
if ($p_user->hasPermission('EditorHorizontalRule')) {
$toolbar1[] = ""inserthorizontalrule"";
}
if ($p_user->hasPermission('EditorFontColor')) {
$toolbar1[] = ""forecolor"";
$toolbar1[] = ""hilitecolor"";
}
if ($p_user->hasPermission('EditorSubscript')) {
$toolbar1[] = ""subscript"";
}
if ($p_user->hasPermission('EditorSuperscript')) {
$toolbar1[] = ""superscript"";
}
$toolbar2 = array();
// Slice up the first toolbar if it is too long.
if (count($toolbar1) > 24) {
$toolbar2 = array_splice($toolbar1, 24);
}
// This is to put the bulleted and numbered list controls
// on the most appropriate line of the toolbar.
if ($p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber') && count($toolbar1) < 15) {
$toolbar1[] = ""insertunorderedlist"";
$toolbar1[] = ""insertorderedlist"";
}
elseif ($p_user->hasPermission('EditorListBullet') && !$p_user->hasPermission('EditorListNumber') && count($toolbar1) < 24) {
$toolbar1[] = ""insertunorderedlist"";
}
elseif (!$p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber') && count($toolbar1) < 16) {
$toolbar1[] = ""insertorderedlist"";
}
else {
if ($p_user->hasPermission('EditorListBullet')) {
$toolbar2[] = ""insertunorderedlist"";
}
if ($p_user->hasPermission('EditorListNumber')) {
$toolbar2[] = ""insertorderedlist"";
}
}
if ($p_user->hasPermission('EditorFontFace')) {
$toolbar2[] = ""formatblock"";
$toolbar2[] = ""fontname"";
}
if ($p_user->hasPermission('EditorFontSize')) {
$toolbar2[] = ""fontsize"";
}
// This is to fix ticket #1602. You only want the line break if
// there is more than one line in the toolbar.
if (count($toolbar2) > 0 || $p_user->hasPermission('EditorTable')) {
$toolbar1[] = ""linebreak"";
}
?>
xinha_config.toolbar = [
[ <?php echo implode(",", $toolbar1); ?> ],
<?php if (count($toolbar2) > 0) { ?>
[ <?php echo implode(",", $toolbar2); ?> ],
<?php } ?>
<?php if ($p_user->hasPermission('EditorTable')) { ?>
[ "linebreak", "inserttable" ],
<?php } ?>
];
/** STEP 3 ***************************************************************
* We first create editors for the textareas.
*
* You can do this in two ways, either
*
* xinha_editors = HTMLArea.makeEditors(xinha_editors, xinha_config, xinha_plugins);
*
* if you want all the editor objects to use the same set of plugins, OR;
*
* xinha_editors = HTMLArea.makeEditors(xinha_editors, xinha_config);
* xinha_editors['myTextArea'].registerPlugins(['Stylist','FullScreen']);
* xinha_editors['anotherOne'].registerPlugins(['CSS','SuperClean']);
*
* if you want to use a different set of plugins for one or more of the
* editors.
************************************************************************/
xinha_editors = HTMLArea.makeEditors(xinha_editors, xinha_config, xinha_plugins);
/** STEP 4 ***************************************************************
* If you want to change the configuration variables of any of the
* editors, this is the place to do that, for example you might want to
* change the width and height of one of the editors, like this...
*
* xinha_editors.myTextArea.config.width = 640;
* xinha_editors.myTextArea.config.height = 480;
*
************************************************************************/
/** STEP 5 ***************************************************************
* Finally we "start" the editors, this turns the textareas into
* Xinha editors.
************************************************************************/
HTMLArea.startEditors(xinha_editors);
}
window.onload = xinha_init;
</script>
<!--<link href="/javascript/xinha/skins/xp-blue/skin.css" rel="Stylesheet" />-->
<?php
} // fn editor_load_xinha
?>
Note: See TracBrowser for help on using the browser.