xref: /plugin/recommend/script.js (revision 85a03255f70b8ca8d24721d8e993ac07fff81252)
1/* Lib */
2
3var recommend_ajax_call = 'plugin_recommend';
4
5function sack_form(form, fnc) {
6    var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
7    ajax.setVar('call', recommend_ajax_call);
8    function serializeByTag(tag) {
9        var inps = form.getElementsByTagName(tag);
10        for (var inp in inps) {
11            if (inps[inp].name) {
12                ajax.setVar(inps[inp].name, inps[inp].value);
13            }
14        }
15    }
16    serializeByTag('input');
17    serializeByTag('textarea');
18    ajax.onCompletion = fnc;
19    ajax.runAJAX();
20    return false;
21}
22
23function bind(fnc, val) {
24    return function () {
25        return fnc(val);
26    };
27}
28
29function change_form_handler(forms, handler) {
30    if (!forms) return;
31    for (var formid in forms) {
32        var form = forms[formid];
33        form.onsubmit = bind(handler, form);
34    }
35}
36
37/* Recommend */
38
39function recommend_box(content) {
40    var div = $('recommend_box');
41    if (!div) {
42        div = document.createElement('div');
43        div.id = 'recommend_box';
44    } else if (content === '') {
45        div.parentNode.removeChild(div);
46        return;
47    }
48    div.innerHTML = content;
49    document.body.appendChild(div);
50    return div;
51}
52
53function recommend_handle() {
54    if (this.response === "AJAX call '" + recommend_ajax_call + "' unknown!\n") {
55        /* No user logged in. */
56        return;
57    }
58    if (this.responseStatus[0] === 204) {
59        var box = recommend_box('<form id="recommend_plugin" accept-charset="utf-8" method="post" action="?do=recommend"><div class="no"><fieldset><legend>Finished</legend<p>Thanks for recommending our site.</p><input type="submit" class="button" value="Cancel" name="do[cancel]"/></fieldset></div></form>');
60    } else {
61
62        var box = recommend_box(this.response);
63        box.getElementsByTagName('label')[0].focus();
64        change_form_handler(box.getElementsByTagName('form'),
65                            function (form) {return sack_form(form, recommend_handle); });
66    }
67    var inputs = box.getElementsByTagName('input');
68    inputs[inputs.length - 1].onclick = function() {recommend_box(''); return false;};
69}
70
71addInitEvent(function () {
72                change_form_handler(getElementsByClass('btn_recommend', document, 'form'),
73                                    function (form) {return sack_form(form, recommend_handle); });
74             });
75