Completed
Push — master ( 7f608b...fc927f )
by Sander
01:15
created

$j.ready   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 9
rs 9.6666
1
/* global API */
2
var $j = jQuery.noConflict();
3
$j(document).ready(function () {
4
    var storage = new API.Storage();
5
6
    var password_picker_html = null;
7
    var _this = this;
8
9
    $j.ajax({
10
        url: API.extension.getURL('/html/inject/password_picker.html'),
11
        contentType: 'text',
12
        type: 'GET',
13
        success: function (data) {
14
            // Firefox parsed data as a XMLDoc, revert that
15
            if (typeof data === 'object') {
16
                data = '<div id="password_picker">' + data.documentElement.innerHTML + '</div>';
17
            }
18
            password_picker_html = $j(data);
19
        }
20
    });
21
22
    function removePasswordPicker() {
23
        $j('#password_picker').remove();
24
    }
25
26
    function copyTextToClipboard(text) {
27
        var copyFrom = document.createElement("textarea");
28
        copyFrom.textContent = text;
29
        var body = document.getElementsByTagName('body')[0];
30
        body.appendChild(copyFrom);
31
        copyFrom.select();
32
        document.execCommand('copy');
33
        body.removeChild(copyFrom);
34
    }
35
    _this.copyTextToClipboard = copyTextToClipboard;
36
37
    function enterLoginDetails(login) {
38
        var username = (login.username.trim() !== '' ) ? login.username : login.email;
39
40
        fillPassword(username, login.password);
41
        if ($j('#password_picker').is(':visible')) {
42
            removePasswordPicker();
43
        }
44
    }
45
46
    _this.enterLoginDetails = enterLoginDetails;
47
    function setupAddCredentialFields() {
48
        var labelfield = $j('#savepw-label');
49
        labelfield.val(document.title);
50
        var userfield = $j('#savepw-username');
51
        var pwfield = $j('#savepw-password');
52
        $j('.togglePw').click(function () {
53
            $j('.togglePw').toggleClass('fa-eye').toggleClass('fa-eye-slash');
54
            if (pwfield.attr('type') === 'password') {
55
                pwfield.attr('type', 'text');
56
            } else {
57
                pwfield.attr('type', 'password');
58
            }
59
        });
60
61
        $j('#savepw-save').click(function (e) {
62
            e.preventDefault();
63
            API.runtime.sendMessage(API.runtime.id, {
64
                method: "injectCreateCredential", args: {
65
                    label: labelfield.val(),
66
                    username: userfield.val(),
67
                    password: pwfield.val()
68
                }
69
            });
70
        });
71
72
        $j('#savepw-cancel').click(function () {
73
            labelfield.val(document.title);
74
            userfield.val('');
75
            pwfield.val('');
76
            removePasswordPicker();
77
        });
78
79
    }
80
81
    function toggleFieldType(field) {
82
        if ($j(field).attr('type').toLowerCase() === 'text') {
83
            $j(field).attr('type', 'password');
84
        } else {
85
            $j(field).attr('type', 'text');
86
        }
87
    }
88
89
    function genPwd(settings) {
90
        /* jshint ignore:start */
91
        var password = generatePassword(settings['length'],
92
            settings.useUppercase,
93
            settings.useLowercase,
94
            settings.useDigits,
95
            settings.useSpecialChars,
96
            settings.minimumDigitCount,
97
            settings.avoidAmbiguousCharacters,
98
            settings.requireEveryCharType);
99
        /* jshint ignore:end */
100
        return password;
101
    }
102
103
    function getPasswordGenerationSettings(cb) {
104
        var default_settings = {
105
            'length': 12,
106
            'useUppercase': true,
107
            'useLowercase': true,
108
            'useDigits': true,
109
            'useSpecialChars': true,
110
            'minimumDigitCount': 3,
111
            'avoidAmbiguousCharacters': false,
112
            'requireEveryCharType': true
113
        };
114
        storage.get('password_generator_settings').then(function (_settings) {
115
            if (!_settings) {
116
                _settings = default_settings;
117
            }
118
119
            cb(_settings);
120
        }).error(function () {
121
            cb(default_settings);
122
        });
123
    }
124
125
    function setupPasswordGenerator() {
126
        //getPasswordGeneratorSettings
127
        getPasswordGenerationSettings(function (settings) {
128
            var round = 0;
129
130
            function generate_pass() {
131
                var new_password = genPwd(settings);
132
                $j('#generated_password').val(new_password);
133
                setTimeout(function () {
134
                    if (round < 10) {
135
                        generate_pass();
136
                        round++;
137
                    } else {
138
                        round = 0;
139
                    }
140
                }, 10);
141
            }
142
143
            $j.each(settings, function (setting, val) {
144
                if (typeof(val) === "boolean") {
145
                    $j('[name="' + setting + '"]').prop('checked', val);
146
                } else {
147
                    $j('[name="' + setting + '"]').val(val);
148
                }
149
            });
150
151
            $j('form[name="advancedSettings"]').change(function () {
152
                var pw_settings_form = $j(this);
153
                settings = pw_settings_form.serializeObject();
154
                storage.set('password_generator_settings', settings);
155
            });
156
157
            $j('.renewpw').click(function () {
158
                generate_pass();
159
            });
160
            $j('.renewpw').click();
161
162
            $j('.usepwd').click(function () {
163
                $j('#savepw-password').val($j('#generated_password').val());
164
                $j('.tab.add').click();
165
            });
166
167
            $j('.togglePwVis').click(function () {
168
                toggleFieldType('#generated_password');
169
                $j(this).find('.fa').toggleClass('fa-eye-slash').toggleClass('fa-eye');
170
            });
171
172
            $j('.adv_opt').click(function () {
173
174
                var adv_settings = $j('.pw-setting-advanced');
175
                $j(this).find('i').toggleClass('fa-angle-right').toggleClass('fa-angle-down');
176
                if (adv_settings.is(':visible')) {
177
                    adv_settings.slideUp();
178
                } else {
179
                    adv_settings.slideDown();
180
                }
181
            });
182
        });
183
    }
184
185
    function showPasswordPicker(form) {
186
        var loginField = $j(form[0]);
187
        var loginFieldPos = loginField.offset();
188
        var passwordField = $j(form[1]);
189
        var passwordFieldPos = passwordField.offset();
190
191
        var left = loginFieldPos.left;
192
        var top = loginFieldPos.top;
193
194
        if (passwordFieldPos.top > loginFieldPos.top) {
195
            //console.log('login fields below each other')
196
            top = passwordFieldPos.top + passwordField.height() + 10;
197
198
        } else {
199
            // console.log('login fields next to each other')
200
            top = top + loginField.height() + 10;
201
        }
202
203
        var position = $j(form[1]).position();
0 ignored issues
show
Unused Code introduced by
The assignment to variable position seems to be never used. Consider removing it.
Loading history...
204
        $j(document.body).after($j(password_picker_html));
205
206
        var picker = $j('#password_picker');
207
        picker.css('position', 'absolute');
208
        picker.css('left', left);
209
        picker.css('top', top);
210
        // picker.css('width', $j(form).width());
211
        picker.find('.tab').click(function () {
212
            var target = $j(this).attr('class').replace('active', '').replace('tab', '').trim();
213
            picker.find('.tab').removeClass('active');
214
            picker.find('.tab-content').children().hide();
215
            picker.find('.tab-' + target + '-content').show();
216
            picker.find('.tab.' + target).addClass('active');
217
        });
218
219
        $j('.tab.close').click(function () {
220
            picker.find('.tab-list-content').show();
221
            removePasswordPicker();
222
        });
223
224
        var url = window.location.href;
225
        API.runtime.sendMessage(API.runtime.id, {method: "getCredentialsByUrl", args: [url]}).then(function (logins) {
226
            if (logins.length !== 0) {
227
                picker.find('.tab-list-content').html('');
228
            }
229
            for (var i = 0; i < logins.length; i++) {
230
                var login = logins[i];
231
                var row = $j('<div class="account">' + login.label + '<br /><small>' + login.username + '</small></div>');
232
                row.click((function (login) {
233
                    return function () {
234
                        enterLoginDetails(login);
235
                    };
236
                })(login));
237
238
                picker.find('.tab-list-content').append(row);
239
            }
240
        });
241
        $j('.no-credentials .save').on('click', function () {
242
            $j('.tab.add').click();
243
        });
244
        $j('.no-credentials .gen').on('click', function () {
245
            $j('.tab.generate').click();
246
        });
247
        setupAddCredentialFields();
248
        setupPasswordGenerator();
249
    }
250
251
    function createFormIcon(el, form) {
252
        var offset = el.offset();
253
        var width = el.width();
254
        var height = el.height();
255
        var margin = (el.css('margin')) ? parseInt(el.css('margin').replace('px', '')) : 0;
256
        var padding = (el.css('padding')) ? parseInt(el.css('padding').replace('px', '')) : 0;
257
        var paddingRight = parseInt(el.css('padding-right').replace('px', ''));
258
        var fontSize = el.css('font-size');
259
        var borderh = (el.css('border-height')) ? el.css('border-height') : '2px';
260
        var borderw = (el.css('border-width')) ? el.css('border-width') : '2px';
261
        var borderColor = el.css('border-color');
0 ignored issues
show
Unused Code introduced by
The variable borderColor seems to be never used. Consider removing it.
Loading history...
262
        var borderHeight = parseInt(borderh.replace('px', ''));
263
        var borderWidth = parseInt(borderw.replace('px', ''));
264
        var iconWidth = width * 0.1;
265
        var pickerButton = $j('<span class="passwordPickerIcon" style="display: inline-block"> </span>');
266
        $j('body').append(pickerButton);
267
        if (el.find('.passwordPickerIcon').length > 0) {
268
            pickerButton = el.find('.passwordPickerIcon')[0];
269
        }
270
271
272
        //pickerButton.css('background-image', 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAPhJREFUOBHlU70KgzAQPlMhEvoQTg6OPoOjT+JWOnRqkUKHgqWP4OQbOPokTk6OTkVULNSLVc62oJmbIdzd95NcuGjX2/3YVI/Ts+t0WLE2ut5xsQ0O+90F6UxFjAI8qNcEGONia08e6MNONYwCS7EQAizLmtGUDEzTBNd1fxsYhjEBnHPQNG3KKTYV34F8ec/zwHEciOMYyrIE3/ehKAqIoggo9inGXKmFXwbyBkmSQJqmUNe15IRhCG3byphitm1/eUzDM4qR0TTNjEixGdAnSi3keS5vSk2UDKqqgizLqB4YzvassiKhGtZ/jDMtLOnHz7TE+yf8BaDZXA509yeBAAAAAElFTkSuQmCC")');
273
        pickerButton.css('background-image', 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfhAgcOLCT5d6srAAAAL3RFWHRDb21tZW50AEVkaXRlZCB3aXRoIGV6Z2lmLmNvbSBvbmxpbmUgR0lGIGVkaXRvctX/OoYAAAZUSURBVGjexZpfiBVVGMB/Z2buvfvn6urutq3rauqqqVEZmmBmiJVlT0EEEUGFFBEJQU9bD2IPgT6EEEUvUUhYPgoJYlJChrklIVTkn8BCTVt3dd3d+3fufD3cuXPP3Dv3/1yd4XLnzDlzzm++7zvfd/6MEm7roVCAoFAY7g/AQWEQJa5uM5AfDg9PXNhoSED5elt4XAryCwVIuf8h1BUGkNKuW6/NCBOnNHUHgFQdd24jkGrg7m0AUk3k1FGrhI7TkHmXdlBltAenbimJ66s9MKOie2+5sTqRHCytaAUJSQgN5UtG6pARmMWUEb6yfKWzdRSyUUWtGI3JR7XB2tzY30y3V+3pAEK2yGG0G6euJx2kUMhqI46FzTyi3EJUTixiTFWRkjsqstqEYzHA46xnA8NcJ8kR9euVPwZnVK6KHYmHVuts+OhlI+dJllSzd8eD6cqtmKIEoR04I7zOf4FVndr8WqqnQjtKjNpAhpgN4yzlPW5UrPLGht8T2yq2pqoDRaSzYZy5vMJE1bec2jKWXl9BRjWAog3jRNjkU1aCP/mG05z2VXzm+V25JRVkRJi2Awv4W6vgJk+zli76Wcgexsh5OZ8ce0LWBEspTJwI+3TVsMrnVJ7hKw3pLVku/cFARkg40M1hTTr3l+W/wE0v/wJLZbX0BbQsa0PCgTe0Kt6lJ6DEZ17+NNuJyMK879ElZHAmpJjVzWItdZ1bAd77EIXhSJyddKjLZeMlMXwCsRhsOoR28ZJ3Pc1kgKBzXKY4PhrARKlMaXj3JyPqasmdoJTyibJwz6QYp+b4hqXFeDWsSWQdGxFQTqkYteaUsJytOGToxCCBSSdJbLpwSBIjSgKHbjKk6cAigUEnabLEeJQlWl2PcIhkmS0M+VTU419p0OJ+3ikRYzvjpMjikCFNDps0WXKkSeOQIYWNTYoMDmlS5MiSIkOOJIKjOz8GKQ07aznrs+CPi/LXe1mxZy2q4fQbO39krg9nGaNatxeEL3W1lgC5bzATIpDwHes8Fa1iP9dK8g/4R2P5m4ZmpUJ3iOtjE1zAcHuVIstVBkpK9PmNRxW5vGHV/tCkM8v7jPia72BvSZmDpT1RkLzQ3BH2JAe5xoskSdGNwTQWcWaIshgTuEgXE8Ac0iTpIsI0JnESZIhjsEire4qj/OVrLc0oCzRfBRcDZl/K1aJEVQY4zDH2EfXJ0WYrnwPwG++QqejIV/IFg17qU8bKvJDDLz6gKV1l7qVZMKuYDKmLQJrLZQs23zNJL3CKf0hVmcp0aKkZMgFlvuUm89zrBMexsEvmphHDc/aXZH6FhuLEXRvLVTHiqxzxmbQR4KljJLyUyVQZjtJDg80N6SsZ38RQmMx11TQfiNFB8BKCX7bzffIqHEPc5V0fKNiY+Dqaf142K31qwr3expOswAHi7jMPcwATmGSMr8uiucFHbGeNm3rVtTt/+O3VLPDfvPp9Pd/0eXsvhOSrH63SqX+iP+D9+znulUizi9Ix+TLGvfwTLECVDaCjYpVr2hELiLKyir0Ma6LX7Wa3Z8pRnmIHHZ5Eooz4XuM6txApt1cneDrSi8GHVSR0nuFA0Bij2Fqpo2zgPgZ4jOd8s5FxFoH0Bs3MgltcLct4GcF2h+UF8kJjp0sCZ/HYwkltKC9c4xJjjPum1ZPci6r0rsGrsAYPnGBzP0sYwsYmjs0sUQymcYhxhLOFLlt2vMke100EHz/zLFeEqusggediGQYi3s6WQrl9stb0+gNSwbaAsBur+vS9WqaSZqP/2/yg2VLxPIlZa3mjVtjuaxJpEzuZJatVNcE57q692lJrJd9gjppqCmkuIzzEFnq5h7Nc4AjnqtpOI1sLTU+NFGASI4FgYYuqPQutc6+j9X0wkAh1rFrXuQorPS3jUA9O/cvCWZnXIk4btqea3qBt5LEG21Btxml4R1HajNPEFqe0+QWMdqqgGZMz2mekzfWA9m0CdxJjhpxHVuf3GC18alENSUzmYJN3hqL9nFqLmM0DKURVVpal7e/4tp/qkZCJItecylUwjgrYelL1tdDy1zEqFFNusZdVBrhzn+uo4k9CxGkwuBa3arV/ARwVEg4dVk0piAaivNPwNv/zA+FkSEQrLF/jyvteziisP3oouCAmFhYRLEwMHBQ2QpYs4yEgbfsflwyWnMm2PLkAAAAASUVORK5CYII=")');
274
        pickerButton.css('background-repeat', 'no-repeat');
275
        pickerButton.css('background-attachment', 'scroll');
276
        //pickerButton.css('background-size', '16px 18px');
277
        pickerButton.css('background-size', 'contain');
278
        pickerButton.css('background-position', '98% 50%');
279
        pickerButton.css('cursor', 'pointer');
280
        pickerButton.css('text-align', 'center');
281
        pickerButton.css('box-sizing', 'content-box');
282
        pickerButton.css('position', 'absolute');
283
        /*
284
         pickerButton.css('background-color', 'rgb(234, 234, 234)');
285
         pickerButton.css('border-top-right-radius', el.css('border-top-right-radius'));
286
         pickerButton.css('border-bottom-right-radius', el.css('border-bottom-right-radius'));
287
         pickerButton.css('border-color', borderColor);*/
288
289
        pickerButton.css('z-index', '999');
290
        pickerButton.css('width', iconWidth);
291
292
293
        pickerButton.css('padding', padding);
294
        pickerButton.css('font-size', fontSize);
295
        pickerButton.css('height', height);
296
        pickerButton.css('margin', margin);
297
        pickerButton.css('font-weight', el.css('font-weight'));
298
        pickerButton.css('top', Math.round((offset.top + (height / 4) - margin / 2 - padding / 2 ) - (borderHeight / 2)) + 'px');
299
        pickerButton.css('left', Math.round((offset.left + width * 0.9) + paddingRight - padding + borderWidth) + 'px');
300
301
302
        var onClick = function () {
303
            showPasswordPicker(form);
304
        };
305
306
        //$j('body').append(pickerButton);
307
308
        pickerButton.find('fa-key').click(onClick);
309
        $j(pickerButton).click(onClick);
310
311
    }
312
313
    function createPasswordPicker(form) {
314
        for (var i = 0; i < form.length; i++) {
315
            var el = $j(form[i]);
316
            createFormIcon(el, form);
317
318
        }
319
    }
320
321
    function updatePositions() {
322
        $j('.passwordPickerIcon').remove();
323
        var forms = getLoginFields();
324
        for (var f = 0; f < forms.length; f++) {
325
            var form = forms[f];
326
            for (var i = 0; i < form.length; i++) {
327
                var el = $j(form[i]);
328
                createFormIcon(el, form);
329
            }
330
        }
331
    }
332
333
334
    function togglePasswordPicker(e) {
335
        if (e.target.className === "passwordPickerIcon" || e.target.className === "fa fa-key") {
336
            return;
337
        }
338
        var picker = $j('#password_picker');
339
        if (!picker.is(e.target)
340
            && picker.has(e.target).length === 0
341
342
        ) {
343
            if (picker) {
344
                picker.remove();
345
            }
346
        }
347
    }
348
349
    function formSubmitted(fields) {
350
        var user = fields[0].value;
351
        var pass = fields[1].value;
352
        var params = {
353
            username: user,
354
            password: pass
355
        };
356
        //Disable password mining
357
        //$j(fields[1]).attr('type', 'hidden');
358
        API.runtime.sendMessage(API.runtime.id, {method: "minedForm", args: params});
359
360
    }
361
362
    function inIframe() {
363
        try {
364
            return window.self !== window.top;
365
        } catch (e) {
366
            return true;
367
        }
368
    }
369
370
371
    function checkForMined() {
372
        if (inIframe()) {
373
            return;
374
        }
375
376
        API.runtime.sendMessage(API.runtime.id, {method: "getMinedData"}).then(function (data) {
377
            if (!data) {
378
                return;
379
            }
380
            if (data.hasOwnProperty('username') && data.hasOwnProperty('password') && data.hasOwnProperty('url')) {
381
                var doorhanger = $j('<div id="password-toolbar" class="container" style="display: none;"><span class="toolbar-text">' + data.title + ' ' + data.username + ' at ' + data.url + '</span></div>');
382
383
                var btnText = (data.guid === null) ? 'Save' : 'Update';
384
                var btnSave = $j('<button class="btn btn-success">' + btnText + '</button>');
385
                var btnCancel = $j('<button class="btn btn-default">Cancel</button>');
386
                btnSave.click(function () {
387
                    //closeToolbar();
388
                    API.runtime.sendMessage(API.runtime.id, {method: "saveMined"});
389
                });
390
391
                btnCancel.click(function () {
392
                    closeToolbar();
393
                    API.runtime.sendMessage(API.runtime.id, {method: "clearMined"});
394
                });
395
396
                doorhanger.append(btnCancel).append(btnSave);
397
                $j('#password-toolbar').remove();
398
                $j('body').append(doorhanger);
399
                $j('#password-toolbar').slideDown();
400
            }
401
        });
402
    }
403
404
    function minedLoginSaved(args) {
405
        // If the login added by the user then this is true
406
        if (args.selfAdded) {
407
            enterLoginDetails(args.credential);
408
            return;
409
        }
410
        if ($j('#password-toolbar').is(':visible')) {
411
            var action = (args.updated) ? 'updated' : 'saved';
412
            $j('#password-toolbar').html('Credential ' + action + '!');
413
            setTimeout(function () {
414
                closeToolbar();
415 View Code Duplication
            }, 2500);
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
416
        }
417
    }
418
419
    _this.minedLoginSaved = minedLoginSaved;
420
421
    function closeToolbar() {
422
        $j('#password-toolbar').slideUp(400, function () {
423
            $j('#password-toolbar').remove();
424
        });
425
    }
426
427
    function insertFontCSS() {
428
        var fontPath = API.extension.getURL('');
429
        var fontCss = ["@font-face {",
430
            "font-family: 'FontAwesome';",
431
            "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?v=4.7.0');",
432
            "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('" + fontPath + "fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('" + fontPath + "fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('" + fontPath + "fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('" + fontPath + "fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');",
433
            "font-weight: normal;",
434
            "font-style: normal;",
435
            "}"];
436
        if (window.navigator.userAgent.indexOf('Firefox') !== -1) {
437
            fontCss[2] = "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?v=4.7.0');";
438
            fontCss[3] = "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('" + fontPath + "fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('" + fontPath + "fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('" + fontPath + "fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('" + fontPath + "fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');";
439
        }
440
        var css = fontCss.join('');
441
        var style = document.createElement('style'),
442
            head = document.head || document.getElementsByTagName('head')[0];
443
444
        style.type = 'text/css';
445
        if (style.styleSheet) {
446
            style.styleSheet.cssText = css;
447
        } else {
448
            style.appendChild(document.createTextNode(css));
449
        }
450
451
        head.appendChild(style);
452
    }
453
454
455
    function init() {
456
        insertFontCSS();
457
        $j(document).unbind('click', togglePasswordPicker);
458
        checkForMined();
459
        API.runtime.sendMessage(API.runtime.id, {method: 'getRuntimeSettings'}).then(function (result) {
460
            var disablePasswordPicker = result.disablePasswordPicker;
461
462
            var loginFields = getLoginFields();
463
            if (loginFields.length > 0) {
464
                //@TODO prevent chrome from captuting pw's: http://stackoverflow.com/questions/27280461/prevent-chrome-from-prompting-to-save-password-from-input-box
465
                for (var i = 0; i < loginFields.length; i++) {
466
                    var form = getFormFromElement(loginFields[i][0]);
467
                    if(!disablePasswordPicker) {
468
                        createPasswordPicker(loginFields[i], form);
0 ignored issues
show
Bug introduced by
The call to createPasswordPicker seems to have too many arguments starting with form.
Loading history...
469
                    }
470
                    //Password miner
471
                    $j(form).submit((function (loginFields) {
472
                        return function () {
473
                            formSubmitted(loginFields);
474
                        };
475
                    })(loginFields[i]));
476
                }
477
478
                var url = window.location.href; //@TODO use a extension function
479
                API.runtime.sendMessage(API.runtime.id, {
480
                    method: "getCredentialsByUrl",
481
                    args: [url]
482
                }).then(function (logins) {
483
                    //console.log('Found ' + logins.length + ' logins for this site');
484
                    if (logins.length === 1) {
485
                        API.runtime.sendMessage(API.runtime.id, {method: 'isAutoFillEnabled'}).then(function (isEnabled) {
486
                            if (isEnabled) {
487
                                enterLoginDetails(logins[0]);
488
                            }
489
                        });
490
                    }
491
492
                });
493
            }
494
495
        });
496
497
        $j(document).click(togglePasswordPicker);
498
        $j(window).on('resize', function () {
499
            if (getLoginFields().length > 0) {
500
                updatePositions();
501
            }
502
        });
503
    }
504
505
    var readyStateCheckInterval = setInterval(function () {
506
        if (document.readyState === "complete") {
507
            clearInterval(readyStateCheckInterval);
508
            API.runtime.sendMessage(API.runtime.id, {method: 'getMasterPasswordSet'}).then(function (result) {
509
                if (result) {
510
                    init();
511
                } else {
512
                    console.log('[Passman extension] Stopping, vault key not set');
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
513
                }
514
            });
515
516
            var body = document.getElementsByTagName('body')[0];
517
            observeDOM(body, function () {
518
                //init()
519
            });
520
        }
521
    }, 10);
522
523
    API.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
0 ignored issues
show
Unused Code introduced by
The parameter sendResponse is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
524
        _this[msg.method](msg.args, sender);
525
    });
526
});