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