/** * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) * Copyright (C) 2002-2007 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 page contains xmlHTTPRequest functions for: * - AutoSaveDraft * * * Usage: * - Add in the page before the form open tag: * * - Add in the page behind the form close tag: * var xmlhttprequest = new Array(); * xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler * xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler * var seconds = now(); // Last AutoDraft time * var checks = 0; // Number of checks since last AutoDraft * var addform = document.getElementById('addform'); // The form id * var goal = document.getElementById('lastsaved'); // The html div id where 'Last saved: date time' must come * var goalurl = 'action.php'; // The PHP file where the content must be posted to (action.php) * var lastsavedtext = 'Last saved'; // The language variable for 'Last saved' * var formtype = 'add'; // Add or edit form * - Add to the form tag: * id="addform" * - Add to the textarea's and text fields: * onkeyup="doMonitor();" * - Add tot the selectboxes and radio buttons * onchange="doMonitor();" * - Add to the form: * * - Optionally a autosave now button can be add: * * * * $Id: xmlhttprequest.js 1116 2007-02-03 08:24:29Z kimitake $ */ /** * Creates the xmlHTTPRequest handler */ function createHTTPHandler() { var httphandler = false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, we can cope with old IE versions. // and security blocked creation of the objects. try { httphandler = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { httphandler = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { httphandler = false; } } @end @*/ if (!httphandler && typeof XMLHttpRequest != 'undefined') { httphandler = new XMLHttpRequest(); } return httphandler; } /** * Auto saves as draft */ function autoSaveDraft() { checks = 0; seconds = now(); var title = encodeURI(addform.title.value); var body = encodeURI(addform.body.value); var catid = addform.catid.options[addform.catid.selectedIndex].value; var more = encodeURI(addform.more.value); var closed = 0; if (addform.closed[0].checked) { closed = addform.closed[0].value; } else if (addform.closed[1].checked) { closed = addform.closed[1].value; } var ticket = addform.ticket.value; var querystring = 'action=autodraft'; querystring += '&title=' + title; querystring += '&body=' + body; querystring += '&catid=' + catid; querystring += '&more=' + more; querystring += '&closed=' + closed; querystring += '&ticket=' + ticket; if (formtype == 'edit') { querystring += '&itemid=' + addform.itemid.value; querystring += '&type=edit'; } else { querystring += '&blogid=' + addform.blogid.value; querystring += '&type=add'; } if (addform.draftid.value > 0) { querystring += '&draftid=' + addform.draftid.value; } xmlhttprequest[0].open('POST', goalurl, true); xmlhttprequest[0].onreadystatechange = checkMonitor; xmlhttprequest[0].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttprequest[0].send(querystring); var querystring = 'action=updateticket&ticket=' + ticket; xmlhttprequest[1].open('POST', goalurl, true); xmlhttprequest[1].onreadystatechange = updateTicket; xmlhttprequest[1].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttprequest[1].send(querystring); } /** * Monitors the edits */ function doMonitor() { if (checks * (now() - seconds) > 120 * 1000 * 50) { autoSaveDraft(); } else { checks++; } } /** * Checks the process of the saving */ function checkMonitor() { if (xmlhttprequest[0].readyState == 4) { if (xmlhttprequest[0].responseText) { if (xmlhttprequest[0].responseText.substr(0, 4) == 'err:') { goal.innerHTML = xmlhttprequest[0].responseText.substr(4) + ' (' + formattedDate() + ')'; } else { addform.draftid.value = xmlhttprequest[0].responseText; goal.innerHTML = lastsavedtext + ' ' + formattedDate(); } } } } /** * Checks the process of the ticket updating */ function updateTicket() { if (xmlhttprequest[1].readyState == 4) { if (xmlhttprequest[1].responseText) { if (xmlhttprequest[1].responseText.substr(0, 4) == 'err:') { goal.innerHTML = xmlhttprequest[1].responseText.substr(4) + ' (' + formattedDate() + ')'; } else { addform.ticket.value = xmlhttprequest[1].responseText; } } } } /** * Gets now in milliseconds */ function now() { var now = new Date(); return now.getTime(); } /** * Gets now in the local dateformat */ function formattedDate() { var now = new Date(); return now.toLocaleDateString() + ' ' + now.toLocaleTimeString(); }