OSDN Git Service

git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/trunk@906 1ca29b...
[nucleus-jp/nucleus-jp-ancient.git] / utf8 / nucleus / javascript / xmlhttprequest.js
1 /**
2   * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
3   * Copyright (C) 2002-2009 The Nucleus Group
4   *
5   * This program is free software; you can redistribute it and/or
6   * modify it under the terms of the GNU General Public License
7   * as published by the Free Software Foundation; either version 2
8   * of the License, or (at your option) any later version.
9   * (see nucleus/documentation/index.html#license for more info)
10   *
11   *
12   * This page contains xmlHTTPRequest functions for:
13   * - AutoSaveDraft
14   *
15   *
16   * Usage:
17   * - Add in the page before the form open tag:
18   *     <script type="text/javascript" src="javascript/xmlhttprequest.js"></script>
19   * - Add in the page behind the form close tag:
20   *     var xmlhttprequest = new Array();
21   *     xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler
22   *     xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler
23   *     var seconds = now(); // Last AutoDraft time
24   *     var checks = 0; // Number of checks since last AutoDraft
25   *     var addform = document.getElementById('addform'); // The form id
26   *     var goal = document.getElementById('lastsaved'); // The html div id where 'Last saved: date time' must come
27   *     var goalurl = 'action.php'; // The PHP file where the content must be posted to (action.php)
28   *     var lastsavedtext = 'Last saved'; // The language variable for 'Last saved'
29   *     var formtype = 'add'; // Add or edit form
30   * - Add to the form tag:
31   *     id="addform"
32   * - Add to the textarea's and text fields:
33   *     onkeyup="doMonitor();"
34   * - Add tot the selectboxes and radio buttons
35   *     onchange="doMonitor();"
36   * - Add to the form:
37   *     <input type="hidden" name="draftid" value="0" />
38   * - Optionally a autosave now button can be add:
39   *     <input type="button" name="autosavenow" value="AutoSave now" onclick="autoSaveDraft();" />
40   *
41   *
42   * $Id$
43   * $NucleusJP$
44   */
45
46 /**
47  * Creates the xmlHTTPRequest handler
48  */
49 function createHTTPHandler() {
50         var httphandler = false;
51         /*@cc_on @*/
52         /*@if (@_jscript_version >= 5)
53                 // JScript gives us Conditional compilation, we can cope with old IE versions.
54                 // and security blocked creation of the objects.
55                 try {
56                         httphandler = new ActiveXObject("Msxml2.XMLHTTP");
57                 }
58                 catch (e) {
59                         try {
60                                 httphandler = new ActiveXObject("Microsoft.XMLHTTP");
61                         }
62                         catch (E) {
63                                 httphandler = false;
64                         }
65                 }
66         @end @*/
67         if (!httphandler && typeof XMLHttpRequest != 'undefined') {
68                 httphandler = new XMLHttpRequest();
69         }
70         return httphandler;
71 }
72
73 /**
74  * Auto saves as draft
75  */
76 function autoSaveDraft() {
77         checks = 0;
78         seconds = now();
79
80         var title = encodeURI(addform.title.value);
81         var body = encodeURI(addform.body.value);
82         var catid = addform.catid.options[addform.catid.selectedIndex].value;
83         var more = encodeURI(addform.more.value);
84         var closed = 0;
85         if (addform.closed[0].checked) {
86                 closed = addform.closed[0].value;
87         }
88         else if (addform.closed[1].checked) {
89                 closed = addform.closed[1].value;
90         }
91         var ticket = addform.ticket.value;
92
93         var querystring = 'action=autodraft';
94         querystring += '&title=' + title;
95         querystring += '&body=' + body;
96         querystring += '&catid=' + catid;
97         querystring += '&more=' + more;
98         querystring += '&closed=' + closed;
99         querystring += '&ticket=' + ticket;
100         if (formtype == 'edit') {
101                 querystring += '&itemid=' + addform.itemid.value;
102                 querystring += '&type=edit';
103         }
104         else {
105                 querystring += '&blogid=' + addform.blogid.value;
106                 querystring += '&type=add';
107         }
108         if (addform.draftid.value > 0) {
109                 querystring += '&draftid=' + addform.draftid.value;
110         }
111
112         xmlhttprequest[0].open('POST', goalurl, true);
113         xmlhttprequest[0].onreadystatechange = checkMonitor;
114         xmlhttprequest[0].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
115         xmlhttprequest[0].send(querystring);
116
117         var querystring = 'action=updateticket&ticket=' + ticket;
118
119         xmlhttprequest[1].open('POST', goalurl, true);
120         xmlhttprequest[1].onreadystatechange = updateTicket;
121         xmlhttprequest[1].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
122         xmlhttprequest[1].send(querystring);
123 }
124
125 /**
126  * Monitors the edits
127  */
128 function doMonitor() {
129         if (checks * (now() - seconds) > 120 * 1000 * 50) {
130                 autoSaveDraft();
131         }
132         else {
133                 checks++;
134         }
135 }
136
137 /**
138  * Checks the process of the saving
139  */
140 function checkMonitor() {
141         if (xmlhttprequest[0].readyState == 4) {
142                 if (xmlhttprequest[0].responseText) {
143                         if (xmlhttprequest[0].responseText.substr(0, 4) == 'err:') {
144                                 goal.innerHTML = xmlhttprequest[0].responseText.substr(4) + ' (' + formattedDate() + ')';
145                         }
146                         else {
147                                 addform.draftid.value = xmlhttprequest[0].responseText;
148                                 goal.innerHTML = lastsavedtext + ' ' + formattedDate();
149                         }
150                 }
151         }
152 }
153
154 /**
155  * Checks the process of the ticket updating
156  */
157 function updateTicket() {
158         if (xmlhttprequest[1].readyState == 4) {
159                 if (xmlhttprequest[1].responseText) {
160                         if (xmlhttprequest[1].responseText.substr(0, 4) == 'err:') {
161                                 goal.innerHTML = xmlhttprequest[1].responseText.substr(4) + ' (' + formattedDate() + ')';
162                         }
163                         else {
164                                 addform.ticket.value = xmlhttprequest[1].responseText;
165                         }
166                 }
167         }
168 }
169
170 /**
171  * Gets now in milliseconds
172  */
173 function now() {
174         var now = new Date();
175         return now.getTime();
176 }
177
178 /**
179  * Gets now in the local dateformat
180  */
181 function formattedDate() {
182         var now = new Date();
183         return now.toLocaleDateString() + ' ' + now.toLocaleTimeString();
184 }