187 lines
6.2 KiB
Text
187 lines
6.2 KiB
Text
|
/* Based on the liveComment plugin, which has this copyright note: */
|
||
|
|
||
|
/*
|
||
|
// +----------------------------------------------------------------------+
|
||
|
// | Copyright (c) 2004 Bitflux GmbH |
|
||
|
// +----------------------------------------------------------------------+
|
||
|
// | Licensed under the Apache License, Version 2.0 (the "License"); |
|
||
|
// | you may not use this file except in compliance with the License. |
|
||
|
// | You may obtain a copy of the License at |
|
||
|
// | http://www.apache.org/licenses/LICENSE-2.0 |
|
||
|
// | Unless required by applicable law or agreed to in writing, software |
|
||
|
// | distributed under the License is distributed on an "AS IS" BASIS, |
|
||
|
// | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
|
||
|
// | implied. See the License for the specific language governing |
|
||
|
// | permissions and limitations under the License. |
|
||
|
// +----------------------------------------------------------------------+
|
||
|
// | Author: Bitflux GmbH <devel@bitflux.ch> |
|
||
|
// +----------------------------------------------------------------------+
|
||
|
|
||
|
*/
|
||
|
var liveCommentReq = false;
|
||
|
var liveCommentLast = "";
|
||
|
var liveCommentIsIE = false;
|
||
|
var liveCommentWarn = false;
|
||
|
var lc_t = false;
|
||
|
|
||
|
function lc_addLoadEvent(func) {
|
||
|
var oldonload = window.onload;
|
||
|
if (typeof window.onload != 'function') {
|
||
|
window.onload = func;
|
||
|
} else {
|
||
|
window.onload = function() {
|
||
|
oldonload();
|
||
|
func();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function liveAttach(tel, myevent, liveCommentKeyPress) {
|
||
|
if (navigator.userAgent.indexOf("Safari") > 0) {
|
||
|
tel.addEventListener(myevent, liveCommentKeyPress,false);
|
||
|
} else if (navigator.product == "Gecko") {
|
||
|
tel.addEventListener(myevent, liveCommentKeyPress,false);
|
||
|
} else {
|
||
|
tel.attachEvent('on' + myevent, liveCommentKeyPress);
|
||
|
liveCommentIsIE = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function liveCommentInit() {
|
||
|
if (!document.getElementById('serendipity_replyTo')) {
|
||
|
// alert('Unsupported Template for LiveComment Preview, missing #serendipity_replyTo');
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// on !IE we only have to initialize it once
|
||
|
if (window.XMLHttpRequest) {
|
||
|
liveCommentReq = new XMLHttpRequest();
|
||
|
}
|
||
|
|
||
|
myevent = 'keyup';
|
||
|
tel = document.getElementById('serendipity_replyTo');
|
||
|
pel = document.getElementById('serendipity_preview');
|
||
|
liveAttach(tel, myevent, liveCommentKeyPress);
|
||
|
liveAttach(pel, 'click', liveCommentPreview);
|
||
|
|
||
|
tel.style.color = 'green';
|
||
|
liveCommentStart();
|
||
|
}
|
||
|
|
||
|
function liveCommentPreview(event) {
|
||
|
if (!liveCommentIsIE) { event.preventDefault(); }
|
||
|
liveCommentDoSearch();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function liveGetSource() {
|
||
|
rid = document.getElementById('serendipity_replyTo').value;
|
||
|
//alert('RID: ' + rid);
|
||
|
|
||
|
if (rid == 0 || liveCommentWarn) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
sourceel = document.getElementById('serendipityCommentForm');
|
||
|
if (!sourceel) {
|
||
|
sourceel = document.getElementById('serendipity_comment_CommentForm');
|
||
|
}
|
||
|
|
||
|
if (!sourceel && !liveCommentWarn) {
|
||
|
alert('This template does not have #serendipityCommentForm. Live Comment Previewing disabled.');
|
||
|
liveCommentWarn = true;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return sourceel;
|
||
|
}
|
||
|
|
||
|
function liveCommentKeyPress(event) {
|
||
|
sourceel = liveGetSource();
|
||
|
if (!sourceel) return false;
|
||
|
|
||
|
fields = sourceel.cloneNode(true);
|
||
|
sourceel.id = 'serendipityCommentFormOld';
|
||
|
|
||
|
store_text = document.getElementById('serendipity_commentform_comment').value;
|
||
|
store_replyTo = document.getElementById('serendipity_replyTo').value;
|
||
|
|
||
|
liveAttach(fields, 'click', liveCommentPreview);
|
||
|
iNode = document.getElementById('serendipity_replyform_' + rid);
|
||
|
iNode.parentNode.appendChild(fields);
|
||
|
|
||
|
pNode = sourceel.parentNode;
|
||
|
pNode.removeChild(sourceel);
|
||
|
|
||
|
document.getElementById('serendipity_commentform_comment').value = store_text;
|
||
|
document.getElementById('serendipity_replyTo').value = store_replyTo;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function liveCommentStart() {
|
||
|
if (lc_t) {
|
||
|
window.clearTimeout(lc_t);
|
||
|
}
|
||
|
lc_t = window.setTimeout("liveCommentDoSearch()",200);
|
||
|
}
|
||
|
|
||
|
function liveCommentDoSearch() {
|
||
|
if (liveCommentLast == document.getElementById('serendipity_commentform_comment').value) {
|
||
|
liveCommentStart();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
if (liveCommentReq && liveCommentReq.readyState < 4) {
|
||
|
liveCommentReq.abort();
|
||
|
}
|
||
|
|
||
|
if (window.XMLHttpRequest) {
|
||
|
// branch for IE/Windows ActiveX version
|
||
|
} else if (window.ActiveXObject) {
|
||
|
liveCommentReq = new ActiveXObject("Microsoft.XMLHTTP");
|
||
|
}
|
||
|
|
||
|
liveCommentReq.onreadystatechange= liveCommentProcessReqChange;
|
||
|
liveCommentReq.open("POST", lcbase);
|
||
|
liveCommentReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=' + lcchar);
|
||
|
liveCommentReq.send('data=' + document.getElementById('serendipity_commentform_comment').value);
|
||
|
liveCommentLast = document.getElementById('serendipity_commentform_comment').value;
|
||
|
}
|
||
|
|
||
|
function liveCommentProcessReqChange() {
|
||
|
|
||
|
if (liveCommentReq.readyState == 4) {
|
||
|
rid = document.getElementById('serendipity_replyTo').value;
|
||
|
|
||
|
if (rid < 1) {
|
||
|
rid = 0;
|
||
|
}
|
||
|
|
||
|
var res = document.getElementById("serendipity_replyform_" + rid);
|
||
|
|
||
|
if (!res) {
|
||
|
sourceel = document.getElementById('serendipityCommentForm');
|
||
|
if (!sourceel) {
|
||
|
sourceel = document.getElementById('serendipity_comment_CommentForm');
|
||
|
}
|
||
|
if (!sourceel) return false;
|
||
|
|
||
|
oldFeed = document.getElementById('serendipityPreviewFeedback');
|
||
|
if (oldFeed) {
|
||
|
poldFeed = oldFeed.parentNode;
|
||
|
poldFeed.removeChild(oldFeed);
|
||
|
}
|
||
|
|
||
|
res = sourceel.cloneNode(true);
|
||
|
res.id = 'serendipityPreviewFeedback';
|
||
|
res.innerHTML = '';
|
||
|
sourceel.parentNode.insertBefore(res, sourceel);
|
||
|
}
|
||
|
|
||
|
res.innerHTML = liveCommentReq.responseText;
|
||
|
liveCommentStart();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lc_addLoadEvent(liveCommentInit);
|