Diffstat (limited to 'frontend/beta/js/Bookmarklet.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/beta/js/Bookmarklet.js | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/frontend/beta/js/Bookmarklet.js b/frontend/beta/js/Bookmarklet.js index b8a0c0e..59f4fef 100644 --- a/frontend/beta/js/Bookmarklet.js +++ b/frontend/beta/js/Bookmarklet.js @@ -1,280 +1,277 @@ /* Copyright 2008-2011 Clipperz Srl -This file is part of Clipperz's Javascript Crypto Library. -Javascript Crypto Library provides web developers with an extensive -and efficient set of cryptographic functions. The library aims to -obtain maximum execution speed while preserving modularity and -reusability. +This file is part of Clipperz Community Edition. +Clipperz Community Edition is an online password manager. For further information about its features and functionalities please -refer to http://www.clipperz.com +refer to http://www.clipperz.com. -* Javascript Crypto Library is free software: you can redistribute +* Clipperz Community Edition is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -* Javascript Crypto Library is distributed in the hope that it will +* Clipperz Community Edition is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Javascript Crypto Library. If not, see + License along with Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ _cble = null; //----------------------------------------------------------------------------- isLoginForm = function(aForm) { var inputFields; var passwordFieldsFound; var i,c; //console.log('is login form: ' + aForm.name + ' (' + aForm.id + ')'); passwordFieldsFound = 0; inputFields = aForm.elements; c = inputFields.length; for (i=0; i<c; i++) { if (inputFields[i].type == 'password') { passwordFieldsFound ++; } } //console.log('number of password fields found: ' + passwordFieldsFound); return (passwordFieldsFound == 1); }; //----------------------------------------------------------------------------- findLoginForm = function(aDocument, aLevel) { var result; var documentForms; var i,c; result = null; try { documentForms = aDocument.getElementsByTagName('form'); c = documentForms.length; for (i=0; (i<c) && (result == null); i++) { if (isLoginForm(documentForms[i])) { result = documentForms[i]; } } if ((result == null) && (aLevel == 0)) { var iFrames; iFrames = aDocument.getElementsByTagName('iframe'); c = iFrames.length; for (i=0; (i<c) && (result == null); i++) { result = findLoginForm(iFrames[i].contentDocument, (aLevel + 1)); } } } catch (e) { _cble = e; } return result; }; //----------------------------------------------------------------------------- inputElementValues = function(anInputElement) { var result; // if ((anInputElement instanceof HTMLInputElement) && (anInputElement.getAttribute('name') != null)) { if ((anInputElement.tagName.toLowerCase() == 'input') && (anInputElement.getAttribute('name') != null)) { result = {}; result.type = anInputElement.getAttribute('type') || 'text'; result.name = anInputElement.getAttribute('name'); // result.value = anInputElement.getAttribute('value'); result.value = anInputElement.value; if (anInputElement.type.toLowerCase() == 'radio') { result.checked = anInputElement.checked; } // } else if ((anInputElement instanceof HTMLSelectElement) && (anInputElement.getAttribute('name') != null)) { } else if ((anInputElement.tagName.toLowerCase() == 'select') && (anInputElement.getAttribute('name') != null)) { var options; var c,i; //console.log('input element values: %o', anInputElement); result = {}; result.type = 'select'; result.name = anInputElement.getAttribute('name'); result.options = []; options = anInputElement.options; c = options.length; for (i=0; i<c; i++) { var option; option = {}; option.selected = options[i].selected; option.label = options[i].label || options[i].innerHTML; option.value = options[i].value; result.options.push(option); } } else { result = null; } return result; }; //----------------------------------------------------------------------------- formParameters = function(aLoginForm) { var result; var i, c; var action; if (aLoginForm == null) { result = null; } else { var radioValues; var radioValueName; result = {}; radioValues = {}; action = aLoginForm.action; if (action.constructor != String) { action = aLoginForm.getAttribute('action'); } if (/^https?\:\/\/.*/.test(action)) { action = action; } else if (/^\/.*/.test(action)) { action = window.location.protocol + '/' + '/' + window.location.hostname + action; } else { action = window.location.href.replace(/\/[^\/]*$/, '/' + action); } result.attributes = {}; result.attributes.action = action; result.attributes.method = aLoginForm.getAttribute('method'); result.inputs = []; c = aLoginForm.elements.length; for (i=0; i<c; i++) { var inputElement; var elementValues; inputElement = aLoginForm.elements[i]; elementValues = inputElementValues(inputElement); if (elementValues != null) { if (elementValues.type != 'radio') { result.inputs.push(elementValues); } else { var radioValue; var values; radioValue = radioValues[elementValues.name]; if (radioValue == null) { radioValue = {}; radioValue.name = elementValues.name; radioValue.type = 'radio'; radioValue.options = []; radioValues[elementValues.name] = radioValue; } values = {}; values.value = elementValues.value; values.checked = elementValues.checked; radioValue.options.push(values); } } } for (radioValueName in radioValues) { if (typeof(radioValues[radioValueName]) != 'function') { result.inputs.push(radioValues[radioValueName]); } } } return result; }; //----------------------------------------------------------------------------- pageParameters = function() { var result; result = {}; result['title'] = document.title; //<link rel='icon' href='http://example.com/favicon.ico' type='image/x-icon'> return result; }; //----------------------------------------------------------------------------- reprString = function (o) { return ('\'' + o.replace(/(["\\])/g, '\\$1') + '\'' ).replace(/[\f]/g, '\\f' ).replace(/[\b]/g, '\\b' ).replace(/[\n]/g, '\\n' ).replace(/[\t]/g, '\\t' ).replace(/[\r]/g, '\\r'); }; //----------------------------------------------------------------------------- serializeJSON = function (o) { var objtype = typeof(o); if (objtype == 'number' || objtype == 'boolean') { return o + ''; } else if (o === null) { return 'null'; } // var m = MochiKit.Base; // var reprString = m.reprString; if (objtype == 'string') { return reprString(o); } // recurse var me = arguments.callee; // array if (objtype != 'function' && typeof(o.length) == 'number') { var res = []; for (var i = 0; i < o.length; i++) { var val = me(o[i]); if (typeof(val) != 'string') { val = 'undefined'; } res.push(val); } return '[' + res.join(',\n') + ']'; } // undefined is outside of the spec if (objtype == 'undefined') { // throw new TypeError('undefined can not be serialized as JSON'); throw new TypeError('error'); } // generic object code path res = []; for (var k in o) { if (typeof(o[k]) != 'function') { var useKey; if (typeof(k) == 'number') { useKey = '\'' + k + '\''; } else if (typeof(k) == 'string') { useKey = reprString(k); } else { // skip non-string or number keys continue; } |