Files
Emi 07ec659385 Importing project into Git
This project lived only on the server without version control. This is now the starting point for the repository.
2023-05-23 20:03:24 +02:00

191 lines
4.4 KiB
JavaScript

/*
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
File: qa-content/qa-page.js
Description: THIS FILE HAS BEEN DEPRECATED IN FAVOUR OF qa-global.js
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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
More about this license: http://www.question2answer.org/license.php
*/
function qa_reveal(elem, type, callback)
{
if (elem)
$(elem).slideDown(400, callback);
}
function qa_conceal(elem, type, callback)
{
if (elem)
$(elem).slideUp(400);
}
function qa_set_inner_html(elem, type, html)
{
if (elem)
elem.innerHTML = html;
}
function qa_set_outer_html(elem, type, html)
{
if (elem) {
var e = document.createElement('div');
e.innerHTML = html;
elem.parentNode.replaceChild(e.firstChild, elem);
}
}
function qa_show_waiting_after(elem, inside)
{
if (elem && !elem.qa_waiting_shown) {
var w = document.getElementById('qa-waiting-template');
if (w) {
var c = w.cloneNode(true);
c.id = null;
if (inside)
elem.insertBefore(c, null);
else
elem.parentNode.insertBefore(c, elem.nextSibling);
elem.qa_waiting_shown = c;
}
}
}
function qa_hide_waiting(elem)
{
var c = elem.qa_waiting_shown;
if (c) {
c.parentNode.removeChild(c);
elem.qa_waiting_shown = null;
}
}
function qa_vote_click(elem)
{
var ens = elem.name.split('_');
var postid = ens[1];
var vote = parseInt(ens[2]);
var code = elem.form.elements.code.value;
var anchor = ens[3];
qa_ajax_post('vote', {postid: postid, vote: vote, code: code},
function(lines) {
if (lines[0] == '1') {
qa_set_inner_html(document.getElementById('voting_' + postid), 'voting', lines.slice(1).join("\n"));
} else if (lines[0] == '0') {
var mess = document.getElementById('errorbox');
if (!mess) {
mess = document.createElement('div');
mess.id = 'errorbox';
mess.className = 'qa-error';
mess.innerHTML = lines[1];
mess.style.display = 'none';
}
var postelem = document.getElementById(anchor);
var e = postelem.parentNode.insertBefore(mess, postelem);
qa_reveal(e);
} else
qa_ajax_error();
}
);
return false;
}
function qa_notice_click(elem)
{
var ens = elem.name.split('_');
var code = elem.form.elements.code.value;
qa_ajax_post('notice', {noticeid: ens[1], code: code},
function(lines) {
if (lines[0] == '1')
qa_conceal(document.getElementById('notice_' + ens[1]), 'notice');
else if (lines[0] == '0')
alert(lines[1]);
else
qa_ajax_error();
}
);
return false;
}
function qa_favorite_click(elem)
{
var ens = elem.name.split('_');
var code = elem.form.elements.code.value;
qa_ajax_post('favorite', {entitytype: ens[1], entityid: ens[2], favorite: parseInt(ens[3]), code: code},
function(lines) {
if (lines[0] == '1')
qa_set_inner_html(document.getElementById('favoriting'), 'favoriting', lines.slice(1).join("\n"));
else if (lines[0] == '0') {
alert(lines[1]);
qa_hide_waiting(elem);
} else
qa_ajax_error();
}
);
qa_show_waiting_after(elem, false);
return false;
}
function qa_ajax_post(operation, params, callback)
{
$.extend(params, {qa: 'ajax', qa_operation: operation, qa_root: qa_root, qa_request: qa_request});
$.post(qa_root, params, function(response) {
var header = 'QA_AJAX_RESPONSE';
var headerpos = response.indexOf(header);
if (headerpos >= 0)
callback(response.substr(headerpos + header.length).replace(/^\s+/, '').split("\n"));
else
callback([]);
}, 'text').fail(function(jqXHR) {
if (jqXHR.readyState > 0)
callback([])
});
}
function qa_ajax_error()
{
alert('Unexpected response from server - please try again or switch off Javascript.');
}
function qa_display_rule_show(target, show, first)
{
var e = document.getElementById(target);
if (e) {
if (first || e.nodeName == 'SPAN')
e.style.display = (show ? '' : 'none');
else if (show)
$(e).fadeIn();
else
$(e).fadeOut();
}
}