View | Details | Raw Unified | Return to bug 14242
Collapse All | Expand All

(-)a/koha-tmpl/opac-tmpl/bootstrap/js/autofill.js (-79 / +78 lines)
Lines 27-34 Link Here
27
27
28
        /* decorate element as autofiller */
28
        /* decorate element as autofiller */
29
        var $inputgroup = $('<div class="input-prepend">');
29
        var $inputgroup = $('<div class="input-prepend">');
30
        self.$undo = $('<span class="add-on" style="display:none;cursor:pointer;">undo</span>');
30
        self.$undo = $('<span class="add-on" style="display:none;cursor:pointer;">Undo</span>');
31
        self.$fillbtn = $('<span class="add-on"><i class="icon-edit" style="cursor:pointer;"></i></span>');
31
        self.$fillbtn = $('<span class="add-on" style="cursor:pointer;"> Search Google Books </span>');
32
        self.$error = $('<span class="add-on" style="display:none;"></span>');
32
        self.$error = $('<span class="add-on" style="display:none;"></span>');
33
        self.$elm.wrap($inputgroup);
33
        self.$elm.wrap($inputgroup);
34
        self.$elm.after(self.$error);
34
        self.$elm.after(self.$error);
Lines 63-149 Link Here
63
            self.$error.hide();
63
            self.$error.hide();
64
            /* give user some feedback that the request is in progress */
64
            /* give user some feedback that the request is in progress */
65
            self.$fillbtn.fadeOut(1000).fadeIn(1000);
65
            self.$fillbtn.fadeOut(1000).fadeIn(1000);
66
66
            if ( self.$elm.val()) {
67
            var gAPI = 'https://www.googleapis.com/books/v1/volumes?q=';
67
                var gAPI = 'https://www.googleapis.com/books/v1/volumes?q=';
68
            if(self.type)
68
                if(self.type)
69
                gAPI += self.type + ':';
69
                    gAPI += self.type + ':';
70
            gAPI += self.$elm.val();
70
                gAPI += self.$elm.val();
71
            gAPI += '&maxResults=1';
71
                gAPI += '&maxResults=1';
72
72
                $.getJSON(gAPI, function (response) {
73
            $.getJSON(gAPI, function (response) {
73
                    if(response.totalItems == 0) {
74
                if(response.totalItems == 0) {
74
                        self.$error.html('Sorry, nothing found.');
75
                    self.$error.html('Sorry, nothing found.');
75
                        self.$error.show();
76
                    self.$error.show();
76
                        return;
77
                    return;
78
                }
79
80
                var undos = 0;
81
                var item = response.items[0];
82
                for(var key in self.fields) {
83
                    var filled = false;
84
                    var value = eval('item.'+key);
85
                    var field = self.fields[key];
86
87
                    /* field handled by caller */
88
                    if('handle' in field) {
89
                        if(typeof field.handle === 'function')
90
                            field.handle(field.$target, value);
91
92
                        continue; /* next please */
93
                    }
77
                    }
94
78
95
                    /* wouldn't know what to do with result unless we have a
79
                    var undos = 0;
96
                     * target */
80
                    var item = response.items[0];
97
                    if( ! field.$target )
81
                    for(var key in self.fields) {
98
                        continue;
82
                        var filled = false;
99
83
                        var value = eval('item.'+key);
100
                    /* handle differently depending on datatype */
84
                        var field = self.fields[key];
101
                    switch(typeString(value)) {
85
102
                        case 'array':
86
                        /* field handled by caller */
103
                            switch(field.$target.prop('nodeName').toUpperCase()) {
87
                        if('handle' in field) {
104
                                case 'TEXTAREA':
88
                            if(typeof field.handle === 'function')
105
                                    undos++;
89
                                field.handle(field.$target, value);
106
                                    field.$target.bind('autofill-undo', field.$target.text(), function(e){$(this).text(e.data);});
90
107
                                    field.$target.text(value.join(', '));
91
                            continue; /* next please */
108
                                    break;
92
                        }
109
                                case 'INPUT':
93
110
                                default:
94
                        /* wouldn't know what to do with result unless we have a
111
                                    undos++;
95
                        * target */
112
                                    field.$target.bind('autofill-undo', field.$target.val(), function(e){$(this).val(e.data);});
96
                        if( ! field.$target )
113
                                    field.$target.val(value.join(', '));
97
                            continue;
114
                                    break;
98
115
                            }
99
                        /* handle differently depending on datatype */
116
                            break;
100
                        switch(typeString(value)) {
117
                        default:
101
                            case 'array':
118
                            switch(field.$target.prop('nodeName').toUpperCase()) {
102
                                switch(field.$target.prop('nodeName').toUpperCase()) {
119
                                case 'TEXTAREA':
103
                                    case 'TEXTAREA':
120
                                    undos++;
104
                                        undos++;
121
                                    field.$target.bind('autofill-undo', field.$target.text(), function(e){$(this).text(e.data);});
105
                                        field.$target.bind('autofill-undo', field.$target.text(), function(e){$(this).text(e.data);});
122
                                    field.$target.text(value);
106
                                        field.$target.text(value.join(', '));
123
                                    break;
107
                                        break;
124
                                case 'SELECT':
108
                                    case 'INPUT':
125
                                case 'INPUT':
109
                                    default:
126
                                default:
110
                                        undos++;
127
                                    undos++;
111
                                        field.$target.bind('autofill-undo', field.$target.val(), function(e){$(this).val(e.data);});
128
                                    field.$target.bind('autofill-undo', field.$target.val(), function(e){$(this).val(e.data);});
112
                                        field.$target.val(value.join(', '));
129
                                    field.$target.val(value);
113
                                        break;
130
                                    break;
114
                                }
131
                            }
115
                                break;
116
                            default:
117
                                switch(field.$target.prop('nodeName').toUpperCase()) {
118
                                    case 'TEXTAREA':
119
                                        undos++;
120
                                        field.$target.bind('autofill-undo', field.$target.text(), function(e){$(this).text(e.data);});
121
                                        field.$target.text(value);
122
                                        break;
123
                                    case 'SELECT':
124
                                    case 'INPUT':
125
                                    default:
126
                                        undos++;
127
                                        field.$target.bind('autofill-undo', field.$target.val(), function(e){$(this).val(e.data);});
128
                                        field.$target.val(value);
129
                                        break;
130
                                }
131
                        }
132
133
                        switch(field.effect) {
134
                            case 'flash':
135
                                field.$target.fadeOut(500).fadeIn(500);
136
                                break;
137
                        }
132
                    }
138
                    }
133
139
134
                    switch(field.effect) {
140
                    if(undos > 0)
135
                        case 'flash':
141
                        self.$undo.show();
136
                            field.$target.fadeOut(500).fadeIn(500);
137
                            break;
138
                    }
139
                }
140
141
                if(undos > 0)
142
                    self.$undo.show();
143
142
144
            });
143
                });
145
        });
144
                }
146
    };
145
           });
146
       };
147
147
148
    /*
148
    /*
149
     * @fields object: Google Books API item propreties map for
149
     * @fields object: Google Books API item propreties map for
150
- 

Return to bug 14242