]> scripts.mit.edu Git - autoinstalls/wordpress.git/blob - wp-includes/js/autosave.js
Wordpress 2.3.2
[autoinstalls/wordpress.git] / wp-includes / js / autosave.js
1 var autosaveLast = '';
2 var autosavePeriodical;
3
4 function autosave_start_timer() {
5         var form = $('post');
6         autosaveLast = form.post_title.value+form.content.value;
7         // Keep autosave_interval in sync with edit_post().
8         autosavePeriodical = new PeriodicalExecuter(autosave, autosaveL10n.autosaveInterval);
9         //Disable autosave after the form has been submitted
10         if(form.addEventListener) {
11                 form.addEventListener("submit", function () { autosavePeriodical.currentlyExecuting = true; }, false);
12         }
13         if(form.attachEvent) {
14                 form.save ? form.save.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
15                 form.submit ? form.submit.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
16                 form.publish ? form.publish.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
17                 form.deletepost ? form.deletepost.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
18         }
19 }
20 addLoadEvent(autosave_start_timer)
21
22 function autosave_cur_time() {
23         var now = new Date();
24         return "" + ((now.getHours() >12) ? now.getHours() -12 : now.getHours()) + 
25         ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes() +
26         ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds();
27 }
28
29 function autosave_update_nonce() {
30         var response = nonceAjax.response;
31         document.getElementsByName('_wpnonce')[0].value = response;
32 }
33
34 function autosave_update_post_ID() {
35         var response = autosaveAjax.response;
36         var res = parseInt(response);
37         var message;
38
39         if(isNaN(res)) {
40                 message = autosaveL10n.errorText.replace(/%response%/g, response);
41         } else {
42                 message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time());
43                 $('post_ID').name = "post_ID";
44                 $('post_ID').value = res;
45                 // We need new nonces
46                 nonceAjax = new sack();
47                 nonceAjax.element = null;
48                 nonceAjax.setVar("action", "autosave-generate-nonces");
49                 nonceAjax.setVar("post_ID", res);
50                 nonceAjax.setVar("cookie", document.cookie);
51                 nonceAjax.setVar("post_type", $('post_type').value);
52                 nonceAjax.requestFile = autosaveL10n.requestFile;
53                 nonceAjax.onCompletion = autosave_update_nonce;
54                 nonceAjax.method = "POST";
55                 nonceAjax.runAJAX();
56                 $('hiddenaction').value = 'editpost';
57         }
58         $('autosave').innerHTML = message;
59         autosave_enable_buttons();
60 }
61
62 function autosave_loading() {
63         $('autosave').innerHTML = autosaveL10n.savingText;
64 }
65
66 function autosave_saved() {
67         var response = autosaveAjax.response;
68         var res = parseInt(response);
69         var message;
70
71         if(isNaN(res)) {
72                 message = autosaveL10n.errorText.replace(/%response%/g, response);
73         } else {
74                 message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time());
75         }
76         $('autosave').innerHTML = message;
77         autosave_enable_buttons();
78 }
79
80 function autosave_disable_buttons() {
81         var form = $('post');
82         form.save ? form.save.disabled = 'disabled' : null;
83         form.submit ? form.submit.disabled = 'disabled' : null;
84         form.publish ? form.publish.disabled = 'disabled' : null;
85         form.deletepost ? form.deletepost.disabled = 'disabled' : null;
86         setTimeout('autosave_enable_buttons();', 1000); // Re-enable 1 sec later.  Just gives autosave a head start to avoid collisions.
87 }
88
89 function autosave_enable_buttons() {
90         var form = $('post');
91         form.save ? form.save.disabled = '' : null;
92         form.submit ? form.submit.disabled = '' : null;
93         form.publish ? form.publish.disabled = '' : null;
94         form.deletepost ? form.deletepost.disabled = '' : null;
95 }
96
97 function autosave() {
98         var form = $('post');
99         var rich = ((typeof tinyMCE != "undefined") && tinyMCE.getInstanceById('content')) ? true : false;
100
101         autosaveAjax = new sack();
102
103         /* Gotta do this up here so we can check the length when tinyMCE is in use */
104         if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 || rich == false ) {
105                 autosaveAjax.setVar("content", form.content.value);
106         } else {
107                 // Don't run while the TinyMCE spellcheck is on.
108                 if(tinyMCE.selectedInstance.spellcheckerOn) return;
109                 tinyMCE.wpTriggerSave();
110                 autosaveAjax.setVar("content", form.content.value);
111         }
112
113         if(form.post_title.value.length==0 || form.content.value.length==0 || form.post_title.value+form.content.value == autosaveLast)
114                 return;
115
116         autosave_disable_buttons();
117
118         autosaveLast = form.post_title.value+form.content.value;
119
120         cats = document.getElementsByName("post_category[]");
121         goodcats = ([]);
122         for(i=0;i<cats.length;i++) {
123                 if(cats[i].checked)
124                         goodcats.push(cats[i].value);
125         }
126         catslist = goodcats.join(",");
127
128         autosaveAjax.setVar("action", "autosave");
129         autosaveAjax.setVar("cookie", document.cookie);
130         autosaveAjax.setVar("catslist", catslist);
131         autosaveAjax.setVar("post_ID", $("post_ID").value);
132         autosaveAjax.setVar("post_title", form.post_title.value);
133         autosaveAjax.setVar("post_type", form.post_type.value);
134         if ( form.comment_status.checked )
135                 autosaveAjax.setVar("comment_status", 'open');
136         if ( form.ping_status.checked )
137                 autosaveAjax.setVar("ping_status", 'open');
138         if(form.excerpt)
139                 autosaveAjax.setVar("excerpt", form.excerpt.value);
140
141         if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 || rich == false ) {
142                 autosaveAjax.setVar("content", form.content.value);
143         } else {
144                 tinyMCE.wpTriggerSave();
145                 autosaveAjax.setVar("content", form.content.value);
146         }
147
148         autosaveAjax.requestFile = autosaveL10n.requestFile;
149         autosaveAjax.method = "POST";
150         autosaveAjax.element = null;
151         autosaveAjax.onLoading = autosave_loading;
152         autosaveAjax.onInteractive = autosave_loading;
153         if(parseInt($("post_ID").value) < 1)
154                 autosaveAjax.onCompletion = autosave_update_post_ID;
155         else
156                 autosaveAjax.onCompletion = autosave_saved;
157         autosaveAjax.runAJAX();
158 }