/**
* Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
* Copyright (C) 2002-2004 The Nucleus Group
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* (see nucleus/documentation/index.html#license for more info)
*
* This file contains functions to allow adding items from inside the weblog.
* Also contains code to avoid submitting form data twice.
*/
var nucleusConvertBreaks = true;
var nucleusMediaPopupURL = '';
var nucleusMediaURL = 'media/';
var nucleusAuthorId = 0;
function setConvertBreaks(newval) { nucleusConvertBreaks = newval; }
function setMediaUrl(url) { nucleusMediaURL = url; }
function setAuthorId(id) { nucleusAuthorId = id; }
function preview(id, value) {
elem = document.getElementById(id);
if (!elem) return;
var preview = nucleusConvertBreaks ? str_replace("\n","
",value)+" " : value+" ";
// expand the media commands (without explicit collection)
preview = preview.replace(/\<\%image\(([^\/\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"");
// expand the media commands (with collection)
preview = preview.replace(/\<\%image\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"");
preview = preview.replace(/\<\%popup\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"$4");
preview = preview.replace(/\<\%media\(([^\|]*)\|([^)]*)\)\%\>/g,"$2");
elem.innerHTML = preview;
}
function showedit() {
prevval = document.getElementById('edit').style.display;
if (prevval == "block")
newval = "none";
else
newval = "block";
document.getElementById('edit').style.display = newval;
if (newval == "block")
updAllPreviews();
}
function updAllPreviews() {
updPreview('title');
updPreview('body');
updPreview('more');
}
function isEditVisible() {
var editform = document.getElementById('edit');
if (!editform) return true;
var prevval = editform.style.display;
return (prevval == "none") ? false : true;
}
function updPreview(id) {
// don't update when preview is hidden
if (!isEditVisible()) return;
var inputField = document.getElementById('input' + id);
if (!inputField) return;
preview('prev' + id, inputField.value);
}
// replace a in s by b (taken from milov.nl)
function str_replace(a, b, s)
{
if (a == b || !s.length || !a.length) return s;
if ((p=s.indexOf(a)) == -1) { return s; }
else { ns = s.substring(0,p) + b + s.substring(p+a.length,s.length); }
return (s.indexOf(a) != -1) ? str_replace(a, b, ns) : ns;
}
function shortCuts() {
if (!event || (event.ctrlKey != true)) return;
switch (event.keyCode) {
case 1:
ahrefThis(); break; // ctrl-shift-a
case 2:
boldThis(); break; // ctrl-shift-b
case 9:
italicThis(); break; // ctrl-shift-i
case 13:
addMedia(); break; // ctrl-shift-m
default:
return;
}
return;
}
function cutThis() { execAndUpdate('cut'); }
function copyThis() { execAndUpdate('copy'); }
function pasteThis() { execAndUpdate('paste'); }
function boldThis() { insertAroundCaret('',''); }
function italicThis() { insertAroundCaret('',''); }
function leftThis() { insertAroundCaret('
','
'); }
function rightThis() { insertAroundCaret('','
'); }
function alignleftThis() { insertAroundCaret('','
'); }
function alignrightThis() { insertAroundCaret('','
'); }
function aligncenterThis() { insertAroundCaret('','
'); }
function ahrefThis() {
if (document.selection)
strSelection = document.selection.createRange().text;
else
strSelection = '';
strHref = prompt("Create a link to:","http://");
if (strHref == null) return;
var textpre = "";
insertAroundCaret(textpre, "");
}
function execAndUpdate(action) {
lastSelected.caretPos.execCommand(action);
updAllPreviews();
}
var nonie_FormType = 'body';
// Add media to new item
function addMedia() {
var mediapopup = window.open(nucleusMediaPopupURL + 'media.php','name',
'status=yes,toolbar=no,scrollbars=yes,resizable=yes,width=500,height=450,top=0,left=0');
return;
}
function setMediaPopupURL(url) {
nucleusMediaPopupURL = url;
}
function includeImage(collection, filename, type, width, height) {
if (isCaretEmpty()) {
text = prompt("Text to display ?","");
} else {
text = getCaretText();
}
// add collection name when not private collection (or editing a message that's not your)
var fullName;
if (isNaN(collection) || (nucleusAuthorId != collection)) {
fullName = collection + '/' + filename;
} else {
fullName = filename;
}
var replaceBy;
switch(type) {
case 'popup':
replaceBy = '<%popup(' + fullName + '|'+width+'|'+height+'|' + text +')%>';
break;
case 'inline':
default:
replaceBy = '<%image(' + fullName + '|'+width+'|'+height+'|' + text +')%>';
}
insertAtCaret(replaceBy);
updAllPreviews();
}
function includeOtherMedia(collection, filename) {
if (isCaretEmpty()) {
text = prompt("Text to display ?","");
} else {
text = getCaretText();
}
// add collection name when not private collection (or editing a message that's not your)
var fullName;
if (isNaN(collection) || (nucleusAuthorId != collection)) {
fullName = collection + '/' + filename;
} else {
fullName = filename;
}
var replaceBy = '<%media(' + fullName + '|' + text +')%>';
insertAtCaret(replaceBy);
updAllPreviews();
}
// function to prevent submitting form data twice
var submitcount=0;
function checkSubmit() {
if (submitcount == 0) {
submitcount++;
return true;
} else {
return false;
}
}
// code to store the caret (cursor) position of a text field/text area
// taken from javascript.faqts and modified
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
// stores the caret
function storeCaret (textEl) {
// store caret
if (textEl.createTextRange)
//textEl.caretPos = document.selection.createRange().duplicate();
lastCaretPos = document.selection.createRange().duplicate();
// also store lastselectedelement
lastSelected = textEl;
nonie_FormType = textEl.name;
}
var lastSelected;
// inserts text at caret (overwriting selection)
function insertAtCaret (text) {
var textEl = lastSelected;
if (textEl && textEl.createTextRange && textEl.caretPos) {
var caretPos = textEl.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
} else if (!document.all && document.getElementById) {
mozReplace(document.getElementById('input' + nonie_FormType), text);
} else if (textEl) {
textEl.value += text;
} else {
document.getElementById('input' + nonie_FormType).value += text;
}
updAllPreviews();
}
// inserts a tag around the selected text
function insertAroundCaret (textpre, textpost) {
var textEl = lastSelected;
if (textEl && textEl.createTextRange && textEl.caretPos) {
var caretPos = textEl.caretPos;
caretPos.text = textpre + caretPos.text + textpost;
} else if (!document.all && document.getElementById) {
mozWrap(document.getElementById('input' + nonie_FormType), textpre, textpost);
} else {
document.getElementById('input' + nonie_FormType).value += textpre + textpost;
}
updAllPreviews();
}
/* some methods to get things working in Mozilla as well */
function mozWrap(txtarea, lft, rgt) {
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + lft + s2 + rgt + s3;
}
function mozReplace(txtarea, newText) {
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + newText + s3;
}
function mozSelectedText() {
var txtarea = document.getElementById('input' + nonie_FormType);
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
return (txtarea.value).substring(selStart, selEnd);
}
function getCaretText() {
if (!document.all && document.getElementById)
return mozSelectedText();
else
return lastSelected.caretPos.text;
}
function isCaretEmpty() {
if (lastSelected && lastSelected.createTextRange && lastSelected.caretPos)
return (lastSelected.caretPos.text == '');
else if (!document.all && document.getElementById)
return (mozSelectedText() == '');
else
return true;
}
function BtnHighlight(el) {
with(el.style){
borderLeft="1px solid gray";
borderRight="1px solid #e9e9e9";
borderTop="1px solid gray";
borderBottom="1px solid #e9e9e9";
}
}
function BtnNormal(el) {
with(el.style){
padding="3px";
border="1px solid #dddddd";
}
}