additional_plugins/serendipity_event_commentspice/frontend_commentspice.js
2012-07-14 01:16:14 +02:00

174 lines
6.1 KiB
JavaScript

var inputCommentEmail = document.getElementById("serendipity_commentform_email");
var inputCommentUrl = document.getElementById("serendipity_commentform_url");
var inputCommentText = document.getElementById("serendipity_commentform_comment");
var submitPreview = document.getElementById("serendipity_preview");
var form = document.getElementById("serendipity_comment");
var divSelectRss = document.getElementById("serendipity_commentspice_rss");
var lastUrlChecked = null;
var lastEmailChecked = null;
function fetch_rss() {
var url = inputCommentUrl.value;
if(!url.match(/^http/)) {
var divSelectRss = document.getElementById("serendipity_commentspice_rss");
hideSpiceElement(divSelectRss);
//divSelectRss.style.display='none';
lastUrlChecked = null;
return;
}
var email = inputCommentEmail.value;
if (url == lastUrlChecked && email == lastEmailChecked) return;
var divSelectRss = document.getElementById("serendipity_commentspice_rss");
if (window.XMLHttpRequest) { // Mozilla, Safari, Opera, IE7
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE6, IE5
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.onreadystatechange = function() {
fetch_rss_ready(httpRequest);
}
// Method, url, Async = true / Sync = false
httpRequest.open('POST', comentspice_fetchrss, true); // comentspice_fetchrss was set earlier.
httpRequest.setRequestHeader('content-Type', 'application/x-www-form-urlencoded; charset='+s9yCharset);
httpRequest.send('coment_url='+url+'&coment_email='+email + '&entryid=' + comentspice_entryid); // Start request
}
function fetch_rss_ready(httpRequest){
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var response = httpRequest.responseText;
var jsonResponse = eval('(' + response + ')');
var divSelectRss = document.getElementById("serendipity_commentspice_rss");
var selectRss = document.getElementById("serendipity_commentform_rss");
if (selectRss==null) return;
var divDescription = document.getElementById("serendipity_commentspice_rss_desc");
var articles = jsonResponse.articles;
if (!comentspice_fetchrss_emailchanges && lastUrlChecked == jsonResponse.url) {
// nothing to do
lastEmailChecked = jsonResponse.email;
return;
}
selectRss.options.length = 0;
if (articles==null || articles.length==0) {
hideSpiceElement(divSelectRss);
if (divDescription!=null) hideSpiceElement(divDescription);
}
else {
for (idx in articles) {
var article = articles[idx];
var option = document.createElement('option');
option.text = article.title;
option.value = article.url;
try {
selectRss.add(option, null); // standards compliant; doesn't work in IE
}
catch(ex) {
selectRss.add(option); // IE only
}
}
selectRss.selectedIndex = 0;
showSpiceElement(divSelectRss);
if (divDescription!=null) showSpiceElement(divDescription);
reloadSelection();
}
lastUrlChecked = jsonResponse.url;
lastEmailChecked = jsonResponse.email;
}
}
function showSpiceElement(element) {
var elementClass = element.getAttribute("class");
elementClass = elementClass.replace( /(?:^|\s)spicehidden(?!\S)/ , '' ).replace( /(?:^|\s)spicerevealed(?!\S)/ , '' );
element.setAttribute("class", elementClass + ' spicerevealed');
}
function hideSpiceElement(element) {
var elementClass = element.getAttribute("class");
elementClass = elementClass.replace( /(?:^|\s)spicehidden(?!\S)/ , '' ).replace( /(?:^|\s)spicerevealed(?!\S)/ , '' );
element.setAttribute("class", elementClass + ' spicehidden');
}
function createCookie(name,value) {
var date = new Date();
date.setTime(date.getTime()+(60*60*1000)); // save 1h
var expires = "; expires="+date.toGMTString();
document.cookie = name+"="+value+expires+"; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
var value = '';
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) {
value = c.substring(nameEQ.length,c.length); // Let last one return.
}
}
return value;
}
function eraseCookie(name) {
var date = new Date();
date.setTime(date.getTime()-1);
var expires = "; expires="+date.toGMTString();
document.cookie = name+"="+value+expires+"; path=/";
}
function rememberSelection() {
var selectRss = document.getElementById("serendipity_commentform_rss");
if (selectRss!=null) {
createCookie("commentspice[promo]",selectRss.selectedIndex);
}
var inputBoo = document.getElementById("serendipity_commentform_boo");
if (inputBoo!=null) {
createCookie("commentspice[boo]",inputBoo.value);
}
var inputTwitter = document.getElementById("serendipity_commentform_twitter");
if (inputTwitter!=null) {
createCookie("commentspice[twitter]",inputTwitter.value);
}
return true;
}
function reloadSelection() {
// reload former inputs on preview / message mode only
if ('#feedback' != window.location.hash) return;
var selectRss = document.getElementById("serendipity_commentform_rss");
if (selectRss!=null) {
cookieval = getCookie("commentspice[promo]");
if (cookieval!='') {
selectRss.selectedIndex = cookieval;
}
}
var inputBoo = document.getElementById("serendipity_commentform_boo");
if (inputBoo!=null) {
cookieval = getCookie("commentspice[boo]");
if (cookieval!='') {
inputBoo.value = cookieval;
}
}
var inputTwitter = document.getElementById("serendipity_commentform_twitter");
if (inputTwitter!=null) {
cookieval = getCookie("commentspice[twitter]");
if (cookieval!='') {
inputTwitter.value = cookieval;
}
}
}
function forgetSelection() {
eraseCookie("commentspice[promo]");
eraseCookie("commentspice[boo]");
eraseCookie("commentspice[twitter]");
return true;
}
inputCommentEmail.onblur = fetch_rss;
inputCommentUrl.onblur = fetch_rss;
inputCommentText.onfocus = fetch_rss;
submitPreview.onclick = rememberSelection;
form.onsubmit= rememberSelection;
fetch_rss();