332 lines
12 KiB
JavaScript
332 lines
12 KiB
JavaScript
// TODO: I'd like to have an extra "js" directory for all JavaScripts
|
|
// a theme needs.
|
|
|
|
/*
|
|
* Jlogs not minified version of JavaScript
|
|
*/
|
|
|
|
function jlog_bbcode(insText, aTag, eTag) {
|
|
if (!insText) { return ''; }
|
|
return aTag + insText + eTag;
|
|
}
|
|
|
|
function jlog_bbcode_link(insText, aTag, eTag) {
|
|
var url = new RegExp('^(http://|https://|www.|ftp://|news:|mailto:).');
|
|
var www = new RegExp('^(www.).');
|
|
var mail = new RegExp('^[^@]+@[^@]+\.[a-zA-Z]+$');
|
|
var http = new RegExp('^(http://)$');
|
|
var node, href;
|
|
if((url.test(insText)) || (mail.test(insText))) {
|
|
href = insText;
|
|
if (mail.test(href)) { href = 'mailto:' + insText; }
|
|
if (www.test(href)) { href = 'http://' + href; }
|
|
node = prompt(jlog_l_comments_url_node);
|
|
if((node !== null) && (node !== '')) { insText = '[url=' + href + ']' + node + eTag; }
|
|
else if(node === '') { insText = aTag + href + eTag; }
|
|
}
|
|
else {
|
|
node = insText;
|
|
if(node === '') { node = prompt(jlog_l_comments_url_node, insText); }
|
|
href = prompt(jlog_l_comments_url_href, 'http://');
|
|
if (http.test(href)) { return insText; }
|
|
if (www.test(href)) { href = 'http://' + href; }
|
|
if(((node !== null) && (node !== '')) && ((href !== null) && (href !== ''))) {
|
|
insText = '[url=' + href + ']' + node + eTag;
|
|
}
|
|
else if((href !== null) && (href !== '')) { insText = aTag + href + eTag; }
|
|
}
|
|
return insText;
|
|
}
|
|
|
|
|
|
function jlog_bbcode_list(o_insText, aTag, eTag) {
|
|
var insText = o_insText.replace(/(\n|\r|\r\n)(?=(.+))/g, '$1[*]');
|
|
return '[list]\n[*]' + insText + eTag + '\n';
|
|
}
|
|
|
|
function jlog_bbcode_insert(aTag, eTag, completeText) {
|
|
var input = document.forms.entryform.elements.content;
|
|
input.focus();
|
|
var insText;
|
|
/* für Internet Explorer und Opera >= 8 */
|
|
if(typeof document.selection != 'undefined') {
|
|
/* Einfügen des Formatierungscodes */
|
|
var range = document.selection.createRange();
|
|
insText = range.text;
|
|
if (aTag === '[url]') { range.text = jlog_bbcode_link(insText, aTag, eTag); }
|
|
else if(eTag === '[/list]') { range.text = jlog_bbcode_list(insText, aTag, eTag); }
|
|
else { range.text = jlog_bbcode(insText, aTag, eTag); }
|
|
|
|
/* Anpassen der Cursorposition */
|
|
range = document.selection.createRange();
|
|
if (insText.length === 0) {
|
|
range.move('character', -eTag.length);
|
|
} else {
|
|
range.moveStart('character', insText.length);
|
|
}
|
|
range.select();
|
|
}
|
|
/* für neuere auf Gecko basierende Browser */
|
|
else if(typeof input.selectionStart != 'undefined')
|
|
{
|
|
/* Einfügen des Formatierungscodes */
|
|
var start = input.selectionStart;
|
|
var end = input.selectionEnd;
|
|
insText = input.value.substring(start, end);
|
|
if(aTag === '[url]') { insText = jlog_bbcode_link(insText, aTag, eTag); }
|
|
else if(eTag === '[/list]') { insText = jlog_bbcode_list(insText, aTag, eTag); }
|
|
else { insText = jlog_bbcode(insText, aTag, eTag); }
|
|
|
|
input.value = input.value.substr(0, start) + insText + input.value.substr(end);
|
|
|
|
/* Anpassen der Cursorposition */
|
|
var pos;
|
|
if (insText.length === 0) {
|
|
pos = start + aTag.length + eTag.length;
|
|
} else {
|
|
pos = start + insText.length;
|
|
}
|
|
input.selectionStart = pos;
|
|
input.selectionEnd = pos;
|
|
}
|
|
/* für die übrigen Browser */
|
|
else
|
|
{
|
|
/* Einfügen des Formatierungscodes */
|
|
if(aTag === '[url]') { insText = jlog_bbcode_link('', aTag, eTag); }
|
|
else if(eTag === '[/list]') { insText = jlog_bbcode_list('', aTag, eTag); }
|
|
else { insText = jlog_bbcode(prompt(jlog_l_comments_plz_format_txt), aTag, eTag); }
|
|
input.value += insText;
|
|
}
|
|
}
|
|
|
|
function jlog_bbcode_img(jfilename) {
|
|
var jclass = '';
|
|
var jalt = '';
|
|
if ( document.getElementById("class").value !== '') {
|
|
jclass = ' class=\"' + document.getElementById("class").value + '\"';
|
|
}
|
|
if ( document.getElementById("alt").value !== '') {
|
|
jalt = ' alt=\"' + document.getElementById("alt").value + '\"';
|
|
}
|
|
var jimg = '[img' + jclass + jalt + ']' + jfilename + '[/img]';
|
|
opener.parent.jlog_insertAtCursor(jimg);
|
|
window.close();
|
|
}
|
|
|
|
// from http://www.alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript/
|
|
function jlog_insertAtCursor(insText) {
|
|
//IE and Opera support
|
|
var field = document.forms.entryform.elements.content;
|
|
if (document.selection) {
|
|
field.focus();
|
|
var sel = document.selection.createRange();
|
|
sel.text = insText;
|
|
}
|
|
//MOZILLA/NETSCAPE support
|
|
else if (field.selectionStart || field.selectionStart == '0') {
|
|
var startPos = field.selectionStart;
|
|
var endPos = field.selectionEnd;
|
|
field.value = field.value.substring(0, startPos) + insText + field.value.substring(endPos, field.value.length);
|
|
} else {
|
|
field.value += insText;
|
|
}
|
|
}
|
|
|
|
var show = true;
|
|
|
|
function jlog_killcomments() {
|
|
|
|
var commentslist = document.getElementById("commentslist");
|
|
var pingbacks_header = document.getElementById("pingbacks");
|
|
var pingbacks_list = document.getElementById("pingbackslist");
|
|
|
|
if (show) {
|
|
document.getElementById("hidecomments").firstChild.nodeValue = jlog_l_comments_show;
|
|
show=false;
|
|
if(pingbacks_header) { pingbacks_header.style.display = "none"; }
|
|
if(pingbacks_list) { pingbacks_list.style.display = "none"; }
|
|
document.getElementById("comments").style.display = "none";
|
|
document.getElementById("entryform").style.display = "none";
|
|
if(commentslist) { commentslist.style.display = "none"; }
|
|
}
|
|
else {
|
|
document.getElementById("hidecomments").firstChild.nodeValue = jlog_l_comments_hide;
|
|
show=true;
|
|
if(pingbacks_header) { pingbacks_header.style.display = "block"; }
|
|
if(pingbacks_list) { pingbacks_list.style.display = "block"; }
|
|
document.getElementById("comments").style.display = "block";
|
|
document.getElementById("entryform").style.display = "block";
|
|
if(commentslist) { commentslist.style.display = "block"; }
|
|
}
|
|
}
|
|
|
|
var jlog_bbcode_br;
|
|
|
|
function jlog_bbcode_do_button(titel, aTag, eTag) {
|
|
var button = document.createElement("input");
|
|
button.onclick = function() {
|
|
jlog_bbcode_insert(aTag, eTag);
|
|
return false;
|
|
};
|
|
button.className = "jlog_bbcode";
|
|
button.type = "button";
|
|
button.value = titel;
|
|
jlog_bbcode_br.parentNode.insertBefore(button, jlog_bbcode_br);
|
|
}
|
|
|
|
/* from http://www.kryogenix.org/code/browser/searchhi/ */
|
|
function jlog_highlightWord(node,word) {
|
|
|
|
if (node.hasChildNodes) {
|
|
for (var hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) {
|
|
jlog_highlightWord(node.childNodes[hi_cn],word);
|
|
}
|
|
}
|
|
|
|
if (node.nodeType == 3) {
|
|
var tempNodeVal = node.nodeValue.toLowerCase();
|
|
var tempWordVal = word.toLowerCase();
|
|
if (tempNodeVal.indexOf(tempWordVal) != -1) {
|
|
var pn = node.parentNode;
|
|
if (pn.className != "searchword") {
|
|
var nv = node.nodeValue;
|
|
var ni = tempNodeVal.indexOf(tempWordVal);
|
|
var before = document.createTextNode(nv.substr(0,ni));
|
|
var docWordVal = nv.substr(ni,word.length);
|
|
var after = document.createTextNode(nv.substr(ni+word.length));
|
|
var hiwordtext = document.createTextNode(docWordVal);
|
|
var hiword = document.createElement("span");
|
|
hiword.className = "searchword";
|
|
hiword.appendChild(hiwordtext);
|
|
pn.insertBefore(before,node);
|
|
pn.insertBefore(hiword,node);
|
|
pn.insertBefore(after,node);
|
|
pn.removeChild(node);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function jlog_searchengineSearchHighlight() {
|
|
if (!document.createElement) { return; }
|
|
var ref = document.referrer;
|
|
if (ref.indexOf('?') == -1) { return; }
|
|
var qs = ref.substr(ref.indexOf('?')+1);
|
|
var qsa = qs.split('&');
|
|
for (var i=0;i<qsa.length;i++) {
|
|
var qsip = qsa[i].split('=');
|
|
if (qsip.length == 1) { continue; }
|
|
if (qsip[0] == 'q' || qsip[0] == 'p' ) { // q= for Google, p= for Yahoo
|
|
var words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
|
|
for (var w=0;w<words.length;w++) {
|
|
jlog_highlightWord(document.getElementsByTagName("body")[0],words[w]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function jlog_init() {
|
|
var jlog_comments;
|
|
if(document.getElementById("pingbacks")) { jlog_comments = document.getElementById("pingbacks"); }
|
|
else { jlog_comments = document.getElementById("comments"); }
|
|
if (jlog_comments) {
|
|
if (!document.getElementById || !document.createElement || !document.createTextNode) { return; }
|
|
var p = document.createElement("p");
|
|
p.className = "hidecomments";
|
|
var a = document.createElement("a");
|
|
a.id = "hidecomments";
|
|
a.href = "#";
|
|
a.onclick = function() {jlog_killcomments(); return false; };
|
|
var text = document.createTextNode(jlog_l_comments_hide);
|
|
a.appendChild(text);
|
|
p.appendChild(a);
|
|
if (jlog_comments.insertBefore) {
|
|
jlog_comments.parentNode.insertBefore(p, jlog_comments);
|
|
}
|
|
}
|
|
|
|
jlog_bbcode_br = document.getElementById("bbcode");
|
|
if(jlog_bbcode_br || (typeof(jlog_admin) !== "undefined")) {
|
|
|
|
if (jlog_bbcode_br.insertBefore) {
|
|
jlog_bbcode_do_button(jlog_l_comments_url, '[url]', '[/url]');
|
|
jlog_bbcode_do_button(jlog_l_comments_bold, '[b]', '[/b]');
|
|
jlog_bbcode_do_button(jlog_l_comments_italic, '[i]', '[/i]');
|
|
jlog_bbcode_do_button(jlog_l_comments_quote, '[quote]', '[/quote]');
|
|
if (jlog_comments) { jlog_bbcode_br.parentNode.getElementsByTagName("span")[0].style.display = "none"; }
|
|
}
|
|
|
|
if (typeof(jlog_admin) !== "undefined") {
|
|
document.getElementById("jlogteaserpic").style.display = "block";
|
|
if (jlog_bbcode_br.insertBefore) {
|
|
jlog_bbcode_do_button(jlog_l_headline, '[headline]', '[/headline]');
|
|
jlog_bbcode_do_button(jlog_l_list, '[list][*]', '[/list]');
|
|
}
|
|
}
|
|
}
|
|
|
|
if(typeof(jlog_searchpage) === "undefined") { jlog_searchengineSearchHighlight(); }
|
|
}
|
|
|
|
function addLoadEvent(func) {
|
|
var oldonload = window.onload;
|
|
if (typeof window.onload !== 'function') {
|
|
window.onload = func;
|
|
} else {
|
|
window.onload = function() {
|
|
oldonload();
|
|
func();
|
|
};
|
|
}
|
|
}
|
|
|
|
addLoadEvent(jlog_init);
|
|
addLoadEvent( function() {
|
|
if(document.getElementById("password")) {
|
|
document.getElementById("password").focus();
|
|
}
|
|
});
|
|
|
|
var winpops;
|
|
|
|
/* Open popup to learn BBCode for comments */
|
|
function jlog_learnbb(path) {
|
|
var popurl = path + '/learn_bb.php?v=small';
|
|
winpops=window.open(popurl,'','width=400,height=300,scrollbars=yes');
|
|
}
|
|
|
|
/* Open popup to upload pictures in admincenter */
|
|
function jlog_wopen(popurl) {
|
|
winpops=window.open(popurl,'','width=350,height=350,scrollbars=yes');
|
|
}
|
|
|
|
function jlog_generate_url(topic, destination) {
|
|
|
|
if ( typeof( destination ) == 'string' ) { destination = document.getElementById( destination ); }
|
|
if ( destination.value !== '' ) { return false; }
|
|
|
|
var url = topic.toLowerCase();
|
|
while(url.search(/ä/) != -1) { url = url.replace(/ä/, "ae"); }
|
|
while(url.search(/ö/) != -1) { url = url.replace(/ö/, "oe"); }
|
|
while(url.search(/ü/) != -1) { url = url.replace(/ü/, "ue"); }
|
|
while(url.search(/ß/) != -1) { url = url.replace(/ß/, "ss"); }
|
|
while(url.search(/ /) != -1) { url = url.replace(/ /, "-"); }
|
|
while(url.search(/[^a-z0-9.,_\/-]/) != -1) { url = url.replace(/[^a-z0-9.,_/-]/, ""); }
|
|
|
|
destination.value = url;
|
|
}
|
|
|
|
/* URL fill out helper */
|
|
addLoadEvent(
|
|
function() {
|
|
var topic = document.getElementById('topic')
|
|
if ( topic ) {
|
|
topic.onchange = function() { jlog_generate_url( this.value, 'url' ); }
|
|
}
|
|
|
|
var namefield = document.getElementById('name');
|
|
if( !document.getElementById('url') || !namefield ) { return; }
|
|
else namefield.onchange = function() { jlog_generate_url( this.value, 'url' ); }
|
|
}
|
|
)
|