299 files changed, 12157 insertions, 2731 deletions
@@ -1,2 +1,4 @@ target -*.pyc
\ No newline at end of file +*.pyc +backend/java +scripts/builder/backends/javaBuilder.py
\ No newline at end of file diff --git a/backend/dev/properties/dev.properties.json b/backend/dev/properties/dev.properties.json new file mode 100644 index 0000000..1c49ea5 --- a/dev/null +++ b/backend/dev/properties/dev.properties.json @@ -0,0 +1,9 @@ +{ + "request.path": "json", + "should.pay.toll": "true", + + "development.settings": { + "url": "http://homer.local:8084/java-backend" + } + +}
\ No newline at end of file diff --git a/frontend/beta/css/clipperz/clipperz.css b/frontend/beta/css/clipperz/clipperz.css index cf99ac9..f41dfad 100644 --- a/frontend/beta/css/clipperz/clipperz.css +++ b/frontend/beta/css/clipperz/clipperz.css @@ -1,2449 +1,2449 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ /* @override https://www.example.com/css/clipperz.css http://www.example.com/css/clipperz.css https://www.example.com/concurrency/css/clipperz.css https://www.clipperz.com/beta-connection/css/clipperz.css https://www.example.com/import/css/clipperz.css */ body { /* margin-left: 15px; margin-right: 15px;*/ background-color: white; color: black; font-family: Helvetica, Arial, Geneva, sans-serif; } table { /* width: 100%; */ } /* @group Header */ div#applicationVersionType { position: fixed; top: 0; left: 0; width: 120px; height: 120px; z-index: 99999; } div#applicationVersionType.readOnly { -/* background: url(../images/read-only.png) no-repeat fixed -5px -8px; */ +/* background: url(./images/read-only.png) no-repeat fixed -5px -8px; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat fixed -5px -8px; } div#applicationVersionType.TEST { -/* background: url(../images/test-database.png) no-repeat fixed -5px -8px; */ +/* background: url(./images/test-database.png) no-repeat fixed -5px -8px; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat fixed -5px -8px; } div#applicationVersionType.LIVE { display: none; visibility: hidden; } div#applicationVersionType.DEBUG { display: none; visibility: hidden; } div#header { background-color: #336; /* border-bottom: 8px solid #ff9400;*/ } div#logoFrame { /* float: left; */ /* height: 44px; */ min-height: 44px; background-color: #333366; } div#logoFrame > a { font-size: 12pt; } img#logo { padding-left: 15px; } h5.clipperzPayoff { color: white; font-size: 10pt; font-weight: normal; padding-left: 20px; display: inline; vertical-align: 7px; white-space: nowrap; } /* @group Misc links */ div#miscLinks { float: right; top: 0; right: 15px; } div#miscLinks ul { padding-top: 5px; padding-right: 3px; } div#miscLinks ul li { display: inline; padding-left: 5px; padding-right: 5px; } div#miscLinks ul li a { color: #ff9404; text-decoration: none; font-size: 10pt; } div#miscLinks ul li a:hover { text-decoration: underline; } /* @end */ /* @end */ /* @group Menu */ div#mainTabs { -/* background: #ff9400 url(../images/menubarSprite.gif) repeat-x; */ +/* background: #ff9400 url(./images/menubarSprite.gif) repeat-x; */ background: #ff9400 url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) repeat-x; height: 26px; } /* @group Exit links */ ul#exitLinks { padding-left: 5px; padding-top: 3px; } ul#exitLinks li { display: inline; font-size: 10pt; padding-left: 20px; } ul#exitLinks li a { color: white; text-decoration: none; } ul#exitLinks li a:hover { color: #333366; } /* ul#logoutBlock { padding-top: 3px; } ul#logoutBlock li { line-height: 14px; } td.logoutTD { width: auto; } */ /* @end */ /* @group Menus */ div#menus { padding-right: 1px; position: absolute; right: 20; top: 44px; -/* background: url(../images/menubarSprite.gif) no-repeat right -26px; */ +/* background: url(./images/menubarSprite.gif) no-repeat right -26px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) no-repeat right -26px; } div#menus table { padding-left: 1px; -/* background: url(../images/menubarSprite.gif) no-repeat 0 -52px; */ +/* background: url(./images/menubarSprite.gif) no-repeat 0 -52px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) no-repeat 0 -52px; } div#menus table tbody tr td { cursor: pointer; } div#menus table tbody tr td div { -/* background: url(../images/menubarSprite.gif) no-repeat right -52px; */ +/* background: url(./images/menubarSprite.gif) no-repeat right -52px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) no-repeat right -52px; } div#menus table tbody tr td div a { display: block; color: white; font-size: 10pt; text-decoration: none; padding: 0px 15px; -/* background: url(../images/menubarSprite.gif) no-repeat left -26px; */ +/* background: url(./images/menubarSprite.gif) no-repeat left -26px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) no-repeat left -26px; height: 26px; line-height: 26px; } div#menus table tbody tr td.hover div a { color: #333366; } /* @group .selected */ div#menus table tbody tr td.selectedTab { -/* background: url(../images/menubarSprite.gif) repeat-x right -78px; */ +/* background: url(./images/menubarSprite.gif) repeat-x right -78px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) repeat-x right -78px; } div#menus table tbody tr td.selectedTab div { -/* background: url(../images/menubarSprite.gif) no-repeat right -130px; */ +/* background: url(./images/menubarSprite.gif) no-repeat right -130px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) no-repeat right -130px; } div#menus table tbody tr td.selectedTab div a { color: #333366; -/* background: url(../images/menubarSprite.gif) no-repeat left -104px; */ +/* background: url(./images/menubarSprite.gif) no-repeat left -104px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCcAOYAANN7AKNfAP2zTf/KgO7QppVXAKJeALFmAOCkTfKtTZhZAPWvTaVgAJ5cAPCsTd2hTdygTaxjAOinTc13APySAOe8gO6rTfSuTZFVAKdhAOqIAN+jTfuyTZJVAO+LAPmxTeuqTbBlAKGDWbFnAOKkTaFdAOmoTfevTeSkTZdXAK9lAPyzTY9TAO+rTeamTfGMALKNWf60TeSmTZ1bAN+BAJpZAP/apvmyTZRWAKliAKpjAJxaAK1lAOiHAPaPANh9APyTANd9APSOANyBAPqQAPiPANF6ANB5AOOEANV9AOaGANV8AOyKANyAAPWPAP6UAPiQANp/AOGDANp+AOaFAOCDAO2KANJ6AP2TAPqRAOOFAM95APSNAP2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAJwAAAeigANdQBRZUD5cLx5MGj1USFU0Q1E/SwBXWxUTNjECKxw3HycLFwkOLRYgJhIuMigkCBsPBBAwIwchKjwROjkZDAEGJQ0zOzUKKQU4HRgiLBVHRgBJQVNNNFJaSj0aVh4vQk5FRBRYTwMTIhgdOAUpCjU7Mw0lBgEMGTk6ETwqIQcjYLAg8GADAhIoZLiQYAKEhRYOElxYcOLDDQ4rBMSwASEQADsK) no-repeat left -104px; } /* @end */ /* ul#menus li { display: inline; padding: 4px 15px; margin-right: 2px; color: white; cursor: pointer; line-height: 16px; border: 1px solid white; border-bottom: 0px; position: relative; top: -5px; } ul#menus li:hover { border: 1px solid #ff9400; border-bottom: 0px; } ul#menus li.selectedTab { border: 1px solid #ff9400; background-color: #ff9400; border-bottom: 0px; color: #333366; } ul#menus li.selectedTab:hover { border: 1px solid #ff9400; background-color: #ff9400; border-bottom: 0px; padding: 4px 15px; color: #333366; } */ /* @end */ /* @end */ /* @group Content */ div#content { margin-top: 15px; } div#main { padding-top: 15px; /* margin-left: 15px; margin-right: 15px;*/ } div#main ul li.selectedPanel { padding: 0px 15px; } div#main ul li#recordsPanel { padding: 0px; } div#main ul li ul li.selectedPanel { padding: 0px; } /* @group Login page */ /* @group Service description */ div.clipperzServiceDescription { color: #666666; padding-left: 10px; margin-right: 20px; } div.clipperzServiceDescription h2 { color: #ff9400; font-size: 20pt; margin-bottom: 15px; } div.clipperzServiceDescription ul li h3 { } div.clipperzServiceDescription ul li ul { list-style-position: outside; list-style-type: disc; color: #ff9400; margin-bottom: 15px; margin-left: 20px; } div.clipperzServiceDescription ul li ul li p { display: inline; color: #999999; font-size: 11pt; } div.clipperzServiceDescription ul li a { color: #333366; font-weight: bold; } /* @end */ /* @group Form */ div.clipperzLoginForm { /* border: 4px solid #ff9400; */ color: #999999; font-size: 11pt; width: 400px; height: 350px; } div.clipperzLoginForm a { margin-left: 10px; color: #333366; text-decoration: none; font-weight: bold; } div.clipperzLoginForm a:hover { text-decoration: underline; } div.clipperzLoginForm div.loginFormHeaderBox { padding: 30px 20px 0px 20px; -/* background: url(../images/loginFormBox.png) no-repeat -3px top; */ +/* background: url(./images/loginFormBox.png) no-repeat -3px top; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat -3px top; } div.clipperzLoginForm h3 { color: #666666; font-size: 14pt; padding: 0px 15px 8px 15px; border-bottom: 1px dotted #ff9400; } div.clipperzLoginForm form table.formLayout { color: #999999; font-size: 10pt; padding: 0px 25px; } div.clipperzLoginForm form table tbody tr.formFieldTR td { height: 22px; } input.loginFormField { font-size: 10pt; height: 20px; width: 251px; /* width: 330px; */ } div.passwordTypeChooser { padding-top: 2px; width: 250px; padding-bottom: 8px; } /* @group Login form */ input.passwordTypeCheckbox { margin-top: 2px; margin-right: 5px; } div.oneTimePassword input { width: 59px; height: 20px; font-size: 8pt; } div.oneTimePassword span { font-size: 7px; padding: 0px 1px; color: #666666; } div.clipperzLoginForm div.loginForm { text-align: left; -/* background: url(../images/loginFormBox.png) repeat-y -408px; */ +/* background: url(./images/loginFormBox.png) repeat-y -408px; */ background: url(data:image/png;charset=utf-8;base64,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) repeat-y -408px; margin: 0px; } div.clipperzLoginForm form table.formLayout { margin: 7px 10px 4px; } div.loginForm div.loginFormFooterBox { padding: 0px 20px 30px 20px; -/* background: url(../images/loginFormBox.png) no-repeat -813px bottom; */ +/* background: url(./images/loginFormBox.png) no-repeat -813px bottom; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat -813px bottom; } div.loginForm ul { padding: 8px 15px 8px 15px; border-top: 1px dotted #ff9400; } div.loginFormButtonFooter { padding: 0px 40px 10px; } /* @end */ /* @group Registration form */ div.clipperzLoginForm div.registrationForm { text-align: left; -/* background: url(../images/loginFormBox.png) repeat-y -408px; */ +/* background: url(./images/loginFormBox.png) repeat-y -408px; */ background: url(data:image/png;charset=utf-8;base64,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) repeat-y -408px; margin: 0px; } div.clipperzLoginForm div.registrationForm form a { margin: 0px; } div.registrationForm form table.formLayout { padding: 10px; /* padding: 4px 10px;*/ margin: 0px 20px; } /* div.clipperzLoginForm form.read-only table.formLayout { - background-image: url(../images/read-only_background.png); + background-image: url(./images/read-only_background.png); } div.panelBody form.read-only table.panelBody { - background-image: url(../images/read-only_background.png); + background-image: url(./images/read-only_background.png); } */ div.clipperzLoginForm form.read-only table.formLayout, div.panelBody form.read-only table.panelBody, div.clipperzSubPanel span.read-only, div.read-only { -/* background-image: url(../images/read-only_background.png); */ +/* background-image: url(./images/read-only_background.png); */ background-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAT8SURBVHjaxJppc9NIEIZbshTHxkACNhRHQVGQAwJF8cv5FxRfdosjCVeyG7aA3U3sOM7tIxLdGmFLmkMz40lwpSo+ZtR69HbPdLfkxZsvD6AyW4XkFSd/cP0ZwOW7wL32vwLsfgDwMt9FOKHeBGg+B6jM5McPjwG2/8T/Bzjn1yQyUAG48QKg1uJtdD8D9P7ibTRuow08L8/Pjx/0AP593Q8gqM9CpRowCJw9vwBw6TZv4PA7gvwNENYKEPMI/gTAD/PjRycAnXUcM8I59ZSBIHw2vtbkbfTw+Ic/eBuNGwDXlgUQeIE6H+mdF0AcxWMl5hcR4pYYYu8Lf5VmFRDtNVTiEH/z9CFIcd8rXCgJBKncQRtnp8nBM0ooILpfknMYk1hBoDtdf2wB8TjjllklUoj0t4ApsaBWQgixgt8HehBehZ2QlRIFCDp2AYLE8OKDbwNo3AnV7jQFRKLEsjiwxxAFGwZKJDaiaOjFcTzAj3mQw28IseEIokwJEYQoJvDY7VUewp+h8cNArIQFxEjkTssWECIlyJ0kEBSn1TnweSUs3ckTQbQslDCHYMHu2p1wRbdTQrRPEMR7hOgrIQDSQzKITUfutOQuJjQhmCJk4OCrAGJOAYFSD48slNDd7Ciw9SFo+fWh+0mixFMDCF0lzgGCfsNUKDBzJ5kSSyWBPa0SoRyCFqf9fzLBroQ4ZRAjmRKti1cCUghKMvGcAj2I9xJ3WnajhHJ1wnOqXhUrkUJARNfLNcT+lgTiJlNPuDqt6kMUlJisWhSgSRYrgRjZKCFypyUHSkRsrytA0BwvPhsOECLUV0KSO5ESvS2JEotsrlbuFLIVU6REl1civVCYaxkrYbLE3jRUQgIRi90psUEl+dxDCJwoIQ3sRYOYUCghcqcMBG0fQbkSvkZRZKKEI3fKQEySxotQ4hwhGMjoOM1ibZTwfrsSE5D//8B5ZwYQpkpIylMpBCgg7iDEI378aQe9myuKCOKJZJ/YYi4l3bErU0LErEEnhVgQQHQBtt9Q0iiCaBpAyNzJtRISiM4HHDNIg70UQpU7ySDWHcaEwJ36XWYjHiY2WIMOypQwSQAlSnguYyIPkS6/FXdtTGMlwC4mChAs1zraHkC9FTrpxbZlMbEiqCfcQeAHSYPOQS9WnYpbQFBMtAUQlRp5lKBB56IXm6vsDCAaisAWQtQBmmgjbBSSRmU9cRFKiCD25EqkEPkGnbTv1Dp/JaRL7B6rWeLRxAaND+o5iAmIaS9WGtiyRoEtxFoegmwENQ6CgYwNaPZik8rOBMJysxNBJO6Ey3h4iSuBfehtpgY0e7Ht1XOG2DODiDDh3XmbybW0erEGEBrlqVZMKJVACOqUHv1XaNC57gBOG9hlELsfAY53Ehv+dB3AFUdKdC0gPo0hWLCr7mNfmBImMTFi7pSBYCD0RIGzXuyGhRLrAohZdUwUIFjSGJ0NECLkVyeEiEx6sRvs/qNmjT1tTIwvXgRkA3Mt2eoU9SVZrF4vVglxihC7a24grj4AuHK/kGu56sUqISSpuMqdSiAm9xBLO4Ar1h1AVXmah3hmDTHJtUz7TrGNO5lCROzJn5NyCAYy2PeMGwWmEKTEroUSJ4XVSQLBHnP68QoJ4moyIU5P1JthD5JxSqQb0a/CK8pAXLknhjjpYC70JmnZ5Gz4ipjYeZekHTkbNI+Oz0Pg2O/9nwIMAFYA4szm5y3UAAAAAElFTkSuQmCCCg==); } div.registrationForm div.loginFormFooterBox { padding: 0px 20px 30px 20px; -/* background: url(../images/loginFormBox.png) no-repeat -813px bottom; */ +/* background: url(./images/loginFormBox.png) no-repeat -813px bottom; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat -813px bottom; } div.registrationForm ul { padding: 8px 15px 8px 15px; border-top: 1px dotted #ff9400; } /* @end */ /* @end */ /* @group Registration splash */ div#splashMessage table { width: auto; color: #333366; font-size: 10pt; padding: 10px; } div#splashMessage span { color: #666666; } div#splashMessage table span.label { color: #999999; padding-right: 10px; } div#splashMessage table span.value { color: #666666; font-weight: bold; } div#splashMessage input { margin-right: 5px; } /* @end */ /* @group Browser compatibility box */ div.browserCompatibilityBox { color: #666666; padding: 0px 0px; /* border: 4px solid #ff9400; */ font-weight: bold; text-align: center; width: 400px; } div.browserCompatibilityBox p { margin: 0px 50px; } div.browserCompatibilityBox a { color: #666666; } /* @end */ /* @group Language switch */ li#loginPanel { padding: 0px 15px; } div.loginPanelSwitchLanguageBox { color: #666666; padding: 12px 0px 10px 0px; /* border: 4px solid #ff9400; */ font-weight: bold; text-align: center; height: 75px; -/* background: url(../images/languageBox.png) no-repeat 19px -15px; */ +/* background: url(./images/languageBox.png) no-repeat 19px -15px; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat 19px -15px; width: 400px; margin: 0px; } option.disabledOption { color: #999999; } /* @end */ /* @end */ /* @group Record page */ div.mainPanelMinHeightDiv { width: 15px; min-width: 15px; height: 200px; } table#mainPanelTABLE { width: 100%; } /* @group Direct logins */ div#directLoginsBlock { width: 230px; padding: 0px; /* border: 4px solid #ff9400;*/ -/* background: url(../images/directLoginBox.png) repeat-y -262px bottom; */ +/* background: url(./images/directLoginBox.png) repeat-y -262px bottom; */ background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAvIAAAAtCAIAAABDDhjIAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAtrSURBVHja7J1tjFxVGcefnZk77y+727VbK9uXLRpNS0X6gpRaMFqoigpIodX4xS8axQ9GEqNBjVFp1QThAxGIgRhNmhQIRWOpDQ1xS6XEVtjSwhbqlr5tbWd3Z99mZ+7Om2fm2Xnu6ey2mTszt7uw/1+am7kzNws597n3/O5zznluU6FQIABAmXw+n8lkTNNMpVJjY2MjIyOJRGJwcPCeC1utg76XQUOBq8Fjhnx8tn3HvHnzmpubo9FoKBQKBoM+n88wDJfLdYU/sHr1tw8deqLKgE8mk8PDw0NDQwMDAwh4MBsCvqWlJRKJhMPhQCBQTcArXGhGAACYyzSV0HfRJmA2hGVFiFYZmdAaMLdQD69oBAAgMeCDCrQGAAAAANAaAAAAH1AKpGVx8jk0CHCcfHb68IPWAAAAqA0ek1LbFEWtb1MX0DLAcZLn5eN4U7NMprE7TgqtAQAA2MwlXYjaqn5F62/60ETAccbOWBFHLXo06s4NrQEAAFCV2fDSWbVVn5NNMeu3/iNoH+A48dctrXG16NFoK3MDrQEAgLkuNFaXUO5L4q5O64jeF9BKwHF6d8nHi65l4jR2/wy0BgAAYDZN8ljsKnHGuMH6+ew+SifQSsBBkn3U1yV7pz2rOA4lIKv3G2gNAADMdafhPoP7D7fbrbZjxjWJwvzJI3ImHd6GhgIO8tovqJDnjxcKHWnjQx6PR6LRVjk+j3P/kxWvZcBbGsCVb6xVfgkAcOIC5P5DN5tjdNN6Kg8/HXmMVnyHYp1oK9B4+rvp7adl72hhnbsEm40tp3FEa1hfeJvP5yucRv8VACqP5U/74ChxAr8BwOmHCs72c19iGIbX633LfeuKbFezqzT8lJ+gF++hu7vIG0aLgUaS6qcX7y2WqikRzy/4r3d9i2GoOGS9VtuZ0RrxFYaFRm0LGlP9BszxO2mFzcjQvtpyCPGzI/wGAEevREnSeEoYJdzewCvpTXd4d0weOvAm7d1Km54hjx/tBhrDxAjt/hqN9MoXXbk7PEWpLsLRKGZT5QybBmiNJGZEaAR9l7TkjQgQzulcvplWVCOQ2WEyR0yHj1cxA7MBwImLUa41ydb4fL6TnjXHJt5c7j06eeipPfTcBvrCMxRdjHYD9ZLoKTrN0DvyxaH0mvO+5a1+vwo/o4w4TZV/tV6tEZXhba4Ef8ibY57zL3v7XnIn33OnL7rTF5qySZxHMH0gGZGcvz3nn5+LLDM/vDG78JYmj5/vsPpgv926TACAarSGLy51lXFHwk7jL/GPxOYoJTq85yaP7n+ddq6mTz1AK+8nI4TWA7WQTlD3I9T9KGUsK3jX7Owq3BXx+Tj2OFvDk2zkydZxrdHzMbkymUzGNXg0eOxh/4WXm/ImTh+o6saaGfWof6MnKP6vYO+fC55gasFtqRU/zMau5TykijTxG6RtAHDCbPha050mEAiYZvS50W9soacWePsnjzaH6OCD9MbvqfMu6vgcta8lb4yMMLncaElwGV3IUmaMzASdf7VYL6B3V3H4SeO0ufCF9JZALKhQgacikA1bzOZqzK2RYSalMtky+eFToaO/CZ3dJdN/AKjlJpsdD57dFTz3t+SSrePLH8iG2iW+SavRBLMBoCFOQ+XpNfoIlOpgJkoMZ9qeGvnWF/3PXx9+V3vgHqC3/lj8B0B9HBxd+ZL5pXCsJVhCyTSbDSdsbKVqatcacRq2mUwJ19l9bYfud2VHcZJAYyjkQif/4u/bM3jjk+n5aznEVdSxvOt3ZABAPfDEfL6ylNZwtkbd1ZXTqC1n4p8f3fyeeeC25oNBN9LwoDGMZAO7E5/poTWRSCQcDodCITYbcRqpO+DsIJTMAuYhJ457X88TrW9vk3I6k8SupaVfoUUbKdxBoYXkjeAsgukxh4tVJkdPFecknvyr/s4zt9nftv++gZW/SnVuUbFufQ+zAaBxyDiUurerh1V1ramtTJfkBR9vjK3/T991N/pf+2xrd9A9gUYD9QjNvsQNh9OrvMFYJBRSWqOchs2mIltjawSqFq2pcBrTNJXW+HqebO156JLj2q6ndduo4/M4eaAqfLHiv9ZP0OJNtOGR4sjrqw/S0PHJG24h09b9ozi50ks3k1YdQEU878JsAKjfaThhw9NrxGaU3PDSEJ5TnPR4Dozf2nV67Udcpz8aOPOx4Llm77jPlfW5MoYrj5YE05LJu828J53zJLKR48mFJ9KLzucXebz+QDjANqOIRqNKbngQiufWyJIRWy9PsK01svSJnUZRHHs6vl27Ptx0829p5fcJPQ2omc47acmX6dCv6d+/tFT5yE/6Ah3pBZ/Wy9jYFXkAwBXkRl1Q6vauehS9VIf8JNKTSvn+ZwbPjC/bO1KaVVlePqI/AKM953gsVWx5wYeEUMjnC5RQHsNJGk7YsNbwAm+7k4Vr0RrJ0/B8momJiWzi5KLuH1hjT94obdpZnBsPQJ243LT2Z9S2kvZ+k3Jpztm0H/7u2Q27iRboFbW5ngHkBoD6EzZUSoLqZVT5KtM7JJ55w6l6mXkjAoSCZKDyXl6uRiaTtziKeLCJVUaZjcwX5lp8rDV2UzX2tEZ8XDmNimYV0+l0urXnYWuOcJMLTgMan7bZ+Cfac99kvGYGIz2PDl33c71qH5Xm2WAoCoD6zUZm2EjFVPmStYadRt38uRfg+TdTEzaQG0Ba2VV5DYKuNVxBQG1ZaGRXqvDJHd7ZbA2LOQd0Id7dcvHv1s83/w5OAxrPsrtpzU9lNKq1b2fimq+b7o9L6UmeEwCnAaBRORt1Qal+haas/S4NP6U4VaPIZDK8GFbP1mD4CejhpGdreP4vW4uvjF9D7XKY6TOFnRqEYnOXgns8sab95ONWfZq2Txbn0wDgBKt+TO/soOETxRAv5Fp6H4+Ht+uvrSdtYRQAoM5+SO9R9FQNP2TL8JNojf7CHORpQEU4yfOnDGVywkbkxltG8jS2XgJVu9ZULoBKDsUSB6wj1m3HHGHgFG6DbnqI9tzLe82D/zyXSk6UX4SmwpIHoQgzbABo3BO27OrDB9wVsdPw8JOkanSn0eUGojOnIudyWqMnbKSeNW/1gsJSf682p7GtNVJQWKl6oP8VV6FctyC2DGu5gbN03lksfZTsK0pObswbP2D6N3rK2C1DCQCo0mwqEjaq+5GBp4pZNaI18BggSBTJe8fkNR0syvJ6hIrl3DXfz6vSGv3V3Ow0itaB/dYRS7+KkwecvtEWw+zoH3gvOrg/3n6L0ny5q+JOCkBjzUafWKMMhnsjvuIueauxtgZq2mwNmMtyLLGk52zcGrIrv1J9eXfb2RoZhPKmrTqwxTrCADjN4ttFa3yp0yoIpRCqmA0SNgA0/FGbuxnWFy5soyPPvRAaUI0i6+tYK76hRkwksJetkUGo4tsSsoPWEeEOnDngOJEl8tGXifN0RY5JwzAk+w2zAcAJuZFifTLkROXCH1OTNJAbqMy0ZqOnbURlGlt7rFqtETFnpym+MSQ7YB0RWoizCJzXGsue/dl4xSoMZGsAuDpyw+9Y0G1m2kXdMBuYzdRdfdKMngts4H/X3gLvbBnVo3gKaetnvMMSXAW8UStwC2nWGk4iYm4NAFetr5JOSC46vbwCrkRwObOp8ifHtUZKaEvukdP+OGFgZhHJ1of5ayhJCQBoYKeFjCmYWartA/RxKDYbtB2YWfSZwihsCgAAoFqt0WeBQWvALEHSh1PfHgwAAABacyWt0astSZUCAGZWa6aWN8W4PgAAQGuqMhvS5tmg4cCMo0cjnAYAAIANranoSJCtATOOJGlgMwAAAGxrDToPMDtBZAIAALCtNXoXgo4EQGgAAAC877UGAAAAAABaAwAAAAAwa7QGOX8AAAAAvI+1ZqrKYBkUmA1MXdoN7QYAgDnO/wUYABme+D8+TaFnAAAAAElFTkSuQmCCCg==) repeat-y -262px bottom; } div#directLoginsBlock div.directLoginsBlockHeaderBox { -/* background: url(../images/directLoginBox.png) no-repeat -11px -13px; */ +/* background: url(./images/directLoginBox.png) no-repeat -11px -13px; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat -11px -13px; } div#directLoginsBlock h3 { text-align: center; color: #666666; padding-top: 12px; padding-bottom: 5px; margin: 0px 10px 0px 10px; border-bottom: 1px dotted #ff9400; font-size: 12pt; } ul#directLogins { /* padding: 7px 20px 45px 20px; */ padding: 7px 12px 45px 12px; min-height: 200px; -/* background: url(../images/directLoginBox.png) no-repeat -513px bottom; */ +/* background: url(./images/directLoginBox.png) no-repeat -513px bottom; */ background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAvIAAAAtCAIAAABDDhjIAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAtrSURBVHja7J1tjFxVGcefnZk77y+727VbK9uXLRpNS0X6gpRaMFqoigpIodX4xS8axQ9GEqNBjVFp1QThAxGIgRhNmhQIRWOpDQ1xS6XEVtjSwhbqlr5tbWd3Z99mZ+7Om2fm2Xnu6ey2mTszt7uw/1+am7kzNws597n3/O5zznluU6FQIABAmXw+n8lkTNNMpVJjY2MjIyOJRGJwcPCeC1utg76XQUOBq8Fjhnx8tn3HvHnzmpubo9FoKBQKBoM+n88wDJfLdYU/sHr1tw8deqLKgE8mk8PDw0NDQwMDAwh4MBsCvqWlJRKJhMPhQCBQTcArXGhGAACYyzSV0HfRJmA2hGVFiFYZmdAaMLdQD69oBAAgMeCDCrQGAAAAANAaAAAAH1AKpGVx8jk0CHCcfHb68IPWAAAAqA0ek1LbFEWtb1MX0DLAcZLn5eN4U7NMprE7TgqtAQAA2MwlXYjaqn5F62/60ETAccbOWBFHLXo06s4NrQEAAFCV2fDSWbVVn5NNMeu3/iNoH+A48dctrXG16NFoK3MDrQEAgLkuNFaXUO5L4q5O64jeF9BKwHF6d8nHi65l4jR2/wy0BgAAYDZN8ljsKnHGuMH6+ew+SifQSsBBkn3U1yV7pz2rOA4lIKv3G2gNAADMdafhPoP7D7fbrbZjxjWJwvzJI3ImHd6GhgIO8tovqJDnjxcKHWnjQx6PR6LRVjk+j3P/kxWvZcBbGsCVb6xVfgkAcOIC5P5DN5tjdNN6Kg8/HXmMVnyHYp1oK9B4+rvp7adl72hhnbsEm40tp3FEa1hfeJvP5yucRv8VACqP5U/74ChxAr8BwOmHCs72c19iGIbX633LfeuKbFezqzT8lJ+gF++hu7vIG0aLgUaS6qcX7y2WqikRzy/4r3d9i2GoOGS9VtuZ0RrxFYaFRm0LGlP9BszxO2mFzcjQvtpyCPGzI/wGAEevREnSeEoYJdzewCvpTXd4d0weOvAm7d1Km54hjx/tBhrDxAjt/hqN9MoXXbk7PEWpLsLRKGZT5QybBmiNJGZEaAR9l7TkjQgQzulcvplWVCOQ2WEyR0yHj1cxA7MBwImLUa41ydb4fL6TnjXHJt5c7j06eeipPfTcBvrCMxRdjHYD9ZLoKTrN0DvyxaH0mvO+5a1+vwo/o4w4TZV/tV6tEZXhba4Ef8ibY57zL3v7XnIn33OnL7rTF5qySZxHMH0gGZGcvz3nn5+LLDM/vDG78JYmj5/vsPpgv926TACAarSGLy51lXFHwk7jL/GPxOYoJTq85yaP7n+ddq6mTz1AK+8nI4TWA7WQTlD3I9T9KGUsK3jX7Owq3BXx+Tj2OFvDk2zkydZxrdHzMbkymUzGNXg0eOxh/4WXm/ImTh+o6saaGfWof6MnKP6vYO+fC55gasFtqRU/zMau5TykijTxG6RtAHDCbPha050mEAiYZvS50W9soacWePsnjzaH6OCD9MbvqfMu6vgcta8lb4yMMLncaElwGV3IUmaMzASdf7VYL6B3V3H4SeO0ufCF9JZALKhQgacikA1bzOZqzK2RYSalMtky+eFToaO/CZ3dJdN/AKjlJpsdD57dFTz3t+SSrePLH8iG2iW+SavRBLMBoCFOQ+XpNfoIlOpgJkoMZ9qeGvnWF/3PXx9+V3vgHqC3/lj8B0B9HBxd+ZL5pXCsJVhCyTSbDSdsbKVqatcacRq2mUwJ19l9bYfud2VHcZJAYyjkQif/4u/bM3jjk+n5aznEVdSxvOt3ZABAPfDEfL6ylNZwtkbd1ZXTqC1n4p8f3fyeeeC25oNBN9LwoDGMZAO7E5/poTWRSCQcDodCITYbcRqpO+DsIJTMAuYhJ457X88TrW9vk3I6k8SupaVfoUUbKdxBoYXkjeAsgukxh4tVJkdPFecknvyr/s4zt9nftv++gZW/SnVuUbFufQ+zAaBxyDiUurerh1V1ramtTJfkBR9vjK3/T991N/pf+2xrd9A9gUYD9QjNvsQNh9OrvMFYJBRSWqOchs2mIltjawSqFq2pcBrTNJXW+HqebO156JLj2q6ndduo4/M4eaAqfLHiv9ZP0OJNtOGR4sjrqw/S0PHJG24h09b9ozi50ks3k1YdQEU878JsAKjfaThhw9NrxGaU3PDSEJ5TnPR4Dozf2nV67Udcpz8aOPOx4Llm77jPlfW5MoYrj5YE05LJu828J53zJLKR48mFJ9KLzucXebz+QDjANqOIRqNKbngQiufWyJIRWy9PsK01svSJnUZRHHs6vl27Ptx0829p5fcJPQ2omc47acmX6dCv6d+/tFT5yE/6Ah3pBZ/Wy9jYFXkAwBXkRl1Q6vauehS9VIf8JNKTSvn+ZwbPjC/bO1KaVVlePqI/AKM953gsVWx5wYeEUMjnC5RQHsNJGk7YsNbwAm+7k4Vr0RrJ0/B8momJiWzi5KLuH1hjT94obdpZnBsPQJ243LT2Z9S2kvZ+k3Jpztm0H/7u2Q27iRboFbW5ngHkBoD6EzZUSoLqZVT5KtM7JJ55w6l6mXkjAoSCZKDyXl6uRiaTtziKeLCJVUaZjcwX5lp8rDV2UzX2tEZ8XDmNimYV0+l0urXnYWuOcJMLTgMan7bZ+Cfac99kvGYGIz2PDl33c71qH5Xm2WAoCoD6zUZm2EjFVPmStYadRt38uRfg+TdTEzaQG0Ba2VV5DYKuNVxBQG1ZaGRXqvDJHd7ZbA2LOQd0Id7dcvHv1s83/w5OAxrPsrtpzU9lNKq1b2fimq+b7o9L6UmeEwCnAaBRORt1Qal+haas/S4NP6U4VaPIZDK8GFbP1mD4CejhpGdreP4vW4uvjF9D7XKY6TOFnRqEYnOXgns8sab95ONWfZq2Txbn0wDgBKt+TO/soOETxRAv5Fp6H4+Ht+uvrSdtYRQAoM5+SO9R9FQNP2TL8JNojf7CHORpQEU4yfOnDGVywkbkxltG8jS2XgJVu9ZULoBKDsUSB6wj1m3HHGHgFG6DbnqI9tzLe82D/zyXSk6UX4SmwpIHoQgzbABo3BO27OrDB9wVsdPw8JOkanSn0eUGojOnIudyWqMnbKSeNW/1gsJSf682p7GtNVJQWKl6oP8VV6FctyC2DGu5gbN03lksfZTsK0pObswbP2D6N3rK2C1DCQCo0mwqEjaq+5GBp4pZNaI18BggSBTJe8fkNR0syvJ6hIrl3DXfz6vSGv3V3Ow0itaB/dYRS7+KkwecvtEWw+zoH3gvOrg/3n6L0ny5q+JOCkBjzUafWKMMhnsjvuIueauxtgZq2mwNmMtyLLGk52zcGrIrv1J9eXfb2RoZhPKmrTqwxTrCADjN4ttFa3yp0yoIpRCqmA0SNgA0/FGbuxnWFy5soyPPvRAaUI0i6+tYK76hRkwksJetkUGo4tsSsoPWEeEOnDngOJEl8tGXifN0RY5JwzAk+w2zAcAJuZFifTLkROXCH1OTNJAbqMy0ZqOnbURlGlt7rFqtETFnpym+MSQ7YB0RWoizCJzXGsue/dl4xSoMZGsAuDpyw+9Y0G1m2kXdMBuYzdRdfdKMngts4H/X3gLvbBnVo3gKaetnvMMSXAW8UStwC2nWGk4iYm4NAFetr5JOSC46vbwCrkRwObOp8ifHtUZKaEvukdP+OGFgZhHJ1of5ayhJCQBoYKeFjCmYWartA/RxKDYbtB2YWfSZwihsCgAAoFqt0WeBQWvALEHSh1PfHgwAAABacyWt0astSZUCAGZWa6aWN8W4PgAAQGuqMhvS5tmg4cCMo0cjnAYAAIANranoSJCtATOOJGlgMwAAAGxrDToPMDtBZAIAALCtNXoXgo4EQGgAAAC877UGAAAAAABaAwAAAAAwa7QGOX8AAAAAvI+1ZqrKYBkUmA1MXdoN7QYAgDnO/wUYABme+D8+TaFnAAAAAElFTkSuQmCCCg==) no-repeat -513px bottom; } ul#directLogins li { border-top: 1px solid white; border-bottom: 1px solid white; padding: 1px 0px; width: 206px; } ul#directLogins li.hover { border-top: 1px solid #ffc880; border-bottom: 1px solid #ffc880; background-color: #fff9f2; cursor: pointer; } ul#directLogins li img { width: 16px; height: 16px; } ul#directLogins li div { } /* @group Direct logins description */ div#directLoginsDescription { padding: 6px 20px 50px 20px; color: #999999; font-size: 10pt; -/* background: url(../images/directLoginBox.png) no-repeat -513px bottom; */ +/* background: url(./images/directLoginBox.png) no-repeat -513px bottom; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat -513px bottom; } div#directLoginsDescription p { padding-bottom: 8px; } div#directLoginsDescription a { color: #333366; } div#directLoginsDescription ul { padding-left: 20px; list-style-position: outside; list-style-type: circle; color: #ff9400; padding-bottom: 10px; } div#directLoginsDescription ul li { padding-bottom: 3px; } div#directLoginsDescription ul li p { display: inline; color: #999999; } /* @end */ /* @group Direct login [open] */ ul#directLogins li a.directLoginItemTitle { color: #336; font-size: 10pt; line-height: 16px; } ul#directLogins li table { width: 100%; } ul#directLogins li a.directLoginItemTitle:hover { text-decoration: underline; } /* @end */ /* @group Direct login [edit] */ ul#directLogins li a.directLoginItemEditButton { visibility: visible; color: white; font-size: 8pt; /* background-color: #ff9400;*/ padding: 0px 5px; line-height: 14px; } ul#directLogins li.hover a.directLoginItemEditButton { visibility: visible; color: #ff9400; /* border-top: 3px solid #fff9f2;*/ } ul#directLogins li.hover a.directLoginItemEditButton:hover { color: #35306b; } /* @end */ /* @end */ /* @group Records */ div#recordListBlock { width: 250px; min-height: 200px; } div#recordListFilterHeader { -/* background: url(../images/cardFiltersSprite.gif) repeat-x 0 -114px; */ +/* background: url(./images/cardFiltersSprite.gif) repeat-x 0 -114px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) repeat-x 0 -114px; } /* @group Record filters */ div#recordFiltersTableWrapper { /* padding: 0px; border: 0px; margin: 0px; */ margin-left: 15px; padding-left: 1px; -/* background: url(../images/cardFiltersSprite.gif) no-repeat left -38px; */ +/* background: url(./images/cardFiltersSprite.gif) no-repeat left -38px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) no-repeat left -38px; height: 19px; } div#recordFiltersDIV table { padding-right: 1px; -/* background: url(../images/cardFiltersSprite.gif) no-repeat right -19px; */ +/* background: url(./images/cardFiltersSprite.gif) no-repeat right -19px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) no-repeat right -19px; } div#recordFiltersDIV table tbody tr td { cursor: pointer; height: 19px; } div#recordFiltersDIV table tbody tr td div { -/* background: url(../images/cardFiltersSprite.gif) no-repeat right -38px; */ +/* background: url(./images/cardFiltersSprite.gif) no-repeat right -38px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) no-repeat right -38px; } div#recordFiltersDIV table tbody tr td div a { display: block; padding: 0px 10px; font-size: 8pt; color: white; line-height: 19px; height: 19px; -/* background: url(../images/cardFiltersSprite.gif) no-repeat left -19px; */ +/* background: url(./images/cardFiltersSprite.gif) no-repeat left -19px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) no-repeat left -19px; } div#recordFiltersDIV table tbody tr td:hover div a { color: #ff9400; } /* @group selected */ div#recordFiltersDIV table tbody tr td.selectedTab { height: 19px; -/* background: url(../images/cardFiltersSprite.gif) repeat-x -57px; */ +/* background: url(./images/cardFiltersSprite.gif) repeat-x -57px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) repeat-x -57px; } div#recordFiltersDIV table tbody tr td.selectedTab div { -/* background: url(../images/cardFiltersSprite.gif) no-repeat right -95px; */ +/* background: url(./images/cardFiltersSprite.gif) no-repeat right -95px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) no-repeat right -95px; } div#recordFiltersDIV table tbody tr td.selectedTab div a { -/* background: url(../images/cardFiltersSprite.gif) no-repeat left -76px; */ +/* background: url(./images/cardFiltersSprite.gif) no-repeat left -76px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCFAOYAAISEuaen6ZSU0KCg4IKCt8zM9bOz0qWl552d3JGRzJqb2Gpqlaio7MfH7oeHvcTF6snJ8ZeX1IKCtr+/48HB5cLC6La216Oj5IyLxLy83nd3p3JyoGdnkrm53Li42YCAtMvL9LKy0W5umnl5qo6OyHR1o3BwnY+PqcrK8nt7rrW11X5+sYaFuuDg+WZmj7294Gtrl9HR5MbG7LS01KOjxH5+somJwYaHvH9/so+OyIaGvJKSzamp7IuMxImJwJua2JeX1aKj5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAABAIUAAAd8gAUMAQcXAwgKEQIJJBg2NwAEBjUtICgQDTIPFRQTLxkdHhYqMzEhNA4sABIfKykjGiUbJiIwCxwnLgUEADo+PTk7AkA/CANBBwE8BjgtHAswIiYbJRojKSsfEgAsDqY0MyoWHh0ZLxMUFQ8yDRAoILmChIaIioyOkJI1gQA7Cg==) no-repeat left -76px; } div#recordFiltersDIV table tbody tr td.selectedTab:hover div a { color: white; } /* @end */ /* @group record filter - SEARCH */ div#recordFiltersSearchPanel { position: absolute; } div#recordFiltersSearchInnerPanel { padding: 10px 24px 25px 24px; -/* background: url(../images/recordFilterBackground.png) no-repeat -10px -138px; */ +/* background: url(./images/recordFilterBackground.png) no-repeat -10px -138px; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat -10px -138px; } form#recordFilterSearchForm { } input#recordFilterSearchValue { width: 200px; } /* @end */ /* @end */ /* div#mainContent { padding-left: 15px; } */ div#recordListAndDetailBlock { } table#recordListAndDetailBlockTABLE { width: 100%; -/* background: url(../images/cardBlockLowerBorder.gif) repeat-x 0 bottom; */ +/* background: url(./images/cardBlockLowerBorder.gif) repeat-x 0 bottom; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhBwAZANUAAP///6qq7tzc+OLi+eXl+vz8/v7+/9/f+dnZ9/b2/fr7/vT0/fv7/vLy/Ojo+vj5/vT1/dnZ+Ovq++3t+/n5/e3t/Orq+/n5/u7t/Orr+/Dv/PPy/PLy/e/v/OXk+tna9/38/uvq+ufn++Df+P7+/vX1/fj5/fz9/+jo+9/f+Ojn++/w/P79//v6/vb3/efo+u3u/Pf3/ejn+vDw/PDw+/X0/e/w+/f2/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAHABkAAAZoQIBwSCwaj8ikEkAyOFnOAqhALZwYCkZLkaVQHpfLw+SKJRK3M2RRKy0WkA2H06hvNDMbbdXRVCYYMBUYExYSIRkSGRYiMi8qDg4oBJSVHgOYmQMpIweengKhogIIEREIHwgIAaytAUEAOwo=) repeat-x 0 bottom; } td#recordDetailSeparatorTD { border-bottom: 1px solid #aaaaee; } table#recordListAndDetailBlockTABLE tbody tr td { } div#recordListBlockHeader { background-color: #333366; /* border-bottom: 2px solid #aaaaee; */ } div#recordListBlockHeader table.recordListBlockHeaderTABLE { width: 100%; height: 30px; color: white; -/* background: url(../images/cardsBlockRoundCorners.gif) no-repeat right -51px; */ +/* background: url(./images/cardsBlockRoundCorners.gif) no-repeat right -51px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhCQBkALMMAP///z8/b7e3yaKiufX19zQ0Zzw8bVxchaSkuz4+bltbhDk5av///wAAAAAAAAAAACH5BAEAAAwALAAAAAAJAGQAAARTEEhAhgplimCYl8jijYAwnkRwjkO3MsfrJTJT1Hiu73zv/8CgcEgsGo/IpHJZKyQOA8IEMDIEBJMXQvJaYGUBgswwqClqKtmNyW673/C4fE4/RgAAOwo=) no-repeat right -51px; } div#recordListBlockHeader table.recordListBlockHeaderTABLE tbody tr td.recordBlockTitleTD { -/* background: url(../images/cardsBlockRoundCorners.gif) no-repeat left 0px; */ +/* background: url(./images/cardsBlockRoundCorners.gif) no-repeat left 0px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhCQBkALMMAP///z8/b7e3yaKiufX19zQ0Zzw8bVxchaSkuz4+bltbhDk5av///wAAAAAAAAAAACH5BAEAAAwALAAAAAAJAGQAAARTEEhAhgplimCYl8jijYAwnkRwjkO3MsfrJTJT1Hiu73zv/8CgcEgsGo/IpHJZKyQOA8IEMDIEBJMXQvJaYGUBgswwqClqKtmNyW673/C4fE4/RgAAOwo=) no-repeat left 0px; } /* table#recordListButtonsTABLE { width: auto; margin-right: 10px; position: static; float: right; } */ div#recordListBlockHeader table.recordListBlockHeaderTABLE h3 { color: white; padding-left: 10px; padding-top: 3px; } div#recordListBlock h3 { padding: 8px 0px 2px 10px; /* margin-right: 8px; */ color: #666666; } div#recordListBlockHeaderButtons { padding-top: 5px; padding-right: 0px; } div.recordButton { padding: 2px; } td#recordDetailSeparatorTD { width: 1px; } ul#records { margin-top: 6px; list-style-type: none; padding-bottom: 15px; } ul#records li { list-style-position: inside; padding: 1px 5px 1px 8px; border: 1px solid white; color: #35306b; } ul#records li.hover { color: #ff9400; border: 1px solid #f5f5ff; border-top: 1px solid #aaaaee; border-bottom: 1px solid #aaaaee; background-color: #f5f5ff; } ul#records li.selected { background-color: #ddddff; color: #ff9400; border: 1px solid #ddddff; /* border: 2px solid #35306b; */ /* border-right: 1px dotted #333366; */ padding: 1px 6px 1px 8px; /* background-color: #35306b; */ } ul#records li span { color: #35306b; text-decoration: none; line-height: 16px; font-size: 10pt; cursor: pointer; } ul#records li.selected span { /* color: white; */ color: #333366; } /* @group Bottom rounded corners */ td#cardBoxLowerLeftTD { -/* background: url(../images/cardBlockLowerRoundedCorner.gif) no-repeat left -32px; */ +/* background: url(./images/cardBlockLowerRoundedCorner.gif) no-repeat left -32px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhCQBkANUyAP////Ly/PDw/O3t/OLi+ejo+vz8//n5/urq++Xl+tzc+Ovr+/z8/t/f+Pv6/vb3/fT0/f7+//v7/vT1/efo+/79/8vL9fr6/uXl+e3t+/3+/9jY9/b2/vX1/d/f+ff2/fb2/fj5/uHh+dnZ+OLi+rOz8NnZ99vb+LKy7/r7/6ur7sDA8vLy/f7+/vn4/u/w/Pj4/vX0/P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAAAAAJAGQAAAb3QJlwSCwaj8ikcslsOp/QqHRKfQKu2Kx2y+16v+BtRFNpjSuRisHAYKzdDMfFIZE7UpfQYa8/wFwfDyAcgSAPHB0QExCJExMxAZGSkSwClpeWLwObnAMZGQsLCAiipAgUFAUFqaoFGwkJGLCyGBIEBCS3uQQAIhYNwA0eHlcnFgrIyFgiJRYmIyNZEhsrKCpV2Nna29zd3t9h4eLj5FdoFRoRLegRcG9uBhcpdnVzLjB8ewchHIIPHxwMfYjhiJEiRiwmTXqBCdOnTpxMSQzVapUqVLRmwdqgqyMBCcOCNbAgAkAyZBZOXIFmwkKJkldUoFixQUKWIAA7Cg==) no-repeat left -32px; } td#cardBoxLowerRightTD { -/* background: url(../images/cardBlockLowerRoundedCorner.gif) no-repeat right -82px; */ +/* background: url(./images/cardBlockLowerRoundedCorner.gif) no-repeat right -82px; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhCQBkANUyAP////Ly/PDw/O3t/OLi+ejo+vz8//n5/urq++Xl+tzc+Ovr+/z8/t/f+Pv6/vb3/fT0/f7+//v7/vT1/efo+/79/8vL9fr6/uXl+e3t+/3+/9jY9/b2/vX1/d/f+ff2/fb2/fj5/uHh+dnZ+OLi+rOz8NnZ99vb+LKy7/r7/6ur7sDA8vLy/f7+/vn4/u/w/Pj4/vX0/P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAAAAAJAGQAAAb3QJlwSCwaj8ikcslsOp/QqHRKfQKu2Kx2y+16v+BtRFNpjSuRisHAYKzdDMfFIZE7UpfQYa8/wFwfDyAcgSAPHB0QExCJExMxAZGSkSwClpeWLwObnAMZGQsLCAiipAgUFAUFqaoFGwkJGLCyGBIEBCS3uQQAIhYNwA0eHlcnFgrIyFgiJRYmIyNZEhsrKCpV2Nna29zd3t9h4eLj5FdoFRoRLegRcG9uBhcpdnVzLjB8ewchHIIPHxwMfYjhiJEiRiwmTXqBCdOnTpxMSQzVapUqVLRmwdqgqyMBCcOCNbAgAkAyZBZOXIFmwkKJkldUoFixQUKWIAA7Cg==) no-repeat right -82px; } /* @end */ /* @group New record panel */ div#newRecordPanel { position: absolute; margin-left: 20px; width: 400px; height: 160px; } div#newRecordInnerPanel { width: 400px; height: 160px; -/* background: url(../images/newRecordPanelBackground.png) no-repeat 0 -165px; */ +/* background: url(./images/newRecordPanelBackground.png) no-repeat 0 -165px; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat 0 -165px; } div.newRecordInnerInnerPanel { background-color: white; padding: 0px; margin-left: 23px; margin-right: 25px; } div#newRecordPanel h2 { color: #666666; font-size: 12pt; font-weight: bold; padding: 5px 10px; } div#newRecordPanel table#newRecordPanelDataTABLE { width: 340px; color: #999999; padding-bottom: 5px; } div#newRecordPanel table td.newRecordPanelLabelTD { padding-left: 10px; padding-top: 3px; font-size: 9pt; width: 100px; } div#newRecordPanel table td.newRecordPanelLabelTD span { font-size: 8pt; } div#newRecordPanel input { width: 100%; } /* div#newRecordPanel textarea { width: 100%; height: 50px; } */ div#newRecordPanelButtonsBox { border-top: 1px dotted #333366; padding-top: 5px; } div#newRecordPanelButtonsBox table#newRecordPanelButtonsBoxTABLE { width: 100%; } div#newRecordPanelButtonsBox table tbody tr td.newRecordPanelButtonTD { padding-right: 10; } /* @end */ /* @end */ /* @group Record detail */ div.recordDetailDataBox { padding: 0px; padding-top: 5px; /* padding: 0px 0px 0px 10px; */ } div#recordDetail { border-top: 4px solid #ddddff; } div#recordDetail table.recordDetailDataBoxTABLE { width: 100%; } div#recordDetail form table tbody { color: #35306b; font-size: 10pt; } div.recordTitleBlock { color: #666666; padding: 8px; font-size: 12pt; } div.recordTitleBlock h2 { color: #333366; } form.processingRecordFORM div.recordTitleBlock { color: #444444; background-color: #ddddff; padding: 8px; /* margin-right: 8px; */ font-size: 12pt; } form.recordDataForm div.recordTitleBlock { color: #444444; background-color: #ddddff; padding: 8px; font-size: 12pt; /* margin-right: 8px; */ } div.recordTitleBlock input { width: 100%; } span.noteFieldLabel { display: block; color: #cccccc; font-size: 8pt; } div.noteFieldContent { color: #666666; font-size: 8pt; padding: 3px 0px 5px 0px; /* border-bottom: 1px dotted #333366; */ margin-bottom: 5px; } .resizable-textarea { /* width: 95%; */ } .resizable-textarea .grippie { height: 5px; -/* background: #eee url(../images/grippie.png) no-repeat center 1px; */ +/* background: #eee url(./images/grippie.png) no-repeat center 1px; */ background: #eee url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAFCAMAAACD1meMAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAGUExURbu7u////3iwjPUAAAACdFJOU/8A5bcwSgAAABRJREFUeNpiYMADGHEDBhroAwgwAA9QADeT0qnSAAAAAElFTkSuQmCCCg==) no-repeat center 1px; border: 1px solid #ddd; border-top-width: 0; cursor: s-resize; } div.noteFieldContent textarea { /* margin-right: 10px;*/ font-size: 8pt; width: 100%; height: 50px; /* color: #666666; */ } div.noteFieldContent div.viewMode { /* max-height: 100px; */ overflow: auto; } tr.recordFieldsTR { background-color: #ff9400; /* #ffc880 */ } tr.recordFieldsTR td { padding: 2px 0px 1px 0px; color: white; font-size: 9pt; border-bottom: 6px solid white; /* border-left: 1px solid white; */ } div.Clipperz_recordFieldLabel { color: #999999; } div.Clipperz_recordFieldLabel input { font-size: 10pt; width: 100%; /* color: #666666; */ } div.Clipperz_recordFieldData { color: #666666; } div.Clipperz_recordFieldData a { color: #333366; } div.Clipperz_recordFieldData input { font-size: 10pt; width: 100%; /* color: #666666; */ } /* td.removeFieldButton { padding-left: 10px; } */ /* div.addFieldButton { padding-left: 8px; } */ td.fieldTypeTD { width: 70px; color: #999999; white-space: nowrap; overflow: hidden; text-align: right; } td.fieldTypeTD select { min-width: 68px; width: 68px; font-size: 10pt; } table.recordDetailButtonsTABLE { width: 100%; } /* @group Scrambled value */ div.Clipperz_recordFieldData a.scrambleLink { display: block; text-align: left; font-size: 8pt; text-decoration: none; color: #ff9400; } div.Clipperz_recordFieldData div.passwordBackground, div.passwordEntropy { -/* background: url(../images/entropyBackground.gif) repeat-x 0 0; */ +/* background: url(./images/entropyBackground.gif) repeat-x 0 0; */ background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAQCWAOYAABb8Ev9KAP81AP8hABvxAP86AP95AP9qAP8FAP8HAP9QAP9SAP9wAPCGAP8PAP9jAP8XAP9EAP88AP8+AP9UAP9bAP8bAP8JAP8tAP9WAAj6AAv5AP8rAP8fANSUAP8zANGWAMScAP9AAA/3AP8lADvhAF7PAOyIALGmAI23AC/nAJG2ADPlAHXDAOSMAEfbACfrAL2gAKGuAP8RAM2YAIW8AP9YAMiaAIG+AELdAHrBAGbLAP8ZAP99AD7fABfzAKWsAP9mAP9IAP9GAPuBAP8jAMGeAP9rAP9xAP9CAP8TAP8vADfjAP8VABT0AP9OAPiDAP8dAP9gAFbTAKmqAP9oAPSEAP9iANyQAJW0AJ2vAIq6AP8TEh/vALWkAP91AH6/AP9MAP84AP94AE7XAP82AP8LAP8oAP97AGLOANiSAG7HAP8wAFrRAP8DAOCOAP9tAP9zAP9aAP8nAP8NAGrJAOiKAHHGAFLVAJmyAK2nACPtALmiAErZAP9eACvpACH5BAAAAAAALAAAAAABAJYAAAeJgFxuCAkXZnQOM0pNEDwWUR0DRSRzZxwYS2wfAmViBRITIkkRQ0IBYU8KCxQZNnIVflJXD0FVB0dwDEhxX2MGaD1EUFYNJ3Yub1hqHiA0NyFGMXxeKHpUQDJaeVkrKVs1OGA6LXdrdTtpJm1TeGR9Lzk+JUwsKn8we10EP04jGxoAAgocSLBgwEAAOwo=) repeat-x 0 0; } div.Clipperz_recordFieldData input.scrambledField { font-size: 1pt; width: 71px; height: 16px; color: white; padding-top: 4px; border: 0px solid white; -/* background: transparent url(../images/scrambledValue.png) no-repeat 0 0px; */ +/* background: transparent url(./images/scrambledValue.png) no-repeat 0 0px; */ background: transparent url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAgCAYAAABAQWX9AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANXSURBVHja7FgxixNBFJ6TEyFXxEBiYWFEuCKHcEJio6RRIZAycF3qjWU67xcEr0par04Q7mA7hSAWErVyC1GTIiAmoMUlcHeFQblC53uZWTbJzmZ3cazmwUBm5+ObN9978zb7Nv5wY8Z87ZKRwIjz78SZTqes2+2ywWAQiqTX6xE+jOnkjoE/5OMgkjiTyYTZts3G43GoHRzHIXwY08kdA3/Mx/5acRDR2WymZBmNRoHz5ezwcunkjoF3AsT6ysepnGzKH1AbqufzeZZOp91N2+02PYc1m033eaPRIBzwcnOkM7BYr1QqrFQqaeeOiMdmBT5u8bHnEeJAZBHWn/LxZEGcbDZLKktnZYrCvBsnEgl6ViwWad17v2U6e0XQzR0DbwkhvLVGXq09IRzZxvL/HCjdarXcCFSrVdpcZYg+iqAUoV6vu4f0uz66uGPga6Igk4Z8vOIjFViQQQ7npdNyrjosIgYHECE5D3qT6OKOiHdE9qREtsi5+m0FMjicy+Uoqrir2ERV/TudDh3OsizCwzFg/QqkTu4Y+JqoN0d8PBMi7S8X65XMwf0EOQxFDIfJZDIr7HAEWImBM3DMD6ubOyL+VNQVFN1HQpgjb61R1hxj5vPBiGPE0WibL/tGBJM5Rpz/IM7P8ykbfuiyyThcz+Xb5x7hw5hO7hj46P2c2fmE9d/Z7OwkXM/lx9AhfBjTyR0Df1zeCdHPQUQvfqt7Lmcno8D5cnZ4uXRyx8BH7+dAbah+fTvPtpJpd9OPr9vs+3DOV37cdJ+/ed4gHPAXv+abI53BgfWd+xW2XShp546Id3imFPgb2refw9ccvrbaz7l6LctTfkqE3hSFuRvzCFy+Mm8B3LxdpIN577dMZ68Iurmj4vnhLSGEW2vk1eJri/2cF18Wv62g9Hu75abi7sMqba4yRB9FUIpwr1J3D+l3fXRxx8DXuCiHQpRw/ZzRpx45L52Wc9VhETE4gAjJubLnopE7Ip76N1yUFLIF12ltPwepDuUzN3IUVdxVbNJ/aysi1aHD3S1b7A7HwzFg/QqkTu4YeGSN28+BSKH6Obifuw/mPRcUMRwmkVzti8CRBMdKDJyBY1tJdT9HF3dEPPVzuCDr+znLNceY+Xww4hhxNNpfAQYAoVB5BoFW//8AAAAASUVORK5CYIIK) no-repeat 0 0px; } div.Clipperz_recordFieldData input.scrambledField:focus { color: #b5d5ff; border: 0px solid white; -/* background: transparent url(../images/scrambledValue.png) no-repeat 0 -16px; */ +/* background: transparent url(./images/scrambledValue.png) no-repeat 0 -16px; */ background: transparent url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAgCAYAAABAQWX9AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANXSURBVHja7FgxixNBFJ6TEyFXxEBiYWFEuCKHcEJio6RRIZAycF3qjWU67xcEr0par04Q7mA7hSAWErVyC1GTIiAmoMUlcHeFQblC53uZWTbJzmZ3cazmwUBm5+ObN9978zb7Nv5wY8Z87ZKRwIjz78SZTqes2+2ywWAQiqTX6xE+jOnkjoE/5OMgkjiTyYTZts3G43GoHRzHIXwY08kdA3/Mx/5acRDR2WymZBmNRoHz5ezwcunkjoF3AsT6ysepnGzKH1AbqufzeZZOp91N2+02PYc1m033eaPRIBzwcnOkM7BYr1QqrFQqaeeOiMdmBT5u8bHnEeJAZBHWn/LxZEGcbDZLKktnZYrCvBsnEgl6ViwWad17v2U6e0XQzR0DbwkhvLVGXq09IRzZxvL/HCjdarXcCFSrVdpcZYg+iqAUoV6vu4f0uz66uGPga6Igk4Z8vOIjFViQQQ7npdNyrjosIgYHECE5D3qT6OKOiHdE9qREtsi5+m0FMjicy+Uoqrir2ERV/TudDh3OsizCwzFg/QqkTu4Y+JqoN0d8PBMi7S8X65XMwf0EOQxFDIfJZDIr7HAEWImBM3DMD6ubOyL+VNQVFN1HQpgjb61R1hxj5vPBiGPE0WibL/tGBJM5Rpz/IM7P8ykbfuiyyThcz+Xb5x7hw5hO7hj46P2c2fmE9d/Z7OwkXM/lx9AhfBjTyR0Df1zeCdHPQUQvfqt7Lmcno8D5cnZ4uXRyx8BH7+dAbah+fTvPtpJpd9OPr9vs+3DOV37cdJ+/ed4gHPAXv+abI53BgfWd+xW2XShp546Id3imFPgb2refw9ccvrbaz7l6LctTfkqE3hSFuRvzCFy+Mm8B3LxdpIN577dMZ68Iurmj4vnhLSGEW2vk1eJri/2cF18Wv62g9Hu75abi7sMqba4yRB9FUIpwr1J3D+l3fXRxx8DXuCiHQpRw/ZzRpx45L52Wc9VhETE4gAjJubLnopE7Ip76N1yUFLIF12ltPwepDuUzN3IUVdxVbNJ/aysi1aHD3S1b7A7HwzFg/QqkTu4YeGSN28+BSKH6Obifuw/mPRcUMRwmkVzti8CRBMdKDJyBY1tJdT9HF3dEPPVzuCDr+znLNceY+Xww4hhxNNpfAQYAoVB5BoFW//8AAAAASUVORK5CYIIK) no-repeat 0 -16px; } div.Clipperz_recordFieldData span.scrambledFieldLabel { display: block; color: #999999; font-size: 11px; padding-left: 10px; } /* div.passwordTooltip { position: absolute; padding: 30px 30px 30px 40px; font-size: 10pt; font-weight: bold; color: black; - background: url(../images/tooltipBackground.png) no-repeat 0 -30px; + background: url(./images/tooltipBackground.png) no-repeat 0 -30px; width: 335px; height: 148px; z-index: 10000; } */ /* @end */ /* @group Editing mask */ div#recordDetailEditModeHeaderMask { position: absolute; top: 0px; left: 0px; width: 100%; height: 119px; z-index: 20000; overflow: hidden; /* border: 10px solid red; */ } div#recordDetailEditModeVerticalMask { width: 511px; position: absolute; top: 119px; left: 0px; z-index: 20000; overflow: hidden; /* height: 100%; border: 10px solid red; */ } /* @end */ /* @group Direct logins (record detail) */ div.directLoginsRecordBox { margin: 10px 0px 10px 0px; border-top: 4px solid #ff9400; /* #ffc880 */ border-bottom: 4px solid #ff9400; /* #ffc880 */ } div.directLoginsRecordBox textarea { color: #666666; } div.recordDetailNoDirectLoginDescriptionBox { padding: 5px 5px 0px 5px; } div.directLoginsRecordBox p { font-size: 10pt; color: #999999; padding-bottom: 5px; } div.directLoginDetailTitle a { color: #333366; font-size: 10pt; font-weight: normal; } div.directLoginDetailTitle input { width: 100%; } div.recordDetailDescriptionBox { padding: 10px 10px; color: #666666; } div.recordDetailDescriptionBox h5 { padding: 10px 10px; padding: 5px 0px 10px 0px; } div.recordDetailDescriptionBox p { color: #999999; padding-bottom: 10px; } div.recordDetailDescriptionBox a { color: #333366; } div.directLoginsRecordBox h3 { color: #666666; padding: 5px 0px 0px 5px; margin: 0px 0px 5px 0px; font-size: 12pt; } div.directLoginsRecordBox span { color: #999999; } table.directLoginBindings { width: auto; padding-top: 10px; padding-bottom: 5px; } table.directLoginBindings td.directLoginBindingLabelTD { padding-right: 20px; } table.directLoginBindings td.directLoginBindingLabelTD span { font-weight: bold; color: #bbbbbb; } table.directLoginBindings td.directLoginBindingValueTD span{ color: #999999; } table.directLoginBindings td.directLoginDataLabelTD { padding-right: 20px; } table.directLoginBindings td.directLoginDataLabelTD span { color: #bbbbbb; } table.directLoginBindings td.directLoginDataValueTD span{ color: #999999; } div.directLoginsRecordBox ul { } div.directLoginsRecordBox ul li { padding: 5px 0px 5px 0px; border-top: 1px dotted #ff9400; } div.directLoginsRecordBox ul li span { font-size: 10pt; padding-left: 5px; } div.directLoginsRecordBox ul li a.directLoginFavicon { width: 16px; height: 16px; } div.directLoginsRecordBox div.addDirectLoginBox { border-top: 1px dotted #ff9400; padding: 5px 0px 10px 0px; } div.directLoginsRecordBox div.addDirectLoginBox div.addDirectLoginBoxContent { padding-left: 35px; } /* div.directLoginsRecordBox div.addDirectLoginBox textarea { width: 80%; height: 50px; margin-left: 30px; margin-bottom: 10px; } */ div.directLoginsRecordBox div.addDirectLoginBox div { /* margin-left: 30px; */ } /* @group toogle button */ div.directLoginCollapseLink { display: inline-block; width: 15px; height: 15px; cursor: pointer; -/* background: url(../images/directLogin/toggle.png) no-repeat; */ +/* background: url(./images/directLogin/toggle.png) no-repeat; */ background: url(data:image/png;charset=utf-8;base64,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) no-repeat; overflow: hidden; } div.directLoginCollapseLink.collapser-collapsed { background-position: 0px 0px; } /*div.directLoginCollapseLink.collapser-collapsed.hover {*/ div.directLoginCollapseLink.hover { background-position: -13px 0px; } div.directLoginCollapseLink.collapser-expanded { background-position: 0px -13px; } div.directLoginCollapseLink.collapser-expanded.hover { background-position: -13px -13px; } /* @end */ /* @end */ /* @end */ /* @group Record creation wizard */ div.recordCreationWizard { padding: 10px; } div.recordCreationWizardTitleBox { padding-bottom: 5px; border-bottom: 1px solid #ff9400; margin-bottom: 10px; } div.recordCreationWizardTitleBox h5 { padding: 5px; color: #666666; font-size: 13pt; } div.recordCreationWizardTitleBox p { padding: 5px; font-size: 10pt; color: #999999; } /* div.recordCreationWizard ul { padding: 5px; list-style-type: none; list-style-position: outside; } div.recordCreationWizard ul li h4 { font-size: 11pt; font-weight: bold; color: #ff9400; text-decoration: none; padding-bottom: 2px; cursor: pointer; } div.recordCreationWizard ul li table tr td { font-size: 9pt; color: #999999; padding-left: 5px; padding-bottom: 10px; } */ div.newRecordWizardHeader { margin-top: 10px; border-top: 3px double #ff9400; padding-top: 5px; } div.newRecordWizardFooter { border-top: 1px solid #ff9400; padding-top: 5px; padding-bottom: 5px; border-bottom: 3px double #ff9400; } /* div.recordCreationWizard ul li table input { margin-top: 3px; } */ /* @end */ /* @end */ /* @group Account page */ div#changePassphraseBlock form table.panelBody tbody tr td { vertical-align: top; height: 25px } div#changePassphraseBlock form table.panelBody tbody tr td span.formLabel { line-height: 20px; } div.panelBody form table.panelBody { padding: 10px; color: #999999; font-size: 10pt; line-height: 9pt; } div.panelBody form table.panelBody span.formLabel { padding-right: 5px; } div.panelBody form table.panelBody tbody tr td input[type=text] { width: 250px; } div.panelBody form table.panelBody tbody tr td input[type=password] { width: 250px; } div.panelBody form table.panelBody tbody tr td input { margin-right: 10px; } div#deleteAccountBlock { height: 200px; min-height: 200px; } /* @end */ /* @group Tools page */ /* @group Bookmarklet */ a.bookmarkletLink { display: block; margin: 0px 0px 0px 35px; padding: 15px; color: #333366; font-weight: bold; border: 1px dotted #6666aa; width: 200px; text-align: center; } div.bookmarkletConfiguration { padding-bottom: 10px; } div.bookmarkletConfiguration p { color: #666666; display: block; padding-top: 5px; font-weight: bold; } div.bookmarkletConfiguration textarea { color: #666666; font-size: 8pt; width: 300px; height: 100px; } /* @end */ /* @group Compact link */ div#compactLinkBox a { display: block; margin: 10px 0px 10px 0px; padding: 15px; color: #333366; font-weight: bold; border: 1px dotted #6666aa; width: 200px; text-align: center; font-size: 12pt; } /* @end */ /* @end */ /* @group Exit */ /* div#exitBlock { padding: 10px 30px; width: 60%; color: #999999; } div#exitBlock h2 { padding-bottom: 5px; } div#exitBlock h3 { padding-top: 20px; padding-bottom: 5px; } div#exitBlock ul li ul { padding-left: 20px; list-style-type: disc; } div#exitBlock ul li ul li { color: #ff9400; padding-bottom: 5px; } div#exitBlock ul li ul li span { color: #999999; } */ /* @end */ /* @end */ /* @group Yui-Ext customization */ div.ydlg-dlg-body { background-color: white; } /* @group Splash dialog */ div#alert div.ydlg-dlg-body { background-color: white; } div#splashMessage { /* border: 4px solid #ff9400;*/ /* border-bottom: 1px solid #ff9400; */ padding: 10px; color: #666666; background-color: white; } div#splashMessage p { margin-bottom: 0px; font-weight: normal; } div#splashMessage p a { color: #333366; } div#splashMessage ul { list-style-type: disc; list-style-position: outside; padding-bottom: 10px; } div#splashMessage ul li { margin-left: 20px; padding-bottom: 5px; color: #ff9400; } div#splashMessage ul li p { display: inline; font-size: 10pt; color: #999999; } /* @end */ /* @end */ /* @group subMenu */ ul.subMenu { width: 200px; min-width: 200px; max-width: 200px; color: #35306b; padding-top: 10px; } ul.subMenu li { padding: 5px 10px 5px 10px; cursor: pointer; border: 1px solid white; font-size: 10pt; } ul.subMenu li.hover { border: 1px dotted #ff9400; } ul.subMenu li.selectedTab { background-color: #ff9400; border: 1px solid #ff9400; color: white; } /* @end */ /* @group tabPanels */ li.hiddenPanel { display: none; } div.clipperzSubPanel { color: #35306b; padding-left: 10px; border-left: 4px solid #ff9400; min-height: 200px; } div.clipperzSubPanel span.read-only { -/* background-image: url(../images/read-only_background.png); */ +/* background-image: url(./images/read-only_background.png); */ display: block; color: #666666; padding: 10px; font-weight: bold; } div.clipperzSubPanel h5 { border-bottom: 1px dotted #ff9400; padding: 10px; color: #666666; } div.clipperzLoginForm form h5.errorMessage { margin: 0px 20px; padding: 10px 10px; color: #ff9400; border-bottom: 1px dotted #ff9400; font-size: 12pt; } div.panelBody form h5.errorMessage { color: #ff9400; } div.clipperzSubPanel div.clipperzSubPanelButtonBox { border-top: 1px dotted #ff9400; padding: 10px; } a#printingLink, a#offlineCopyLink, a#exportLink { color: #333366; font-weight: bold; padding: 10px 10px 10px 10px; } /* div.clipperzSubPanel a { color: #333366; font-weight: bold; padding: 100px; } */ tr.openPreferenceBlock div.preferenceBlockTitle { padding: 10px 0px 0px; } tr.openPreferenceBlock div.panelDescription p { padding-bottom: 0px; } div.preferenceBlockTitle { padding-bottom: 8px; font-weight: bold; color: #999999; } div.panelDescription { max-width: 450px; padding: 10px; font-size: 10pt; color: #999999; } div.panelDescription h3 { font-size: 12pt; color: #666666; padding-top: 20px; padding-bottom: 4px; } div.panelDescription h5 { padding-left: 0px; border-bottom: 0px; } div.panelDescription h5 a { color: #333366; text-decoration: none; } div.panelDescription h5 a:hover { text-decoration: underline; } div.panelDescription ol { padding-left: 25px; list-style-position: outside; list-style-type: decimal; color: #ff9400; } div.panelDescription ol li { padding-bottom: 4px; } div.panelDescription ol li p { display: inline; color: #999999; } div.panelDescription p { padding-bottom: 10px; } div.panelDescription p a { color: #333366; text-decoration: none; } div.panelDescription p a:hover { text-decoration: underline; } /* @group SubSubTabs */ ul.subSubMenu { padding-left: 10px; padding-bottom: 3px; } ul.subSubMenu li { font-size: 10pt; color: #666666; display: inline; padding: 3px 10px; cursor: pointer; } ul.subSubMenu li.selectedTab { color: white; background-color: #333366; cursor: default; } /* @end */ /* @end */ /* @group Footer */ div#footer { margin-top: 20px; border-top: 1px solid #999999; padding: 5px; color: #666666; text-align: center; font-size: 8pt; } div#footer a { color: #333366; } div#rss { display: inline; float: right; } div#rss a { vertical-align: middle; } /* @end */ /* @group Main */ div#main h3.loading { padding: 20px; color: #666666; } div#javaScriptAlert { margin: 20px; border: 4px solid #ff9403; padding: 15px; /* width: 70%; */ max-width: 400px; color: #999999; font-size: 12pt; } div#javaScriptAlert h1 { color: #ff9403; font-size: 28pt; padding-bottom: 10px; } div#javaScriptAlert h3 { color: #333366; padding-top: 10px; padding-bottom: 10px; font-size: 16pt; } div#javaScriptAlert h5 { color: #666666; font-size: 12pt; } input:focus { background-color: #ffeac0; } textarea:focus { background-color: #ffeac0; } /* @end */ /* @group Lock */ div#lockMessage { color: #666666; font-size: 10pt; } div#lockMessage p { padding-bottom: 15px; } div#lockMessage form input { width: 100%; } /* @end */ /* @group Password entropy display */ div.passwordEntropy { margin-top: 0px; margin-bottom: 4px; height: 3px; font-size: 1pt; -/* background: url(../images/entropyBackground.gif) repeat-x 0 0; */ +/* background: url(./images/entropyBackground.gif) repeat-x 0 0; */ line-height: 3px; } /* @end */ div#miscLinks ul li a.highlightedHeader { /* color: white; font-size: 12pt; font-weight: bold; */ } /* @group Donate */ a#donateHeaderLink.highlightedHeader { font-weight: bold; } img#donateHeaderIcon { padding-top: 5px; margin-bottom: -5px; } div#miscLinks ul { display: inline; } /* @group Donate Splash */ div#donateMessage { margin-left: 5px; } div#donateMessage div.donateSplashPanelIcon { float: left; text-align: center; width: 100px; height: 70px; } div#donateMessage div.donateSplashPanelDescription { font-size: 11pt; color: #666666; line-height: 23px; } div#donateMessage div.donateSplashPanelDescription ul { color: #aaaaaa; padding-left: 5; margin-bottom: 5px; list-style-type: disc; list-style-position: inside; } div#donateMessage div.donateSplashPanelDescription ul li p { display: inline; color: #666666; } div#donateMessage div.donateSplashPanelDescription a { text-decoration: none; color: #333366; } div#donateMessage div a:hover { text-decoration: underline; } div#donateSplash div.ydlg-dlg-body div.ydlg-ft { padding-right: 130px; } /* @end */ /* @end */ /* @group Password Generator */ div.Clipperz_PasswordGenerator_button { -/* background: url(../images/passwordAssistant.png) 0 22px; */ +/* background: url(./images/passwordAssistant.png) 0 22px; */ background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAuCAMAAADuvZJ5AAACZFBMVEX///8APHTHyc4zM2bAwsn+/v/6+vrW2N/z9fjw8vX5/P329/ra3OH92InllwD4sjDd3+T+/v7/8M/3+Pnd3uL80nklV4P3+vwWTX7r7fLj5+v19vng4ujo6u9cXYW7vcuVlq56laiPkKtcXISpqr+EhaP09fnNz9fy9Pd9mar8ymnP0dmNjqmBgqHZ2+FniKDf4en6wVD8znFVfaJFRnR7lan5ukH+3ZX6xFnO0Nnn6e/09PCAgaH7x2H29vNtbpJXWIHw8/Z1dpfz9PjU1uCNnqHf4eiwscX29vTl5+319fF/f5/a3OLy8u5qi6Jmh6D2+fuHiKVsjKT09fji5Ov9/fzX2uLx8ew4OGr3+vv4tTXd3+WtrsP09O9gYIjy8u380nq/wdBmZoxWVoD7ymrz8+5VVoBYWYI7O2y+wM3u3K16fJw5OWo9PW6Ula+oqb/Z2+Dq7PFVVYC8vs4+Pm79249sbpGvsMTw8OtKcZP8znLttUf4szDr6OL6ukH6wFD+35rq6OH29vLs6+bv6NK/x8rs6+T5vUnt6ub5vUjs6+Xg3dTr6OH91YL+/v394Jv7yGCjrrRIbpDo5d+xt7bz8e7Az93x8Or47dPm493V3+i/ztvp5uDq5+Dm49y2vb3l4tvv7ujb1836+vn91YH4+PeEhnH4tDXk4tnk4tr5tzv7z3L6xFjt7OX4+Pb7+/rx8Ov5uDvvtUnw7urw7+n80Xro5d7n5N3u7eb6wFH6vkn5tzr4tzv6vUn19PL29PL19fK/ztzu7ef6w1jw8Orr6uPr6+X5ukLi39aDhG/5tDX6x2HHdGeUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeRJREFUOMtjYGPADdgYFMUYMYGEPkhO0bVFCBPMcDUFyollifJiAtEsMaAcY4MoKyYQ7WcEyZmLckGAeCSXuHiAoziILWoOlisV5YYAaTVp52BubjVpIFu0FCzHK8oBAxocHJ5WYJYoL1iuV5QTDly8ixwC3YAM0SVguYQEScnC4vzyGBV3lWRmIJAzkJQU3QqWMzKSlVXNYYYBE5uSvBDZ1VVgOa0UKak0uBSzvVR2WZhUihZYznaCjEyik5Kuqk5cBFAuNylDKVrmtC1Y7rCFABT4ZKaD7bMUEFhjAZarN+SBAj0edQVlZQVtngKenYZgufZd7EhAXh5M7e0Ey9UdZ8EEZmZguY2rmDDBnt1AOQbGU1EimCBqOUhOYhM/FlBTLQGU81/Ghw2c9AOlGE2s6SWIAT8gPw0aT8OiZZYxOA0eFMQC+maD02BoKJY0uH4/OMzYFmNJg/s2g+WWrsOSBqd2gOU8PLCkwQ21YDk7OyxpcHoPWK7pAJY0uGUuWM7LC0saXDgHLGdtjSUNHpoMlouNxZIGd2wDy6WmYkmDa7eD5Xx9saTBrplgufh4LGmwbR5YLjwcSxo8ugAsV3EESxpsXAFOg83HsMit7AanwdYTWOQWzQenwcqJwphgyiTy0yAAb2mGoAo92xQAAAAASUVORK5CYIIK) 0 22px; width: 27px; height: 22px; } div.Clipperz_PasswordGenerator_button.hover { -/* background: url(../images/passwordAssistant.png) 0 -1px; */ +/* background: url(./images/passwordAssistant.png) 0 -1px; */ background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAuCAMAAADuvZJ5AAACZFBMVEX///8APHTHyc4zM2bAwsn+/v/6+vrW2N/z9fjw8vX5/P329/ra3OH92InllwD4sjDd3+T+/v7/8M/3+Pnd3uL80nklV4P3+vwWTX7r7fLj5+v19vng4ujo6u9cXYW7vcuVlq56laiPkKtcXISpqr+EhaP09fnNz9fy9Pd9mar8ymnP0dmNjqmBgqHZ2+FniKDf4en6wVD8znFVfaJFRnR7lan5ukH+3ZX6xFnO0Nnn6e/09PCAgaH7x2H29vNtbpJXWIHw8/Z1dpfz9PjU1uCNnqHf4eiwscX29vTl5+319fF/f5/a3OLy8u5qi6Jmh6D2+fuHiKVsjKT09fji5Ov9/fzX2uLx8ew4OGr3+vv4tTXd3+WtrsP09O9gYIjy8u380nq/wdBmZoxWVoD7ymrz8+5VVoBYWYI7O2y+wM3u3K16fJw5OWo9PW6Ula+oqb/Z2+Dq7PFVVYC8vs4+Pm79249sbpGvsMTw8OtKcZP8znLttUf4szDr6OL6ukH6wFD+35rq6OH29vLs6+bv6NK/x8rs6+T5vUnt6ub5vUjs6+Xg3dTr6OH91YL+/v394Jv7yGCjrrRIbpDo5d+xt7bz8e7Az93x8Or47dPm493V3+i/ztvp5uDq5+Dm49y2vb3l4tvv7ujb1836+vn91YH4+PeEhnH4tDXk4tnk4tr5tzv7z3L6xFjt7OX4+Pb7+/rx8Ov5uDvvtUnw7urw7+n80Xro5d7n5N3u7eb6wFH6vkn5tzr4tzv6vUn19PL29PL19fK/ztzu7ef6w1jw8Orr6uPr6+X5ukLi39aDhG/5tDX6x2HHdGeUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeRJREFUOMtjYGPADdgYFMUYMYGEPkhO0bVFCBPMcDUFyollifJiAtEsMaAcY4MoKyYQ7WcEyZmLckGAeCSXuHiAoziILWoOlisV5YYAaTVp52BubjVpIFu0FCzHK8oBAxocHJ5WYJYoL1iuV5QTDly8ixwC3YAM0SVguYQEScnC4vzyGBV3lWRmIJAzkJQU3QqWMzKSlVXNYYYBE5uSvBDZ1VVgOa0UKak0uBSzvVR2WZhUihZYznaCjEyik5Kuqk5cBFAuNylDKVrmtC1Y7rCFABT4ZKaD7bMUEFhjAZarN+SBAj0edQVlZQVtngKenYZgufZd7EhAXh5M7e0Ey9UdZ8EEZmZguY2rmDDBnt1AOQbGU1EimCBqOUhOYhM/FlBTLQGU81/Ghw2c9AOlGE2s6SWIAT8gPw0aT8OiZZYxOA0eFMQC+maD02BoKJY0uH4/OMzYFmNJg/s2g+WWrsOSBqd2gOU8PLCkwQ21YDk7OyxpcHoPWK7pAJY0uGUuWM7LC0saXDgHLGdtjSUNHpoMlouNxZIGd2wDy6WmYkmDa7eD5Xx9saTBrplgufh4LGmwbR5YLjwcSxo8ugAsV3EESxpsXAFOg83HsMit7AanwdYTWOQWzQenwcqJwphgyiTy0yAAb2mGoAo92xQAAAAASUVORK5CYIIK) 0 -1px; } table tbody tr td span.passwordGeneratorLength { padding: 0px; margin: 0px; } table tbody tr td span.passwordGeneratorLength span { padding: 0px; margin: 0px; color: #bbbbbb; font-size: 9pt; } span.passwordGeneratorLength span.passwordGeneratorLengthValue { padding-left: 3px; font-weight: bold; } div#passwordGenerator div.ydlg-bd { overflow: hidden; } form.passwordGenerator input.clipperz_passwordGenerator_password { width: 95%; } form.passwordGenerator table { width: 95%; } form.passwordGenerator table > tbody > tr > td { white-space: nowrap; } form.passwordGenerator td span { padding-left: 3px; padding-right: 10px; font-size: 9pt; color: #666666; } /* @end */ /* @group IE Read-only header */ div#logoFrame a { text-decoration: none; } div#logoFrame a span { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: bold; font-size: 24pt; padding-top: 10px; padding-left: 10px; } span.clipperzLogoSpan { color: white; } div#logoFrame a span span.clipperzLogoZSpan { padding-left: 0px; color: #ff9400; } /* @end */ span.activeText { cursor: pointer; } /* @group LoginInfo */ /* @group login panel */ div#loginInfoWrapper { margin-left: 10px; } div#loginInfo { padding: 0px; margin: 0px; border: 0px; width: 389px; - background: url(../images/loginInfoBackground.png) repeat-y -405px 0; + background: url(./images/loginInfoBackground.png) repeat-y -405px 0; } div#loginInfo div.header { - background: url(../images/loginInfoBackground.png) no-repeat 0 0; + background: url(./images/loginInfoBackground.png) no-repeat 0 0; min-height: 20px; height: 20px; } div#loginInfo div.footer { - background: url(../images/loginInfoBackground.png) 389px -5px; + background: url(./images/loginInfoBackground.png) 389px -5px; min-height: 20px; height: 20px; } div#loginInfo div.content { padding-left: 20px; padding-right: 25px; } div#loginInfo div.content div { } div#loginInfo div.content h4 { font-weight: normal; color: #666666; font-size: 18pt; padding-bottom: 10px; padding-left: 10px; } /* @group Now */ div#loginInfo div.loginInfo_now { padding-left: 10px; padding-right: 0px; } div#loginInfo div.loginInfo_now div.text { width: 200px; color: #666666; line-height: 20px; float: left; padding-bottom: 15px; } div#loginInfo div.loginInfo_now div.icons { text-align: right; float: right; width: 110px; } div#loginInfo div.loginInfo_now div.icons img { margin-left: 4px; } div#loginInfo div.loginInfo_latest div.icons { text-align: right; float: right; width: 110px; } div#loginInfo div.loginInfo_latest div.icons img { margin-left: 4px; } /* @end */ /* @group Latest */ div#loginInfo div.content div.loginInfo_latest { - background: url(../images/loginInfoInnerBackground.png) repeat-y -349px 0px; + background: url(./images/loginInfoInnerBackground.png) repeat-y -349px 0px; width: 349px; min-width: 349px; clear: both; } div#loginInfo div.loginInfo_latest div.inner_header { - background: url(../images/loginInfoInnerBackground.png) 0px 0px; + background: url(./images/loginInfoInnerBackground.png) 0px 0px; min-height: 6px; height: 6px; max-height: 6px; font-size: 1px; } div#loginInfo div.loginInfo_latest div.content { padding-left: 12px; padding-right: 5px; } div#loginInfo div.loginInfo_latest div.text { float: left; width: 200px; line-height: 20px; color: #666666; padding-bottom: 5px; } div#loginInfo div.loginInfo_latest div.inner_footer { - background: url(../images/loginInfoInnerBackground.png) 349px -9px; + background: url(./images/loginInfoInnerBackground.png) 349px -9px; min-height: 6px; height: 6px; max-height: 6px; font-size: 1px; clear: both; } a#fullLoginHistoryLink { font-size: 9pt; color: #666666; text-align: center; padding: 5px 10px; clear: both; display: block; text-decoration: none; border-top: 1px dotted white; } /* @end */ /* @group Download offline-copy warning */ table#shouldDownloadOfflineCopyWarningBox { clear: both; margin-top: 10px; } div#loginInfo table tbody tr td.offlineCopyDownloadWarningIconTD img { } a#offlineCopyDownloadWarningLink { font-weight: bold; color: #666666; text-decoration: none; } div#loginInfo div.content div.offlineCopyDownloadWarning h4 { padding: 5px 10px 2px; font-size: 11pt; } div#loginInfo div.content div.offlineCopyDownloadWarning p { color: #999999; padding: 0px 10px 10px; } /* @end */ /* @end */ /* @group history */ table#loginHistoryTable { padding-left: 2px; padding-bottom: 15px; padding-right: 50px; font-size: 9pt; color: #666666; } table#loginHistoryTable tr.zebra_even { background-color: #f2f2f2; } table#loginHistoryTable td.loginHistoryValues { padding: 5px 10px; } table#loginHistoryTable td.loginHistoryValues div.currentSession { color: green; font-size: 11pt; } table#loginHistoryTable td.loginHistoryValues div.elapsedTime { font-size: 11pt; } table#loginHistoryTable td.loginHistoryValues div.fullDate { font-size: 9pt; color: #999999; } table#loginHistoryTable td.loginHistoryValues div.loginHistoryIP { padding-top: 3px; } table#loginHistoryTable td.loginHistoryValues div.loginHistoryIP span.loginHistoryIPLabel { padding-right: 5px; } table#loginHistoryTable img { display: block; margin: 5px; } td.loginHistoryCountry, td.loginHistoryBrowser, td.loginHistoryOperatingSystem { padding-left: 10px; padding-right: 10px; padding-bottom: 5px; } /* @end */ /* @end */ /* @group OTP */ div#oneTimePasswordList { width: 700px; } div#oneTimePasswords_header { background-color: #ddddff; padding: 5px; } div#oneTimePasswords_header div ul { padding-top: 3px; } div#oneTimePasswords_header div ul li { font-size: 9pt; padding: 0px 5px; display: inline; } div#oneTimePasswords_header div ul li span { color: #999999; } div#oneTimePasswords_header div ul li a { color: #333366; text-decoration: none; } table.oneTimePassword { width: 100%; padding: 0px 0px ; } table.oneTimePassword tbody tr td { border-bottom: 2px solid white; } table.oneTimePassword tbody tr.oneTimePassword_used { background-color: #f0f0f0; } table.oneTimePassword tbody tr td input.otpCheckbox { margin: 5px 10px 5px 10px; } table.oneTimePassword tbody tr.oneTimePassword_used td span.oneTimePassword_value { color: #aaaaaa; } span.oneTimePassword_value { color: #555555; line-height: 22px; font-size: 11pt; font-family: monospace; white-space: nowrap; } span.disabledOneTimePassword { font-size: 10pt; display: block; color: #999999; font-style: italic; padding-top: 5px; font-weight: bold; } div.oneTimePassword_usageStats { padding-left: 20px; padding-bottom: 5px; } div.oneTimePassword_usageStats div.oneTimePassword_usageDateDescription { line-height: 22px; font-size: 10pt; color: #999999; font-weight: bold; } div.oneTimePassword_usageStats div.oneTimePassword_usageDate { @@ -2512,477 +2512,477 @@ table.calendarWidget td.day span.today { } /* @end */ /* @end */ /* div.loadingMessage { } */ /* @group Loading panel */ div.loadingMessage { padding: 10px; color: #666666; } div.loadingMessage h6 { font-size: 12pt; } div.loadingMessage p { font-size: 10pt; padding: 5px 0px; } /* @end */ /* @group Import */ /* @group Formats */ /* div.importFormats ul li { width: 400px; max-width: 400px; min-width: 400px; padding: 10px; border: 1px solid white; } div.importFormats ul li:hover { border: 1px solid #ff9400; } div.importFormats ul li.disabled:hover { border: 1px solid white; } div.importFormats ul li h4 { font-size: 10pt; } div.importFormats ul li:hover h4 { font-size: 10pt; } div.importFormats ul li.disabled h4 { color: #888888; } div.importFormats ul li p { font-size: 9pt; color: #999999; padding: 5px 0px 5px 10px; } */ div.importFormats { border-top: 3px double #ff9400; padding-top: 10px; border-bottom: 3px double #ff9400; padding-bottom: 10px; } div.importFormats a { color: #333366; text-decoration: none; } div.importFormats a:hover { text-decoration: underline; } ul.radioList { padding: 5px; list-style-type: none; list-style-position: outside; } ul.radioList li h4 { font-size: 11pt; font-weight: bold; color: #ff9400; text-decoration: none; padding-bottom: 2px; cursor: pointer; } ul.radioList li.disabled h4 { color: #666666; cursor: auto; } ul.radioList li table tr td { font-size: 9pt; color: #999999; padding-left: 5px; padding-bottom: 10px; } div.templateDescription { max-width: 420px; padding: 2px 0px 5px; font-size: 10pt; color: #999999; } /* div.importFormats ul { padding: 5px; list-style-type: none; list-style-position: outside; } div.importFormats ul li h4 { font-size: 11pt; font-weight: bold; color: #ff9400; text-decoration: none; padding-bottom: 2px; cursor: pointer; } div.importFormats ul li.disabled h4 { color: #666666; cursor: auto; } div.importFormats ul li table tr td { font-size: 9pt; color: #999999; padding-left: 5px; padding-bottom: 10px; } */ .clickableElement { cursor: pointer; } /* @end */ div.wizardComponent h3 { color: #666666; padding: 10px; margin-bottom: 10px; border-bottom: 1px dotted #ff9400; } /* @group Steps */ /* @group bar */ div.importWizardStepsBox { height: 53px; min-height: 53px; max-height: 53px; padding-left: 18px; margin-left: -10px; width:600px; - background: url(../images/importStepsBackground.png) no-repeat; + background: url(./images/importStepsBackground.png) no-repeat; } div.importWizardStepsInnerBox { float: left; height: 53px; min-height: 53px; max-height: 53px; - background: url(../images/importStepsBackground.png) repeat-x 0 -53px; + background: url(./images/importStepsBackground.png) repeat-x 0 -53px; } div.importWizardStepsBoxFooter { float: left; height: 53px; min-height: 53px; max-height: 53px; width: 18px; min-width: 18px; max-width: 18px; - background: url(../images/importStepsBackground.png) no-repeat -9px -106px; + background: url(./images/importStepsBackground.png) no-repeat -9px -106px; } div.importWizardStepsBox table.importWizardSteps tbody tr td { padding-top: 9px; } div.importWizardStepsBox table.importWizardSteps tbody tr td div { height: 23px; min-height: 23px; max-height: 23px; padding: 0px; padding-left: 4px; margin: 0px; } div.importWizardStepsBox table.importWizardSteps tbody tr td div span { color: #333366; font-size: 9pt; height: 23px; min-height: 23px; max-height: 23px; display: block; padding-right: 4px; line-height: 22px; } div.importWizardStepsBox table.importWizardSteps tbody tr td.current div { padding-left: 8px; - background: url(../images/importStepsLabelsBackground.png) repeat-x 0 0px; + background: url(./images/importStepsLabelsBackground.png) repeat-x 0 0px; } div.importWizardStepsBox table.importWizardSteps tbody tr td.current div span { color: white; padding-right: 8px; - background: url(../images/importStepsLabelsBackground.png) repeat-x right -23px; + background: url(./images/importStepsLabelsBackground.png) repeat-x right -23px; } div.importWizardStepsBox table.importWizardSteps tbody tr td.currentProcessing div { padding-left: 8px; - background: url(../images/importStepsLeftLabelsBackground.png) repeat-x 0 0px; + background: url(./images/importStepsLeftLabelsBackground.png) repeat-x 0 0px; } div.importWizardStepsBox table.importWizardSteps tbody tr td.currentProcessing div span { padding-right: 8px; - background: url(../images/importStepsLeftLabelsBackground.png) repeat-x right -23px; + background: url(./images/importStepsLeftLabelsBackground.png) repeat-x right -23px; } /* @group Steps separator */ div.importWizardStepsBox table.importWizardSteps tbody tr td.stepSeparator div { width: 18px; max-width: 18px; min-width: 18px; - background: url(../images/importStepsSeparator.png) no-repeat 0 2px; + background: url(./images/importStepsSeparator.png) no-repeat 0 2px; } div.importWizardStepsBox table.importWizardSteps tbody tr td.stepSeparator div span { display: none; } div.importWizardStepsBox table.importWizardSteps tbody tr td.stepSeparatorProcessing div { width: 18px; max-width: 18px; min-width: 18px; - background: url(../images/importActiveStepsSeparator.png) no-repeat 0 2px; + background: url(./images/importActiveStepsSeparator.png) no-repeat 0 2px; } div.importWizardStepsBox table.importWizardSteps tbody tr td.stepSeparatorProcessing div span { display: none; } /* @end */ /* importStepsSeparator.png importActiveStepsSeparator.png */ /* @end */ div.importStepParameters { padding-bottom: 10px; } /* @group CSV steps */ div.importStepBlocks div.step_2 div.importStepParameters span { padding-left: 5px; font-size: 9pt; color: #999999; } div.importStepBlocks div.step_4 div.importStepParameters span { padding-left: 5px; font-size: 9pt; color: #999999; } /* @end */ /* @end */ div.importPreviewDiv { height: 250px; max-height: 250px; overflow: auto; border: 1px solid #333366; margin-bottom: 10px; } textarea.importTextArea { width: 500px; height: 200px; } body.masked div.importPreviewDiv { overflow: hidden; } div.importPreviewCommandsDiv { width: 500px; } div.importOptions { color: #666666; font-size: 10pt; padding: 3px; } div.importOptions span { padding-left: 4px; } /* @group Options */ div.importOptionsDescription { padding: 10px 0px; font-size: 10pt; color: #666666; } div.importStepDescription { padding: 10px 0px; font-size: 10pt; color: #666666; } div.CSVImportOptionsParameters ul { padding-bottom: 10px; } div.CSVImportOptionsParameters ul li { padding-right: 15px; display: inline; } div.CSVImportOptionsParameters ul li label { padding-right: 5px; font-size: 9pt; color: #999999; } div.importOptionsButtons { padding: 10px; } /* @end */ /* @group PasswordPlus */ /* @end */ /* @group KeePass */ table#KeePassSettings { margin: 15px 0px; border-top: 3px double #cccccc; border-bottom: 3px double #cccccc; padding: 10px 10px; } table#KeePassSettings td { padding: 2px 0px; } table#KeePassSettings span.keePassFieldLabel { font-size: 10pt; color: #666666; padding-left: 5px; } table#KeePassSettings span.keePassFieldLabel.disabled { color: #aaaaaa; } /* @end */ /* @group CSV */ div.csvImportPreview { width: 700px; max-width: 700px; min-width: 700px; height: 300px; max-height: 300px; min-height: 300px; overflow: auto; } table.csvImportPreview { /* border: 1px solid #333366; margin-bottom: 10px; */ } table.csvImportPreview thead tr th { font-size: 10pt; color: white; background-color: #666666; padding: 5px; border-right: 1px solid #dddddd; } table.csvImportPreview thead tr th span { padding-left: 5px; } table.csvImportPreview.header thead tr th input { font-size: 9pt; margin: 3px 0px; } table.csvImportPreview tr.CSV_previewData_header td { padding: 3px; color: white; border-right: 1px solid #dddddd; background-color: #666666; /* padding-bottom: 15px; border-bottom: 1px solid #333366; border-bottom: 5px solid white; */ } /* @group Columns */ diff --git a/frontend/beta/css/clipperz/ie.css b/frontend/beta/css/clipperz/ie.css index 320363c..99bf2d8 100644 --- a/frontend/beta/css/clipperz/ie.css +++ b/frontend/beta/css/clipperz/ie.css @@ -1,348 +1,348 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ <!--[if IE]> <style> { background-color: white; } div#logoFrame { height: 44px; } div.clipperzLoginForm div.loginForm form { padding-left: 20px; } div.clipperzLoginForm div.registrationForm form { padding-left: 20px; } div#newRecordInnerPanel { width: 350px; height: 160px; - background: url(../images/newRecordPanelBackground.png) no-repeat 0 -165px; + background: url(./images/newRecordPanelBackground.png) no-repeat 0 -165px; /* background: url(data:image/png;charset=utf-8;base64,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) no-repeat 0 -165px; */ } img#donateHeaderIcon { padding-top: 0px; margin-bottom: 0px; } /* ========================================================== */ div#applicationVersionType { position: absolute; } div#applicationVersionType.readOnly { - background: url(../images/read-only.png) no-repeat fixed -5px -8px; + background: url(./images/read-only.png) no-repeat fixed -5px -8px; } div#applicationVersionType.TEST { - background: url(../images/test-database.png) no-repeat fixed -5px -8px; + background: url(./images/test-database.png) no-repeat fixed -5px -8px; } div#mainTabs { - background: #ff9400 url(../images/menubarSprite.gif) repeat-x; + background: #ff9400 url(./images/menubarSprite.gif) repeat-x; } div#menus { - background: url(../images/menubarSprite.gif) no-repeat right -26px; + background: url(./images/menubarSprite.gif) no-repeat right -26px; } div#menus table { - background: url(../images/menubarSprite.gif) no-repeat 0 -52px; + background: url(./images/menubarSprite.gif) no-repeat 0 -52px; } div#menus table tbody tr td div { - background: url(../images/menubarSprite.gif) no-repeat right -52px; + background: url(./images/menubarSprite.gif) no-repeat right -52px; } div#menus table tbody tr td div a { - background: url(../images/menubarSprite.gif) no-repeat left -26px; + background: url(./images/menubarSprite.gif) no-repeat left -26px; } div#menus table tbody tr td.selectedTab { - background: url(../images/menubarSprite.gif) repeat-x right -78px; + background: url(./images/menubarSprite.gif) repeat-x right -78px; } div#menus table tbody tr td.selectedTab div { - background: url(../images/menubarSprite.gif) no-repeat right -130px; + background: url(./images/menubarSprite.gif) no-repeat right -130px; } div#menus table tbody tr td.selectedTab div a { - background: url(../images/menubarSprite.gif) no-repeat left -104px; + background: url(./images/menubarSprite.gif) no-repeat left -104px; } div.clipperzLoginForm div.loginFormHeaderBox { - background: url(../images/loginFormBox.png) no-repeat -3px top; + background: url(./images/loginFormBox.png) no-repeat -3px top; } div.clipperzLoginForm div.loginForm { - background: url(../images/loginFormBox.png) repeat-y -408px; + background: url(./images/loginFormBox.png) repeat-y -408px; } div.loginForm div.loginFormFooterBox { - background: url(../images/loginFormBox.png) no-repeat -813px bottom; + background: url(./images/loginFormBox.png) no-repeat -813px bottom; } div.clipperzLoginForm div.registrationForm { - background: url(../images/loginFormBox.png) repeat-y -408px; + background: url(./images/loginFormBox.png) repeat-y -408px; } div.clipperzLoginForm form.read-only table.formLayout, div.panelform.read-only table.panelBody, div.clipperzSubPanel span.read-only, div.read-only { - background-image: url(../images/read-only_background.png); + background-image: url(./images/read-only_background.png); } div.registrationForm div.loginFormFooterBox { - background: url(../images/loginFormBox.png) no-repeat -813px bottom; + background: url(./images/loginFormBox.png) no-repeat -813px bottom; } div.loginPanelSwitchLanguageBox { - background: url(../images/languageBox.png) no-repeat 19px -15px; + background: url(./images/languageBox.png) no-repeat 19px -15px; } div#directLoginsBlock { - background: url(../images/directLoginBox.png) repeat-y -262px bottom; + background: url(./images/directLoginBox.png) repeat-y -262px bottom; } div#directLoginsBlock div.directLoginsBlockHeaderBox { - background: url(../images/directLoginBox.png) no-repeat -11px -13px; + background: url(./images/directLoginBox.png) no-repeat -11px -13px; } ul#directLogins { - background: url(../images/directLoginBox.png) no-repeat -513px bottom; + background: url(./images/directLoginBox.png) no-repeat -513px bottom; } div#directLoginsDescription { - background: url(../images/directLoginBox.png) no-repeat -513px bottom; + background: url(./images/directLoginBox.png) no-repeat -513px bottom; } /* div#recordListFilterHeader { - background: url(../images/cardFiltersSprite.gif) repeat-x 0 -114px; + background: url(./images/cardFiltersSprite.gif) repeat-x 0 -114px; } div#recordFiltersTableWrapper { - background: url(../images/cardFiltersSprite.gif) no-repeat left -38px; + background: url(./images/cardFiltersSprite.gif) no-repeat left -38px; } div#recordFiltersDIV table { - background: url(../images/cardFiltersSprite.gif) no-repeat right -19px; + background: url(./images/cardFiltersSprite.gif) no-repeat right -19px; } div#recordFiltersDIV table tbody tr td div { - background: url(../images/cardFiltersSprite.gif) no-repeat right -38px; + background: url(./images/cardFiltersSprite.gif) no-repeat right -38px; } div#recordFiltersDIV table tbody tr td div a { - background: url(../images/cardFiltersSprite.gif) no-repeat left -19px; + background: url(./images/cardFiltersSprite.gif) no-repeat left -19px; } div#recordFiltersDIV table tbody tr td.selectedTab { - background: url(../images/cardFiltersSprite.gif) repeat-x -57px; + background: url(./images/cardFiltersSprite.gif) repeat-x -57px; } div#recordFiltersDIV table tbody tr td.selectedTab div { - background: url(../images/cardFiltersSprite.gif) no-repeat right -95px; + background: url(./images/cardFiltersSprite.gif) no-repeat right -95px; } div#recordFiltersDIV table tbody tr td.selectedTab div a { - background: url(../images/cardFiltersSprite.gif) no-repeat left -76px; + background: url(./images/cardFiltersSprite.gif) no-repeat left -76px; } */ div#recordFiltersSearchInnerPanel { - background: url(../images/recordFilterBackground.png) no-repeat -10px -138px; + background: url(./images/recordFilterBackground.png) no-repeat -10px -138px; } table#recordListAndDetailBlockTABLE { - background: url(../images/cardBlockLowerBorder.gif) repeat-x 0 bottom; + background: url(./images/cardBlockLowerBorder.gif) repeat-x 0 bottom; } div#recordListBlockHeader table.recordListBlockHeaderTABLE { - background: url(../images/cardsBlockRoundCorners.gif) no-repeat right -51px; + background: url(./images/cardsBlockRoundCorners.gif) no-repeat right -51px; } div#recordListBlockHeader table.recordListBlockHeaderTABLE tbody tr td.recordBlockTitleTD { - background: url(../images/cardsBlockRoundCorners.gif) no-repeat left 0px; + background: url(./images/cardsBlockRoundCorners.gif) no-repeat left 0px; } td#cardBoxLowerLeftTD { - background: url(../images/cardBlockLowerRoundedCorner.gif) no-repeat left -32px; + background: url(./images/cardBlockLowerRoundedCorner.gif) no-repeat left -32px; } td#cardBoxLowerRightTD { - background: url(../images/cardBlockLowerRoundedCorner.gif) no-repeat right -82px; + background: url(./images/cardBlockLowerRoundedCorner.gif) no-repeat right -82px; } div#newRecordInnerPanel { - background: url(../images/newRecordPanelBackground.png) no-repeat 0 -165px; + background: url(./images/newRecordPanelBackground.png) no-repeat 0 -165px; } .resizable-textarea .grippie { - background: #eee url(../images/grippie.png) no-repeat center 1px; + background: #eee url(./images/grippie.png) no-repeat center 1px; } div.Clipperz_recordFieldData div.passwordBackground, div.passwordEntropy { - background: url(../images/entropyBackground.gif) repeat-x 0 0; + background: url(./images/entropyBackground.gif) repeat-x 0 0; } div.Clipperz_recordFieldData input.scrambledField { - background: transparent url(../images/scrambledValue.png) no-repeat 0 0px; + background: transparent url(./images/scrambledValue.png) no-repeat 0 0px; } div.Clipperz_recordFieldData input.scrambledField:focus { - background: transparent url(../images/scrambledValue.png) no-repeat 0 -16px; + background: transparent url(./images/scrambledValue.png) no-repeat 0 -16px; } div.directLoginCollapseLink { - background: url(../images/directLogin/toggle.png) no-repeat; + background: url(./images/directLogin/toggle.png) no-repeat; } #mb-dlg .ext-mb-progress { - background:transparent url(../images/default/basic-dialog/progress2.gif) repeat-x 1px 1px; + background:transparent url(./images/default/basic-dialog/progress2.gif) repeat-x 1px 1px; } .ydlg .ydlg-hd { - background: url(../images/clipperz/basic-dialog/hd-sprite.gif) repeat-x 0 -82px; + background: url(./images/clipperz/basic-dialog/hd-sprite.gif) repeat-x 0 -82px; } .ydlg .ydlg-hd-left { - background: url(../images/clipperz/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; + background: url(./images/clipperz/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; } .ydlg .ydlg-hd-right { - background: url(../images/clipperz/basic-dialog/hd-sprite.gif) no-repeat right 0; + background: url(./images/clipperz/basic-dialog/hd-sprite.gif) no-repeat right 0; } .ydlg .ydlg-close { - background-image:url(../images/clipperz/basic-dialog/close.gif); + background-image:url(./images/clipperz/basic-dialog/close.gif); } body .ybtn-left{ - background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0; + background:url(./images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0; } body .ybtn-right{ - background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px; + background:url(./images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px; } body .ybtn-center{ - background:url(../images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px; + background:url(./images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px; } div.Clipperz_PasswordGenerator_button { - background: url(../images/passwordAssistant.png) 0 22px; + background: url(./images/passwordAssistant.png) 0 22px; } div.Clipperz_PasswordGenerator_button.hover { - background: url(../images/passwordAssistant.png) 0 -1px; + background: url(./images/passwordAssistant.png) 0 -1px; } body ul.radioList li h4 { cursor: auto; } /* ========================================================== */ </style> <![endif]--> <!--[if lt IE 7]> <style> div#newRecordPanel { position: absolute; margin-left: 0px; width: 350px; height: 160px; } div#newRecordInnerPanel { width: 350px; height: 160px; - background: url(../images/newRecordPanelBackground.gif) no-repeat 0 -165px; + background: url(./images/newRecordPanelBackground.gif) no-repeat 0 -165px; /* background: url(data:image/gif;charset=utf-8;base64,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) no-repeat 0 -165px; */ } div.newRecordInnerInnerPanel { background-color: white; padding: 0px; margin-left: 15px; margin-right: 15px; } div#newRecordPanel table td.newRecordPanelLabelTD { padding-left: 0px; padding-top: 3px; font-size: 9pt; width: 100px; } div#readOnlyBanner { - background: url(../images/read-only.gif) no-repeat fixed -5px -8px; + background: url(./images/read-only.gif) no-repeat fixed -5px -8px; /* background: url(data:image/gif;charset=utf-8;base64,R0lGODlhjQCSAPe9AP+SAP/////If//Jgv+fIP+ZEf2SAv+lLf+oNP+iJv+XDf/Jgfv///+aFf6SAf+UB/L/////+/+oM//krv+yTf/IgP//6v//9+n47/+rPP+7YP//7v/Tjv/NjP/Kg/+TAP+2Vv6dG/+dG/+WCvuTBOX47/+SAf//5f//8ur///+dGv+vRPiUB/+SAv/Nf/+TBP+/aunx3/+7We7//+3q0Pu/av2aFff///myTf+yS+Pq0P+2UPTTmf+rO/rq0P+/Yv//4P/ep/+7Xf//3P+yR//YmP+lK//Ea//EdfmdG//qtNz//+D47//enures/HYpv/47//es/7EdfXEdeD///ufIP/41fqvRP+iI/+vQ//xxP/ku/SyTf/esP/NhP/Ice/Tmf/eo/yXDfDIgP6rPP/IevmoNO747/+aE/+fHPyiJv/Tmf+/Xf/42f6WCv/xwODx3/+UAP/YlP/Tif6oNP/45v/EZ//Ynf/40P/xzvy7YP+oLvnIgOX///mrPNv47/3kwfjes/+rMv/Thfm2VuvTmf+2S+Lkwf/kt+/es/e/aujq0PeaFf+/Zv/x3/L47//Yj/2lLf/qy//emv/43v/Yof+rNvrYpv/xyf/Ypv22Vv/4y/+7VPPes//Nev/NiPbYpv/IfvDkwf+XAP/44v/xu/Lx3/f/7v/Tkvb47+r/8v+vP//kqfK/avO7YOfkwfHEdf/EcP/qxvWWCvHq0P/EdP/szfXq0P/Idf/YpfilLf2yTfOdG////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAL0ALAAAAACNAJIAAAj/AHsJHEiwoMGDCBMa9ACgocOHECNKnEixokWHAhRq3MixY0KGF0OKHDkyo8eTKFP2AkmypcuWJlXKnLnwpc2bFWPS3CmTJc6fOHXyHOrRJ9CjMIkqLYq0adKlUBUOcEo1pNCoWAVOrcp14tWsUbd2HYsRrNleYsmO/XqWaFq1XNm25fkWLlW5c2nWDWlAld2LePPK3BuSSwBOfykGFpySsEgqJxJLXMz4pOOKJEQ09BOgh+SHlCt3vByxhmcDKQJEKQCACZ7PDUOL3kgaopsAASQASOAD9xokAbB8lj1bqksCuHUDKJAJdwAlkokXR1h7IvLcDh9UwK3ir/TpBqtT/7yuvGGVAF8sgrEE9Dt4guIjJkDCmrxDENgpsmCg5af791rZpIdznl2XQUNLcHDRGAGkcdN/AMYXEQQwUMBAAFkAgFwOISXQEAkQsGIThO9J+NABFYTRUAMXZvhASGAEUAcCALgSAGtPAdjYTVQE0N+KFxohkgId4EYKBTdAkqOOluGEWgBlOBRCECFlAIOHLcBwYQAXxFESkzu+9AACmj3pAkkxOEdlQytAEAAuIpEInokOaeAcJQ886YVIXGzQQAG3BNDEQ31sYhWYKNHZ0BUBUFDAGgFEhtoEIUnhyB4OLRJAdwA0cMOgFsk5naIIntkQHwHsAMALIYWAmwwOJf+RakOKWPBBqIg2aZMBEMjhEK92kHRAABFoBgAdAaDxZa6j/aRDfiQwoOpFDSCgAADDBlABcHvGyWyzP9mAWwUHnAFESDQ4hwq2uFVyrbff0kYSjhBpoKGbAcgS0isbiEDAIwGcOWyx8MZr3EgNBEDpQzwEsEpDBYwQkrjCNYRBl+wG4CGuBh88kgPpLgxAw0e4dF55ugTXEB0WvJhTxx631InCAIBYsktuMGDrZhHcWjDMBi1gEwFF0txCSw8kcO0UAaCwAgXoLQt00AIGoAEBvYkskia4XXArDM7VIvXUBAn9kgMQeOKQKDSLxCgFB1x7dAsFsPoz2QKZ/RKvpgL/MMuFN1+0RN8kzKAsSaIWpzdJIxwIQB8RcMrCKfbyBQGoywUA69h497L4SPhFqiFuV54xCUnPKseCxpzj/blIOFyQQJEWAICAc5HNO+4Bppx7t+t73yCkGbjZ6kACBLxEwA245eEzYJ2XbdN5ghjAwAOFNE2vRSYcHVHErZP9+kgGfAIAHEQAwEgAa14UCG6SvPtS4rONH5LdAIgrpBOGiKQDChnYzhBGFL2B2M8iDZjBuAAgBucMMCSyGgUApnACE1DAJfQTzQErsp8uIAAQAWADADIAhVyMJAQReMEYaseLCCwpejaBxQNLMAgTOI4k4gpAGxqCgw0groAEGQkB/w7gEB28wQRUmAMADlGKkVCgck4IACIUcLsfhK9zIkkXl1jTCtxECQB/8FVI0hSAlgEAFM4JxRWxeJE0daA30DGAAjUwgu1sjyJmuAACirSBF40gARL7HRDb2JmG0OANDVGAAom1MYtIIRWYAkANAtDHFwJRIBVxAC0CQMSGOCECUOjCipJHkRDcoSGu0pxDJunDNRawIpHAjRAasosAQOFCG7ijRJiQu4yRcoIcEuQle2GR21ltBQGIRUMuQcmKXMsAAFCDinyJwWEi5CLGDMAs6yS/iCRMQQAoQQCK0JBsdVKY1gyJMbd5ERMYAAMBUJADxElOdgXzUNa8pjpx0/+Ii7jKQfCUJz0T6cp0isSYVqwIHF5jsXgCYJ4BOGVBDXpQFHRzlygAwQUaKk8MaI1j+UxIS0xAkRrUDqENcUBAHzrRfCJlP8G6DsEeCs/N4TOkCkFKAQKwhQ7YAgG3i1xDDNCBloa0KQ27UUPIQCxOGfWoSEFVAPLgEKYGoAFPhapNXpABEHhoBQpomBUccoWPvgynHbkJ1Jwju4Y8IQBjtSRaRfoSHMhoBRnoTX7eGld0ztUgLwHRDh0iBS75LBH3hN5f0+oSNczqIW8VoVwXq8+WECIA6XtIA6HzQ8oytiWywgRE0GbWs3qWIzYRpxIdYtfM3vS0G7FJwnjagAft4Md3r4WtRm5CgC0Vz2WK1S1qb2IAEEQhChf0q3ALMpzleiQ6zn2ud6IrXbhkcK52uS521aLd7a6FuikhS3f/+l3whjcu5lUJetN7XqeM17N3Ya9M3Cvf+SLlvbC9b31nchT86rY9+6WJfwIs4AcRuMDzOzCCJ6vgz3a2wfZ9MITVK+EJtze3FkZJVjMMWAxz+CQe/nB1FSPiBU+mxCaGiH8JTGIUpzg2Lt7JiWOc4hU3WMU05glocqxjGPNYxgCwsYUrIOQfG/nISE6ykpfM5CY7+clQjrKUp0zlKlv5yljOspa3zOUue/nLBgsIADsK) no-repeat fixed -5px -8px; */ } ul#directLogins { height: 200px; } div#recordListBlock { height: 200px; } div.clipperzSubPanel { height: 200px; } div.Clipperz_recordFieldData input.scrambledField { - background: transparent url(../images/scrambledValue.gif) no-repeat 0 0px; + background: transparent url(./images/scrambledValue.gif) no-repeat 0 0px; /* background: transparent url(data:image/gif;charset=utf-8;base64,R0lGODlhRwAgANUmAP///7XV/2ZmZqW/4ODg4HBwcGttcJChuLi4uHZ8hYWFhfX19bDO9YCLmZmZmaOjo4aSo6C31tbW1q2trXuEj4uarY+Pj+vr66rG68LCwpWpwnp6eszMzHF1epuwzMTd/7rY/9Pm/8ng/7/b/87j/9jp/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAAAABHACAAAAb/QIBwSCwaj8ikcslsOp/QqHRKRV4QkmQGkbxmkVtlGGkyLSUCLtIiSKLVR7ZSTjYfLwvAW0gY9gF0eEKCewB/hkKBeXyJbQCCRGVIDgIOE5UPBQV8AhsTCmmgapSWmJqcnqKiqJ+haUJlsbFFCKACt50TeQSZuLcOHEK1vrm7vb7AfMe4yQCyskcEBbcZRw+3CotE0tTW2NpE1wLZRtBI19fk25qU1UXo4+CG7ALu6wXt5bNHHAIWAAgEPCgCSsICTYcA9PsXcCCRggcLJAQAEWEkO5KMcNhwIREcAAssCZGgIOHGjoA+hpwwsiSRlS0TZsxYpabNmzhz6tzJs6fP/wBAgwodSrSo0aNIkypdyrSp06dQo0o1iuFAhKMaDhytetVoVqRfjZZJGkGAVqMUBBwte7ZoWqRvxZqgyiAAW6ADguYNEBdD3QB+7ZrFqxdo378B9h4G+gHo2AAjQAhtIKBBhcoQDBjAK6BDhQRmQZ+lbBmzZs6eRYtG/Tn04A/PYpUQegC0L891B2Qm1sAD0NrEcCfe7as3XuK4jMOObYIE0QEGbmkoCuFWAsR6owuYTrS6gOvUrWN3HEty+OrghUI3QJm70Orox69v/1wzfaHLy4Qo6kEAhQAHCADBUKBFwIBmewHV338BDihUgQcakCBQECIoVBkigFBGY0N50DIBBoa1FQADlgEVQQITeggiXyKSWIGJKArlIowJajhXABtOpeOOPPbo449ABinkkAEEAQA7Cg==) no-repeat 0 0px; */ } div.Clipperz_recordFieldData input.scrambledField:focus { - background: transparent url(../images/scrambledValue.gif) no-repeat 0 -14px; + background: transparent url(./images/scrambledValue.gif) no-repeat 0 -14px; /* background: transparent url(data:image/gif;charset=utf-8;base64,R0lGODlhRwAgANUmAP///7XV/2ZmZqW/4ODg4HBwcGttcJChuLi4uHZ8hYWFhfX19bDO9YCLmZmZmaOjo4aSo6C31tbW1q2trXuEj4uarY+Pj+vr66rG68LCwpWpwnp6eszMzHF1epuwzMTd/7rY/9Pm/8ng/7/b/87j/9jp/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAAAABHACAAAAb/QIBwSCwaj8ikcslsOp/QqHRKRV4QkmQGkbxmkVtlGGkyLSUCLtIiSKLVR7ZSTjYfLwvAW0gY9gF0eEKCewB/hkKBeXyJbQCCRGVIDgIOE5UPBQV8AhsTCmmgapSWmJqcnqKiqJ+haUJlsbFFCKACt50TeQSZuLcOHEK1vrm7vb7AfMe4yQCyskcEBbcZRw+3CotE0tTW2NpE1wLZRtBI19fk25qU1UXo4+CG7ALu6wXt5bNHHAIWAAgEPCgCSsICTYcA9PsXcCCRggcLJAQAEWEkO5KMcNhwIREcAAssCZGgIOHGjoA+hpwwsiSRlS0TZsxYpabNmzhz6tzJs6fP/wBAgwodSrSo0aNIkypdyrSp06dQo0o1iuFAhKMaDhytetVoVqRfjZZJGkGAVqMUBBwte7ZoWqRvxZqgyiAAW6ADguYNEBdD3QB+7ZrFqxdo378B9h4G+gHo2AAjQAhtIKBBhcoQDBjAK6BDhQRmQZ+lbBmzZs6eRYtG/Tn04A/PYpUQegC0L891B2Qm1sAD0NrEcCfe7as3XuK4jMOObYIE0QEGbmkoCuFWAsR6owuYTrS6gOvUrWN3HEty+OrghUI3QJm70Orox69v/1wzfaHLy4Qo6kEAhQAHCADBUKBFwIBmewHV338BDihUgQcakCBQECIoVBkigFBGY0N50DIBBoa1FQADlgEVQQITeggiXyKSWIGJKArlIowJajhXABtOpeOOPPbo449ABinkkAEEAQA7Cg==) no-repeat 0 -14px; */ } </style> <![endif]--> diff --git a/frontend/beta/css/clipperz/ytheme-clipperz.css b/frontend/beta/css/clipperz/ytheme-clipperz.css index effed2e..ed71348 100644 --- a/frontend/beta/css/clipperz/ytheme-clipperz.css +++ b/frontend/beta/css/clipperz/ytheme-clipperz.css @@ -1,138 +1,138 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ /* @override
http://localhost:8080/pm-restyle/css/ytheme-clipperz.css
http://proxy/css/ytheme-clipperz.css
http://proxy/pm-497/css/ytheme-clipperz.css
https://www.example.com/css/ytheme-clipperz.css
*/
/* @group new Message dialog */
#mb-dlg .ext-mb-progress {
height:18px;
-/* background:transparent url(../images/default/basic-dialog/progress2.gif) repeat-x 1px 1px; */
+/* background:transparent url(./images/default/basic-dialog/progress2.gif) repeat-x 1px 1px; */
background:transparent url(data:image/gif;charset=utf-8;base64,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) repeat-x 1px 1px;
}
.ydlg .ydlg-hd {
-/* background: url(../images/clipperz/basic-dialog/hd-sprite.gif) repeat-x 0 -82px; */
+/* background: url(./images/clipperz/basic-dialog/hd-sprite.gif) repeat-x 0 -82px; */
background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAwB7AIABADMzZv///yH5BAEAAAEALAAAAAADAHsAAAITBGKpy+0Po5y0Houz3rz7D4ZUAQA7Cg==) repeat-x 0 -82px;
background-color:navy;
color:#ffffff;
font:bold 12px "sans serif", Helvetica, Arial, Geneva, sans-serif;
overflow:hidden;
padding:5px;
}
.ydlg .ydlg-hd-left {
-/* background: url(../images/clipperz/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; */
+/* background: url(./images/clipperz/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; */
background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAwB7AIABADMzZv///yH5BAEAAAEALAAAAAADAHsAAAITBGKpy+0Po5y0Houz3rz7D4ZUAQA7Cg==) no-repeat 0 -41px;
padding-left:3px;
margin:0px;
}
.ydlg .ydlg-hd-right {
-/* background: url(../images/clipperz/basic-dialog/hd-sprite.gif) no-repeat right 0; */
+/* background: url(./images/clipperz/basic-dialog/hd-sprite.gif) no-repeat right 0; */
background: url(data:image/gif;charset=utf-8;base64,R0lGODlhAwB7AIABADMzZv///yH5BAEAAAEALAAAAAADAHsAAAITBGKpy+0Po5y0Houz3rz7D4ZUAQA7Cg==) no-repeat right 0;
padding-right:3px;
}
.ydlg .ydlg-dlg-body {
-/* background:url(../images/clipperz/layout/gradient-bg.gif);*/
+/* background:url(./images/clipperz/layout/gradient-bg.gif);*/
background-color: white;
border:1px solid #333366;
border-top:0 none;
padding:10px;
overflow:hidden;
}
/*
.ydlg .ydlg-dlg-body .ydlg-ft{
padding-top: 7px;
border-top: 1px dotted #333366;
}
*/
.ydlg .ydlg-close {
position:absolute;
top:4px;
right:4px;
z-index:6;
height:15px;
width:15px;
margin:0;
padding:0;
line-height:1px;
font-size:1px;
background-repeat:no-repeat;
cursor:pointer;
visibility:inherit;
-/* background-image:url(../images/clipperz/basic-dialog/close.gif); */
+/* background-image:url(./images/clipperz/basic-dialog/close.gif); */
background-image:url(data:image/gif;charset=utf-8;base64,R0lGODlhDwAPANUAADk1bpeVs5+dub27z+Df6LGvxo2KqzIyZdfW4jk0brq4zNbU4cTD1ImGqVZSg/f2+Y+MraKgu9/e6NjX4qyqwjIyZtrZ5Pn5+mZij0pGenx4n0A7c7Oxx8C/0XZzm/39/Tw3cLCvxX57obe1yrCuxX16oP///zMzZjYxbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAPAA8AAAZ9wJNQSAgJKIuh8oTAoJ5PB2M5AEGvKMEQYcVeFUInqmSBoDyTwDNzIEAtJlPnY7oAngMSFBLvF6AGAlcdfRIJUBoUUB50fWpPDQtQE3EScQ93KBwnDk8BFwUJAQ8jTxsVJwxQmSisEUOCXk8iSwoZWBuvSycHAwYaDRyoQ0EAOwo=);
}
/* @end */
/* @group Message dialog */
div#mb-dlg div div div.ydlg-hd {
background-color: #35306b;
}
div#mb-dlg div.ydlg-dlg-body {
border-color: #333366;
}
div#mb-dlg div.ydlg-dlg-body span.ext-mb-text {
font-size: 10pt;
color: #999999;
}
div.ydlg-btns-center table tbody tr td {
text-align: center;
}
/* @end */
body .ybtn-left{
-/* background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0; */
+/* background:url(./images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0; */
background:url(data:image/gif;charset=utf-8;base64,R0lGODlhAwCTAIcAAAA8dBZNfiVXg0hukEpxk1V9okD/QGaHoGeIoGqLomyMpHqVqHuVqX2ZqoOEb4SGceWXAPiyMPizMPi0Nfi1Nfm0Nfi3O/m3Ovm3O/m4O+21R++1Sfm6Qfm6Qvq6Qfm9SPm9Sfq9Sfq+SfrAUPrAUfrBUPrDWPrEWPrEWfrHYfvHYfvIYPvKavzKafvPcvzOcfzOcvzRevzSefzSeo2eoaOutLG3tra9vb/Hyr/O27/O3P3Vgf3Vgv3Yif3bj/7dlf7fmu7crf3gm8DCycfJzsDP3dvXzdbY39Xf6Nrc4d3e4t3f5ODd1OLf1uTi2eTi2uXi2+bj3Obj3efk3ejl3ujl3+/o0vjt0//wz+Di6OPn6+nm4Orn4Oro4evo4evo4uvq4+vr5ezr5Ozr5ezr5u3q5u3s5e7t5u7t5+jq7+/u6Ovt8vDv6fDu6vDw6vDw6/Hw6vHw6/Hx7PPx7vLy7fLy7vPz7vT07/Dy9fT08PX18fX08vX18vb08vb28vb28/b29PP1+Pb3+vf4+fj49vj49/r6+fr6+vv7+vn8/f39/P7+/f7+/v7+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAADAJMAAAj/AA0sELCgQBEBOhgBUKQIwCFDAAoRAgAIEIA/fwD44QNAjx4AefIAuHMHgB07AOrUAUCHDgA5cgC8cQOATJgAOJocIFDDQAMBARAYQFKAwaIcAhD1AbCnDYA5ZQDE+QIAjhcAbLgAULMFAJoqAM5QAWBmCoAxUgCIiQIADBQAXZwAeMIEgJEbAWwMSBBAgQEAgB0JZkS4keFEiAUpDsQYj+M1kNNI1kI5i+UlmJNoPsJ5iGcioEOHHkQaMACBBGlYERBEBgAgrn+49uG6h2sermfMAPDiBYAWLACoWAHABAoAI0oAACECgIcOADJgAFCBQoANEQ48gOATqNArNBjIfwgiQIYQADJ+oPeBvgf6HehjAHABAwCLFgBSqABw4jgJ5SF8AAAHHABgwQUAUDABABJoEAAEDvDll2lYVNjDhYY1glgiignCWCCO4QHZGpKlQZkWlmWB2RKaJcHZEZ4NEZoSNEZgIwQ4mkahhRee6OOPQAYp5JAn2hgBjhCYFhAAOwo=) no-repeat 0 0;
}
body .ybtn-right{
-/* background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px; */
+/* background:url(./images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px; */
background:url(data:image/gif;charset=utf-8;base64,R0lGODlhAwCTAIcAAAA8dBZNfiVXg0hukEpxk1V9okD/QGaHoGeIoGqLomyMpHqVqHuVqX2ZqoOEb4SGceWXAPiyMPizMPi0Nfi1Nfm0Nfi3O/m3Ovm3O/m4O+21R++1Sfm6Qfm6Qvq6Qfm9SPm9Sfq9Sfq+SfrAUPrAUfrBUPrDWPrEWPrEWfrHYfvHYfvIYPvKavzKafvPcvzOcfzOcvzRevzSefzSeo2eoaOutLG3tra9vb/Hyr/O27/O3P3Vgf3Vgv3Yif3bj/7dlf7fmu7crf3gm8DCycfJzsDP3dvXzdbY39Xf6Nrc4d3e4t3f5ODd1OLf1uTi2eTi2uXi2+bj3Obj3efk3ejl3ujl3+/o0vjt0//wz+Di6OPn6+nm4Orn4Oro4evo4evo4uvq4+vr5ezr5Ozr5ezr5u3q5u3s5e7t5u7t5+jq7+/u6Ovt8vDv6fDu6vDw6vDw6/Hw6vHw6/Hx7PPx7vLy7fLy7vPz7vT07/Dy9fT08PX18fX08vX18vb08vb28vb28/b29PP1+Pb3+vf4+fj49vj49/r6+fr6+vv7+vn8/f39/P7+/f7+/v7+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAADAJMAAAj/AA0sELCgQBEBOhgBUKQIwCFDAAoRAgAIEIA/fwD44QNAjx4AefIAuHMHgB07AOrUAUCHDgA5cgC8cQOATJgAOJocIFDDQAMBARAYQFKAwaIcAhD1AbCnDYA5ZQDE+QIAjhcAbLgAULMFAJoqAM5QAWBmCoAxUgCIiQIADBQAXZwAeMIEgJEbAWwMSBBAgQEAgB0JZkS4keFEiAUpDsQYj+M1kNNI1kI5i+UlmJNoPsJ5iGcioEOHHkQaMACBBGlYERBEBgAgrn+49uG6h2sermfMAPDiBYAWLACoWAHABAoAI0oAACECgIcOADJgAFCBQoANEQ48gOATqNArNBjIfwgiQIYQADJ+oPeBvgf6HehjAHABAwCLFgBSqABw4jgJ5SF8AAAHHABgwQUAUDABABJoEAAEDvDll2lYVNjDhYY1glgiignCWCCO4QHZGpKlQZkWlmWB2RKaJcHZEZ4NEZoSNEZgIwQ4mkahhRee6OOPQAYp5JAn2hgBjhCYFhAAOwo=) no-repeat 0 -21px;
}
body .ybtn-center{
-/* background:url(../images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px; */
+/* background:url(./images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px; */
background:url(data:image/gif;charset=utf-8;base64,R0lGODlhAwCTAIcAAAA8dBZNfiVXg0hukEpxk1V9okD/QGaHoGeIoGqLomyMpHqVqHuVqX2ZqoOEb4SGceWXAPiyMPizMPi0Nfi1Nfm0Nfi3O/m3Ovm3O/m4O+21R++1Sfm6Qfm6Qvq6Qfm9SPm9Sfq9Sfq+SfrAUPrAUfrBUPrDWPrEWPrEWfrHYfvHYfvIYPvKavzKafvPcvzOcfzOcvzRevzSefzSeo2eoaOutLG3tra9vb/Hyr/O27/O3P3Vgf3Vgv3Yif3bj/7dlf7fmu7crf3gm8DCycfJzsDP3dvXzdbY39Xf6Nrc4d3e4t3f5ODd1OLf1uTi2eTi2uXi2+bj3Obj3efk3ejl3ujl3+/o0vjt0//wz+Di6OPn6+nm4Orn4Oro4evo4evo4uvq4+vr5ezr5Ozr5ezr5u3q5u3s5e7t5u7t5+jq7+/u6Ovt8vDv6fDu6vDw6vDw6/Hw6vHw6/Hx7PPx7vLy7fLy7vPz7vT07/Dy9fT08PX18fX08vX18vb08vb28vb28/b29PP1+Pb3+vf4+fj49vj49/r6+fr6+vv7+vn8/f39/P7+/f7+/v7+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAADAJMAAAj/AA0sELCgQBEBOhgBUKQIwCFDAAoRAgAIEIA/fwD44QNAjx4AefIAuHMHgB07AOrUAUCHDgA5cgC8cQOATJgAOJocIFDDQAMBARAYQFKAwaIcAhD1AbCnDYA5ZQDE+QIAjhcAbLgAULMFAJoqAM5QAWBmCoAxUgCIiQIADBQAXZwAeMIEgJEbAWwMSBBAgQEAgB0JZkS4keFEiAUpDsQYj+M1kNNI1kI5i+UlmJNoPsJ5iGcioEOHHkQaMACBBGlYERBEBgAgrn+49uG6h2sermfMAPDiBYAWLACoWAHABAoAI0oAACECgIcOADJgAFCBQoANEQ48gOATqNArNBjIfwgiQIYQADJ+oPeBvgf6HehjAHABAwCLFgBSqABw4jgJ5SF8AAAHHABgwQUAUDABABJoEAAEDvDll2lYVNjDhYY1glgiignCWCCO4QHZGpKlQZkWlmWB2RKaJcHZEZ4NEZoSNEZgIwQ4mkahhRee6OOPQAYp5JAn2hgBjhCYFhAAOwo=) repeat-x 0 -42px;
}
.ext-el-mask {
zoom:100%;
}
body.masked textarea {
overflow: hidden;
}
diff --git a/frontend/beta/css/yui-extensions/basic-dialog.css b/frontend/beta/css/yui-extensions/basic-dialog.css index 5a9f311..5a6cefb 100644 --- a/frontend/beta/css/yui-extensions/basic-dialog.css +++ b/frontend/beta/css/yui-extensions/basic-dialog.css @@ -1,245 +1,253 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ydlg-proxy {
+<<<<<<< HEAD + background-image: url(./images/default/gradient-bg.gif);
+======= +>>>>>>> 0db1d5c8b18eadc4bd9cfc6603e86227fa94b5a9 background-color:#c3daf9;
border:1px solid #6593cf;
z-index:10001;
overflow:hidden;
position:absolute;
left:0;top:0;
}
.ydlg-shadow{
background:#aaaaaa;
position:absolute;
left:0;top:0;
}
.ydlg-focus{
-moz-outline:0 none;
outline:0 none;
width:0;
height:0;
overflow:hidden;
position:absolute;
top:0;
left:0;
}
.ydlg-mask{
z-index:10000;
display:none;
position:absolute;
top:0;
left:0;
-moz-opacity: 0.5;
opacity:.50;
filter: alpha(opacity=50);
background-color:#CCC;
}
body.masked{
}
body.masked select {
visibility:hidden;
}
body.masked .ydlg select {
visibility:visible;
}
.ydlg{
z-index:10001;
overflow:hidden;
position:absolute;
left:300;top:0;
}
.yresizable-proxy{
z-index:10002;
}
.ydlg .ydlg-hd {
- background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
+ background: url(./images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
background-color:navy;
color:#ffffff;
font:bold 12px "sans serif", tahoma, verdana, helvetica;
overflow:hidden;
padding:5px;
}
.ydlg .ydlg-hd-left {
- background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
+ background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
padding-left:3px;
margin:0px;
}
.ydlg .ydlg-hd-right {
- background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
+ background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
padding-right:3px;
}
.ydlg .ydlg-dlg-body{
+<<<<<<< HEAD + background:url(./images/default/layout/gradient-bg.gif);
+======= +>>>>>>> 0db1d5c8b18eadc4bd9cfc6603e86227fa94b5a9 border:1px solid #6593cf;
border-top:0 none;
padding:10px;
overflow:hidden;
}
.ydlg .ydlg-bd{
overflow:hidden;
}
.ydlg .ydlg-ft{
overflow:hidden;
padding:5px;
padding-bottom:0;
}
.ydlg .yui-ext-tabbody{
background:white;
overflow:auto;
}
.ydlg .ytabs-top .yui-ext-tabbody{
border:1px solid #6593cf;
border-top:0 none;
}
.ydlg .ytabs-bottom .yui-ext-tabbody{
border:1px solid #6593cf;
border-bottom:0 none;
}
.ydlg .ylayout-container .yui-ext-tabbody{
border:0 none;
}
.ydlg .inner-tab{
margin:5px;
}
.ydlg .ydlg-ft .ybtn{
margin-right:5px;
float:right;
clear:none;
}
.ydlg .ydlg-ft .ydlg-btns td {
border:0;
padding:0;
}
.ydlg .ydlg-ft .ydlg-btns-right table{
float:right;
clear:none;
}
.ydlg .ydlg-ft .ydlg-btns-left table{
float:left;
clear:none;
}
.ydlg .ydlg-ft .ydlg-btns-center{
text-align:center; /*ie*/
}
.ydlg .ydlg-ft .ydlg-btns-center table{
margin:0 auto; /*everyone else*/
}
.ydlg-draggable .ydlg-hd{
cursor:move;
}
.ydlg-closable .ydlg-hd{
padding-right:22px;
}
.ydlg .ydlg-close {
position:absolute;
top:4px;
right:4px;
z-index:6;
height:15px;
width:15px;
margin:0;
padding:0;
line-height:1px;
font-size:1px;
background-repeat:no-repeat;
cursor:pointer;
visibility:inherit;
- background-image:url(../images/default/basic-dialog/close.gif);
+ background-image:url(./images/default/basic-dialog/close.gif);
}
.ydlg div.yresizable-handle-east{
- background-image:url(../images/default/sizer/e-handle-dark.gif);
+ background-image:url(./images/default/sizer/e-handle-dark.gif);
border:0;
background-position:left;
margin-right:0;
}
.ydlg div.yresizable-handle-south{
- background-image:url(../images/default/sizer/s-handle-dark.gif);
+ background-image:url(./images/default/sizer/s-handle-dark.gif);
border:0;
height:6px;
}
.ydlg div.yresizable-handle-west{
- background-image:url(../images/default/sizer/e-handle-dark.gif);
+ background-image:url(./images/default/sizer/e-handle-dark.gif);
border:0;
background-position:1px;
}
.ydlg div.yresizable-handle-north{
- background-image:url(../images/default/s.gif);
+ background-image:url(./images/default/s.gif);
border:0;
}
.ydlg div.yresizable-handle-northeast, .ytheme-gray .ydlg div.yresizable-handle-northeast{
- background-image:url(../images/default/s.gif);
+ background-image:url(./images/default/s.gif);
border:0;
}
.ydlg div.yresizable-handle-northwest, .ytheme-gray .ydlg div.yresizable-handle-northwest{
- background-image:url(../images/default/s.gif);
+ background-image:url(./images/default/s.gif);
border:0;
}
.ydlg div.yresizable-handle-southeast{
- background-image:url(../images/default/sizer/corners-sprite.gif);
+ background-image:url(./images/default/sizer/corners-sprite.gif);
background-position: top left;
width:8px;
height:8px;
border:0;
}
.ydlg div.yresizable-handle-southwest{
- background-image:url(../images/default/sizer/corners-sprite.gif);
+ background-image:url(./images/default/sizer/corners-sprite.gif);
background-position: top right;
margin-left:1px;
margin-bottom:1px;
border:0;
}
#mb-dlg .ydlg-ft .ybtn{
float:none;
clear:none;
margin:0 3px;
}
#mb-dlg .ydlg-bd {
padding:5px;
overflow:hidden !important;
}
#mb-dlg .ext-mb-input {
margin-top:4px;
width:95%;
}
#mb-dlg .ext-mb-textarea {
margin-top:4px;
font:normal 13px verdana,tahoma,sans-serif;
}
#mb-dlg .ext-mb-progress-wrap {
margin-top:4px;
border:1px solid #6593cf;
}
#mb-dlg .ext-mb-progress {
height:18px;
- background:transparent url(../images/default/basic-dialog/progress2.gif) repeat-x 1px 1px;
+ background:transparent url(./images/default/basic-dialog/progress2.gif) repeat-x 1px 1px;
}
#mb-dlg .ext-mb-progress-bar {
height:18px;
overflow:hidden;
width:0;
background:#8bb8f3;
-} +}
diff --git a/frontend/beta/css/yui-extensions/button.css b/frontend/beta/css/yui-extensions/button.css index ad1b2fc..fa32854 100644 --- a/frontend/beta/css/yui-extensions/button.css +++ b/frontend/beta/css/yui-extensions/button.css @@ -1,83 +1,83 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ybtn{
font:normal 11px arial, tahoma, verdana, helvetica;
cursor:pointer;
white-space: nowrap;
}
.ybtn-left, .ybtn-right{
font-size:1px;
line-height:1px;
}
.ybtn-left{
width:3px;
height:21px;
- background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
+ background:url(./images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
}
.ybtn-right{
width:3px;
height:21px;
- background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
+ background:url(./images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
}
.ybtn-focus{
text-decoration:none !important;
color:black !important;
display: -moz-inline-block;
display:inline-block;
width:auto;
position:relative;
white-space: nowrap;
}
.ybtn-center{
- background:url(../images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
+ background:url(./images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
font:normal 11px "san serif",tahoma,verdana,helvetica;
vertical-align: middle;
text-align:center;
padding:0 5px;
cursor:pointer;
white-space:nowrap;
-moz-user-select: none;
-khtml-user-select: none;
}
.ybtn-over .ybtn-left{
background-position:0 -63px;
}
.ybtn-over .ybtn-right{
background-position:0 -84px;
}
.ybtn-over .ybtn-center{
background-position:0 -105px;
}
.ybtn-click .ybtn-center{
background-position:0 -126px;
}
.ybtn-disabled{
cursor:default;
}
.ybtn-disabled .ybtn-center{
color:gray;
cursor:default;
-} +}
diff --git a/frontend/beta/css/yui-extensions/dd.css b/frontend/beta/css/yui-extensions/dd.css index d4413e5..87cfdae 100644 --- a/frontend/beta/css/yui-extensions/dd.css +++ b/frontend/beta/css/yui-extensions/dd.css @@ -1,78 +1,78 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ydd-drag-proxy{
position:absolute;
left:0;top:0;
visibility:hidden;
z-index:15000;
}
.ydd-drag-ghost{
color: black;
font: normal 11px arial, helvetica, sans-serif;
-moz-opacity: 0.85;
opacity:.85;
filter: alpha(opacity=85);
border-top:1px solid #dddddd;
border-left:1px solid #dddddd;
border-right:1px solid #bbbbbb;
border-bottom:1px solid #bbbbbb;
padding:3px;
padding-left:20px;
background-color:white;
white-space:nowrap;
}
.ydd-drag-repair .ydd-drag-ghost{
-moz-opacity: 0.4;
opacity:.4;
filter: alpha(opacity=40);
border:0 none;
padding:0;
background-color:transparent;
}
.ydd-drag-repair .ydd-drop-icon{
visibility:hidden;
}
.ydd-drop-icon{
position:absolute;
top:3px;
left:3px;
display:block;
width:16px;
height:16px;
background-color:transparent;
background-position: center;
background-repeat: no-repeat;
z-index:1;
}
.ydd-drop-nodrop .ydd-drop-icon{
- background-image: url(../images/default/dd/drop-no.gif);
+ background-image: url(./images/default/dd/drop-no.gif);
}
.ydd-drop-ok .ydd-drop-icon{
- background-image: url(../images/default/dd/drop-yes.gif);
+ background-image: url(./images/default/dd/drop-yes.gif);
}
.ydd-drop-ok-add .ydd-drop-icon{
- background-image: url(../images/default/dd/drop-add.gif);
-} + background-image: url(./images/default/dd/drop-add.gif);
+}
diff --git a/frontend/beta/css/yui-extensions/grid.css b/frontend/beta/css/yui-extensions/grid.css index 37066ce..45a40ab 100644 --- a/frontend/beta/css/yui-extensions/grid.css +++ b/frontend/beta/css/yui-extensions/grid.css @@ -1,581 +1,581 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ygrid-cell-text {
display: block;
overflow: hidden;
padding: 3px 5px;
white-space: nowrap;
}
.ygrid-col{
cursor: default;
height:21px !important;
box-sizing: border-box;
-moz-box-sizing: border-box;
position:absolute;
display:block;
-moz-outline: none;
-moz-user-focus: normal;
overflow: hidden;
border-left: 1px solid #f1efe2;
}
.yeditgrid .ygrid-col{
-moz-outline: normal;
}
.ygrid-col, .ygrid-hd {
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
}
.ygrid-col-0{
border-left: 0;
}
.ygrid-col-last{
border-right: 1px solid #f1efe2;
}
.ygrid-editor{
box-sizing: border-box;
-moz-box-sizing: border-box;
position:absolute;
visibility:hidden;
font: normal 8pt arial;
border: 1px solid #afbdc9;
z-index:10;
}
.ygrid-editor input{
font: normal 8pt arial;
border: 0;
padding-top:2px;
padding-left:3px;
}
.ygrid-editor-container{
overflow:hidden;
display:block;
background-color:white;
}
.ygrid-editor .pick-button{
width:15px;
height:20px;
position:absolute;
display:block;
right:0;
top:0;
z-index:2;
- background-image: url(../images/default/grid/pick-button.gif);
+ background-image: url(./images/default/grid/pick-button.gif);
background-repeat: no-repeat;
}
.ygrid-editor-invalid{
- background-image: url(../images/default/grid/invalid_line.gif);
+ background-image: url(./images/default/grid/invalid_line.gif);
background-repeat: repeat-x;
background-position: bottom;
border: 1px solid #afbdc9;
}
.ygrid-checkbox-editor{
text-align: center;
overflow:hidden;
display:block;
background-color:white;
}
.ygrid-checkbox-editor input{
margin-top:3px;
height:13px;
width:13px;
}
select.ygrid-editor{
padding: 0;
-moz-outline: none;
border: 1px solid #afbdc9;
}
.ygrid-num-editor{
text-align:right;
padding-top:2px;
padding-left:3px;
}
.ygrid-text-editor{
padding-top:2px;
padding-left:3px;
}
.ygrid-hd{
font: normal 8pt arial;
background-color: #ebeadb;
box-sizing: border-box;
-moz-box-sizing: border-box;
display: block;
position: absolute;
overflow:hidden;
}
.ygrid-column-sizer {
width:1px;
border-right:1px dashed #6593cf;
background:none;
cursor: col-resize;
}
.ygrid-drag-proxy{
width:150px;
height:24px;
background-color:#3366cc;
border: 1px solid #002266;
position:absolute;
visibility:hidden;
z-index:10000;
}
.ygrid-drag-text{
font: normal 8pt arial;
color:white;
position:absolute;
top:0;
left:26px;
padding:3px;
display:block;
}
.ygrid-drop-icon{
position:absolute;
top:0;
left:0;
display:block;
width:24px;
height:100%;
background-position: center;
background-repeat: no-repeat;
}
.ygrid-drop-nodrop{
- background-image: url(../images/default/grid/drop-no.gif);
+ background-image: url(./images/default/grid/drop-no.gif);
}
.ygrid-drop-ok{
- background-image: url(../images/default/grid/drop-yes.gif);
+ background-image: url(./images/default/grid/drop-yes.gif);
}
.ygrid-hd .sort-asc {
- background-image: url(../images/default/grid/sort_asc.gif);
+ background-image: url(./images/default/grid/sort_asc.gif);
background-position: right;
background-repeat: no-repeat;
display: none;
height: 14px;
width: 16px;
}
.ygrid-hd .sort-desc {
- background-image: url(../images/default/grid/sort_desc.gif);
+ background-image: url(./images/default/grid/sort_desc.gif);
background-position: right;
background-repeat: no-repeat;
display: none;
height: 14px;
width: 16px;
}
.ygrid-hd-body {
cursor: default;
display: block;
font: normal 8pt arial;
left: 0;
overflow: hidden;
padding: 3px 5px;
position: relative;
top: 0;
white-space: nowrap;
}
.ygrid-hd-body span {
font: normal 8pt arial;
white-space: nowrap;
}
.ygrid-hd-over{
border-bottom: 2px solid #fcc247;
}
.ygrid-hd-over .ygrid-hd-body{
background-color: #faf9f4;
border-bottom: 1px solid #f9a900;
}
.ygrid-hd-split {
- background-image: url(../images/default/grid/grid-split.gif);
+ background-image: url(./images/default/grid/grid-split.gif);
background-position: center;
background-repeat: no-repeat;
cursor: e-resize;
display: block;
font-size: 1px;
height: 16px;
overflow: hidden;
position: absolute;
top: 2px;
width: 6px;
z-index: 3;
}
.ygrid-hrow{
- background: #ebeadb url(../images/default/grid/grid-hrow.gif) repeat-x;
+ background: #ebeadb url(./images/default/grid/grid-hrow.gif) repeat-x;
display: block;
height: 22px;
left: 0;
position: relative;
top: 0;
width: 10000px;
overflow:hidden;
z-index:2;
}
.ygrid-hrow-frame{
height: 22px;
left: 0;
display:block;
position: absolute;
top: 0;
width: 10000px;
z-index:1;
}
.ygrid-footer .ytoolbar{
border:0;
}
.ygrid-page-number{
width:24px;
height:14px;
}
.ygrid-page-first{
- background-image: url(../images/default/grid/page-first.gif);
+ background-image: url(./images/default/grid/page-first.gif);
}
.ygrid-loading{
- background-image: url(../images/default/grid/done.gif);
+ background-image: url(./images/default/grid/done.gif);
}
.ygrid-page-last{
- background-image: url(../images/default/grid/page-last.gif);
+ background-image: url(./images/default/grid/page-last.gif);
}
.ygrid-page-next{
- background-image: url(../images/default/grid/page-next.gif);
+ background-image: url(./images/default/grid/page-next.gif);
}
.ygrid-page-prev{
- background-image: url(../images/default/grid/page-prev.gif);
+ background-image: url(./images/default/grid/page-prev.gif);
}
.ytb-button-disabled .ygrid-loading{
- background-image: url(../images/default/grid/loading.gif);
+ background-image: url(./images/default/grid/loading.gif);
}
.ytb-button-disabled .ygrid-page-first{
- background-image: url(../images/default/grid/page-first-disabled.gif);
+ background-image: url(./images/default/grid/page-first-disabled.gif);
}
.ytb-button-disabled .ygrid-page-last{
- background-image: url(../images/default/grid/page-last-disabled.gif);
+ background-image: url(./images/default/grid/page-last-disabled.gif);
}
.ytb-button-disabled .ygrid-page-next{
- background-image: url(../images/default/grid/page-next-disabled.gif);
+ background-image: url(./images/default/grid/page-next-disabled.gif);
}
.ytb-button-disabled .ygrid-page-prev{
- background-image: url(../images/default/grid/page-prev-disabled.gif);
+ background-image: url(./images/default/grid/page-prev-disabled.gif);
}
.ygrid-mso{
}
.ygrid-mso .ygrid-hd{
background:none;
border-bottom:0;
}
.ygrid-mso .ygrid-footer {
border-top: 1px solid #6593cf;
}
.ygrid-mso .ygrid-footer .ygrid-fbutton{
border:0;
}
.ygrid-mso .ygrid-hd-body {
border-bottom:0;
}
.ygrid-mso .ygrid-hd-over{
border-bottom:0;
}
.ygrid-mso .ygrid-hd-over .ygrid-hd-body{
background-color: transparent;
}
.ygrid-mso .ygrid-hd-split {
- background-image: url(../images/default/grid/grid-blue-split.gif);
+ background-image: url(./images/default/grid/grid-blue-split.gif);
}
.ygrid-mso .ytoolbar .ytb-sep {
- background-image: url(../images/default/grid/grid-blue-split.gif);
+ background-image: url(./images/default/grid/grid-blue-split.gif);
}
.ygrid-mso .ygrid-hrow{
- background: url(../images/default/grid/mso-hd.gif);
+ background: url(./images/default/grid/mso-hd.gif);
border-bottom: 1px solid #6593cf;
height: 21px;
}
.ygrid-mso .ygrid-row{
color: black;
border-bottom: 1px solid #ddecfe;
}
.ygrid-mso .ygrid-row-alt{
background-color: #f5f5f5;
}
.ygrid-mso .ygrid-row-selected{
background-color: #b3c8e8 !important;
color: black;
}
.ygrid-mso .ygrid-row-selected span{
color: black !important;
}
.yprops-grid .ygrid-col-1{
background-color: #f1efe2;
}
.yprops-grid .ygrid-col-1 .ygrid-cell-text{
background-color: white;
}
.yprops-grid .ygrid-col-0{
background-color: #f1efe2;
}
.yprops-grid .ygrid-col-0 .ygrid-cell-text{
background-color: white;
margin-left:10px;
}
.yprops-grid .ygrid-prop-edting .ygrid-col-0 .ygrid-cell-text{
background-color: #316ac5;
color: white;
}
.yprops-grid .ygrid-prop-edting .ygrid-col-0{
color: white;
}
.yprops-grid .ygrid-num-editor{
text-align:left;
}
.ygrid-row{
font: normal 8pt arial;
border-bottom: 1px solid #f1efe2;
overflow: visible;
white-space: nowrap;
height:21px;
width:10000px;
box-sizing: border-box;
-moz-box-sizing: border-box;
display:block;
position:absolute;
}
.ygrid-row-alt{
background-color: #fcfaf6;
}
.ygrid-row-over{
background-color: #f1f1f1;
color: black;
}
.ygrid-row-selected{
background-color: #316ac5 !important;
color: white;
}
.ygrid-row-selected span{
color: white !important;
}
.ygrid-vista{
border:1px solid #535353;
}
.ygrid-vista .ygrid-hd{
border-bottom:0px;
background:none;
}
.ygrid-vista .ygrid-hd-body {
border-bottom: 1px solid #b3bcc0;
}
.ygrid-vista .ygrid-hd-over{
border-bottom:0px;
}
.ygrid-vista .ygrid-hd-over .ygrid-hd-body{
background-color: transparent;
border-bottom:0;
}
.ygrid-vista .ygrid-hd-split {
- background-image: url(../images/default/grid/grid-split.gif);
+ background-image: url(./images/default/grid/grid-split.gif);
}
.ygrid-vista .ygrid-hrow{
- background: url(../images/default/grid/grid-vista-hd.gif);
+ background: url(./images/default/grid/grid-vista-hd.gif);
height: 21px;
}
.ygrid-vista .ygrid-row-alt{
background-color: #f5f5f5;
}
.ygrid-vista .ygrid-row-selected{
background-color: #535353 !important;
color: white;
}
.ygrid-vista .ygrid-row-selected span{
color: white !important;
}
.ygrid-vista .ygrid-wrap-body {
}
.ygrid-vista .ytoolbar{
border: 0px none;
- background: url(../images/default/grid/grid-vista-hd.gif);
+ background: url(./images/default/grid/grid-vista-hd.gif);
}
.ygrid-vista .ytoolbar .ytb-sep{
- background-image: url(../images/default/grid/grid-split.gif);
+ background-image: url(./images/default/grid/grid-split.gif);
}
/*
To have the scrollbars overlap the header, change .ygrid-wrap top style to 0 and
and ygrid-wrap-body top to 22px
Then grid.getView().scrollbarMode = YAHOO.ext.grid.GridView.SCROLLBARS_OVERLAP;
*/
.ygrid-wrap {
height: 100%;
left: 0;
overflow: auto;
position: relative;
top: 22px;
width: 100%;
}
.ygrid-footer{
display: block;
padding:0;
border-top: 1px solid #cbc7b8;
}
.ygrid-wrap-footer {
display: block;
overflow: hidden;
width:100%;
height:25px;
box-sizing: border-box;
-moz-box-sizing: border-box;
background-color: #ebeadb;
position:absolute;
bottom:0;
}
.ygrid-wrap-body {
left: 0;
overflow: hidden;
position: absolute;
top: 0;
display: block;
}
.ygrid-wrap-headers {
left: 0;
overflow: hidden;
position: absolute;
top: 0;
z-index: 12;
}
.ypopcal{
background: white;
padding:2px;
border: 1px solid gray;
z-index:12001;
-moz-outline:none;
position:absolute;
display:none;
top:0;
left:0;
}
.ypopcal-shadow {
background: #dddddd;
filter: progid:DXImageTransform.Microsoft.Blur(MakeShadow=true,pixelradius=1) Alpha(opacity=35,style=1,startX=0,finishX=200,FinishOpacity=35);
padding: 0;
position:absolute;
z-index:12000;
display:none;
top:0;
left:0;
}
.ypopcal-head{
width:150px;
background: #93b5e4;
}
.ypopcal-head td{
padding:1px;
}
.ypopcal-month{
color: white;
font: bold 7pt verdana;
text-decoration: none;
text-align:center;
}
.ypopcal-head .ypopcal-arrow{
width:16px;
text-align:center;
cursor:pointer;
-moz-user-select: none;
}
.ypopcal-head .next-month{
width:16px;
- background-image: url(../images/default/grid/arrow-right-white.gif);
+ background-image: url(./images/default/grid/arrow-right-white.gif);
background-position: center;
background-repeat: no-repeat;
cursor:pointer;
}
.ypopcal-head .prev-month{
width:16px;
- background-image: url(../images/default/grid/arrow-left-white.gif);
+ background-image: url(./images/default/grid/arrow-left-white.gif);
background-position: center;
background-repeat: no-repeat;
cursor:pointer;
}
.ypopcal-table {
background:white;
border-bottom: 1px solid #cccccc;
}
.ypopcal-table tr{
}
.ypopcal-table td{
box-sizing: border-box;
-moz-box-sizing: border-box;
border: 1px solid white;
text-align:right;
color:#aaaaaa;
cursor:pointer;
font:normal 8pt arial;
background:white;
padding:1px 2px;
width:12px;
height:12px;
}
.ypopcal-table td.today{
border: 1px solid darkred;
}
.ypopcal-table .ypopcal-daynames td{
text-align:center !important;
border:0;
border-bottom: 1px solid #cccccc;
font-size: 8pt;
font-weight: normal;
text-align:right;
color:black;
cursor:default;
}
.ypopcal-table td.active{
cursor:pointer;
color:black;
}
.ypopcal-table td.ypopcal-disabled{
cursor:default;
background:#eeeeee;
border: 1px solid #eeeeee;
color:#bbbbbb;
}
.ypopcal-table td.selected{
background: #ddecfe;
border: 1px solid #c3daf9;
}
.ypopcal-today{
color: black;
cursor: hand;
display: inline-block;
font: normal 8pt arial;
margin-left: 2px;
text-decoration: none;
margin-top:2px;
}
.ygrid-simple-view .ygrid-col{
height:100% !important;
position:static;
display:table-cell;
display:inline-block;
}
.ygrid-simple-view .ygrid-row{
position:static;
display: table-row;
-} +}
diff --git a/frontend/beta/css/yui-extensions/layout.css b/frontend/beta/css/yui-extensions/layout.css index 0c0feee..4f1fa03 100644 --- a/frontend/beta/css/yui-extensions/layout.css +++ b/frontend/beta/css/yui-extensions/layout.css @@ -1,225 +1,225 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ylayout-container{
width:100%;
height:100%;
overflow:hidden;
background-color:#c3daf9;
}
.ylayout-collapsed{
position:absolute;
left:-10000px;
top:-10000px;
visibility:hidden;
background-color:#c3daf9;
width:20px;
height:20px;
overflow:hidden;
border:1px solid #98c0f4;
z-index:20;
}
.ylayout-collapsed-over{
cursor:pointer;
background-color:#d9e8fb;
}
.ylayout-collapsed-west .ylayout-tools-button{
float:right;
}
.ylayout-collapsed-east .ylayout-tools-button{
float:left;
}
.ylayout-collapsed-north, .ylayout-collapsed-south{
text-align:right;
}
.ylayout-collapsed .ylayout-tools-button{
margin:2px;
width:12px;
text-align:center;
}
.ylayout-inactive-content{
position:absolute;
left:-10000px;
top:-10000px;
visibility:hidden;
}
.ylayout-active-content{
visibility:visible;
}
.ylayout-panel{
position:absolute;border:1px solid #98c0f4;overflow:hidden;background-color:white;
}
.ylayout-panel-east, .ylayout-panel-west {
z-index:10;
}
.ylayout-panel-north, .ylayout-panel-south {
z-index:11;
}
.ylayout-collapsed-north, .ylayout-collapsed-south, .ylayout-collapsed-east, .ylayout-collapsed-west {
z-index:12;
}
.ylayout-panel-body{
overflow:hidden;
}
.ylayout-grid-wrapper{
}
.ylayout-split{
position:absolute;
height:5px;
width:5px;
line-height:1px;
font-size:1px;
z-index:3;
background-color:#c3daf9;
}
.ylayout-panel-hd{
- background-image: url(../images/default/layout/panel-title-light-bg.gif);
+ background-image: url(./images/default/layout/panel-title-light-bg.gif);
color: black;
border-bottom:1px solid #98c0f4;
position:relative;
}
.ylayout-panel-hd-text{
font:normal 11px tahoma, verdana, helvetica;
padding: 4px;
padding-left: 4px;
display:block;
white-space:nowrap;
}
.ylayout-panel-hd-tools{
position:absolute;
right:0;
top:0;
text-align:right;
padding-top:2px;
padding-right:2px;width:40px;
}
.ylayout-tools-button{
z-index:6;
padding:2px;
cursor:pointer;
}
.ylayout-tools-button-over{
padding:1px;
border:1px solid #98c0f4;
background-color:white;
}
.ylayout-tools-button-inner{
height:12px;
width:12px;
line-height:1px;
font-size:1px;
background-repeat:no-repeat;
background-position:center;
}
.ylayout-close{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -48px;
}
.ylayout-collapse-west,.ylayout-expand-east{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% 0;
}
.ylayout-expand-west,.ylayout-collapse-east{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -12px;
}
.ylayout-collapse-north,.ylayout-expand-south{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -24px;
}
.ylayout-expand-north,.ylayout-collapse-south{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -36px;
}
.ylayout-split-h{
- background-image:url(../images/default/sizer/e-handle.gif);
+ background-image:url(./images/default/sizer/e-handle.gif);
background-position: left;
}
.ylayout-split-v{
- background-image:url(../images/default/sizer/s-handle.gif);
+ background-image:url(./images/default/sizer/s-handle.gif);
background-position: top;
}
.ylayout-panel .ytab-wrap{
- background:url(../images/default/layout/gradient-bg.gif);
+ background:url(./images/default/layout/gradient-bg.gif);
}
.ylayout-panel .yui-ext-tabbody {
background-color:white;
overflow:auto;height:100%;
}
.ylayout-component-panel, .ylayout-nested-layout {
position:relative;
padding:0;
overflow:hidden;
width:200px;
height:200px;
}
.ylayout-nested-layout .ylayout-panel {
border:0 none;
}
.ylayout-nested-layout .ylayout-panel-north {
border-bottom:1px solid #98c0f4;
}
.ylayout-nested-layout .ylayout-panel-south {
border-top:1px solid #98c0f4;
}
.ylayout-nested-layout .ylayout-panel-east {
border-left:1px solid #98c0f4;
}
.ylayout-nested-layout .ylayout-panel-west {
border-right:1px solid #98c0f4;
}
.yui-ext-repaint{
zoom:1;
background-color: transparent;
}
.ylayout-panel-dragover {
border: 2px solid #6593cf;
}
.ylayout-panel-proxy {
- background-image: url(../images/default/layout/gradient-bg.gif);
+ background-image: url(./images/default/layout/gradient-bg.gif);
background-color:#c3daf9;
border:1px dashed #6593cf;
z-index:10001;
overflow:hidden;
position:absolute;
left:0;top:0;
}
.ylayout-slider {
z-index:15;
overflow:hidden;
position:absolute;
}
.yunselectable{
-moz-user-select: none;
-khtml-user-select: none;
cursor:default;
-} +}
diff --git a/frontend/beta/css/yui-extensions/qtips.css b/frontend/beta/css/yui-extensions/qtips.css index 34d3323..d4af0a2 100644 --- a/frontend/beta/css/yui-extensions/qtips.css +++ b/frontend/beta/css/yui-extensions/qtips.css @@ -1,67 +1,67 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ytip{
position: absolute;
top: 0;
visibility: hidden;
z-index: 11000;
}
.ytip .ytip-bd{
- background: #e0e8f3 url(../images/default/qtip/bg.gif) repeat-x;
+ background: #e0e8f3 url(./images/default/qtip/bg.gif) repeat-x;
border: 1px solid #a3bad9;
font: normal 11px arial,helvetica,sans-serif;
padding: 5px;
}
.ytip .ytip-close{
- background-image: url(../images/default/basic-dialog/close.gif);
+ background-image: url(./images/default/basic-dialog/close.gif);
height: 15px;
position: absolute;
right: 3px;
top: 3px;
width: 15px;
}
.ytip .ytip-hd {
- background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
+ background: url(./images/default/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
background-color: navy;
color: #FFF;
display: block;
font: bold 11px tahoma, arial, verdana, helvetica;
padding: 4px;
}
.ytip .ytip-hd-left {
- background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
+ background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
display: block;
margin: 0px;
padding-left: 3px;
}
.ytip .ytip-hd-right {
- background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0px;
+ background: url(./images/default/basic-dialog/hd-sprite.gif) no-repeat right 0px;
display: block;
padding-right: 3px;
}
y\:qtip, qtip{
display: none;
-} +}
diff --git a/frontend/beta/css/yui-extensions/resizable.css b/frontend/beta/css/yui-extensions/resizable.css index 51d91ac..61b826b 100644 --- a/frontend/beta/css/yui-extensions/resizable.css +++ b/frontend/beta/css/yui-extensions/resizable.css @@ -1,157 +1,157 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .yresizable-handle {
position:absolute;
z-index:100;
/* ie needs these */
font-size:1px;
line-height:6px;
overflow:hidden;
background:white;
filter:alpha(opacity=0);
opacity:0;
zoom:1;
}
.yresizable-handle-east{
width:6px;
cursor:e-resize;
right:0px;
top:0px;
height:100%;
margin-right:-1px; /*IE rounding error*/
}
.yresizable-handle-south{
width:100%;
cursor:s-resize;
left:0px;
bottom:0px;
height:6px;
margin-bottom:-1px; /*IE rounding error*/
}
.yresizable-handle-west{
width:6px;
cursor:w-resize;
left:0px;
top:0px;
height:100%;
}
.yresizable-handle-north{
width:100%;
cursor:n-resize;
left:0px;
top:0px;
height:6px;
}
.yresizable-handle-southeast{
width:6px;
cursor:se-resize;
right:0px;
bottom:0px;
height:6px;
z-index:101;
}
.yresizable-handle-northwest{
width:6px;
cursor:nw-resize;
left:0px;
top:0px;
height:6px;
z-index:101;
}
.yresizable-handle-northeast{
width:6px;
cursor:ne-resize;
right:0px;
top:0px;
height:6px;
z-index:101;
}
.yresizable-handle-southwest{
width:6px;
cursor:sw-resize;
left:0px;
bottom:0px;
height:6px;
z-index:101;
}
.yresizable-over .yresizable-handle, .yresizable-pinned .yresizable-handle{
filter:alpha(opacity=100);
opacity:1;
}
.yresizable-over .yresizable-handle-east, .yresizable-pinned .yresizable-handle-east{
- background:url(../images/default/sizer/e-handle.gif);
+ background:url(./images/default/sizer/e-handle.gif);
background-position: left;
}
.yresizable-over .yresizable-handle-west, .yresizable-pinned .yresizable-handle-west{
- background:url(../images/default/sizer/e-handle.gif);
+ background:url(./images/default/sizer/e-handle.gif);
background-position: left;
}
.yresizable-over .yresizable-handle-south, .yresizable-pinned .yresizable-handle-south{
- background:url(../images/default/sizer/s-handle.gif);
+ background:url(./images/default/sizer/s-handle.gif);
background-position: top;
}
.yresizable-over .yresizable-handle-north, .yresizable-pinned .yresizable-handle-north{
- background:url(../images/default/sizer/s-handle.gif);
+ background:url(./images/default/sizer/s-handle.gif);
background-position: top;
}
.yresizable-over .yresizable-handle-southeast, .yresizable-pinned .yresizable-handle-southeast{
- background:url(../images/default/sizer/corners-sprite.gif);
+ background:url(./images/default/sizer/corners-sprite.gif);
background-position: top left;
}
.yresizable-over .yresizable-handle-northwest, .yresizable-pinned .yresizable-handle-northwest{
- background:url(../images/default/sizer/corners-sprite.gif);
+ background:url(./images/default/sizer/corners-sprite.gif);
background-position:bottom right;
}
.yresizable-over .yresizable-handle-northeast, .yresizable-pinned .yresizable-handle-northeast{
- background:url(../images/default/sizer/corners-sprite.gif);
+ background:url(./images/default/sizer/corners-sprite.gif);
background-position: bottom left;
}
.yresizable-over .yresizable-handle-southwest, .yresizable-pinned .yresizable-handle-southwest{
- background:url(../images/default/sizer/corners-sprite.gif);
+ background:url(./images/default/sizer/corners-sprite.gif);
background-position: top right;
}
.yresizable-proxy{
border: 1px dashed #6593cf;
position:absolute;
overflow:hidden;
visibility:hidden;
left:0;top:0;
z-index:1001;
}
.yresizable-overlay{
width:100%;
height:100%;
display:none;
position:absolute;
left:0;
top:0;
background:white;
z-index:20000;
-moz-opacity: 0;
opacity:0;
filter: alpha(opacity=0);
border:1px solid red;
}
diff --git a/frontend/beta/css/yui-extensions/tabs.css b/frontend/beta/css/yui-extensions/tabs.css index 6fd0f89..025214a 100644 --- a/frontend/beta/css/yui-extensions/tabs.css +++ b/frontend/beta/css/yui-extensions/tabs.css @@ -1,149 +1,149 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ytab-wrap {
border-bottom:1px solid #6593cf;
padding-top:2px;
}
.ytab-strip-wrap{
width:100%;
}
.ytab-wrap table{
position:relative;
top:0; left:0;
}
.ytab-strip td{
padding:0;
padding-left:2px;
}
.ytab-strip a, .ytab-strip span, .ytab-strip em {
display:block;
}
.ytab-strip a {
text-decoration:none !important;
-moz-outline: none;
outline: none;
cursor:pointer;
}
.ytab-strip .ytab-text {
font:bold 11px tahoma,arial,helvetica;
color:#666;
overflow:hidden;
white-space: nowrap;
cursor:pointer;
text-overflow: ellipsis;
}
.ytab-strip .on .ytab-text {
cursor:default;
color:#083772;
}
.ytab-strip .disabled .ytab-text {
cursor:default;
color:#aaaaaa;
}
.ytab-strip .ytab-inner {
padding:4px 10px;
}
.ytab-strip .on .ytab-right {
- background: url(../images/default/tabs/tab-sprite.gif) no-repeat right 0;
+ background: url(./images/default/tabs/tab-sprite.gif) no-repeat right 0;
}
.ytab-strip .on .ytab-left {
- background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
+ background: url(./images/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
}
.ytab-strip .ytab-right {
- background: url(../images/default/tabs/tab-sprite.gif) no-repeat right -50px;
+ background: url(./images/default/tabs/tab-sprite.gif) no-repeat right -50px;
}
.ytab-strip .ytab-left {
- background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
+ background: url(./images/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
}
.ytab-strip a {
position:relative;
top:1px; left:0;
}
.ytab-strip .on a {
position:relative;
}
.ytab-strip .on .ytab-inner {
padding-bottom:5px;
}
/** closable tabs */
.ytab-strip .ytab-closable .ytab-inner{
padding-right:22px;
position:relative;
}
.ytab-strip .ytab-closable .close-icon{
line-height: 1px;
font-size:1px;
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -60px;
display:block;
position:absolute;
right:5px;top:4px;
width:12px;height:11px;
cursor:pointer;
}
.ytab-strip .on .close-icon{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -60px;
}
.ytab-strip .ytab-closable .close-over{
- background-image:url(../images/default/layout/layout-sprite.gif);
+ background-image:url(./images/default/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -72px;
}
.ytabs-bottom .ytab-wrap {
border-top:1px solid #6593cf;
border-bottom:0 none;
padding-top:0;
padding-bottom:2px;
}
.ytabs-bottom .ytab-strip .ytab-right {
- background: url(../images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
+ background: url(./images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .ytab-left {
- background: url(../images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
+ background: url(./images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
}
.ytabs-bottom .ytab-strip .on .ytab-right {
- background: url(../images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+ background: url(./images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .on .ytab-left {
- background: url(../images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+ background: url(./images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
}
.ytabs-bottom .ytab-strip a {
position:relative;
top:0; left:0;
}
.ytabs-bottom .ytab-strip .on a {
margin-top:-1px;
}
.ytabs-bottom .ytab-strip .on .ytab-inner {
padding-top:5px;
}
diff --git a/frontend/beta/css/yui-extensions/toolbar.css b/frontend/beta/css/yui-extensions/toolbar.css index dea6754..198b47c 100644 --- a/frontend/beta/css/yui-extensions/toolbar.css +++ b/frontend/beta/css/yui-extensions/toolbar.css @@ -1,112 +1,112 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ytoolbar{
background-color: #ebeadb;
border: 1px solid #cbc7b8;
display: block;
padding:2px;
}
.mso .ytoolbar, .ygrid-mso .ytoolbar{
border: 0px none;
- background: url(../images/default/grid/mso-hd.gif);
+ background: url(./images/default/grid/mso-hd.gif);
}
.ytoolbar td,.ytoolbar span,.ytoolbar input,.ytoolbar div{
white-space: nowrap;
font:normal 8pt arial,helvetica;
}
.ytoolbar .ytb-button-disabled .ytb-button-inner{
color:gray;
cursor:default;
}
/*
Default button class is icon only. Add a class with a background-image property
to your toolbar button
*/
.ytoolbar .ytb-button-inner{
background-position: center;
background-repeat: no-repeat;
display: block;
height: 16px;
width: 16px;
cursor:pointer;
white-space: nowrap;
}
/*
Button class for icon and text. Add this class and a class with a background-image
to your toolbar button for both text and icon
*/
.ytoolbar .ytb-text-icon{
background-position: 0px 0px;
background-repeat: no-repeat;
padding-left:18px;
padding-top:1px;
width:auto;
display:block;
}
/*
Button class for a button with only text. Add this class
to your toolbar button for a just text button
*/
.ytoolbar .ytb-text-only{
background:none;
padding-left:0px;
padding-top:1px;
width:auto;
display:block;
}
.ytoolbar .ytb-text{
padding:2px;
}
.ytoolbar .ytb-button{
padding:2px 3px;
display:block;
}
.ytoolbar .ytb-button-over{
- background:#c3d3ed url(../images/default/toolbar/btn-over-bg.gif) repeat-x;
+ background:#c3d3ed url(./images/default/toolbar/btn-over-bg.gif) repeat-x;
border:1px solid #6593cf;
padding:1px 2px;
}
.ytoolbar .ytb-sep {
- background-image: url(../images/default/grid/grid-split.gif);
+ background-image: url(./images/default/grid/grid-split.gif);
background-position: center;
background-repeat: no-repeat;
display: block;
font-size: 1px;
height: 16px;
width:4px;
overflow: hidden;
cursor:default;
margin: 0px 2px 0px;
border:0px;
}
.mso .ytoolbar .ytb-sep, .ygrid-mso .ytoolbar .ytb-sep{
- background-image: url(../images/default/grid/grid-blue-split.gif);
+ background-image: url(./images/default/grid/grid-blue-split.gif);
}
diff --git a/frontend/beta/css/yui-extensions/tree.css b/frontend/beta/css/yui-extensions/tree.css index 992909d..4b448e8 100644 --- a/frontend/beta/css/yui-extensions/tree.css +++ b/frontend/beta/css/yui-extensions/tree.css @@ -1,190 +1,190 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ .ytree-icon, .ytree-ec-icon, .ytree-elbow-line, .ytree-elbow, .ytree-elbow-end, .ytree-elbow-plus, .ytree-elbow-minus, .ytree-elbow-end-plus, .ytree-elbow-end-minus{
border: 0 none;
height: 18px;
margin: 0px;
padding: 0px;
vertical-align: middle;
width: 16px;
}
.ytree-node-collapsed .ytree-node-icon, .ytree-node-expanded .ytree-node-icon, .ytree-node-leaf .ytree-node-icon{
border: 0 none;
height: 16px;
margin: 0px;
padding: 0px;
vertical-align: middle;
width: 16px;
background-position:center;
}
/* some default icons for leaf/folder */
.ytree-node-collapsed .ytree-node-icon{
- background:transparent url(../images/default/tree/folder.gif);
+ background:transparent url(./images/default/tree/folder.gif);
}
.ytree-node-expanded .ytree-node-icon{
- background:transparent url(../images/default/tree/folder-open.gif);
+ background:transparent url(./images/default/tree/folder-open.gif);
}
.ytree-node-leaf .ytree-node-icon{
- background:transparent url(../images/default/tree/leaf.gif);
+ background:transparent url(./images/default/tree/leaf.gif);
}
/* loading icon */
.ytree-node-loading .ytree-node-icon{
- background:transparent url(../images/default/tree/loading.gif) !important;
+ background:transparent url(./images/default/tree/loading.gif) !important;
}
.ytree-node-loading a span{
font-style: italic;
color:#444444;
}
/* Line styles */
.ytree-lines .ytree-elbow{
- background:transparent url(../images/default/tree/elbow.gif);
+ background:transparent url(./images/default/tree/elbow.gif);
}
.ytree-lines .ytree-elbow-plus{
- background:transparent url(../images/default/tree/elbow-plus.gif);
+ background:transparent url(./images/default/tree/elbow-plus.gif);
}
.ytree-lines .ytree-elbow-minus{
- background:transparent url(../images/default/tree/elbow-minus.gif);
+ background:transparent url(./images/default/tree/elbow-minus.gif);
}
.ytree-lines .ytree-elbow-end{
- background:transparent url(../images/default/tree/elbow-end.gif);
+ background:transparent url(./images/default/tree/elbow-end.gif);
}
.ytree-lines .ytree-elbow-end-plus{
- background:transparent url(../images/default/tree/elbow-end-plus.gif);
+ background:transparent url(./images/default/tree/elbow-end-plus.gif);
}
.ytree-lines .ytree-elbow-end-minus{
- background:transparent url(../images/default/tree/elbow-end-minus.gif);
+ background:transparent url(./images/default/tree/elbow-end-minus.gif);
}
.ytree-lines .ytree-elbow-line{
- background:transparent url(../images/default/tree/elbow-line.gif);
+ background:transparent url(./images/default/tree/elbow-line.gif);
}
/* No line styles */
.ytree-no-lines .ytree-elbow{
background:transparent;
}
.ytree-no-lines .ytree-elbow-plus{
- background:transparent url(../images/default/tree/elbow-plus-nl.gif);
+ background:transparent url(./images/default/tree/elbow-plus-nl.gif);
}
.ytree-no-lines .ytree-elbow-minus{
- background:transparent url(../images/default/tree/elbow-minus-nl.gif);
+ background:transparent url(./images/default/tree/elbow-minus-nl.gif);
}
.ytree-no-lines .ytree-elbow-end{
background:transparent;
}
.ytree-no-lines .ytree-elbow-end-plus{
- background:transparent url(../images/default/tree/elbow-end-plus-nl.gif);
+ background:transparent url(./images/default/tree/elbow-end-plus-nl.gif);
}
.ytree-no-lines .ytree-elbow-end-minus{
- background:transparent url(../images/default/tree/elbow-end-minus-nl.gif);
+ background:transparent url(./images/default/tree/elbow-end-minus-nl.gif);
}
.ytree-no-lines .ytree-elbow-line{
background:transparent;
}
.ytree-elbow-plus, .ytree-elbow-minus, .ytree-elbow-end-plus, .ytree-elbow-end-minus{
cursor:pointer;
}
.ytree-node{
color: black;
font: normal 11px arial, helvetica, sans-serif;
white-space: nowrap;
}
.ytree-node a, .ydd-drag-ghost a{
text-decoration:none;
color:black;
-khtml-user-select:normal;
-moz-user-select:normal;
}
.ytree-node a span, .ydd-drag-ghost a span{
text-decoration:none;
color:black;
padding:1px 3px 1px 2px;
}
.ytree-node .ytree-node-disabled a span{
color:gray !important;
}
.ytree-node .ytree-node-disabled .ytree-node-icon{
-moz-opacity: 0.5;
opacity:.5;
filter: alpha(opacity=50);
}
.ytree-node .ytree-node-inline-icon{
background:transparent;
}
.ytree-node a:hover, .ydd-drag-ghost a:hover{
text-decoration:none;
}
.ytree-node div.ytree-drag-insert-below{
border-bottom:1px dotted #3366cc;
}
.ytree-node div.ytree-drag-insert-above{
border-top:1px dotted #3366cc;
}
.ytree-dd-underline .ytree-node div.ytree-drag-insert-below{
border-bottom:0px none;
}
.ytree-dd-underline .ytree-node div.ytree-drag-insert-above{
border-top:0px none;
}
.ytree-dd-underline .ytree-node div.ytree-drag-insert-below a{
border-bottom:2px solid #3366cc;
}
.ytree-dd-underline .ytree-node div.ytree-drag-insert-above a{
border-top:2px solid #3366cc;
}
.ytree-node .ytree-drag-append a span{
background:#dddddd;
border:1px dotted gray;
}
.ytree-node .ytree-selected a span{
background:#3366cc;
color:white;
}
.ydd-drag-ghost .ytree-node-indent, .ydd-drag-ghost .ytree-ec-icon{
display:none !important;
}
.ytree-drop-ok-append .ydd-drop-icon{
- background-image: url(../images/default/tree/drop-add.gif);
+ background-image: url(./images/default/tree/drop-add.gif);
}
.ytree-drop-ok-above .ydd-drop-icon{
- background-image: url(../images/default/tree/drop-over.gif);
+ background-image: url(./images/default/tree/drop-over.gif);
}
.ytree-drop-ok-below .ydd-drop-icon{
- background-image: url(../images/default/tree/drop-under.gif);
+ background-image: url(./images/default/tree/drop-under.gif);
}
.ytree-drop-ok-between .ydd-drop-icon{
- background-image: url(../images/default/tree/drop-between.gif);
+ background-image: url(./images/default/tree/drop-between.gif);
}
.ylayer-shadow{
background:#cccccc;
opacity:.3;
-moz-opacity:.3;
filter: alpha(opacity=30);
-} +}
diff --git a/frontend/beta/css/yui-extensions/ytheme-aero.css b/frontend/beta/css/yui-extensions/ytheme-aero.css index b599de0..a3087b0 100644 --- a/frontend/beta/css/yui-extensions/ytheme-aero.css +++ b/frontend/beta/css/yui-extensions/ytheme-aero.css @@ -1,358 +1,358 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ /**
* Tabs
*/
.ytab-wrap, .ylayout-panel .ytabs-top .ytab-wrap {
background:#deecfd;
border:1px solid #8db2e3;
padding-bottom:2px;
padding-top:0px;
}
.ytab-strip-wrap{
padding-top:1px;
- background:#cedff5 url(../images/aero/tabs/tab-strip-bg.gif) repeat-x bottom;
+ background:#cedff5 url(./images/aero/tabs/tab-strip-bg.gif) repeat-x bottom;
border-bottom:1px solid #8db2e3;
}
.ytab-strip .ytab-text {
color:#15428b;
font-weight:normal;
}
.ytab-strip .on .ytab-text {
cursor:default;
color:#15428b;
}
.ytabs-top .ytab-strip .on .ytab-right {
- background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right 0px;
+ background: url(./images/aero/tabs/tab-sprite.gif) no-repeat right 0px;
}
.ytabs-top .ytab-strip .on .ytab-left,.ytabs-top .ytab-strip .on a:hover .ytab-left{
- background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0px -100px;
+ background: url(./images/aero/tabs/tab-sprite.gif) no-repeat 0px -100px;
}
.ytabs-top .ytab-strip .ytab-right {
- background:transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px;
+ background:transparent url(./images/aero/tabs/tab-sprite.gif) no-repeat right -50px;
}
.ytabs-top .ytab-strip .ytab-left {
- background:transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat 0px -150px;
+ background:transparent url(./images/aero/tabs/tab-sprite.gif) no-repeat 0px -150px;
}
.ytabs-top .yui-ext-tabbody {
border:1px solid #8db2e3;
border-top:0px none;
}
.ytabs-bottom .ytab-wrap, .ylayout-panel .ytabs-bottom .ytab-wrap {
background:#deecfd;
border:1px solid #8db2e3;
padding-top:2px;
padding-bottom:0px;
}
.ytabs-bottom .ytab-strip-wrap{
padding-top:0px;
padding-bottom:1px;
- background:#cedff5 url(../images/aero/tabs/tab-strip-btm-bg.gif) repeat-x top;
+ background:#cedff5 url(./images/aero/tabs/tab-strip-btm-bg.gif) repeat-x top;
border-top:1px solid #8db2e3;
border-bottom:0px none;
}
.ytabs-bottom .ytab-strip .ytab-right {
- background:transparent url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
+ background:transparent url(./images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
}
.ytabs-bottom .ytab-strip .ytab-left {
- background:transparent url(../images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
+ background:transparent url(./images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .on .ytab-right,.ytabs-bottom .ytab-strip .on a:hover {
- background: url(../images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+ background: url(./images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .on .ytab-left,.ytabs-bottom .ytab-strip .on a:hover .ytab-left {
- background: url(../images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+ background: url(./images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
}
.ytabs-bottom .yui-ext-tabbody {
border:1px solid #8db2e3;
border-bottom:0px none;
}
/**
* Basic-Dialog
*/
.ydlg-proxy {
background:#C7DFFC;
border:1px solid #A5CCF9;
}
.ydlg-shadow{
background:#cccccc;
opacity:.3;
-moz-opacity:.3;
filter: alpha(opacity=30);
}
.ydlg {
background:transparent;
}
.ydlg .ydlg-hd {
- background: url(../images/aero/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
+ background: url(./images/aero/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
background-color:#aabaca;
color:#15428b;
zoom:1;
padding-top:7px;
}
.ydlg .ydlg-hd-left {
opacity:.85;-moz-opacity:.85;filter:alpha(opacity=80);
- background: url(../images/aero/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
+ background: url(./images/aero/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
zoom:1;
}
.ydlg-modal .ydlg-hd-left {
opacity:.75;-moz-opacity:.75;filter:alpha(opacity=70);
}
.ydlg .ydlg-hd-right {
- background: url(../images/aero/basic-dialog/hd-sprite.gif) no-repeat right 0px;
+ background: url(./images/aero/basic-dialog/hd-sprite.gif) no-repeat right 0px;
zoom:1;
}
.ydlg .ydlg-dlg-body{
padding:0px 0px 0px;
position:absolute;
top:24px;left:0px;
z-index:1;
border:0px none;
background:transparent;
}
.ydlg .ydlg-bd{
background:#fff;
border:1px solid #96b9e6;
}
.ydlg .ydlg-ft{
border:0px none;
background:transparent;
padding-bottom:8px;
}
.ydlg .ydlg-bg{
filter:alpha(opacity=80);
opacity:.85;
-moz-opacity:.85;
zoom:1;
}
.ydlg-modal .ydlg-bg {
opacity:.75;-moz-opacity:.75;filter:alpha(opacity=70);
}
.ydlg .ydlg-bg-center {
padding: 2px 7px 7px 7px;
- background:transparent url(../images/aero/basic-dialog/bg-center.gif) repeat-x bottom;
+ background:transparent url(./images/aero/basic-dialog/bg-center.gif) repeat-x bottom;
zoom:1;
}
.ydlg .ydlg-bg-left{
padding-left:7px;
- background:transparent url(../images/aero/basic-dialog/bg-left.gif) no-repeat bottom left;
+ background:transparent url(./images/aero/basic-dialog/bg-left.gif) no-repeat bottom left;
zoom:1;
}
.ydlg .ydlg-bg-right{
padding-right:7px;
- background:transparent url(../images/aero/basic-dialog/bg-right.gif) no-repeat bottom right;
+ background:transparent url(./images/aero/basic-dialog/bg-right.gif) no-repeat bottom right;
zoom:1;
}
.ydlg-auto-tabs .ydlg-dlg-body, .ydlg-auto-layout .ydlg-dlg-body{
background:transparent;
border:0px none;
}
.ydlg-auto-tabs .ydlg-bd, .ydlg-auto-layout .ydlg-bd{
background:#fff;
border:1px solid #e9f3f5;
}
.ydlg-auto-tabs .ytabs-top .yui-ext-tabbody,.ydlg-auto-tabs .ytabs-bottom .yui-ext-tabbody{
border-color:#8db2e3;
}
.ydlg-auto-tabs .ytabs-top .ytab-wrap,.ydlg-auto-tabs .ytabs-bottom .ytab-wrap{
border-color:#8db2e3;
}
.ydlg .ydlg-close {
width:21px;
height:20px;
top:5px;
right:5px;
opacity:.85;-moz-opacity:.85;filter:alpha(opacity=80);
- background-image:url(../images/aero/basic-dialog/aero-close.gif);
+ background-image:url(./images/aero/basic-dialog/aero-close.gif);
zoom:1;
}
.ydlg .ydlg-close-over {
- background-image:url(../images/aero/basic-dialog/aero-close-over.gif);
+ background-image:url(./images/aero/basic-dialog/aero-close-over.gif);
}
.ydlg div.yresizable-handle-east{
- background-image:url(../images/aero/s.gif);
+ background-image:url(./images/aero/s.gif);
border:0px none;
}
.ydlg div.yresizable-handle-south{
- background-image:url(../images/aero/s.gif);
+ background-image:url(./images/aero/s.gif);
border:0px none;
}
.ydlg div.yresizable-handle-west{
- background-image:url(../images/aero/s.gif);
+ background-image:url(./images/aero/s.gif);
border:0px none;
}
.ydlg div.yresizable-handle-southeast{
- background-image:url(../images/aero/basic-dialog/se-handle.gif);
+ background-image:url(./images/aero/basic-dialog/se-handle.gif);
background-position: bottom right;
width:9px;
height:9px;
border:0px;
right:2px;
bottom:2px;
}
.ydlg div.yresizable-handle-southwest{
- background-image:url(../images/aero/s.gif);
+ background-image:url(./images/aero/s.gif);
background-position: top right;
margin-left:1px;
margin-bottom:1px;
border:0px;
}
.ydlg div.yresizable-handle-north{
- background-image:url(../images/aero/s.gif);
+ background-image:url(./images/aero/s.gif);
border:0px none;
}
#mb-dlg .ydlg-bd{
background:#CFE0F5;
border:0px none;
}
/* BorderLayout */
.ylayout-container{
background:#deecfd;
}
.ylayout-collapsed{
background-color:#deecfd;
border:1px solid #99bbe8;
}
.ylayout-collapsed-over{
background-color:#F5F9FE;
}
.ylayout-panel{
border:1px solid #99bbe8;
}
.ylayout-nested-layout .ylayout-panel {
border:0px none;
}
.ylayout-split{
background-color:#deecfd;
}
.ylayout-panel-hd{
- background-image: url(../images/aero/layout/panel-title-light-bg.gif);
+ background-image: url(./images/aero/layout/panel-title-light-bg.gif);
border-bottom:1px solid #c0d7f4;
}
.ylayout-panel-hd-text {
color:#15428b;
}
.ylayout-split-h{
background:#deecfd;
}
.ylayout-split-v{
background:#deecfd;
}
.ylayout-panel .ytabs-top .ytab-wrap{
border:0px none;
border-bottom:1px solid #8db2e3;
}
.ylayout-panel .ytabs-bottom .ytab-wrap{
border:0px none;
border-top:1px solid #8db2e3;
}
.ylayout-container .yui-ext-tabbody{
border:0px none;
}
.ylayout-nested-layout .ylayout-panel-north {
border-bottom:1px solid #99bbe8;
}
.ylayout-nested-layout .ylayout-panel-south {
border-top:1px solid #99bbe8;
}
.ylayout-nested-layout .ylayout-panel-east {
border-left:1px solid #99bbe8;
}
.ylayout-nested-layout .ylayout-panel-west {
border-right:1px solid #99bbe8;
}
.ylayout-panel-dragover {
border: 2px solid #99bbe8;
}
.ylayout-panel-proxy {
- background-image: url(../images/aero/layout/gradient-bg.gif);
+ background-image: url(./images/aero/layout/gradient-bg.gif);
background-color:#f3f2e7;
border:1px dashed #99bbe8;
}
/** Resizable */
.yresizable-proxy{
border: 1px dashed #3b5a82;
}
/* grid */
.ygrid-hd{
border-bottom:0px;
background:none;
}
.ygrid-hd-body {
border-bottom:0px none;
}
.ygrid-hd-over {
border-bottom:0px none;
}
.ygrid-hd-over .ygrid-hd-body{
background:none;
border-bottom:0px none;
}
.ygrid-hd-over .ygrid-hd-body{
background-color: transparent;
border-bottom:0px;
}
.ygrid-hd-split {
- background-image: url(../images/aero/grid/grid-split.gif);
+ background-image: url(./images/aero/grid/grid-split.gif);
}
.ygrid-hrow{
- background: url(../images/aero/grid/grid-hrow.gif);
+ background: url(./images/aero/grid/grid-hrow.gif);
height: 22px;
border:0px none;
}
.ygrid-row-alt{
background-color: #f5f5f5;
}
.ygrid-row{
border-bottom: 1px solid #eeeeee;
}
.ygrid-col{
border-right:1px solid #eeeeee;
}
.ygrid-sort-col .ygrid-hd-body {
padding-bottom:4px;
}
/** Toolbar */
.ytoolbar{
border:0px none;
background: #E2ECF8;
padding:1px 3px;
border-bottom:1px solid #c0d7f4;
}
.ytoolbar .ytb-button-over{
border:1px solid #8db2e3;
}
.ytoolbar .ytb-sep{
- background-image: url(../images/aero/grid/grid-blue-split.gif);
-} + background-image: url(./images/aero/grid/grid-blue-split.gif);
+}
diff --git a/frontend/beta/css/yui-extensions/ytheme-gray.css b/frontend/beta/css/yui-extensions/ytheme-gray.css index d1a1a4a..22538e3 100644 --- a/frontend/beta/css/yui-extensions/ytheme-gray.css +++ b/frontend/beta/css/yui-extensions/ytheme-gray.css @@ -1,297 +1,297 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ /**
* Basic-Dialog
*/
.ydlg-proxy {
- background-image: url(../images/gray/layout/gradient-bg.gif);
+ background-image: url(./images/gray/layout/gradient-bg.gif);
background-color:#EAE8D5;
border:1px solid #b3b6b0;
}
.ydlg-shadow{
background:#aaaaaa;
}
.ydlg-proxy .tabset{
- background:url(../images/gray/layout/gradient-bg.gif);
+ background:url(./images/gray/layout/gradient-bg.gif);
}
.ydlg .ydlg-hd {
- background: url(../images/gray/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
+ background: url(./images/gray/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
background-color:#333333;
}
.ydlg .ydlg-hd-left {
- background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
+ background: url(./images/gray/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
}
.ydlg .ydlg-hd-right {
- background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat right 0px;
+ background: url(./images/gray/basic-dialog/hd-sprite.gif) no-repeat right 0px;
}
.ydlg .ydlg-dlg-body{
background:#efefec;
border:1px solid #b3b6b0;
border-top:0px none;
}
.ydlg .ytabs-top .yui-ext-tabbody{
border:1px solid #b3b6b0;
border-top:0px none;
}
.ydlg .ytabs-bottom .yui-ext-tabbody{
border:1px solid #b3b6b0;
border-bottom:0px none;
}
.ydlg .ylayout-container .yui-ext-tabbody{
border:0px none;
}
.ydlg .ydlg-close {
- background-image:url(../images/gray/basic-dialog/close.gif);
+ background-image:url(./images/gray/basic-dialog/close.gif);
}
.ydlg div.yresizable-handle-east{
- background-image:url(../images/gray/basic-dialog/e-handle.gif);
+ background-image:url(./images/gray/basic-dialog/e-handle.gif);
border:0px none;
}
.ydlg div.yresizable-handle-south{
- background-image:url(../images/gray/basic-dialog/s-handle.gif);
+ background-image:url(./images/gray/basic-dialog/s-handle.gif);
border:0px none;
}
.ydlg div.yresizable-handle-west{
- background-image:url(../images/gray/basic-dialog/e-handle.gif);
+ background-image:url(./images/gray/basic-dialog/e-handle.gif);
border:0px none;
}
.ydlg div.yresizable-handle-southeast{
- background-image:url(../images/gray/basic-dialog/se-handle.gif);
+ background-image:url(./images/gray/basic-dialog/se-handle.gif);
background-position: bottom right;
width:8px;
height:8px;
border:0px;
}
.ydlg div.yresizable-handle-southwest{
- background-image:url(../images/gray/sizer/sw-handle-dark.gif);
+ background-image:url(./images/gray/sizer/sw-handle-dark.gif);
background-position: top right;
margin-left:1px;
margin-bottom:1px;
border:0px;
}
.ydlg div.yresizable-handle-north{
- background-image:url(../images/gray/s.gif);
+ background-image:url(./images/gray/s.gif);
border:0px none;
}
/**
* Tabs
*/
.ytab-wrap {
border-bottom:1px solid #aca899;
}
.ytab-strip .on .ytab-text {
cursor:default;
color:#333333;
}
.ytabs-top .ytab-strip .on .ytab-right {
- background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right 0px;
+ background: url(./images/gray/tabs/tab-sprite.gif) no-repeat right 0px;
}
.ytabs-top .ytab-strip .on .ytab-left {
- background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -100px;
+ background: url(./images/gray/tabs/tab-sprite.gif) no-repeat 0px -100px;
}
.ytabs-top .ytab-strip .ytab-right {
- background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right -50px;
+ background: url(./images/gray/tabs/tab-sprite.gif) no-repeat right -50px;
}
.ytabs-top .ytab-strip .ytab-left {
- background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -150px;
+ background: url(./images/gray/tabs/tab-sprite.gif) no-repeat 0px -150px;
}
.ytab-strip .ytab-closable .close-icon{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-position: 50% -60px;
}
.ytab-strip .on .close-icon{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-position: 50% -60px;
}
.ytab-strip .ytab-closable .close-over{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-position: 50% -72px;
}
.ytabs-bottom .ytab-wrap {
border-bottom:0px none;
padding-top:0px;
border-top:1px solid #aca899;
}
.ytabs-bottom .ytab-strip .ytab-right {
- background: url(../images/gray/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
+ background: url(./images/gray/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .ytab-left {
- background: url(../images/gray/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
+ background: url(./images/gray/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
}
.ytabs-bottom .ytab-strip .on .ytab-right {
- background: url(../images/gray/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+ background: url(./images/gray/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .on .ytab-left {
- background: url(../images/gray/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+ background: url(./images/gray/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
}
/* QuickTips */
.ytip .ytip-hd-right{
- background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat right 0px;
+ background: url(./images/gray/basic-dialog/hd-sprite.gif) no-repeat right 0px;
}
.ytip .ytip-hd-left{
- background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
+ background: url(./images/gray/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
}
.ytip .ytip-hd{
- background: url(../images/gray/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
+ background: url(./images/gray/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
}
.ytip .ytip-close{
- background-image: url(../images/gray/basic-dialog/close.gif);
+ background-image: url(./images/gray/basic-dialog/close.gif);
}
.ytip .ytip-bd{
- background: #e7e7e7 url(../images/gray/qtip/bg.gif);
+ background: #e7e7e7 url(./images/gray/qtip/bg.gif);
border: 1px solid #ababab;
}
/* BorderLayout */
.ylayout-container{
background-color:#f3f2e7;
}
.ylayout-collapsed{
background-color:#f3f2e7;
border:1px solid #aca899;
}
.ylayout-collapsed-over{
background-color:#fbfbef;
}
.ylayout-panel{
border:1px solid #aca899;
}
.ylayout-nested-layout .ylayout-panel {
border:0px none;
}
.ylayout-split{
background-color:#f3f2e7;
}
.ylayout-panel-hd{
- background-image: url(../images/gray/layout/panel-title-light-bg.gif);
+ background-image: url(./images/gray/layout/panel-title-light-bg.gif);
border-bottom:1px solid #aca899;
}
.ylayout-tools-button-over{
border:1px solid #aca899;
}
.ylayout-close{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -48px;
}
.ylayout-collapse-west,.ylayout-expand-east{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% 0;
}
.ylayout-expand-west,.ylayout-collapse-east{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -12px;
}
.ylayout-collapse-north,.ylayout-expand-south{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -24px;
}
.ylayout-expand-north,.ylayout-collapse-south{
- background-image:url(../images/gray/layout/layout-sprite.gif);
+ background-image:url(./images/gray/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -36px;
}
.ylayout-split-h{
- background-image:url(../images/gray/sizer/e-handle-dark.gif);
+ background-image:url(./images/gray/sizer/e-handle-dark.gif);
}
.ylayout-split-v{
- background-image:url(../images/gray/sizer/s-handle-dark.gif);
+ background-image:url(./images/gray/sizer/s-handle-dark.gif);
}
.ylayout-panel .ytab-wrap{
- background:url(../images/gray/layout/gradient-bg.gif);
+ background:url(./images/gray/layout/gradient-bg.gif);
}
.ylayout-nested-layout .ylayout-panel-north {
border-bottom:1px solid #aca899;
}
.ylayout-nested-layout .ylayout-panel-south {
border-top:1px solid #aca899;
}
.ylayout-nested-layout .ylayout-panel-east {
border-left:1px solid #aca899;
}
.ylayout-nested-layout .ylayout-panel-west {
border-right:1px solid #aca899;
}
.ylayout-panel-dragover {
border: 2px solid #aca899;
}
.ylayout-panel-proxy {
- background-image: url(../images/gray/layout/gradient-bg.gif);
+ background-image: url(./images/gray/layout/gradient-bg.gif);
background-color:#f3f2e7;
border:1px dashed #aca899;
}
/** Resizable */
.yresizable-over .yresizable-handle-east, .yresizable-pinned .yresizable-handle-east{
- background:url(../images/gray/sizer/e-handle.gif);
+ background:url(./images/gray/sizer/e-handle.gif);
background-position: left;
}
.yresizable-over .yresizable-handle-east, .yresizable-pinned .yresizable-handle-west{
- background:url(../images/gray/sizer/e-handle.gif);
+ background:url(./images/gray/sizer/e-handle.gif);
background-position: left;
}
.yresizable-over .yresizable-handle-south, .yresizable-pinned .yresizable-handle-south{
- background:url(../images/gray/sizer/s-handle.gif);
+ background:url(./images/gray/sizer/s-handle.gif);
background-position: top;
}
.yresizable-over .yresizable-handle-south, .yresizable-pinned .yresizable-handle-north{
- background:url(../images/gray/sizer/s-handle.gif);
+ background:url(./images/gray/sizer/s-handle.gif);
background-position: top;
}
.yresizable-over .yresizable-handle-southeast, .yresizable-pinned .yresizable-handle-southeast{
- background:url(../images/gray/sizer/se-handle.gif);
+ background:url(./images/gray/sizer/se-handle.gif);
background-position: top left;
}
.yresizable-over .yresizable-handle-northwest,.yresizable-pinned .yresizable-handle-northwest{
- background:url(../images/gray/sizer/nw-handle.gif);
+ background:url(./images/gray/sizer/nw-handle.gif);
background-position:bottom right;
}
.yresizable-over .yresizable-handle-northeast,.yresizable-pinned .yresizable-handle-northeast{
- background:url(../images/gray/sizer/ne-handle.gif);
+ background:url(./images/gray/sizer/ne-handle.gif);
background-position: bottom left;
}
.yresizable-over .yresizable-handle-southwest,.yresizable-pinned .yresizable-handle-southwest{
- background:url(../images/gray/sizer/sw-handle.gif);
+ background:url(./images/gray/sizer/sw-handle.gif);
background-position: top right;
}
.yresizable-proxy{
border: 1px dashed #615e55;
}
/** Toolbar */
.ytoolbar{
border:0px none;
- background: #efefe3 url(../images/gray/toolbar/gray-bg.gif) repeat-x;
+ background: #efefe3 url(./images/gray/toolbar/gray-bg.gif) repeat-x;
padding:3px;
-} +}
diff --git a/frontend/beta/css/yui-extensions/ytheme-vista.css b/frontend/beta/css/yui-extensions/ytheme-vista.css index 85bf82b..e0e520f 100644 --- a/frontend/beta/css/yui-extensions/ytheme-vista.css +++ b/frontend/beta/css/yui-extensions/ytheme-vista.css @@ -1,400 +1,400 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ /**
* Tabs
*/
.ytab-wrap {
background:#4f4f4f;
border-bottom:1px solid #b3b6b0;
}
.ytab-strip .ytab-text {
color:white;
font-weight:normal;
}
.ytab-strip .on .ytab-text {
cursor:default;
color:#333333;
}
.ytabs-top .ytab-strip a:hover {
- background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat right -50px;
+ background:transparent url(./images/vista/tabs/tab-sprite.gif) no-repeat right -50px;
}
.ytabs-top .ytab-strip a:hover .ytab-left {
- background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat 0 -150px;
+ background:transparent url(./images/vista/tabs/tab-sprite.gif) no-repeat 0 -150px;
}
.ytabs-top .ytab-strip .on .ytab-right, .ytabs-top .ytab-strip .on a:hover {
- background: url(../images/vista/tabs/tab-sprite.gif) no-repeat right 0;
+ background: url(./images/vista/tabs/tab-sprite.gif) no-repeat right 0;
}
.ytabs-top .ytab-strip .on .ytab-left, .ytabs-top .ytab-strip .on a:hover .ytab-left {
- background: url(../images/vista/tabs/tab-sprite.gif) no-repeat 0 -100px;
+ background: url(./images/vista/tabs/tab-sprite.gif) no-repeat 0 -100px;
}
.ytabs-top .ytab-strip .ytab-right {
background:transparent;
}
.ytabs-top .ytab-strip .ytab-left {
background:transparent;
}
.ytab-strip .ytab-closable .close-icon{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-position: 50% -60px;
}
.ytab-strip .on .close-icon{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-position: 50% -72px;
}
.ytab-strip .ytab-closable .close-over{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-position: 50% -72px;
}
.ytabs-bottom .ytab-strip {
background:#4f4f4f;
}
.ytabs-bottom .ytab-strip a:hover {
- background:transparent url(../images/vista/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
+ background:transparent url(./images/vista/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
}
.ytabs-bottom .ytab-strip a:hover .ytab-left{
- background:transparent url(../images/vista/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
+ background:transparent url(./images/vista/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-wrap {
border-bottom:0px none;
padding-top:0px;
border-top:1px solid #b3b6b0;
}
.ytabs-bottom .ytab-strip .ytab-right {
background:transparent;
}
.ytabs-bottom .ytab-strip .ytab-left {
background:transparent;
}
.ytabs-bottom .ytab-strip .on .ytab-right,.ytabs-bottom .ytab-strip .on a:hover {
- background: url(../images/vista/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+ background: url(./images/vista/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
}
.ytabs-bottom .ytab-strip .on .ytab-left,.ytabs-bottom .ytab-strip .on a:hover .ytab-left {
- background: url(../images/vista/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+ background: url(./images/vista/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
}
/**
* Basic-Dialog
*/
.ydlg-proxy {
background:#d3d6d0;
border:2px solid #b3b6b0;
}
.ydlg-shadow{
background:#cccccc;
opacity:.3;
-moz-opacity:.3;
filter: alpha(opacity=30);
}
.ydlg .ydlg-hd {
- background: url(../images/vista/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
+ background: url(./images/vista/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
background-color:#333333;
zoom:1;
}
.ydlg .ydlg-hd-left {
opacity:.95;-moz-opacity:.95;filter:alpha(opacity=90);
- background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
+ background: url(./images/vista/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
zoom:1;
}
.ydlg .ydlg-hd-right {
- background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat right 0px;
+ background: url(./images/vista/basic-dialog/hd-sprite.gif) no-repeat right 0px;
zoom:1;
}
.ydlg .ydlg-dlg-body{
background:#fff;
border:0 none;
border-top:0px none;
padding:0px 0px 0px;
position:absolute;
top:24px;left:0px;
z-index:1;
}
.ydlg-auto-tabs .ydlg-dlg-body{
background:transparent;
}
.ydlg-auto-tabs .ytabs-top .ytab-wrap{
background:transparent;
}
.ydlg .ydlg-ft{
border-top:1px solid #b3b6b0;
background:#F0F0F0;
padding-bottom:8px;
}
.ydlg .ydlg-bg{
opacity:.90;-moz-opacity:.90;filter:alpha(opacity=85);
zoom:1;
}
.ydlg .ydlg-bg-left,.ydlg .ydlg-bg-center,.ydlg .ydlg-bg-right{
}
.ydlg .ydlg-bg-center {
padding: 0px 4px 4px 4px;
- background:transparent url(../images/vista/basic-dialog/bg-center.gif) repeat-x bottom;
+ background:transparent url(./images/vista/basic-dialog/bg-center.gif) repeat-x bottom;
zoom:1;
}
.ydlg .ydlg-bg-left{
padding-left:4px;
- background:transparent url(../images/vista/basic-dialog/bg-left.gif) no-repeat bottom left;
+ background:transparent url(./images/vista/basic-dialog/bg-left.gif) no-repeat bottom left;
zoom:1;
}
.ydlg .ydlg-bg-right{
padding-right:4px;
- background:transparent url(../images/vista/basic-dialog/bg-right.gif) no-repeat bottom right;
+ background:transparent url(./images/vista/basic-dialog/bg-right.gif) no-repeat bottom right;
zoom:1;
}
.ydlg .ytabs-top .yui-ext-tabbody{
border:0px none;
}
.ydlg .ytabs-bottom .yui-ext-tabbody{
border:1px solid #b3b6b0;
border-bottom:0px none;
}
.ydlg .ylayout-container .yui-ext-tabbody{
border:0px none;
}
.ydlg .ydlg-close {
- background-image:url(../images/vista/basic-dialog/close.gif);
+ background-image:url(./images/vista/basic-dialog/close.gif);
}
.ydlg div.yresizable-handle-east{
- background-image:url(../images/vista/s.gif);
+ background-image:url(./images/vista/s.gif);
border:0px none;
}
.ydlg div.yresizable-handle-south{
- background-image:url(../images/vista/s.gif);
+ background-image:url(./images/vista/s.gif);
border:0px none;
}
.ydlg div.yresizable-handle-west{
- background-image:url(../images/vista/s.gif);
+ background-image:url(./images/vista/s.gif);
border:0px none;
}
.ydlg div.yresizable-handle-southeast{
- background-image:url(../images/vista/s.gif);
+ background-image:url(./images/vista/s.gif);
background-position: bottom right;
width:8px;
height:8px;
border:0px;
}
.ydlg div.yresizable-handle-southwest{
- background-image:url(../images/vista/s.gif);
+ background-image:url(./images/vista/s.gif);
background-position: top right;
margin-left:1px;
margin-bottom:1px;
border:0px;
}
.ydlg div.yresizable-handle-north{
- background-image:url(../images/vista/s.gif);
+ background-image:url(./images/vista/s.gif);
border:0px none;
}
/* QuickTips */
.ytip .ytip-hd-right{
- background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat right 0px;
+ background: url(./images/vista/basic-dialog/hd-sprite.gif) no-repeat right 0px;
}
.ytip .ytip-hd-left{
- background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
+ background: url(./images/vista/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
}
.ytip .ytip-hd{
- background: url(../images/vista/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
+ background: url(./images/vista/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
}
.ytip .ytip-close{
- background-image: url(../images/vista/basic-dialog/close.gif);
+ background-image: url(./images/vista/basic-dialog/close.gif);
}
.ytip .ytip-bd{
- background: #e7e7e7 url(../images/vista/qtip/bg.gif);
+ background: #e7e7e7 url(./images/vista/qtip/bg.gif);
border: 1px solid #ababab;
}
/* BorderLayout */
.ylayout-container{
background:#4f4f4f;
}
.ylayout-collapsed{
background-color:#9f9f9f;
border:1px solid #4c535c;
}
.ylayout-collapsed-over{
background-color:#bfbfbf;
}
.ylayout-panel{
border:1px solid #4c535c;
}
.ylayout-nested-layout .ylayout-panel {
border:0px none;
}
.ylayout-split{
background-color:#f3f2e7;
}
.ylayout-panel-hd{
- background-image: url(../images/vista/layout/panel-title-bg.gif);
+ background-image: url(./images/vista/layout/panel-title-bg.gif);
border-bottom:1px solid #b5bac1;
}
.ylayout-panel-hd-text{
color:white;
}
.ylayout-tools-button-over{
border:1px solid #4c535c;
- background:#9f9f9f url(../images/vista/layout/panel-title-bg.gif) repeat-x;
+ background:#9f9f9f url(./images/vista/layout/panel-title-bg.gif) repeat-x;
}
.ylayout-close{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -60px;
}
.ylayout-collapse-west,.ylayout-expand-east{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% 0;
}
.ylayout-expand-west,.ylayout-collapse-east{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -12px;
}
.ylayout-collapse-north,.ylayout-expand-south{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -24px;
}
.ylayout-expand-north,.ylayout-collapse-south{
- background-image:url(../images/vista/layout/layout-sprite.gif);
+ background-image:url(./images/vista/layout/layout-sprite.gif);
background-repeat: no-repeat;
background-position: 50% -36px;
}
.ylayout-split-h{
background:#9f9f9f;
}
.ylayout-split-v{
background:#9f9f9f;
}
.ylayout-panel .ytab-wrap{
background:#4f4f4f;
}
.ylayout-nested-layout .ylayout-panel-north {
border-bottom:1px solid #4c535c;
}
.ylayout-nested-layout .ylayout-panel-south {
border-top:1px solid #4c535c;
}
.ylayout-nested-layout .ylayout-panel-east {
border-left:1px solid #4c535c;
}
.ylayout-nested-layout .ylayout-panel-west {
border-right:1px solid #4c535c;
}
.ylayout-panel-dragover {
border: 2px solid #4c535c;
}
.ylayout-panel-proxy {
- background-image: url(../images/vista/layout/gradient-bg.gif);
+ background-image: url(./images/vista/layout/gradient-bg.gif);
background-color:#f3f2e7;
border:1px dashed #4c535c;
}
/** Resizable */
.yresizable-over .yresizable-handle-east, .yresizable-pinned .yresizable-handle-east{
- background:url(../images/vista/sizer/e-handle.gif);
+ background:url(./images/vista/sizer/e-handle.gif);
background-position: left;
}
.yresizable-over .yresizable-handle-east, .yresizable-pinned .yresizable-handle-west{
- background:url(../images/vista/sizer/e-handle.gif);
+ background:url(./images/vista/sizer/e-handle.gif);
background-position: left;
}
.yresizable-over .yresizable-handle-south, .yresizable-pinned .yresizable-handle-south{
- background:url(../images/vista/sizer/s-handle.gif);
+ background:url(./images/vista/sizer/s-handle.gif);
background-position: top;
}
.yresizable-over .yresizable-handle-south, .yresizable-pinned .yresizable-handle-north{
- background:url(../images/vista/sizer/s-handle.gif);
+ background:url(./images/vista/sizer/s-handle.gif);
background-position: top;
}
.yresizable-over .yresizable-handle-southeast, .yresizable-pinned .yresizable-handle-southeast{
- background:url(../images/vista/sizer/se-handle.gif);
+ background:url(./images/vista/sizer/se-handle.gif);
background-position: top left;
}
.yresizable-over .yresizable-handle-northwest,.yresizable-pinned .yresizable-handle-northwest{
- background:url(../images/vista/sizer/nw-handle.gif);
+ background:url(./images/vista/sizer/nw-handle.gif);
background-position:bottom right;
}
.yresizable-over .yresizable-handle-northeast,.yresizable-pinned .yresizable-handle-northeast{
- background:url(../images/vista/sizer/ne-handle.gif);
+ background:url(./images/vista/sizer/ne-handle.gif);
background-position: bottom left;
}
.yresizable-over .yresizable-handle-southwest,.yresizable-pinned .yresizable-handle-southwest{
- background:url(../images/vista/sizer/sw-handle.gif);
+ background:url(./images/vista/sizer/sw-handle.gif);
background-position: top right;
}
.yresizable-proxy{
border: 1px dashed #615e55;
}
/** Toolbar */
.ytoolbar{
border:0px none;
- background: #efefe3 url(../images/vista/toolbar/gray-bg.gif) repeat-x;
+ background: #efefe3 url(./images/vista/toolbar/gray-bg.gif) repeat-x;
padding:3px;
}
.ytoolbar .ytb-button-over{
border:1px solid transparent;
border-bottom:1px solid #bbbbbb;
border-top:1px solid #eeeeee;
- background:#9f9f9f url(../images/vista/grid/grid-vista-hd.gif) repeat-x;
+ background:#9f9f9f url(./images/vista/grid/grid-vista-hd.gif) repeat-x;
}
/* grid */
.ygrid-hd{
border-bottom:0px;
background:none;
}
.ygrid-hd-body {
border-bottom: 1px solid #b3bcc0;
}
.ygrid-hd-over{
border-bottom:0px;
}
.ygrid-hd-over .ygrid-hd-body{
background-color: transparent;
border-bottom:0px;
}
.ygrid-hd-split {
- background-image: url(../images/vista/grid/grid-split.gif);
+ background-image: url(./images/vista/grid/grid-split.gif);
}
.ygrid-hrow{
- background: url(../images/vista/grid/grid-vista-hd.gif);
+ background: url(./images/vista/grid/grid-vista-hd.gif);
height: 21px;
}
.ygrid-row-alt{
background-color: #f5f5f5;
}
.ygrid-row-selected{
background-color: #535353 !important;
color: white;
}
.ygrid-row-selected span{
color: white !important;
}
.ygrid-wrap-body {
}
.ytoolbar .ytb-sep{
- background-image: url(../images/vista/grid/grid-split.gif);
-} + background-image: url(./images/vista/grid/grid-split.gif);
+}
diff --git a/frontend/beta/html/index_template.html b/frontend/beta/html/index_template.html index 27a8a64..0b2875c 100644 --- a/frontend/beta/html/index_template.html +++ b/frontend/beta/html/index_template.html @@ -1,100 +1,100 @@ <html> <head> <title>@page.title@</title> <META http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- @copyright@ --> @css@ <link rel="shortcut icon" href="./clipperz.ico" /> <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> <script> Clipperz_IEisBroken = false; Clipperz_normalizedNewLine = '\n'; - Clipperz_dumpUrl = "/dump/"; + Clipperz_dumpUrl = "/../dump/"; </script> <!--[if IE]><script> Clipperz_IEisBroken = true; Clipperz_normalizedNewLine = '\x0d\x0a'; </script><![endif]--> @js_LINKED@ </head> <body> <div id="mainDiv"> <div id="header"> <div id="miscLinks"> <a id="donateHeaderIconLink" href="http://www.clipperz.com/donations" target="_blank"><img id='donateHeaderIcon' src=""></a> <ul> <li><a href="http://www.clipperz.com/donations" id='donateHeaderLink' class='highlightedHeader' target="_blank">donate</a></li> <li><a href="http://www.clipperz.com/credits" id='creditsHeaderLink' target="_blank">credits</a></li> <li><a href="http://www.clipperz.com/contact" id='feedbackHeaderLink' target="_blank">feedback</a></li> <li><a href="http://www.clipperz.com/support/user_guide" target="_blank" id='helpHeaderLink'>help</a></li> <li><a href="http://www.clipperz.com/forum" target="_blank" id='forumHeaderLink'>forum</a></li> </ul> </div> <div id="logoFrame"> <a href="http://www.clipperz.com" target="_blank"><img id="logo" src="" /></a> <h5 class="clipperzPayoff">keep it to yourself</h5> </div> <div id="mainTabs"> <ul id="exitLinks"> <li id="logoutLI"><!--<a href="#">logout</a>--></li> <li id="lockLI"><!--<a href="#">lock</a>--></li> </ul> <div id="menus"> <table cellpadding="0" cellspacing="0" border="0"> <tbody> <tr id="menusTR"> <!-- <td class="selected"><div><a href="#">records</a></div></td> <td><div><a href="./Account.html">account</a></div></td> <td><div><a href="#">data</a></div></td> <td><div><a href="#">bookmarklet</a></div></td> --> </tr> </tbody> </table> </div> </div> </div> <div id="main"> <h3 class="loading">loading ...</h3> @js_EMBEDDED@ <script> Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@}); /*offline_data_placeholder*/ </script> <div id="javaScriptAlert"> <h1>Attention!</h1> <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> <h3>Javascript is required to access Clipperz.</h3> <h5>Please enable scripting or upgrade your browser.</h5> </div> </div> <div id="footer"> - Copyright © 2008 Clipperz Srl - + Copyright © 2008-2013 Clipperz Srl - <a href="http://www.clipperz.com/terms_of_service" target="black">Terms of service</a> - <a href="http://www.clipperz.com/privacy_policy" target="black">Privacy policy</a> - - Application version: @application.version@ + Application version: <a href="https://github.com/clipperz/password-manager/tree/@application.version@" target="github">@application.version@</a> </div> <div id="recordDetailEditModeHeaderMask"></div> <div id="recordDetailEditModeVerticalMask"></div> </div> <div id="applicationVersionType" class="@application.version.type@" /> </body> </html> diff --git a/frontend/beta/images/cardBlockLowerBorder.gif b/frontend/beta/images/cardBlockLowerBorder.gif Binary files differindex e69de29..272ba83 100644 --- a/frontend/beta/images/cardBlockLowerBorder.gif +++ b/frontend/beta/images/cardBlockLowerBorder.gif diff --git a/frontend/beta/images/cardBlockLowerRoundedCorner.gif b/frontend/beta/images/cardBlockLowerRoundedCorner.gif Binary files differindex e69de29..920879a 100644 --- a/frontend/beta/images/cardBlockLowerRoundedCorner.gif +++ b/frontend/beta/images/cardBlockLowerRoundedCorner.gif diff --git a/frontend/beta/images/cardFiltersSprite.gif b/frontend/beta/images/cardFiltersSprite.gif Binary files differindex e69de29..5ffdd6c 100644 --- a/frontend/beta/images/cardFiltersSprite.gif +++ b/frontend/beta/images/cardFiltersSprite.gif diff --git a/frontend/beta/images/cardsBlockRoundCorners.gif b/frontend/beta/images/cardsBlockRoundCorners.gif Binary files differindex e69de29..c831db6 100644 --- a/frontend/beta/images/cardsBlockRoundCorners.gif +++ b/frontend/beta/images/cardsBlockRoundCorners.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/btn-sprite.gif b/frontend/beta/images/clipperz/basic-dialog/btn-sprite.gif Binary files differindex e69de29..d00ea7c 100644 --- a/frontend/beta/images/clipperz/basic-dialog/btn-sprite.gif +++ b/frontend/beta/images/clipperz/basic-dialog/btn-sprite.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/close.gif b/frontend/beta/images/clipperz/basic-dialog/close.gif Binary files differindex e69de29..07e6381 100644 --- a/frontend/beta/images/clipperz/basic-dialog/close.gif +++ b/frontend/beta/images/clipperz/basic-dialog/close.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/close.png b/frontend/beta/images/clipperz/basic-dialog/close.png Binary files differindex e69de29..b4bc4e4 100644 --- a/frontend/beta/images/clipperz/basic-dialog/close.png +++ b/frontend/beta/images/clipperz/basic-dialog/close.png diff --git a/frontend/beta/images/clipperz/basic-dialog/close_over.gif b/frontend/beta/images/clipperz/basic-dialog/close_over.gif Binary files differindex e69de29..f99f083 100644 --- a/frontend/beta/images/clipperz/basic-dialog/close_over.gif +++ b/frontend/beta/images/clipperz/basic-dialog/close_over.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/e-handle.gif b/frontend/beta/images/clipperz/basic-dialog/e-handle.gif Binary files differindex e69de29..dde2826 100644 --- a/frontend/beta/images/clipperz/basic-dialog/e-handle.gif +++ b/frontend/beta/images/clipperz/basic-dialog/e-handle.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/hd-sprite.gif b/frontend/beta/images/clipperz/basic-dialog/hd-sprite.gif Binary files differindex e69de29..c894f35 100644 --- a/frontend/beta/images/clipperz/basic-dialog/hd-sprite.gif +++ b/frontend/beta/images/clipperz/basic-dialog/hd-sprite.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/progress.gif b/frontend/beta/images/clipperz/basic-dialog/progress.gif Binary files differindex e69de29..0c3a537 100644 --- a/frontend/beta/images/clipperz/basic-dialog/progress.gif +++ b/frontend/beta/images/clipperz/basic-dialog/progress.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/progress2.gif b/frontend/beta/images/clipperz/basic-dialog/progress2.gif Binary files differindex e69de29..0b3fcd2 100644 --- a/frontend/beta/images/clipperz/basic-dialog/progress2.gif +++ b/frontend/beta/images/clipperz/basic-dialog/progress2.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/s-handle.gif b/frontend/beta/images/clipperz/basic-dialog/s-handle.gif Binary files differindex e69de29..c17db09 100644 --- a/frontend/beta/images/clipperz/basic-dialog/s-handle.gif +++ b/frontend/beta/images/clipperz/basic-dialog/s-handle.gif diff --git a/frontend/beta/images/clipperz/basic-dialog/se-handle.gif b/frontend/beta/images/clipperz/basic-dialog/se-handle.gif Binary files differindex e69de29..f730f60 100644 --- a/frontend/beta/images/clipperz/basic-dialog/se-handle.gif +++ b/frontend/beta/images/clipperz/basic-dialog/se-handle.gif diff --git a/frontend/beta/images/default/basic-dialog/btn-sprite.gif b/frontend/beta/images/default/basic-dialog/btn-sprite.gif Binary files differindex e69de29..8d657db 100644 --- a/frontend/beta/images/default/basic-dialog/btn-sprite.gif +++ b/frontend/beta/images/default/basic-dialog/btn-sprite.gif diff --git a/frontend/beta/images/default/basic-dialog/close.gif b/frontend/beta/images/default/basic-dialog/close.gif Binary files differindex e69de29..988ee82 100644 --- a/frontend/beta/images/default/basic-dialog/close.gif +++ b/frontend/beta/images/default/basic-dialog/close.gif diff --git a/frontend/beta/images/default/basic-dialog/e-handle.gif b/frontend/beta/images/default/basic-dialog/e-handle.gif Binary files differindex e69de29..dde2826 100644 --- a/frontend/beta/images/default/basic-dialog/e-handle.gif +++ b/frontend/beta/images/default/basic-dialog/e-handle.gif diff --git a/frontend/beta/images/default/basic-dialog/hd-sprite.gif b/frontend/beta/images/default/basic-dialog/hd-sprite.gif Binary files differindex e69de29..42da1ea 100644 --- a/frontend/beta/images/default/basic-dialog/hd-sprite.gif +++ b/frontend/beta/images/default/basic-dialog/hd-sprite.gif diff --git a/frontend/beta/images/default/basic-dialog/progress.gif b/frontend/beta/images/default/basic-dialog/progress.gif Binary files differindex e69de29..0c3a537 100644 --- a/frontend/beta/images/default/basic-dialog/progress.gif +++ b/frontend/beta/images/default/basic-dialog/progress.gif diff --git a/frontend/beta/images/default/basic-dialog/progress2.gif b/frontend/beta/images/default/basic-dialog/progress2.gif Binary files differindex e69de29..0b3fcd2 100644 --- a/frontend/beta/images/default/basic-dialog/progress2.gif +++ b/frontend/beta/images/default/basic-dialog/progress2.gif diff --git a/frontend/beta/images/default/basic-dialog/s-handle.gif b/frontend/beta/images/default/basic-dialog/s-handle.gif Binary files differindex e69de29..c17db09 100644 --- a/frontend/beta/images/default/basic-dialog/s-handle.gif +++ b/frontend/beta/images/default/basic-dialog/s-handle.gif diff --git a/frontend/beta/images/default/basic-dialog/se-handle.gif b/frontend/beta/images/default/basic-dialog/se-handle.gif Binary files differindex e69de29..f730f60 100644 --- a/frontend/beta/images/default/basic-dialog/se-handle.gif +++ b/frontend/beta/images/default/basic-dialog/se-handle.gif diff --git a/frontend/beta/images/directLogin/toggle.png b/frontend/beta/images/directLogin/toggle.png Binary files differindex e69de29..93d8218 100644 --- a/frontend/beta/images/directLogin/toggle.png +++ b/frontend/beta/images/directLogin/toggle.png diff --git a/frontend/beta/images/directLoginBox.png b/frontend/beta/images/directLoginBox.png Binary files differindex e69de29..387deb7 100644 --- a/frontend/beta/images/directLoginBox.png +++ b/frontend/beta/images/directLoginBox.png diff --git a/frontend/beta/images/entropyBackground.gif b/frontend/beta/images/entropyBackground.gif Binary files differindex e69de29..8b035b7 100644 --- a/frontend/beta/images/entropyBackground.gif +++ b/frontend/beta/images/entropyBackground.gif diff --git a/frontend/beta/images/exportLogo.png b/frontend/beta/images/exportLogo.png Binary files differindex e69de29..57a2d52 100644 --- a/frontend/beta/images/exportLogo.png +++ b/frontend/beta/images/exportLogo.png diff --git a/frontend/beta/images/favicon.ico b/frontend/beta/images/favicon.ico Binary files differindex e69de29..76db7bb 100644 --- a/frontend/beta/images/favicon.ico +++ b/frontend/beta/images/favicon.ico diff --git a/frontend/beta/images/flags/br.png b/frontend/beta/images/flags/br.png Binary files differindex e69de29..51ac06e 100644 --- a/frontend/beta/images/flags/br.png +++ b/frontend/beta/images/flags/br.png diff --git a/frontend/beta/images/flags/cn.png b/frontend/beta/images/flags/cn.png Binary files differindex e69de29..4be2967 100644 --- a/frontend/beta/images/flags/cn.png +++ b/frontend/beta/images/flags/cn.png diff --git a/frontend/beta/images/flags/de.png b/frontend/beta/images/flags/de.png Binary files differindex e69de29..a66d634 100644 --- a/frontend/beta/images/flags/de.png +++ b/frontend/beta/images/flags/de.png diff --git a/frontend/beta/images/flags/en.png b/frontend/beta/images/flags/en.png Binary files differindex e69de29..6d193aa 100644 --- a/frontend/beta/images/flags/en.png +++ b/frontend/beta/images/flags/en.png diff --git a/frontend/beta/images/flags/es.png b/frontend/beta/images/flags/es.png Binary files differindex e69de29..503ffca 100644 --- a/frontend/beta/images/flags/es.png +++ b/frontend/beta/images/flags/es.png diff --git a/frontend/beta/images/flags/it.png b/frontend/beta/images/flags/it.png Binary files differindex e69de29..a271baf 100644 --- a/frontend/beta/images/flags/it.png +++ b/frontend/beta/images/flags/it.png diff --git a/frontend/beta/images/flags/jp.png b/frontend/beta/images/flags/jp.png Binary files differindex e69de29..19e81e3 100644 --- a/frontend/beta/images/flags/jp.png +++ b/frontend/beta/images/flags/jp.png diff --git a/frontend/beta/images/flags/ru.png b/frontend/beta/images/flags/ru.png Binary files differindex e69de29..7391499 100644 --- a/frontend/beta/images/flags/ru.png +++ b/frontend/beta/images/flags/ru.png diff --git a/frontend/beta/images/grippie.png b/frontend/beta/images/grippie.png Binary files differindex e69de29..6524d41 100644 --- a/frontend/beta/images/grippie.png +++ b/frontend/beta/images/grippie.png diff --git a/frontend/beta/images/importActiveStepsSeparator.png b/frontend/beta/images/importActiveStepsSeparator.png Binary files differindex e69de29..4586878 100644 --- a/frontend/beta/images/importActiveStepsSeparator.png +++ b/frontend/beta/images/importActiveStepsSeparator.png diff --git a/frontend/beta/images/importStepsBackground.png b/frontend/beta/images/importStepsBackground.png Binary files differindex e69de29..74dd5b3 100644 --- a/frontend/beta/images/importStepsBackground.png +++ b/frontend/beta/images/importStepsBackground.png diff --git a/frontend/beta/images/importStepsLabelsBackground.png b/frontend/beta/images/importStepsLabelsBackground.png Binary files differindex e69de29..f0a72ce 100644 --- a/frontend/beta/images/importStepsLabelsBackground.png +++ b/frontend/beta/images/importStepsLabelsBackground.png diff --git a/frontend/beta/images/importStepsLeftLabelsBackground.png b/frontend/beta/images/importStepsLeftLabelsBackground.png Binary files differindex e69de29..02123ba 100644 --- a/frontend/beta/images/importStepsLeftLabelsBackground.png +++ b/frontend/beta/images/importStepsLeftLabelsBackground.png diff --git a/frontend/beta/images/importStepsSeparator.png b/frontend/beta/images/importStepsSeparator.png Binary files differindex e69de29..08df951 100644 --- a/frontend/beta/images/importStepsSeparator.png +++ b/frontend/beta/images/importStepsSeparator.png diff --git a/frontend/beta/images/languageBox.png b/frontend/beta/images/languageBox.png Binary files differindex e69de29..e13e0b1 100644 --- a/frontend/beta/images/languageBox.png +++ b/frontend/beta/images/languageBox.png diff --git a/frontend/beta/images/loginFormBox.png b/frontend/beta/images/loginFormBox.png Binary files differindex e69de29..46a1624 100644 --- a/frontend/beta/images/loginFormBox.png +++ b/frontend/beta/images/loginFormBox.png diff --git a/frontend/beta/images/loginInfoBackground.png b/frontend/beta/images/loginInfoBackground.png Binary files differindex e69de29..3692f74 100644 --- a/frontend/beta/images/loginInfoBackground.png +++ b/frontend/beta/images/loginInfoBackground.png diff --git a/frontend/beta/images/loginInfoInnerBackground.png b/frontend/beta/images/loginInfoInnerBackground.png Binary files differindex e69de29..37291b2 100644 --- a/frontend/beta/images/loginInfoInnerBackground.png +++ b/frontend/beta/images/loginInfoInnerBackground.png diff --git a/frontend/beta/images/logo.gif b/frontend/beta/images/logo.gif Binary files differindex e69de29..95ec1d0 100644 --- a/frontend/beta/images/logo.gif +++ b/frontend/beta/images/logo.gif diff --git a/frontend/beta/images/menubarSprite.gif b/frontend/beta/images/menubarSprite.gif Binary files differindex e69de29..966c1f6 100644 --- a/frontend/beta/images/menubarSprite.gif +++ b/frontend/beta/images/menubarSprite.gif diff --git a/frontend/beta/images/newRecordPanelBackground.gif b/frontend/beta/images/newRecordPanelBackground.gif Binary files differindex e69de29..8976ed4 100644 --- a/frontend/beta/images/newRecordPanelBackground.gif +++ b/frontend/beta/images/newRecordPanelBackground.gif diff --git a/frontend/beta/images/newRecordPanelBackground.png b/frontend/beta/images/newRecordPanelBackground.png Binary files differindex e69de29..513be3e 100644 --- a/frontend/beta/images/newRecordPanelBackground.png +++ b/frontend/beta/images/newRecordPanelBackground.png diff --git a/frontend/beta/images/passwordAssistant.png b/frontend/beta/images/passwordAssistant.png Binary files differindex e69de29..2f53a78 100644 --- a/frontend/beta/images/passwordAssistant.png +++ b/frontend/beta/images/passwordAssistant.png diff --git a/frontend/beta/images/read-only.gif b/frontend/beta/images/read-only.gif Binary files differindex e69de29..e4ad968 100644 --- a/frontend/beta/images/read-only.gif +++ b/frontend/beta/images/read-only.gif diff --git a/frontend/beta/images/read-only.png b/frontend/beta/images/read-only.png Binary files differindex e69de29..0c19fb7 100644 --- a/frontend/beta/images/read-only.png +++ b/frontend/beta/images/read-only.png diff --git a/frontend/beta/images/read-only_background.png b/frontend/beta/images/read-only_background.png Binary files differindex e69de29..c216dd4 100644 --- a/frontend/beta/images/read-only_background.png +++ b/frontend/beta/images/read-only_background.png diff --git a/frontend/beta/images/recordFilterBackground.png b/frontend/beta/images/recordFilterBackground.png Binary files differindex e69de29..a7f638a 100644 --- a/frontend/beta/images/recordFilterBackground.png +++ b/frontend/beta/images/recordFilterBackground.png diff --git a/frontend/beta/images/rss.gif b/frontend/beta/images/rss.gif Binary files differindex e69de29..481f712 100644 --- a/frontend/beta/images/rss.gif +++ b/frontend/beta/images/rss.gif diff --git a/frontend/beta/images/scrambledValue.gif b/frontend/beta/images/scrambledValue.gif Binary files differindex e69de29..541f642 100644 --- a/frontend/beta/images/scrambledValue.gif +++ b/frontend/beta/images/scrambledValue.gif diff --git a/frontend/beta/images/scrambledValue.png b/frontend/beta/images/scrambledValue.png Binary files differindex e69de29..feb40af 100644 --- a/frontend/beta/images/scrambledValue.png +++ b/frontend/beta/images/scrambledValue.png diff --git a/frontend/beta/images/smiles.gif b/frontend/beta/images/smiles.gif Binary files differindex e69de29..d1063a5 100644 --- a/frontend/beta/images/smiles.gif +++ b/frontend/beta/images/smiles.gif diff --git a/frontend/beta/images/smiles_big.gif b/frontend/beta/images/smiles_big.gif Binary files differindex e69de29..a3e5891 100644 --- a/frontend/beta/images/smiles_big.gif +++ b/frontend/beta/images/smiles_big.gif diff --git a/frontend/beta/images/smiles_small.gif b/frontend/beta/images/smiles_small.gif Binary files differindex e69de29..388c57b 100644 --- a/frontend/beta/images/smiles_small.gif +++ b/frontend/beta/images/smiles_small.gif diff --git a/frontend/beta/images/test-database.png b/frontend/beta/images/test-database.png Binary files differindex e69de29..db3ef1e 100644 --- a/frontend/beta/images/test-database.png +++ b/frontend/beta/images/test-database.png diff --git a/frontend/beta/js/Clipperz/PM/Connection.js b/frontend/beta/js/Clipperz/PM/Connection.js index 85aea21..e81c7a6 100644 --- a/frontend/beta/js/Clipperz/PM/Connection.js +++ b/frontend/beta/js/Clipperz/PM/Connection.js @@ -107,475 +107,480 @@ MochiKit.Logging.logError("### Connection.defaultErrorHandler: " + anErrorString 'sharedSecret': function() { throw Clipperz.Base.exception.AbstractMethod; }, 'serverSideUserCredentials': function() { throw Clipperz.Base.exception.AbstractMethod; }, //========================================================================= 'connectionId': function() { return this._connectionId; }, 'setConnectionId': function(aValue) { this._connectionId = aValue; }, //========================================================================= 'oneTimePassword': function() { return this._oneTimePassword; }, 'setOneTimePassword': function(aValue) { this._oneTimePassword = aValue; }, //========================================================================= __syntaxFix__: "syntax fix" } ); if (typeof(Clipperz.PM.Connection.SRP) == 'undefined') { Clipperz.PM.Connection.SRP = {}; } //----------------------------------------------------------------------------- // // S R P [ 1 . 0 ] C O N N E C T I O N class // //----------------------------------------------------------------------------- Clipperz.PM.Connection.SRP['1.0'] = function (args) { args = args || {}; Clipperz.PM.Connection.call(this, args); this._C = null; this._P = null; this._srpConnection = null; return this; } Clipperz.PM.Connection.SRP['1.0'].prototype = MochiKit.Base.update(new Clipperz.PM.Connection(), { 'version': function() { return '1.0'; }, //========================================================================= 'register': function(anInvitationCode) { var deferredResult; var parameters; //MochiKit.Logging.logError(">>> Connection.register: " + this); parameters = {}; deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 1: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'registration_verify'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 2: " + res); return res;}); deferredResult.addCallback(function(aConnection, anInvitationCode) { var args; args = {}; args.message = 'register'; args.version = aConnection.clipperz_pm_crypto_version(); args.invitationCode = anInvitationCode; return args; }, this); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 3: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'registration_sendingCredentials'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 4: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 5: " + res); return res;}); deferredResult.addCallback(function(someParameters, anUser, anEncryptedData) { var currentVersionConnection; var args; currentVersionConnection = new Clipperz.PM.Crypto.communicationProtocol.versions['current']({user:anUser}); args = someParameters args.credentials = currentVersionConnection.serverSideUserCredentials(); args.user = anEncryptedData; args.version = args.credentials.version; args.message = "completeRegistration"; return args; }, parameters, this.user()); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 6: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'registration')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 7: " + Clipperz.Base.serializeJSON(res)); return res;}); deferredResult.addCallback(MochiKit.Base.bind(function(res) { this.user().setLock(res['lock']); return res; }, this)); deferredResult.callback(anInvitationCode); //MochiKit.Logging.logError("<<< Connection.register"); return deferredResult; }, //========================================================================= 'login': function(isReconnecting) { var deferredResult; //MochiKit.Logging.logDebug(">>> Connection.login: "/* + this*/); //MochiKit.Logging.logDebug("--- Connection.login - isReconnecting: " + (isReconnecting == true)); deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.1 - Connection.login - 1: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_sendingCredentials'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.2 - Connection.login - 2: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(function(aConnection) { var args; args = {}; args.message = 'connect'; args.version = aConnection.clipperz_pm_crypto_version(); args.parameters = {}; //MochiKit.Logging.logDebug("=== Connection.login - username: " + aConnection.srpConnection().C()); args.parameters['C'] = aConnection.srpConnection().C(); args.parameters['A'] = aConnection.srpConnection().A().asString(16); if (isReconnecting == true) { //MochiKit.Logging.logDebug("--- Connection.login - reconnecting"); //# args.parameters['reconnecting'] = "yes"; args.parameters['reconnecting'] = aConnection.connectionId(); } //MochiKit.Logging.logDebug("--- Connection.login - args: " + Clipperz.Base.serializeJSON(args)); //MochiKit.Logging.logDebug("--- Connection.login - srp.a: " + aConnection.srpConnection().a().asString(16)); return args; }); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.3 - Connection.login - 3: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.4 - Connection.login - 4: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_credentialVerification'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.5 - Connection.login - 5: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addErrback(MochiKit.Base.bind(function(res) {MochiKit.Logging.logDebug("ERROR - c: " + this.srpConnection().C() + " # version: " + this.clipperz_pm_crypto_version()); return res;}, this)); deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) { var args; this.srpConnection().set_s(new Clipperz.Crypto.BigInt(someParameters['s'], 16)); this.srpConnection().set_B(new Clipperz.Crypto.BigInt(someParameters['B'], 16)); if (typeof(someParameters['oneTimePassword']) != 'undefined') { this.setOneTimePassword(someParameters['oneTimePassword']); } args = {}; args.message = 'credentialCheck'; args.version = this.clipperz_pm_crypto_version(); args.parameters = {}; args.parameters['M1'] = this.srpConnection().M1(); return args; }, this)); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.6 - Connection.login - 6: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.7 - Connection.login - 7: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); //# deferredResult.addCallback(MochiKit.Base.method(this, 'loginDone')); deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) { var result; //MochiKit.Logging.logDebug(">>> Connection.loginDone: " + this + " (M2: " + this.srpConnection().M2() + ")"); if (someParameters['M2'] == this.srpConnection().M2()) { result = new MochiKit.Async.Deferred(); //MochiKit.Logging.logDebug("--- Connection.loginDone - someParameters: " + Clipperz.Base.serializeJSON(someParameters)); this.setConnectionId(someParameters['connectionId']); this.user().setLoginInfo(someParameters['loginInfo']); this.user().setShouldDownloadOfflineCopy(someParameters['offlineCopyNeeded']); - this.user().setLock(someParameters['lock']); + + if ((isReconnecting == true) && (this.user().lock() != someParameters['lock'])) { + throw Clipperz.PM.Connection.exception.StaleData; + } if (this.oneTimePassword() != null) { result.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'archiveOneTimePassword', this.oneTimePassword())); } + result.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_loggedIn'); result.addCallback(MochiKit.Async.succeed, someParameters); result.callback(); //MochiKit.Logging.logDebug("--- Connection.loginDone - 1 - result: "/* + Clipperz.Base.serializeJSON(result)*/); } else { //MochiKit.Logging.logDebug("--- Connection.loginDone - 2 - ERROR"); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); result = MochiKit.Async.fail(Clipperz.PM.Connection.exception.WrongChecksum); } //MochiKit.Logging.logDebug("<<< Connection.loginDone - result: " + Clipperz.Base.serializeJSON(result)); return result; }, this)); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.8 - Connection.login - 8: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.callback(this); //MochiKit.Logging.logDebug("<<< Connection.login"); return deferredResult; }, //========================================================================= 'logout': function() { var deferredResult; //MochiKit.Logging.logDebug(">>> Connection.logout: " + this); deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 1: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'logout'), {}); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 2: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'resetSrpConnection')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 3: " + res); return res;}); deferredResult.callback(); //MochiKit.Logging.logDebug("<<< Connection.logout"); return deferredResult; }, //========================================================================= 'message': function(aMessageName, someParameters) { var args; var deferredResult; //MochiKit.Logging.logDebug(">>> Connection.message: " + this); args = {} args['message'] = aMessageName; args['srpSharedSecret'] = this.srpConnection().K(); // args['lock'] = this.user().lock(); if (someParameters != null) { args['parameters'] = someParameters; } else { args['parameters'] = {}; } //MochiKit.Logging.logDebug("--- Connection.message - args: " + Clipperz.Base.serializeJSON(args)); // deferredResult = new MochiKit.Async.Deferred(); // ### ????????????? return this.sendMessage(args); }, //------------------------------------------------------------------------- 'sendMessage': function(someArguments) { var deferredResult; //MochiKit.Logging.logDebug(">>> Connection.sendMessage: " + this); deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 1: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'message'), someArguments); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 2: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.bind(function(res) { if (typeof(res['lock']) != 'undefined') { this.user().setLock(res['lock']); } return res; }, this)); deferredResult.addErrback(MochiKit.Base.method(this, 'messageExceptionHandler'), someArguments); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 3: " + res); return res;}); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 3: " + Clipperz.Base.serializeJSON(res)); return res;}); deferredResult.callback(); //MochiKit.Logging.logDebug("<<< Connection.sendMessage"); return deferredResult }, //------------------------------------------------------------------------- 'messageExceptionHandler': function(anOriginalMessageArguments, anError) { var result; //MochiKit.Logging.logDebug(">>> Connection.messageExceptionHandler - this: " + this + ", anError: " + anError); if (anError instanceof MochiKit.Async.CancelledError) { //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 1"); result = anError; //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 2"); } else { //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 3 - anError.name: " + anError.name + ", message: " + anError.message); if ((anError.message == 'Trying to communicate without an active connection') || (anError.message == 'No tollManager available for current session') ) { //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 4"); result = this.reestablishConnection(anOriginalMessageArguments); //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 5"); } else if (anError.message == 'Session with stale data') { //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 5.1"); Clipperz.NotificationCenter.notify(this, 'EXCEPTION'); //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 5.2"); } else { //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 6"); result = anError; //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 7"); } //MochiKit.Logging.logDebug("--- Connection.messageExceptionHandler - 8"); } //MochiKit.Logging.logDebug("<<< Connection.messageExceptionHandler"); return result;; }, //========================================================================= 'reestablishConnection': function(anOriginalMessageArguments) { var deferredResult; //MochiKit.Logging.logDebug("+++ Connection.reestablishConnection: " + Clipperz.Base.serializeJSON(anOriginalMessageArguments)); //MochiKit.Logging.logDebug(">>> Connection.reestablishConnection: " + this); deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.reestablishConnection 1: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'resetSrpConnection')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.reestablishConnection 2: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'login'), true); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.reestablishConnection 3: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.bind(function(aMessage) { aMessage['srpSharedSecret'] = this.srpConnection().K(); return aMessage; }, this), anOriginalMessageArguments); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.reestablishConnection 4: " + Clipperz.Base.serializeJSON(res)); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.reestablishConnection 5: " + res); return res;}); deferredResult.addErrback(Clipperz.NotificationCenter.deferredNotification, this, 'EXCEPTION', null); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.reestablishConnection 6: " + res); return res;}); deferredResult.callback(); //MochiKit.Logging.logDebug("<<< Connection.reestablishConnection"); return deferredResult; }, //========================================================================= 'sharedSecret': function() { return this.srpConnection().K(); }, //========================================================================= 'serverSideUserCredentials': function() { var result; var newSrpConnection; //MochiKit.Logging.logDebug(">>> Connection.serverSideUserCredentials"); newSrpConnection = new Clipperz.Crypto.SRP.Connection({ C:this.C(), P:this.P(), hash:this.hash() }); result = newSrpConnection.serverSideCredentials(); result['version'] = this.clipperz_pm_crypto_version(); //MochiKit.Logging.logDebug("<<< Connection.serverSideUserCredentials - result: " + Clipperz.Base.serializeJSON(result)); return result; }, //========================================================================= 'C': function() { if (this._C == null) { this._C = this.hash()(new Clipperz.ByteArray(this.user().username())).toHexString().substring(2); } return this._C; }, //----------------------------------------------------------------------------- 'P': function() { if (this._P == null) { this._P = this.hash()(new Clipperz.ByteArray(this.user().passphrase() + this.user().username())).toHexString().substring(2); } return this._P; }, //----------------------------------------------------------------------------- 'hash': function() { return Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].hash; }, //----------------------------------------------------------------------------- 'srpConnection': function() { if (this._srpConnection == null) { this._srpConnection = new Clipperz.Crypto.SRP.Connection({ C:this.C(), P:this.P(), hash:this.hash() }); } return this._srpConnection; }, 'resetSrpConnection': function() { this._C = null; this._P = null; this._srpConnection = null; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //----------------------------------------------------------------------------- // // S R P [ 1 . 1 ] C O N N E C T I O N class // //----------------------------------------------------------------------------- Clipperz.PM.Connection.SRP['1.1'] = function (args) { args = args || {}; Clipperz.PM.Connection.SRP['1.0'].call(this, args); return this; } Clipperz.PM.Connection.SRP['1.1'].prototype = MochiKit.Base.update(new Clipperz.PM.Connection.SRP['1.0'](), { 'version': function() { return '1.1'; }, //----------------------------------------------------------------------------- 'C': function() { if (this._C == null) { this._C = this.hash()(new Clipperz.ByteArray(this.user().username() + this.user().passphrase())).toHexString().substring(2); } return this._C; }, //----------------------------------------------------------------------------- 'P': function() { if (this._P == null) { this._P = this.hash()(new Clipperz.ByteArray(this.user().passphrase() + this.user().username())).toHexString().substring(2); } return this._P; }, //----------------------------------------------------------------------------- 'hash': function() { return Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].hash; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); Clipperz.PM.Connection.exception = { - WrongChecksum: new MochiKit.Base.NamedError("Clipperz.ByteArray.exception.InvalidValue") + WrongChecksum: new MochiKit.Base.NamedError("Clipperz.ByteArray.exception.InvalidValue"), + StaleData: new MochiKit.Base.NamedError("Stale data") }; diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js index 9e496de..d6ebb39 100644 --- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js +++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js @@ -456,312 +456,314 @@ console.log("Record.processData - currentVersionParameters", currentVersionParam return this._removedDirectLogins; }, 'resetRemovedDirectLogins': function() { this._removedDirectLogins = []; }, //------------------------------------------------------------------------- 'serverData': function() { return this._serverData; }, 'setServerData': function(aValue) { this._serverData = aValue; this.setShouldLoadData(false); return aValue; }, //------------------------------------------------------------------------- 'decryptedData': function() { return this._decryptedData; }, 'setDecryptedData': function(aValue) { this._decryptedData = aValue; this.setShouldDecryptData(false); return aValue; }, //------------------------------------------------------------------------- 'cachedData': function() { return this._cachedData; }, 'setCachedData': function(aValue) { //MochiKit.Logging.logDebug(">>> Record.setCachedData"); //MochiKit.Logging.logDebug("--- Record.setCachedData - aValue: " + Clipperz.Base.serializeJSON(aValue)); this._cachedData = aValue; this.setShouldProcessData(false); //MochiKit.Logging.logDebug("<<< Record.setCachedData"); return aValue; }, //------------------------------------------------------------------------- 'hasPendingChanges': function() { var result; //MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); //MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + this.cachedData()); //MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); //MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + this.currentDataSnapshot()); //MochiKit.Logging.logDebug(">>> Record.hasPendingChanges - currentSnapshot: " + Clipperz.Base.serializeJSON(this.currentDataSnapshot())); //console.log(">>> Record.hasPendingChanges - cachedData: %o", this.cachedData()); //console.log(">>> Record.hasPendingChanges - currentSnapshot: %o", this.currentDataSnapshot()); result = (MochiKit.Base.compare(this.cachedData(), this.currentDataSnapshot()) != 0); //MochiKit.Logging.logDebug("<<< Record.hasPendingChanges - " + result); if ((result == false) && this.isBrandNew() && (this.label() != Clipperz.PM.Strings['newRecordTitleLabel'])) { result = true; } //MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.hasPendingChanges"); return result; }, //------------------------------------------------------------------------- 'currentDataSnapshot': function() { var result; //MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); result = { 'label': this.label(), 'data': this.serializedData(), 'currentVersion': this.currentVersion().currentDataSnapshot() }; // result['data']['data'] = this.notes(); result = Clipperz.Base.serializeJSON(result); //MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.currentDataSnapshot"); //MochiKit.Logging.logDebug("<<< Record.currentDataSnapshot"); return result; }, //......................................................................... 'takeSnapshotOfCurrentData': function() { this.setCachedData(this.currentDataSnapshot()); }, //------------------------------------------------------------------------- 'headerData': function() { var result; result = { 'label': this.label(), 'key': this.key() }; if (this.headerNotes() != null) { result['headerNotes'] = this.headerNotes(); } return result; }, //------------------------------------------------------------------------- 'serializedData': function() { var result; var directLoginReference; result = {}; result['currentVersionKey'] = this.currentVersion().key(); result['directLogins'] = {}; for (directLoginReference in this.directLogins()) { result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData(); } result['notes'] = this.notes(); return result; }, //------------------------------------------------------------------------- 'encryptedData': function() { var deferredResult; var result; //MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData"); result = {} //MochiKit.Logging.logDebug("--- Record.encryptedData - 1"); deferredResult = new MochiKit.Async.Deferred(); //MochiKit.Logging.logDebug("--- Record.encryptedData - 2"); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;}); deferredResult.addCallback(function(aResult, aRecord) { aResult['reference'] = aRecord.reference(); return aResult; }, result, this); //MochiKit.Logging.logDebug("--- Record.encryptedData - 3"); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;}); deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData()); //MochiKit.Logging.logDebug("--- Record.encryptedData - 4"); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;}); deferredResult.addCallback(function(aResult, res) { aResult['data'] = res; return aResult; }, result); //MochiKit.Logging.logDebug("--- Record.encryptedData - 5"); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;}); deferredResult.addCallback(function(aResult) { aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; return aResult; }, result); //MochiKit.Logging.logDebug("--- Record.encryptedData - 6"); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;}); deferredResult.callback(); //MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData"); return deferredResult; }, //------------------------------------------------------------------------- 'syncDirectLoginReferenceValues': function() { //MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues"); MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) { aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin); }); MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) { aDirectLogin.record().user().removeDirectLogin(aDirectLogin); }); this.resetRemovedDirectLogins(); //MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues"); }, //------------------------------------------------------------------------- 'saveChanges': function() { var result; - if (this.isBrandNew() == false) { - result = this.user().saveRecords([this], 'updateData'); - } else { - result = this.user().saveRecords([this], 'addNewRecords'); - } +// if (this.isBrandNew() == false) { +// result = this.user().saveRecords([this], 'updateData'); +// } else { +// result = this.user().saveRecords([this], 'addNewRecords'); +// } + + result = this.user().saveRecords([this]); return result; }, /* 'saveChanges': function() { var deferredResult; var result; Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true); //MochiKit.Logging.logDebug(">>> Record.saveChanges"); //MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges"); if (this.headerNotes() != null) { this.setNotes(this.headerNotes()); } this.syncDirectLoginReferenceValues(); this.currentVersion().createNewVersion(); result = {'records': [{}]}; deferredResult = new MochiKit.Async.Deferred(); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey')); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData')); deferredResult.addCallback(function(aResult, res) { aResult['user'] = res; return aResult; }, result); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); deferredResult.addCallback(function(aResult, res) { //# aResult['record'] = res; aResult['records'][0]['record'] = res; return aResult; }, result); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions'); deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData')); deferredResult.addCallback(function(aResult, res) { // aResult['currentRecordVersion'] = res; aResult['records'][0]['currentRecordVersion'] = res; return aResult; }, result); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); if (this.isBrandNew() == false) { deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData'); } else { //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord'); deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords'); } deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData')); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface'); deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); deferredResult.callback(); return deferredResult; }, */ //------------------------------------------------------------------------- 'cancelChanges': function() { //MochiKit.Logging.logDebug(">>> Record.cancelChanges"); //MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); if (this.isBrandNew()) { this.user().removeRecord(this); } else { this.restoreValuesFromSnapshot(this.cachedData()); } //MochiKit.Logging.logDebug("<<< Record.cancelChanges"); }, //------------------------------------------------------------------------- 'restoreValuesFromSnapshot': function(someSnapshotData) { var snapshotData; //MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); snapshotData = Clipperz.Base.evalJSON(someSnapshotData); //MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData)); this.setLabel(snapshotData['label']); this.resetDirectLogins(); this.setShouldProcessData(true); this.processData(snapshotData); //MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData)); this.resetRemovedDirectLogins(); { var currentSnapshot; var comparisonResult; currentSnapshot = this.currentDataSnapshot(); //MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - 1"); //console.log("snapshot data: %o", someSnapshotData.currentVersion); //console.log("current data: %o", currentSnapshot.currentVersion); //MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData: " + Clipperz.Base.serializeJSON(someSnapshotData.currentVersion)); //MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - currentSnapshot: " + Clipperz.Base.serializeJSON(currentSnapshot.currentVersion)); comparisonResult = MochiKit.Base.compare(someSnapshotData.currentVersion, currentSnapshot.currentVersion); //MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - " + comparisonResult); } //MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/beta/js/Clipperz/PM/DataModel/User.js b/frontend/beta/js/Clipperz/PM/DataModel/User.js index dbbe9a0..b065557 100644 --- a/frontend/beta/js/Clipperz/PM/DataModel/User.js +++ b/frontend/beta/js/Clipperz/PM/DataModel/User.js @@ -96,548 +96,551 @@ Clipperz.PM.DataModel.User.prototype = MochiKit.Base.update(null, { 'maxNumberOfRecords': function() { return this._maxNumberOfRecords; }, 'setMaxNumberOfRecords': function(aValue) { this._maxNumberOfRecords = aValue; }, //------------------------------------------------------------------------- 'errorHandler': function(anErrorString, anException) { MochiKit.Logging.logError("- User.errorHandler: " + anErrorString + " (" + anException + ")"); }, //------------------------------------------------------------------------- 'connectionVersion': function() { return this._connectionVersion; }, 'setConnectionVersion': function(aValue) { this._connectionVersion = aValue; }, //------------------------------------------------------------------------- 'connection': function() { if ((this._connection == null) && (this.connectionVersion() != null) ){ this._connection = new Clipperz.PM.Crypto.communicationProtocol.versions[this.connectionVersion()]({user:this}); } return this._connection; }, 'resetConnection': function(aValue) { this._connection = null; }, //========================================================================= 'register': function(anInvitationCode) { var deferredResult; var prng; //MochiKit.Logging.logError(">>> User.register: " + this); prng = Clipperz.Crypto.PRNG.defaultRandomGenerator(); deferredResult = new MochiKit.Async.Deferred() //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 1: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections'), anInvitationCode); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2.1: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'register'), anInvitationCode); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 3: " + res); return res;}); deferredResult.callback(); //MochiKit.Logging.logError("<<< User.register"); return deferredResult; }, //========================================================================= 'connect': function(aValue) { var deferredResult; var prng; prng = Clipperz.Crypto.PRNG.defaultRandomGenerator(); //MochiKit.Logging.logDebug(">>> User.connect"); deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.1 - User.connect - 1: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.2 - User.connect - 2: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'login')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.3 - User.connect - 3: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); // TODO: add an addErrback call here to manage a wrong login. Any error after this point is due to some other causes. // possibly the same exact 'handleConnectionFallback use at the end of this same method. if (this.connectionVersion() != 'current') { var currentConnection; currentVersionConnection = new Clipperz.PM.Crypto.communicationProtocol.versions['current']({user:this}); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.4 - User.connect - 4: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_upgrading'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.5 - User.connect - 5: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'upgradeUserCredentials', currentVersionConnection.serverSideUserCredentials()); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.6 - User.connect - 6: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); } //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.7 - User.connect - 7: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'userConnected', null); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.8 - User.connect - 8: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.addErrback(MochiKit.Base.method(this, 'handleConnectionFallback')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.9 - User.connect - 9: "/* + res*/); return res;}); //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); deferredResult.callback(aValue); //MochiKit.Logging.logDebug("<<< User.connect"); return deferredResult; }, //......................................................................... 'handleConnectionFallback': function(aValue) { var result; //MochiKit.Logging.logDebug(">>> User.handleConnectionFallback"); if (aValue instanceof MochiKit.Async.CancelledError) { //MochiKit.Logging.logDebug("--- User.handleConnectionFallback - operation cancelled"); result = aValue; } else { //MochiKit.Logging.logDebug("--- User.handleConnectionFallback - an ERROR has occurred - " + aValue); this.resetConnection(); this.setConnectionVersion(Clipperz.PM.Crypto.communicationProtocol.fallbackVersions[this.connectionVersion()]); if (this.connectionVersion() != null) { result = new MochiKit.Async.Deferred(); result.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_tryOlderSchema'); result.addCallback(MochiKit.Base.method(this, 'connect')); result.callback(); } else { result = MochiKit.Async.fail(Clipperz.PM.DataModel.User.exception.LoginFailed); } } //MochiKit.Logging.logDebug("<<< User.handleConnectionFallback"); return result; }, //========================================================================= 'header': function() { if (this._header == null) { this._header = new Clipperz.PM.DataModel.Header({user:this}); } return this._header; }, //------------------------------------------------------------------------- 'statistics': function() { if (this._statistics == null) { this._statistics = new Clipperz.PM.DataModel.Statistics({user:this}); } return this._statistics; }, //------------------------------------------------------------------------- 'records': function() { return this._records; }, //......................................................................... 'addRecord': function(aValue, isBatchUpdate) { this.records()[aValue.reference()] = aValue; if (isBatchUpdate != true) { Clipperz.NotificationCenter.notify(aValue, 'recordAdded', null, true); Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); } }, //----------------------------------------------------------------------------- 'addNewRecord': function() { var record; //MochiKit.Logging.logDebug(">>> User.addNewRecord"); record = new Clipperz.PM.DataModel.Record({user:this}); this.addRecord(record); Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); //MochiKit.Logging.logDebug("<<< User.addNewRecord"); return record; }, //------------------------------------------------------------------------- - 'saveRecords': function(someRecords, aMethodName) { + 'saveRecords': function(someRecords /*, aMethodName*/) { var deferredResult; - var methodName; +// var methodName; var result; var i,c; //console.log("User.saveRecords - someRecords", someRecords); - methodName = aMethodName || 'addNewRecords'; +// methodName = aMethodName || 'addNewRecords'; Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); //MochiKit.Logging.logDebug(">>> User.saveRecords"); //MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] User.saveRecords"); /* MochiKit.Logging.logDebug("--- User.saveRecords - 1"); MochiKit.Iter.forEach(someRecords, function(aRecord) { if (aRecord.headerNotes() != null) { aRecord.setNotes(aRecord.headerNotes()); } aRecord.syncDirectLoginReferenceValues(); aRecord.currentVersion().createNewVersion(); aRecord.updateKey(); }); MochiKit.Logging.logDebug("--- User.saveRecords - 2"); */ result = {'records': []}; deferredResult = new MochiKit.Async.Deferred(); c = someRecords.length; for (i=0; i<c; i++) { deferredResult.addCallback(function(aRecord) { if (aRecord.headerNotes() != null) { aRecord.setNotes(aRecord.headerNotes()); } aRecord.syncDirectLoginReferenceValues(); aRecord.currentVersion().createNewVersion(); aRecord.updateKey(); }, someRecords[i]); deferredResult.addCallback(MochiKit.Async.wait, 0.1); } //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 1 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 2 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 3 " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 4 " + res); return res;}); deferredResult.addCallback(function(aResult, res) { aResult['user'] = res; return aResult; }, result); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 5 " + res); return res;}); c = someRecords.length; for (i=0; i<c; i++) { var recordData; recordData = {}; //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.1 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.2 " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.3 " + res); return res;}); deferredResult.addCallback(function(aResult, res) { aResult['record'] = res; return aResult; }, recordData); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.4 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', {} /*'saveCard_encryptRecordVersions'*/); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.5 " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(someRecords[i].currentVersion(), 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.6 " + res); return res;}); deferredResult.addCallback(function(aResult, res) { aResult['currentRecordVersion'] = res; return aResult; }, recordData); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.7 " + res); return res;}); deferredResult.addCallback(function(aResult, res) { - aResult['records'].push(res); + aResult['records'] = { 'updated': [res] }; return aResult; }, result); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.8 " + res); return res;}); } //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 7 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 8 " + res); return res;}); - deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), methodName); +// deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), methodName); + deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9 " + res); return res;}); for (i=0; i<c; i++) { //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.1 " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'takeSnapshotOfCurrentData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.2 " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'setIsBrandNew'), false); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.3 " + res); return res;}); } //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 10 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 11 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 12 " + res); return res;}); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'removeRecord': function(aRecord) { //MochiKit.Logging.logDebug(">>> User.removeRecord"); delete this.records()[aRecord.reference()]; //MochiKit.Logging.logDebug("--- User.removeRecord - 1"); Clipperz.NotificationCenter.notify(aRecord, 'recordRemoved', null, false); Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); //MochiKit.Logging.logDebug("<<< User.removeRecord"); }, //------------------------------------------------------------------------- 'deleteRecordsAction': function(someRecords) { var deferredResult; var parameters; //MochiKit.Logging.logDebug(">>> User.deleteRecordsAction - someRecords.length: " + someRecords.length); parameters = {}; deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 1 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_collectData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 2 " + res); return res;}); deferredResult.addCallback(function(someParameters, someRecords) { var recordReferences; recordReferences = MochiKit.Base.map(function(aRecord) { var result; result = aRecord.reference(); aRecord.remove(); return result; }, someRecords); - someParameters.recordReferences = recordReferences; +// someParameters.recordReferences = recordReferences; + someParameters['records'] = { 'deleted': recordReferences}; return someParameters; }, parameters); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 3 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_encryptData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 4 " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 5 " + res); return res;}); deferredResult.addCallback(function(someParameters, anUserEncryptedData) { someParameters.user = anUserEncryptedData; return someParameters; }, parameters); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 6 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_sendingData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecords parameters: " + Clipperz.Base.serializeJSON(res)); return res;}); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 7 " + res); return res;}); - deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteRecords'); +// deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteRecords'); + deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 8 " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_updatingInterface'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 9 " + res); return res;}); deferredResult.callback(someRecords); //MochiKit.Logging.logDebug("<<< User.deleteRecordsAction"); return deferredResult; }, //------------------------------------------------------------------------- 'resetAllLocalData': function() { this.resetConnection(); this.setUsername(""); this.setPassphrase(""); this._header = null; this._statistics = null; this._preferences = null; this._records = {}; this._directLoginReferences = {}; }, //------------------------------------------------------------------------- 'deleteAccountAction': function() { var deferredResult; //MochiKit.Logging.logDebug(">>> user.deleteAccountAction - " + this); deferredResult = new MochiKit.Async.Deferred(); deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteUser'); deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData')); deferredResult.callback(); //MochiKit.Logging.logDebug("<<< user.deleteAccountAction - " + this); return deferredResult; }, //------------------------------------------------------------------------- 'encryptedData': function() { var deferredResult; var result; result = {}; deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 0: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.header(), 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 1: " + res); return res;}); deferredResult.addCallback(function(aResult, aValue) { aResult['header'] = aValue; }, result); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 2: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this.statistics(), 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 3: " + res); return res;}); deferredResult.addCallback(function(aResult, aValue) { aResult['statistics'] = aValue; }, result); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 4: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.bind(function(aResult, aValue) { aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; aResult['lock'] = this.lock(); return aResult; }, this), result); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 5: " + res); return res;}); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'preferences': function() { if (this._preferences == null) { this._preferences = new Clipperz.PM.DataModel.UserPreferences({user:this}); } return this._preferences; }, /* 'setPreferences': function(aValue) { this._preferences = aValue; if (this._preferences.preferredLanguage() != null) { Clipperz.PM.Strings.Languages.setSelectedLanguage(this._preferences.preferredLanguage()); } else { //MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage); } }, */ //------------------------------------------------------------------------- 'oneTimePasswordManager': function() { if (this._oneTimePasswordManager == null) { this._oneTimePasswordManager = new Clipperz.PM.DataModel.OneTimePasswordManager(this, null); } return this._oneTimePasswordManager; }, //------------------------------------------------------------------------- 'directLoginReferences': function() { return this._directLoginReferences; }, 'addDirectLoginReference': function(aDirectLoginReference, isBatchUpdate) { //MochiKit.Logging.logDebug(">>> User.addDirectLoginReference"); this.directLoginReferences()[aDirectLoginReference.reference()] = aDirectLoginReference; if (isBatchUpdate != true) { Clipperz.NotificationCenter.notify(aDirectLoginReference, 'directLoginAdded'); Clipperz.NotificationCenter.notify(this, 'updatedSection', 'directLogins', true); } }, 'removeDirectLoginReference': function(aDirectLoginReference) { delete this.directLoginReferences()[aDirectLoginReference.reference()]; Clipperz.NotificationCenter.notify(aDirectLoginReference, 'directLoginRemoved'); Clipperz.NotificationCenter.notify(this, 'updatedSection', 'directLogins', true); }, //......................................................................... 'addDirectLogin': function(aDirectLogin) { var newDirectLoginReference; newDirectLoginReference = new Clipperz.PM.DataModel.DirectLoginReference({user:this, directLogin:aDirectLogin}) this.addDirectLoginReference(newDirectLoginReference); }, 'synchronizeDirectLogin': function(aDirectLogin) { var directLoginReference; directLoginReference = this.directLoginReferences()[aDirectLogin.reference()]; if (typeof(directLoginReference) != 'undefined') { directLoginReference.synchronizeValues(aDirectLogin); } else { this.addDirectLogin(aDirectLogin); } }, 'removeDirectLogin': function(aDirectLogin) { this.removeDirectLoginReference(aDirectLogin); }, //------------------------------------------------------------------------- 'changeCredentials': function(aUsername, aPassphrase) { var deferredResult; var result; result = {}; deferredResult = new MochiKit.Async.Deferred(); deferredResult.addCallback(MochiKit.Base.method(this.header(), 'loadAllSections')); deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections')); deferredResult.addCallback(MochiKit.Base.bind(function(aUsername, aPssphrase) { this.setUsername(aUsername); this.setPassphrase(aPassphrase); }, this), aUsername, aPassphrase) //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 1: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_encryptingData'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 2: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 3: " + res); return res;}); deferredResult.addCallback(function(aResult, anEncryptedData) { aResult['user'] = anEncryptedData; return aResult; }, result); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 4: " + res); return res;}); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_creatingNewCredentials'); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 5: " + res); return res;}); deferredResult.addCallback(function(aResult, anUser) { var newConnection; newConnection = new Clipperz.PM.Crypto.communicationProtocol.versions[Clipperz.PM.Crypto.communicationProtocol.currentVersion]({user:anUser}) aResult['credentials'] = newConnection.serverSideUserCredentials(); return aResult; }, result, this); //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 6: " + res); return res;}); diff --git a/frontend/beta/properties/beta.properties.json b/frontend/beta/properties/beta.properties.json index 810215b..bfa152d 100644 --- a/frontend/beta/properties/beta.properties.json +++ b/frontend/beta/properties/beta.properties.json @@ -1,190 +1,194 @@ { "copyright.values": { "mochikit.repository": "http://svn.mochikit.com/mochikit/trunk/", "mochikit.version": "1249" }, "html.template": "index_template.html", "js": [ "MochiKit/Base.js", "MochiKit/Iter.js", "MochiKit/DOM.js", "MochiKit/Style.js", "MochiKit/Signal.js", "MochiKit/Format.js", "MochiKit/Async.js", "MochiKit/Selector.js", "MochiKit/Logging.js", "MochiKit/LoggingPane.js", "YUI/yahoo.js", "YUI/animation.js", "YUI/event.js", "YUI/dom.js", "YUI/dragdrop.js", "YUI/logger.js", "YUI-extensions/yutil.js", "YUI-extensions/Bench.js", "YUI-extensions/Date.js", "YUI-extensions/DomHelper.js", "YUI-extensions/Element.js", "YUI-extensions/CompositeElement.js", "YUI-extensions/State.js", "YUI-extensions/EventManager.js", "YUI-extensions/KeyMap.js", "YUI-extensions/Layer.js", "YUI-extensions/MixedCollection.js", "YUI-extensions/State.js", "YUI-extensions/UpdateManager.js", "YUI-extensions/anim/Actor.js", "YUI-extensions/anim/Animator.js", "YUI-extensions/dd/Registry.js", "YUI-extensions/dd/ScrollManager.js", "YUI-extensions/dd/StatusProxy.js", "YUI-extensions/layout/ContentPanels.js", "YUI-extensions/layout/LayoutManager.js", "YUI-extensions/layout/BorderLayout.js", "YUI-extensions/layout/BasicLayoutRegion.js", "YUI-extensions/layout/LayoutRegion.js", "YUI-extensions/layout/LayoutStateManager.js", "YUI-extensions/layout/SplitLayoutRegion.js", "YUI-extensions/layout/BorderLayoutRegions.js", "YUI-extensions/widgets/BasicDialog.js", "YUI-extensions/widgets/Button.js", "YUI-extensions/widgets/MessageBox.js", "YUI-extensions/widgets/Resizable.js", "YUI-extensions/widgets/SplitBar.js", "YUI-extensions/widgets/TabPanel.js", "YUI-extensions/widgets/TemplateView.js", "YUI-extensions/widgets/Toolbar.js", "YUI-extensions/widgets/InlineEditor.js", "YUI-extensions/widgets/QuickTips.js", "YUI-extensions/CSS.js", "JSON/json2.js", "Clipperz/ByteArray.js", "Clipperz/Base.js", "Clipperz/CSVProcessor.js", "Clipperz/KeePassExportProcessor.js", "Clipperz/Date.js", "Clipperz/DOM.js", "Clipperz/Signal.js", "Clipperz/Style.js", "Clipperz/Set.js", "Clipperz/NotificationCenter.js", "Clipperz/Crypto/SHA.js", "Clipperz/Crypto/AES.js", "Clipperz/Crypto/PRNG.js", "Clipperz/Crypto/BigInt.js", "Clipperz/Crypto/Base.js", "Clipperz/Crypto/SRP.js", "Clipperz/Crypto/RSA.js", "Clipperz/PM/Strings/Strings_en-US.js", "Clipperz/PM/Strings/Strings_it-IT.js", "Clipperz/PM/Strings/Strings_pt-BR.js", "Clipperz/PM/Strings/Strings_ja-JP.js", "Clipperz/PM/Strings/Strings_zh-CN.js", "Clipperz/PM/Strings/Strings_es-ES.js", "Clipperz/PM/Strings/Strings_fr-FR.js", "Clipperz/PM/Strings/Strings_ru-RU.js", "Clipperz/PM/Strings.js", "Clipperz/PM/Strings/MessagePanelConfigurations.js", "Clipperz/PM/Date.js", "Clipperz/PM/Components/BaseComponent.js", "Clipperz/PM/Components/MessageBox.js", "Clipperz/PM/Components/TextFormField.js", "Clipperz/PM/Components/PasswordEntropyDisplay.js", "Clipperz/PM/Components/PasswordGenerator.js", "Clipperz/PM/Components/Panels/BasePanel.js", "Clipperz/PM/Components/Panels/LoginPanel.js", "Clipperz/PM/Components/Panels/MainPanel.js", "Clipperz/PM/Components/Panels/AccountPanel.js", "Clipperz/PM/Components/Panels/DataPanel.js", "Clipperz/PM/Components/Panels/ContactsPanel.js", "Clipperz/PM/Components/Panels/ToolsPanel.js", "Clipperz/PM/Components/Panels/LogoutPanel.js", "Clipperz/PM/Components/RecordDetail/MainComponent.js", "Clipperz/PM/Components/RecordDetail/AbstractComponent.js", "Clipperz/PM/Components/RecordDetail/HeaderComponent.js", "Clipperz/PM/Components/RecordDetail/TitleComponent.js", "Clipperz/PM/Components/RecordDetail/NotesComponent.js", "Clipperz/PM/Components/RecordDetail/FieldComponent.js", "Clipperz/PM/Components/RecordDetail/AbstractFieldSubComponent.js", "Clipperz/PM/Components/RecordDetail/FieldButtonComponent.js", "Clipperz/PM/Components/RecordDetail/FieldLabelComponent.js", "Clipperz/PM/Components/RecordDetail/FieldDragHandler.js", "Clipperz/PM/Components/RecordDetail/FieldValueComponent.js", "Clipperz/PM/Components/RecordDetail/FieldTypeComponent.js", "Clipperz/PM/Components/RecordDetail/DirectLoginsComponent.js", "Clipperz/PM/Components/RecordDetail/DirectLoginComponent.js", "Clipperz/PM/Components/RecordDetail/DirectLoginBindingComponent.js", "Clipperz/PM/Components/RecordDetail/DirectLoginValueComponent.js", "Clipperz/PM/Components/RecordDetail/CreationWizard.js", "Clipperz/PM/Components/TabPanel/TabPanelController.js", "Clipperz/PM/Components/Import/MainComponent.js", "Clipperz/PM/Components/Import/GenericImportComponent.js", "Clipperz/PM/Components/Import/CSVImportComponent.js", "Clipperz/PM/Components/Import/CSVImport/CSVImportColumns.js", "Clipperz/PM/Components/Import/CSVImport/CSVImportHeader.js", "Clipperz/PM/Components/Import/CSVImport/CSVImportTitle.js", "Clipperz/PM/Components/Import/CSVImport/CSVImportNotes.js", "Clipperz/PM/Components/Import/CSVImport/CSVImportFields.js", "Clipperz/PM/Components/Import/ExcelImportComponent.js", "Clipperz/PM/Components/Import/PasswordPlusImportComponent.js", "Clipperz/PM/Components/Import/ClipperzImportComponent.js", "Clipperz/PM/Components/Import/RoboFormImportComponent.js", "Clipperz/PM/Components/Import/KeePassImportComponent.js", "Clipperz/PM/Components/Printing/Header.js", "Clipperz/PM/Components/Printing/Record.js", "Clipperz/PM/Components/Printing/Footer.js", "Clipperz/PM/Components/OTP/MainComponent.js", "Clipperz/PM/Components/Compact/CompactHeader.js", "Clipperz/PM/Components/Compact/LoginForm.js", "Clipperz/PM/Components/Compact/CompactInterface.js", "Clipperz/PM/Toll.js", "Clipperz/PM/Proxy.js", "Clipperz/PM/Proxy/Proxy.JSON.js", "Clipperz/PM/Proxy/Proxy.Offline.js", "Clipperz/PM/Proxy/Proxy.Offline.DataStore.js", "Clipperz/PM/Connection.js", "Clipperz/PM/Crypto.js", "Clipperz/PM/BookmarkletProcessor.js", "Clipperz/PM/DataModel/User.js", "Clipperz/PM/DataModel/UserPreferences.js", "Clipperz/PM/DataModel/Header.js", "Clipperz/PM/DataModel/Statistics.js", "Clipperz/PM/DataModel/Record.js", "Clipperz/PM/DataModel/RecordField.js", "Clipperz/PM/DataModel/RecordVersion.js", "Clipperz/PM/DataModel/DirectLogin.js", "Clipperz/PM/DataModel/DirectLoginReference.js", "Clipperz/PM/DataModel/DirectLoginInput.js", "Clipperz/PM/DataModel/DirectLoginBinding.js", "Clipperz/PM/DataModel/OneTimePasswordManager.js", "Clipperz/PM/DataModel/OneTimePassword.js", "Clipperz/YUI/IBLayoutManager.js", "Clipperz/YUI/IBLayoutRegion.js", "Clipperz/YUI/Drawer.js", "Clipperz/YUI/Collapser.js", "Clipperz/YUI/MessageBox.js", "Clipperz/YUI/DomHelper.js", "Clipperz/PM/Main.js" ], "css": [ "yui-extensions/reset-min.css", "yui-extensions/core.css", "yui-extensions/basic-dialog.css", "yui-extensions/button.css", "clipperz/clipperz.css", "clipperz/compact.css", "clipperz/ytheme-clipperz.css" ], - "html.template": "index_template.html" - + "staticResources": [ + "accountDeleted.html", + "error.html", + "logout.html", + "static.css" + ] } diff --git a/frontend/beta/staticResources/static.css b/frontend/beta/staticResources/static.css index 830d830..5e94440 100644 --- a/frontend/beta/staticResources/static.css +++ b/frontend/beta/staticResources/static.css @@ -1,207 +1,208 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ /* @override http://www.example.com/DEVELOPMENT/static.css http://www.clipperz.com/files/clipperz.com/appTips/static.css */ body { padding: 0px; margin: 0px; font-family: Helvetica, Arial, Geneva, sans-serif; color: #666666; } div.header { padding: 20px 25px; background-color: #1f2148; } div#logo { - background: url(./images/old/logo.png); + background: url(./images/logo.gif); + background-repeat: no-repeat; width: 150px; height: 39px; display: block; } h5.clipperzPayoff { color: white; font-size: 13pt; font-weight: normal; padding-left: 20px; white-space: nowrap; margin: 0px; padding-left: 4px; } /* h1 { font-size: 40pt; color: #333366; } h1 span.logo_z { color: #ff9400; } */ div.contentWrapper { padding: 20px; } div.block1 { float: left; margin-right: 40px; } div.block2 { float: left; } div.languageBlock { clear: both; padding-top: 20px; } div.flags { float: left; } div.content { float: left; margin-left: 20px; width: 300px; } h3 { margin: 0px; padding-top: 10px; } p { font-size: 10pt; line-height: 20px; } /* @group RSS feed */ body.iFrame { margin: 0px; padding: 0px; border: 0px; font-family: Helvetica, Arial, Geneva, sans-serif; } div#feedContent ul { list-style-type: none; padding: 0px; margin: 0px; } div#feedContent ul li { display: none; } div#feedContent ul li.selected { display: block; padding-top: 6px; } div#feedContent ul li.selected em.date{ display: none; } div#feedContent ul li.selected a { display: none; } div#feedContent ul li.selected h2 { font-size: 8pt; color: #c3c4cf; margin: 0px; border: 0px; padding: 0px; } div#feedContent ul li.selected p { font-size: 8pt; color: #c3c4cf; margin: 0px; display: inline; line-height: 15px; } div#feedContent ul li.selected p a { font-size: 8pt; color: #c3c4cf; display: inline; } div.languageBlock div.flags { height: 64px; width: 64px; } div.languageBlock.en-us div.flags { - background: url(./images/old/flags/en.png); + background: url(./images/flags/en.png); } div.languageBlock.zh-cn div.flags { - background: url(./images/old/flags/cn.png); + background: url(./images/flags/cn.png); } div.languageBlock.fr-fr div.flags { - background: url(./images/old/flags/fr.png); + background: url(./images/flags/fr.png); } div.languageBlock.it-it div.flags { - background: url(./images/old/flags/it.png); + background: url(./images/flags/it.png); } div.languageBlock.ja-jp div.flags { - background: url(./images/old/flags/jp.png); + background: url(./images/flags/jp.png); } div.languageBlock.pt-br div.flags { - background: url(./images/old/flags/br.png); + background: url(./images/flags/br.png); } div.languageBlock.es-es div.flags { - background: url(./images/old/flags/es.png); + background: url(./images/flags/es.png); } div.languageBlock.ru-ru div.flags { - background: url(./images/old/flags/ru.png); + background: url(./images/flags/ru.png); } div.languageBlock.de-de div.flags { - background: url(./images/old/flags/de.png); + background: url(./images/flags/de.png); } /* @end */ diff --git a/frontend/gamma/css/mobile.css b/frontend/gamma/css/mobile.css new file mode 100644 index 0000000..8c4c1bf --- a/dev/null +++ b/frontend/gamma/css/mobile.css @@ -0,0 +1,2571 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +/* + +Color list: +- login box: + light #ff9955 + dark #ff6622 +- login button: + regular #dd5500 + hover #773311 +- login translations: + box: #cc6622; + not-selected: + color: #ddaa99 + background: #994422 + selected: #772211; +*/ +html { + height: 100%; + -webkit-text-size-adjust: none; + -ms-text-size-adjust: none; +} +body { + font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; + margin: 0px; +} +.ellipsis { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +/** + * Background noise recipe + * + * This recipe use a sass function to generate a .png file + * + * Inspired by a jQuery plugin "Noisy" by Daniel Rapp @DanielRapp + * @link https://github.com/DanielRapp/Noisy + * + * Converted using Sass by Aaron Russell @aaronrussell & Philipp Bosch @philippbosch + * @link https://gist.github.com/1021332 + * + * Ported to a sass gem by Antti Salonen @antsa + * @link https://github.com/antsa/sassy_noise + * + * Mixin: background-noise + * Function: background_noise + * + * @author Daniel Rapp @DanielRapp + * @author Aaron Russell @aaronrussell + * @author Philipp Bosch @philippbosch + * @author Antti Salonen @antsa + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * + * @class Gradients + * @author David Kaneda http://www.davidkaneda.com/ + * + */ +/** + * Adds a background gradient into a specified selector. + * + * @include background-gradient(#444, 'glossy'); + * + * You can also use color-stops if you want full control of the gradient: + * + * @include background-gradient(#444, color-stops(#333, #222, #111)); + * + * @param {color} $bg-color + * The base color of the gradient. + * + * @param {string/list} $type + * The style of the gradient, one of five pre-defined options: matte, bevel, glossy, recessed, or linear: + * + * @include background-gradient(red, 'glossy'); + * + * It can also accept a list of color-stop values:; + * + * @include background-gradient(black, color-stops(#333, #111, #000)); + * + * @param {string} $direction + * The direction of the gradient. + */ +/** + * Blueprint grid background pattern + * + * @link http://lea.verou.me/css3patterns/#blueprint-grid + * + * @author Lea Verou http://lea.verou.me/ for the original pattern + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx for the sass mixin + */ +/** + * Background overlay inspired by Google Chrome modal overlay + * + * @author Maxime Thirouin @MoOx maxime.thirouin@gmail.com + */ +/** + * Striped background pattern + * + * @link http://lea.verou.me/css3patterns/ + * + * @author Lea Verou http://lea.verou.me/ for the original pattern + * @author David Kaneda http://www.davidkaneda.com @davidkaneda for the sass mixin + */ +/** + * + * Before compass 0.11.5, you need to add + * Compass::BrowserSupport.add_support("repeating-linear-gradient", "webkit", "moz", "o", "ms") + * To your configuration (config.rb) + * @see https://github.com/chriseppstein/compass/issues/401 + * + * @link http://lea.verou.me/css3patterns/#tartan + * + * @author Marta Armada http://swwweet.com/ for the original pattern + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx for the sass mixin + */ +/** + * Carbon Fiber background pattern + * + * @author Lea Verou http://lea.verou.me/ for the original pattern + * @author David Kaneda http://www.davidkaneda.com/ for the Sass mixin + * + * @link http://lea.verou.me/css3patterns/ + * + */ +/** + * Normalize.css + * Opposite approche from CSS reset + * + * Based on normalize.css commit 9576d48fc234c5224b1fc4dccba2f5965243843d + * + * @link http://github.com/necolas/normalize.css + */ +/* normalize.css 2011-07-12T10:51 UTC · http://github.com/necolas/normalize.css */ +/* ============================================================================= + HTML5 element display + ========================================================================== */ +/* ============================================================================= + Base + ========================================================================== */ +/* ============================================================================= + Links + ========================================================================== */ +/* ============================================================================= + Typography + ========================================================================== */ +/* ============================================================================= + Lists + ========================================================================== */ +/* ============================================================================= + Embedded content + ========================================================================== */ +/* ============================================================================= + Figures + ========================================================================== */ +/* ============================================================================= + Forms + ========================================================================== */ +/* ============================================================================= + Tables + ========================================================================== */ +/** + * + * @author David Kaneda - http://www.davidkaneda.com + * + */ +/** + * @class Color + */ +/** + * Returns the brightness (out of 100) of a specified color. + * @todo explain why this is useful + * @param {color} $color The color you want the brightness value of + * @return {measurement} + */ +/** + * Returns the luminosity for a specified color + * @todo explain why this is useful + * @param {color} The color to check + * @return {measurement} + */ +/** + * Glass effect + * Use this on image for better effect render + * + * Inspired from Simurai's IMDB redisign + * + * @link http://lab.simurai.com/redesign/imdb + * @thanks Simurai @simurai + */ +/** + * Note IE7/6 doesn't understand pseudo element as ::before and ::after + * IE8 need to have :before and not ::before + * So use only : and not :: if you want to support IE8 + * IE9 Webkit Firefox Opera understand :: + */ +/** + * Scotch tape effect with pure CSS + * + * @thanks Nick La @nickla for original concept + * @link http://webdesignerwall.com/tutorials/css3-image-styles + * + * @author David Kaneda http://www.davidkaneda.com + * + */ +/** + * Note IE7/6 doesn't understand pseudo element as ::before and ::after + * IE8 need to have :before and not ::before + * So use only : and not :: if you want to support IE8 + * IE9 Webkit Firefox Opera understand :: + */ +/** + * Corner folded with pure CSS + * + * Known support: Firefox 3.5+, Chrome 4+, Safari 4+, Opera 10+, IE 9+. + * IE8 is not supported because it not render properly box-shadow and + * pseudo element should be selected with ::element and not :element + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/pure-css-folded-corner-effect/demo/ + * @todo Nix in .4 + */ +/** + * Note IE7/6 doesn't understand pseudo element as ::before and ::after + * IE8 need to have :before and not ::before + * So use only : and not :: if you want to support IE8 + * IE9 Webkit Firefox Opera understand :: + */ +/** + * Corner folded with pure CSS + * + * Known support: Firefox 3.5+, Chrome 4+, Safari 4+, Opera 10+, IE 9+. + * IE8 is not supported because it not render properly box-shadow and + * pseudo element should be selected with ::element and not :element + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/pure-css-folded-corner-effect/demo/ + */ +/** + * Note IE7/6 doesn't understand pseudo element as ::before and ::after + * IE8 need to have :before and not ::before + * So use only : and not :: if you want to support IE8 + * IE9 Webkit Firefox Opera understand :: + */ +/** + * Form element inline mixin + * This mixin allow you to have a label inline with your input + * It's simply based on inline-block behavior + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Vertical alignement for page + * Inspired by http://css-tricks.com/snippets/css/center-div-with-dynamic-height/ + * + * Usage: + * + * SCSS + * @include vertical-align-requirement; + * .v-align-container { @include vertical-align-container } + * .v-align-content-container { @include vertical-align-content-container } + * .v-align-content { @include vertical-align-content } + * + * HTML + * <body> + * <div class="v-align-container"> + * <div class="v-align-content-container"> + * <div class="v-align-content"> + * Your content ! + * </div> + * </div> + * </div> + * </body> + * + * @thanks Chris Coyier @chriscoyier + * @autor Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Media Queries Mixins + * + * @todo Do we have to take care of print ? + * + * @require sass-3.2 (you need eventually to do "sudo gem install sass --pre") + * @author Maxime Thirouin <maxime.thirouin@gmail.com> + */ +/* +$media-query-width-big: 1280px; +$media-query-width-medium: 960px; +$media-query-width-small: 480px; +*/ +/** + * Drop shadow mixins from Nicolas Gallagher demo + * + * @thanks Nicolas Gallagher @necolas, @simurai, @cameronmoll, @matthamm + * + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Drop shadow curled + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Drop shadow curved + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Drop shadow flying + * + * @thanks Geoffrey Crofte @geoffrey_crofte + * @link http://www.creativejuiz.fr/trytotry/css3-box-shadow-after-before/ + */ +/** + * Drop shadow w/ lifted corners + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Drop shadow w/ perspective + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Drop shadow raised + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Drop shadow rules required for transform on drop shadow + * + * /!\ This is required if you want to apply some transform on the element using drop shadow + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/css-drop-shadows-without-images/demo/ + */ +/** + * Shadow along the top edge of the browser viewport + * + * @link http://playground.genelocklin.com/depth/ + */ +/** +* Shapes ! +* Polygons, ellipses and symbols +* +* @thanks Chris Coyier @chriscoyier +* @link http://css-tricks.com/examples/ShapesOfCSS/ +* @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx +*/ +/** + * Shape/Ellipse + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Hexagon + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Octagon + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Parallelogram + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Pentagon + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Rectangle + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Rhombus + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Square + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Star + * + * @todo check if setting a z-index by default is a good thing + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Trapezoid + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Triangle + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol/Diamond + * + * @todo add height support + * + * @author Alexander Futekov + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol/Egg + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol/Heart + * + * @author Nicolas Gallagher @necolas + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol/Infinity + * + * @author Nicolas Gallagher @necolas + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol/Pacman + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Symbol/Yin-yang + * + * @author Alexander Futekov + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Micro clearfix hack + * + * The clearfix hack is a popular way to clear floats without resorting to using presentational markup. This article presents an update to the clearfix method that further reduces the amount of CSS required. + * Known support: Firefox 2+, Safari 2+, Chrome, Opera 9.27+, IE 6+, IE Mac. + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/micro-clearfix-hack/ + */ +/** + * Note IE7/6 doesn't understand pseudo element as ::before and ::after + * IE8 need to have :before and not ::before + * So use only : and not :: if you want to support IE8 + * IE9 Webkit Firefox Opera understand :: + */ +/** + * UI convex effect from one color + * + * @todo merge with ui-button ? + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * UI Glossy helper + * + * @deprecated + * @todo Remove in 0.4 + * @see background/gradients + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * UI simple gradient from one color + * + * @todo merge with ui-button ? + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Shape/Polygon/Triangle + * + * @author Maxime Thirouin maxime.thirouin@gmail.com @MoOx + */ +/** + * Keyboard key touch + * A simple stylesheet for rendering beautiful keyboard-style elements. + + * @author Michael Hüneburg http://michaelhue.com/keyscss + * @link https://github.com/michaelhue/keyscss (commit 76bb603e921d0145362e0f60eabb79d4f69cbda0) + * + * @author Maxime Thirouin @MoOx maxime.thirouin@gmail.com +*/ +/** + * Menu dropdown helper + * + * @author Maxime Thirouin @MoOx maxime.thirouin@gmail.com +*/ +/** + * Ui background overlay inspired by Google Chrome modal overlay + * + * @author Maxime Thirouin @MoOx maxime.thirouin@gmail.com + */ +/** + * Background overlay inspired by Google Chrome modal overlay + * + * @author Maxime Thirouin @MoOx maxime.thirouin@gmail.com + */ +/** + * <hr /> separator style + * + * @author Chris Coyier @chriscoyier + * @link http://jsfiddle.net/chriscoyier/GaEzp/35/ + * + * @author Maxime Thirouin @MoOx maxime.thirouin@gmail.com + */ +/** + * Micro clearfix hack + * + * The clearfix hack is a popular way to clear floats without resorting to using presentational markup. This article presents an update to the clearfix method that further reduces the amount of CSS required. + * Known support: Firefox 2+, Safari 2+, Chrome, Opera 9.27+, IE 6+, IE Mac. + * + * @thanks Nicolas Gallagher @necolas + * @link http://nicolasgallagher.com/micro-clearfix-hack/ + */ +/** + * Note IE7/6 doesn't understand pseudo element as ::before and ::after + * IE8 need to have :before and not ::before + * So use only : and not :: if you want to support IE8 + * IE9 Webkit Firefox Opera understand :: + */ +/** + * + * @class Gradients + * @author David Kaneda http://www.davidkaneda.com/ + * + */ +/** + * Adds a background gradient into a specified selector. + * + * @include background-gradient(#444, 'glossy'); + * + * You can also use color-stops if you want full control of the gradient: + * + * @include background-gradient(#444, color-stops(#333, #222, #111)); + * + * @param {color} $bg-color + * The base color of the gradient. + * + * @param {string/list} $type + * The style of the gradient, one of five pre-defined options: matte, bevel, glossy, recessed, or linear: + * + * @include background-gradient(red, 'glossy'); + * + * It can also accept a list of color-stop values:; + * + * @include background-gradient(black, color-stops(#333, #111, #000)); + * + * @param {string} $direction + * The direction of the gradient. + */ +/** + * @class Webfont Icon + * Great to use with the [Pictos font](http://pictos.drewwilson.com/) + * + */ +/** + * @cfg {color} $webfont-icon-base-color + * The default color of icons when using the {@link #webfont-icon} mixin. + * + * Defaults to `white`. + */ +/** + * @cfg {color} $webfont-icon-default-stroke + * The default color to use on the border of icons, when using the {@link #webfont-icon} mixin. + * + * Defaults to `null`. + */ +/** + * @cfg {string} $webfont-icon-default-gradient + * The default gradient to use when using the {@link #webfont-icon} mixin. + * + * Defaults to `matte`. + */ +/* line 41, ../compass-recipes/stylesheets/recipes/_webfont-icon.scss */ +.webfont-icon-base { + color: transparent; + -webkit-background-clip: text; + background-clip: text; + position: absolute; + top: 0; + left: 0; + text-indent: 0; + text-shadow: none; + -webkit-user-select: none; + user-select: none; +} +/** + * Includes a character into the specified selector, styled as an icon. + * + * @include webfont-icon('a'); + * + * @param {color} $color + * The color of the icon. Defaults to {@link #$webfont-icon-default-background $webfont-icon-default-background}. + * + * @param {measurement} $size + * The size of the icon + * + * @param {color} $stroke + * The color of the border. Defautls to {@link #$webfont-icon-default-border $webfont-icon-default-border}. + * + * @param {boolean} $include-staes + * True to include states for hover and active. Defaults to `true`. + */ +/* line 1, ../scss/include/_base.scss */ +* { + margin: 0; + padding: 0; +} +/* line 6, ../scss/include/_base.scss */ +body { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-touch-callout: none; +} +/* line 11, ../scss/include/_base.scss */ +#jqt { + -webkit-text-size-adjust: none; + -webkit-user-select: none; + user-select: none; + font-family: "Helvetica Neue", Helvetica; + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} +/* line 21, ../scss/include/_base.scss */ +#jqt a { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-user-drag: none; +} +/* line 26, ../scss/include/_base.scss */ +#jqt .selectable, +#jqt input, +#jqt textarea { + -webkit-user-select: auto; +} +/* line 30, ../scss/include/_base.scss */ +#jqt.notransform { + -webkit-transform: none !important; +} +/* line 35, ../scss/include/_base.scss */ +#jqt > * { + display: block; + left: 0; + top: 0; + min-height: 100%; + width: 100%; + overflow-x: hidden; + position: absolute; + z-index: 0; + display: -webkit-box; + display: box; + -webkit-box-orient: vertical; + box-orient: vertical; + -webkit-box-flex: 1; + box-flex: 1; +} +/* line 49, ../scss/include/_base.scss */ +#jqt > .current { + z-index: 10; +} +/* line 53, ../scss/include/_base.scss */ +#jqt > :not(.current) { + display: none; +} +/* line 57, ../scss/include/_base.scss */ +#jqt.touchscroll:not(.animating3d) { + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} +/* line 61, ../scss/include/_base.scss */ +#jqt.touchscroll:not(.animating3d) > * { + height: 100%; +} +/* line 64, ../scss/include/_base.scss */ +#jqt.touchscroll:not(.animating3d) .scroll { + position: relative; + -webkit-box-flex: 1; + box-flex: 1; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} +/* line 72, ../scss/include/_base.scss */ +#jqt .scroll { + -webkit-margin-collapse: separate; +} +/* line 76, ../scss/include/_base.scss */ +#jqt .in, +#jqt .out { + -webkit-animation-duration: 250ms; + -webkit-animation-fill-mode: both; + -webkit-animation-timing-function: ease-in-out; +} +/* line 82, ../scss/include/_base.scss */ +#jqt .in { + z-index: 10; +} +/* line 85, ../scss/include/_base.scss */ +#jqt .in:after { + content: ""; + position: absolute; + display: block; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +/* line 94, ../scss/include/_base.scss */ +#jqt .out { + z-index: 0 !important; +} +/* line 98, ../scss/include/_base.scss */ +#jqt.supports3d { + -webkit-perspective: 1000; +} +/* line 101, ../scss/include/_base.scss */ +#jqt.supports3d > * { + -webkit-transform: translate3d(0, 0, 0) rotate(0) scale(1); +} +/* Fade */ +/* line 3, ../scss/include/_animations.scss */ +#jqt .fade.in { + -webkit-animation-name: fadeIn; +} +/* line 7, ../scss/include/_animations.scss */ +#jqt .fade.out { + z-index: 10; + -webkit-animation-name: fadeOut; +} +@-webkit-keyframes fadeIn { + /* line 13, ../scss/include/_animations.scss */ + 0% { + opacity: 0; + } + /* line 16, ../scss/include/_animations.scss */ + 100% { + opacity: 1; + } +} +@-webkit-keyframes fadeOut { + /* line 22, ../scss/include/_animations.scss */ + 0% { + opacity: 1; + } + /* line 25, ../scss/include/_animations.scss */ + 100% { + opacity: 1; + } +} +/* Disolve */ +/* line 34, ../scss/include/_animations.scss */ +#jqt .dissolve.in { + -webkit-animation-name: dissolveIn; +} +/* line 38, ../scss/include/_animations.scss */ +#jqt .dissolve.out { + -webkit-animation-name: dissolveOut; +} +@-webkit-keyframes dissolveIn { + /* line 43, ../scss/include/_animations.scss */ + 0% { + opacity: 0; + } + /* line 46, ../scss/include/_animations.scss */ + 100% { + opacity: 1; + } +} +@-webkit-keyframes dissolveOut { + /* line 52, ../scss/include/_animations.scss */ + 0% { + opacity: 1; + } + /* line 55, ../scss/include/_animations.scss */ + 100% { + opacity: 0; + } +} +/* #Popin' */ +/* line 64, ../scss/include/_animations.scss */ +#jqt .pop.in { + -webkit-animation-name: popIn; +} +/* line 68, ../scss/include/_animations.scss */ +#jqt .pop.out { + -webkit-animation-name: popOut; +} +@-webkit-keyframes popIn { + /* line 73, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: scale(0.2); + opacity: 0; + } + /* line 77, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes popOut { + /* line 84, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: scale(1); + opacity: 1; + } + /* line 88, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: scale(0.2); + opacity: 0; + } +} +/* Slide Left */ +/* line 98, ../scss/include/_animations.scss */ +#jqt .slideleft.in { + -webkit-animation-name: slideLeftIn; +} +/* line 102, ../scss/include/_animations.scss */ +#jqt .slideleft.out { + -webkit-animation-name: slideLeftOut; +} +@-webkit-keyframes slideLeftIn { + /* line 107, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateX(100%); + } + /* line 110, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateX(0); + } +} +@-webkit-keyframes slideLeftOut { + /* line 116, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateX(0px); + } + /* line 119, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateX(-100%); + } +} +/* Slide Right */ +/* line 128, ../scss/include/_animations.scss */ +#jqt .slideright.in { + -webkit-animation-name: slideRightIn; +} +/* line 132, ../scss/include/_animations.scss */ +#jqt .slideright.out { + -webkit-animation-name: slideRightOut; +} +@-webkit-keyframes slideRightIn { + /* line 137, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateX(-100%); + } + /* line 140, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateX(0); + } +} +@-webkit-keyframes slideRightOut { + /* line 146, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateX(0); + } + /* line 149, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateX(100%); + } +} +/* Slide Up */ +/* line 158, ../scss/include/_animations.scss */ +#jqt .slideup.in { + z-index: 10; + -webkit-animation-name: slideUpIn; +} +/* line 162, ../scss/include/_animations.scss */ +#jqt .slideup.out { + z-index: 0; + -webkit-animation-name: slideUpOut; +} +@-webkit-keyframes slideUpIn { + /* line 168, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateY(100%); + } + /* line 171, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateY(0); + } +} +@-webkit-keyframes slideUpOut { + /* line 177, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateY(0); + } + /* line 180, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateY(0); + } +} +/* Slide Down */ +/* line 189, ../scss/include/_animations.scss */ +#jqt .slidedown.in { + z-index: 0; + -webkit-animation-name: slideDownIn; +} +/* line 193, ../scss/include/_animations.scss */ +#jqt .slidedown.out { + z-index: 10; + -webkit-animation-name: slideDownOut; +} +@-webkit-keyframes slideDownIn { + /* line 199, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateY(0); + } + /* line 202, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateY(0); + } +} +@-webkit-keyframes slideDownOut { + /* line 208, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translateY(0); + } + /* line 211, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translateY(100%); + } +} +/* Flip Left */ +/* line 220, ../scss/include/_animations.scss */ +#jqt .flipleft { + -webkit-backface-visibility: hidden; +} +/* line 224, ../scss/include/_animations.scss */ +#jqt .flipleft.in { + -webkit-animation-name: flipLeftIn; +} +/* line 228, ../scss/include/_animations.scss */ +#jqt .flipleft.out { + -webkit-animation-name: flipLeftOut; +} +@-webkit-keyframes flipLeftIn { + /* line 233, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(180deg) scale(0.8); + } + /* line 236, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(0deg) scale(1); + } +} +@-webkit-keyframes flipLeftOut { + /* line 242, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(0deg) scale(1); + } + /* line 245, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(-180deg) scale(0.8); + } +} +/* Flip Right */ +/* line 254, ../scss/include/_animations.scss */ +#jqt .flipright { + -webkit-backface-visibility: hidden; +} +/* line 258, ../scss/include/_animations.scss */ +#jqt .flipright.in { + -webkit-animation-name: flipRightIn; +} +/* line 262, ../scss/include/_animations.scss */ +#jqt .flipright.out { + -webkit-animation-name: flipRightOut; +} +@-webkit-keyframes flipRightIn { + /* line 267, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(-180deg) scale(0.8); + } + /* line 270, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(0deg) scale(1); + } +} +@-webkit-keyframes flipRightOut { + /* line 276, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(0deg) scale(1); + } + /* line 279, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(180deg) scale(0.8); + } +} +/* Swap Right */ +/* line 288, ../scss/include/_animations.scss */ +#jqt .swapright { + -webkit-animation-duration: .7s; + -webkit-transform: perspective(800); + -webkit-animation-timing-function: ease-out; +} +/* line 293, ../scss/include/_animations.scss */ +#jqt .swapright.in { + -webkit-animation-name: swapRightIn; +} +/* line 296, ../scss/include/_animations.scss */ +#jqt .swapright.out { + -webkit-animation-name: swapRightOut; +} +@-webkit-keyframes swapRightIn { + /* line 301, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(70deg); + opacity: 0; + } + /* line 305, ../scss/include/_animations.scss */ + 35% { + -webkit-transform: translate3d(-180px, 0px, -400px) rotateY(20deg); + opacity: 1; + } + /* line 309, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + opacity: 1; + } +} +@-webkit-keyframes swapRightOut { + /* line 316, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + opacity: 1; + } + /* line 320, ../scss/include/_animations.scss */ + 35% { + -webkit-transform: translate3d(180px, 0px, -400px) rotateY(-20deg); + opacity: .5; + } + /* line 324, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(-70deg); + opacity: 0; + } +} +/* Swap Left */ +/* line 332, ../scss/include/_animations.scss */ +#jqt .swapleft { + -webkit-animation-duration: .7s; + -webkit-transform: perspective(800); + -webkit-animation-timing-function: ease-out; +} +/* line 337, ../scss/include/_animations.scss */ +#jqt .swapleft.in { + -webkit-animation-name: swapLeftIn; +} +/* line 340, ../scss/include/_animations.scss */ +#jqt .swapleft.out { + -webkit-animation-name: swapLeftOut; +} +@-webkit-keyframes swapLeftIn { + /* line 345, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(-70deg); + opacity: 0; + } + /* line 349, ../scss/include/_animations.scss */ + 35% { + -webkit-transform: translate3d(180px, 0px, -400px) rotateY(-20deg); + opacity: 1; + } + /* line 353, ../scss/include/_animations.scss */ + 100% { + opacity: 1; + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + } +} +@-webkit-keyframes swapLeftOut { + /* line 360, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + opacity: 1; + } + /* line 364, ../scss/include/_animations.scss */ + 35% { + -webkit-transform: translate3d(-180px, 0px, -400px) rotateY(20deg); + opacity: .5; + } + /* line 368, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(70deg); + opacity: 0; + } +} +/* Cube Left */ +/* line 382, ../scss/include/_animations.scss */ +#jqt .cubeleft.in, +#jqt .cubeleft.out, +#jqt .cuberight.in, +#jqt .cuberight.out { + -webkit-animation-duration: .6s; + -webkit-transform: perspective(800); +} +/* line 389, ../scss/include/_animations.scss */ +#jqt .cubeleft.in { + -webkit-transform-origin: 0% 50%; + -webkit-animation-name: cubeLeftIn; +} +/* line 394, ../scss/include/_animations.scss */ +#jqt .cubeleft.out { + -webkit-transform-origin: 100% 50%; + -webkit-animation-name: cubeLeftOut; +} +@-webkit-keyframes cubeLeftIn { + /* line 400, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(90deg) translateZ(320px); + opacity: .5; + } + /* line 404, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(0deg) translateZ(0) translateX(0); + opacity: 1; + } +} +@-webkit-keyframes cubeLeftOut { + /* line 411, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(0deg) translateZ(0) translateX(0); + opacity: 1; + } + /* line 415, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(-90deg) translateZ(320px); + opacity: .5; + } +} +/* Cube Right */ +/* line 423, ../scss/include/_animations.scss */ +#jqt .cuberight.in { + -webkit-transform-origin: 100% 50%; + -webkit-animation-name: cubeRightIn; +} +/* line 428, ../scss/include/_animations.scss */ +#jqt .cuberight.out { + -webkit-transform-origin: 0% 50%; + -webkit-animation-name: cubeRightOut; +} +@-webkit-keyframes cubeRightIn { + /* line 434, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(-90deg) translateZ(320px); + opacity: .5; + } + /* line 438, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(0deg) translateZ(0) translateX(0); + opacity: 1; + } +} +@-webkit-keyframes cubeRightOut { + /* line 445, ../scss/include/_animations.scss */ + 0% { + -webkit-transform: rotateY(0deg) translateZ(0) translateX(0); + opacity: 1; + } + /* line 449, ../scss/include/_animations.scss */ + 100% { + -webkit-transform: rotateY(90deg) translateZ(320px); + opacity: .5; + } +} +/* line 5, ../scss/include/_skeleton.scss */ +body { + background: black; +} +/* line 9, ../scss/include/_skeleton.scss */ +.base-chevron, +#jqt ul li.arrow:after, +#jqt ul li.forward:after { + content: '›'; + width: 22px; + height: 100%; + vertical-align: middle; + font-size: 30px; + line-height: 38px; + font-family: Futura, "Futura Condensed", Helvetica, Arial, sans-serif; + font-weight: bold; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; + position: absolute; + right: 0; + top: 0; + pointer-events: none; + z-index: 10; +} +/* line 26, ../scss/include/_skeleton.scss */ +.base-flatlists, +#jqt ul.metal, +#jqt ul.edgetoedge, +#jqt ul.plastic { + margin: 0; + padding: 0; + border-width: 0 0 0 1px; + -webkit-border-radius: 0; + border-radius: 0; +} +/* line 35, ../scss/include/_skeleton.scss */ +#jqt h1, +#jqt h2 { + font: bold 18px "Helvetica Neue", Helvetica; + margin: 10px 20px 6px; + color: #bbbcbe; + text-shadow: #3c3d3e 0 -1px 0; +} +/* line 41, ../scss/include/_skeleton.scss */ +#jqt .toolbar { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 6px; + box-shadow: rgba(0, 0, 0, 0.4) 0 1px 6px; + border-bottom: 1px solid black; + z-index: 10; + position: relative; + padding: 10px; + height: 44px; +} +/* line 52, ../scss/include/_skeleton.scss */ +#jqt .toolbar > h1 { + position: absolute; + overflow: hidden; + left: 50%; + bottom: 9px; + margin: 1px 0 0 -75px; + width: 150px; + font-size: 20px; + font-weight: bold; + line-height: 1.3em; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + color: white; + text-shadow: #161717 0 -1px 0; +} +/* line 71, ../scss/include/_skeleton.scss */ +#jqt.black-translucent .toolbar { + padding-top: 30px; + height: 64px; +} +/* line 75, ../scss/include/_skeleton.scss */ +#jqt.landscape .toolbar > h1 { + margin-left: -125px; + width: 250px; +} +/* line 80, ../scss/include/_skeleton.scss */ +#jqt .button, +#jqt .back, +#jqt .cancel, +#jqt .add { + position: absolute; + overflow: hidden; + width: auto; + height: 30px; + font-family: inherit; + font-size: 12px; + font-weight: bold; + line-height: 30px; + text-overflow: ellipsis; + text-decoration: none; + white-space: nowrap; + background: none; + bottom: 6px; + right: 10px; + margin: 0; + padding: 0 10px; + color: #e2e3e3; + text-shadow: #000000 0 -1px 0; + -webkit-box-shadow: rgba(255, 255, 255, 0.2) 0 1px 0, rgba(0, 0, 0, 0.2) 0 1px 2px inset; + box-shadow: rgba(255, 255, 255, 0.2) 0 1px 0, rgba(0, 0, 0, 0.2) 0 1px 2px inset; + border: 1px solid black; + -webkit-border-radius: 5px; + border-radius: 5px; + background-image: none; + background-color: #0a0a0a; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2f3031), color-stop(50%, #161717), color-stop(51%, #0a0a0a), color-stop(100%, #000000)); + background-image: -webkit-linear-gradient(top, #2f3031, #161717 50%, #0a0a0a 51%, #000000); + background-image: linear-gradient(top, #2f3031, #161717 50%, #0a0a0a 51%, #000000); +} +/* line 107, ../scss/include/_skeleton.scss */ +#jqt .button.active, +#jqt .back.active, +#jqt .cancel.active, +#jqt .add.active { + border-color: black; + background-image: none; + background-color: black; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #262627), color-stop(50%, #0d0d0d), color-stop(51%, #000000), color-stop(100%, #000000)); + background-image: -webkit-linear-gradient(top, #262627, #0d0d0d 50%, #000000 51%, #000000); + background-image: linear-gradient(top, #262627, #0d0d0d 50%, #000000 51%, #000000); + color: #d8d9d9; + text-shadow: #000000 0 -1px 0; +} +/* line 114, ../scss/include/_skeleton.scss */ +#jqt .back { + max-width: 60px; + margin-left: 15px; + overflow: visible; + padding-left: 5px; +} +/* line 121, ../scss/include/_skeleton.scss */ +#jqt .back:after, +#jqt .back:before { + content: ''; + position: absolute; + width: 20px; + height: 20px; + top: 1px; + left: 1px; + -webkit-transform: rotate(45deg) translate3d(0.2px, 0, 0); + transform: rotate(45deg) translate3d(0.2px, 0, 0); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + background-image: none; + background-color: #0a0a0a; + background-image: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #2f3031), color-stop(50%, #161717), color-stop(51%, #0a0a0a), color-stop(100%, #000000)); + background-image: -webkit-linear-gradient(top left, #2f3031, #161717 50%, #0a0a0a 51%, #000000); + background-image: linear-gradient(top left, #2f3031, #161717 50%, #0a0a0a 51%, #000000); + background-size: 100% 98%; + -webkit-border-radius: 0 0 0 2px; + border-radius: 0 0 0 2px; + -webkit-mask-image: -webkit-linear-gradient(45deg, #000000, #000000 15px, rgba(0, 0, 0, 0) 15px); + -webkit-mask-image: -webkit-gradient(linear, left bottom, right top, from(#000000), color-stop(50%, #000000), color-stop(50%, rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0))); + -webkit-mask-clip: border-box; + -webkit-background-clip: content-box; +} +/* line 149, ../scss/include/_skeleton.scss */ +#jqt .back:after { + -webkit-box-shadow: rgba(0, 0, 0, 0.2) 1px 0 0 inset, rgba(0, 0, 0, 0.2) 0 -1px 0 inset; + box-shadow: rgba(0, 0, 0, 0.2) 1px 0 0 inset, rgba(0, 0, 0, 0.2) 0 -1px 0 inset; +} +/* line 152, ../scss/include/_skeleton.scss */ +#jqt .back:before { + margin-left: -1px; + background: black none; +} +/* line 157, ../scss/include/_skeleton.scss */ +#jqt .back.active:after { + background-image: none; + background-color: black; + background-image: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #262627), color-stop(50%, #0d0d0d), color-stop(51%, #000000), color-stop(100%, #000000)); + background-image: -webkit-linear-gradient(left top, #262627, #0d0d0d 50%, #000000 51%, #000000); + background-image: linear-gradient(left top, #262627, #0d0d0d 50%, #000000 51%, #000000); +} +/* line 160, ../scss/include/_skeleton.scss */ +#jqt .back.active:before { + background-color: black; +} +/* line 166, ../scss/include/_skeleton.scss */ +#jqt .blueButton { + background-image: #2f7ce3, glossy; + color: white; + text-shadow: #1a63c5 0 -1px 0; +} +/* line 170, ../scss/include/_skeleton.scss */ +#jqt .whiteButton, +#jqt .grayButton, +#jqt .redButton, +#jqt .blueButton, +#jqt .greenButton { + display: block; + font-size: 20px; + font-weight: bold; + margin: 10px 20px; + padding: 10px; + text-align: center; + text-decoration: inherit; + -webkit-border-radius: 8px; + border-radius: 8px; + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 3px, rgba(0, 0, 0, 0.4) 0 0 0 5px, rgba(255, 255, 255, 0.3) 0 1px 0 5px; + box-shadow: rgba(0, 0, 0, 0.4) 0 1px 3px, rgba(0, 0, 0, 0.4) 0 0 0 5px, rgba(255, 255, 255, 0.3) 0 1px 0 5px; +} +/* line 185, ../scss/include/_skeleton.scss */ +#jqt .whiteButton.active, +#jqt .whiteButton:active, +#jqt .grayButton.active, +#jqt .grayButton:active, +#jqt .redButton.active, +#jqt .redButton:active, +#jqt .blueButton.active, +#jqt .blueButton:active, +#jqt .greenButton.active, +#jqt .greenButton:active { + background-image: none; + background-color: #3c8101; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5fcd01), color-stop(50%, #479b01), color-stop(51%, #3c8101), color-stop(100%, #306801)); + background-image: -webkit-linear-gradient(top, #5fcd01, #479b01 50%, #3c8101 51%, #306801); + background-image: linear-gradient(top, #5fcd01, #479b01 50%, #3c8101 51%, #306801); + color: white; + text-shadow: #244f00 0 -1px 0; +} +/* line 191, ../scss/include/_skeleton.scss */ +#jqt .whiteButton { + background-image: none; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(50%, #fbfbfb), color-stop(51%, #eeeeee), color-stop(100%, #e1e1e1)); + background-image: -webkit-linear-gradient(top, #ffffff, #fbfbfb 50%, #eeeeee 51%, #e1e1e1); + background-image: linear-gradient(top, #ffffff, #fbfbfb 50%, #eeeeee 51%, #e1e1e1); + color: #151515; + text-shadow: white 0 1px 0; +} +/* line 195, ../scss/include/_skeleton.scss */ +#jqt .grayButton { + background-image: none; + background-color: #444444; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #6a6a6a), color-stop(50%, #515151), color-stop(51%, #444444), color-stop(100%, #373737)); + background-image: -webkit-linear-gradient(top, #6a6a6a, #515151 50%, #444444 51%, #373737); + background-image: linear-gradient(top, #6a6a6a, #515151 50%, #444444 51%, #373737); + color: white; + text-shadow: #2b2b2b 0 -1px 0; +} +/* line 200, ../scss/include/_skeleton.scss */ +#jqt .redButton { + background-image: none; + background-color: #d83b38; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e57a78), color-stop(50%, #dc504d), color-stop(51%, #d83b38), color-stop(100%, #ce2c28)); + background-image: -webkit-linear-gradient(top, #e57a78, #dc504d 50%, #d83b38 51%, #ce2c28); + background-image: linear-gradient(top, #e57a78, #dc504d 50%, #d83b38 51%, #ce2c28); + color: white; + text-shadow: #b92724 0 -1px 0; +} +/* line 204, ../scss/include/_skeleton.scss */ +#jqt .redButton.active, +#jqt .redButton:active { + background-image: none; + background-color: #c12926; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #de5856), color-stop(50%, #d52e2b), color-stop(51%, #c12926), color-stop(100%, #ac2422)); + background-image: -webkit-linear-gradient(top, #de5856, #d52e2b 50%, #c12926 51%, #ac2422); + background-image: linear-gradient(top, #de5856, #d52e2b 50%, #c12926 51%, #ac2422); + color: white; + text-shadow: #97201e 0 -1px 0; +} +/* line 211, ../scss/include/_skeleton.scss */ +#jqt .greenButton { + background-image: none; + background-color: #53b401; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #76fe04), color-stop(50%, #5fcd01), color-stop(51%, #53b401), color-stop(100%, #479b01)); + background-image: -webkit-linear-gradient(top, #76fe04, #5fcd01 50%, #53b401 51%, #479b01); + background-image: linear-gradient(top, #76fe04, #5fcd01 50%, #53b401 51%, #479b01); + color: white; + text-shadow: #3c8101 0 -1px 0; +} +/* line 216, ../scss/include/_skeleton.scss */ +#jqt .leftButton, +#jqt .cancel, +#jqt .back { + left: 6px; + right: auto; +} +/* line 221, ../scss/include/_skeleton.scss */ +#jqt .add { + font-size: 24px; + line-height: 24px; + font-weight: bold; +} +/* line 229, ../scss/include/_skeleton.scss */ +#jqt ul { + padding: 0; + margin: 5px 10px 10px 10px; + -webkit-margin-collapse: separate; +} +/* line 231, ../scss/include/_skeleton.scss */ +#jqt ul, +#jqt ul.individual li { + background-color: #555658; + color: #d5d6d7; + text-shadow: #3c3d3e 0 -1px 0; + border: 1px solid #2f3031; + font: bold 18px "Helvetica Neue", Helvetica; +} +/* line 240, ../scss/include/_skeleton.scss */ +#jqt ul:first-child { + margin-top: 15px; +} +/* line 246, ../scss/include/_skeleton.scss */ +#jqt ul li { + border-top: 1px solid #48494b; + list-style-type: none; + overflow: hidden; + padding: 10px; + -webkit-transform: translate3d(0, 0, 0); + /* expensive way to avoid flickr */ + +} +/* line 253, ../scss/include/_skeleton.scss */ +#jqt ul li a { + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + padding: 10px; + margin: -10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-transform: translateZ(0); + color: white; + text-shadow: #3c3d3e 0 -1px 0; +} +/* line 265, ../scss/include/_skeleton.scss */ +#jqt ul li a.active { + background-image: none; + background-color: #53b401; + -webkit-box-shadow: #5cc801 0 1px 0px inset; + box-shadow: #5cc801 0 1px 0px inset; + color: white; + text-shadow: #3c8101 0 -1px 0; +} +/* line 270, ../scss/include/_skeleton.scss */ +#jqt ul li a.active small { + color: #a0fe50; + text-shadow: #000000 0 -1px 0; +} +/* line 271, ../scss/include/_skeleton.scss */ +#jqt ul li a.active small.counter { + background-color: #306801; +} +/* line 280, ../scss/include/_skeleton.scss */ +#jqt ul li small { + color: #53b401; + font: 16px "Helvetica Neue", Helvetica; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + width: 23%; + position: relative; + z-index: 20; + float: right; + line-height: 16px; + padding: 2px 8px 4px 8px; +} +/* line 295, ../scss/include/_skeleton.scss */ +#jqt ul li small.counter { + background: #2f3031; + color: #949698; + text-shadow: #0a0a0a 0 -1px 0; + z-index: 10; + font-size: 16px; + font-weight: bold; + -webkit-border-radius: 3px; + border-radius: 3px; + display: block; + width: auto; +} +/* line 311, ../scss/include/_skeleton.scss */ +#jqt ul li ::-webkit-input-placeholder { + color: #949698; + text-shadow: #3c3d3e 0 -1px 0; +} +/* line 322, ../scss/include/_skeleton.scss */ +#jqt ul li input[type="text"], +#jqt ul li input[type="password"], +#jqt ul li input[type="tel"], +#jqt ul li input[type="number"], +#jqt ul li input[type="search"], +#jqt ul li input[type="email"], +#jqt ul li input[type="url"], +#jqt ul li textarea, +#jqt ul li select { + color: white; + text-shadow: #3c3d3e 0 -1px 0; + background: transparent url("data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="); + border: 0; + font: normal 17px "Helvetica Neue", Helvetica; + padding: 0; + display: inline-block; + margin-left: 0px; + width: 100%; + -webkit-appearance: textarea; +} +/* line 333, ../scss/include/_skeleton.scss */ +#jqt ul li textarea { + height: 120px; + padding: 0; + text-indent: -2px; +} +/* line 338, ../scss/include/_skeleton.scss */ +#jqt ul li input[type="checkbox"], +#jqt ul li input[type="radio"] { + margin: 0; + padding: 10px; +} +/* line 342, ../scss/include/_skeleton.scss */ +#jqt ul li input[type="checkbox"]:after, +#jqt ul li input[type="radio"]:after { + content: attr(title); + position: absolute; + display: block; + width: 0; + left: 21px; + top: 12px; + font-family: "Helvetica Neue", Helvetica; + font-size: 17px; + line-height: 21px; + width: 246px; + margin: 0 0 0 17px; + color: white; + text-shadow: #3c3d3e 0 -1px 0; +} +/* line 355, ../scss/include/_skeleton.scss */ +#jqt ul li input[type='submit'] { + -webkit-border-radius: 4px; + border-radius: 4px; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#eeeeee), to(#9c9ea0)); + border: 1px outset #aaa; + display: block; + font-size: inherit; + font-weight: inherit; + padding: 10px; +} +/* line 368, ../scss/include/_skeleton.scss */ +#jqt ul li.arrow small, +#jqt ul li.forward small { + margin-right: 24px; +} +/* line 380, ../scss/include/_skeleton.scss */ +#jqt ul li.forward:before { + content: ""; + position: absolute; + display: block; + top: 50%; + right: 6px; + margin-top: -12px; + width: 24px; + height: 24px; + -webkit-border-radius: 12px; + border-radius: 12px; + background-image: none; + background-color: #53b401; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #76fe04), color-stop(50%, #5fcd01), color-stop(51%, #53b401), color-stop(100%, #479b01)); + background-image: -webkit-linear-gradient(top, #76fe04, #5fcd01 50%, #53b401 51%, #479b01); + background-image: linear-gradient(top, #76fe04, #5fcd01 50%, #53b401 51%, #479b01); + border: 2px solid #fff; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + -webkit-box-sizing: border-box; + padding: 0; + z-index: 10; + line-height: 0; + pointer-events: none; +} +/* line 395, ../scss/include/_skeleton.scss */ +#jqt ul li.forward:after { + color: white; + text-shadow: #3c8101 0 -1px 0; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + font-size: 24px; +} +/* line 404, ../scss/include/_skeleton.scss */ +#jqt ul.rounded, +#jqt ul.individual li { + -webkit-box-shadow: rgba(255, 255, 255, 0.15) 0 1px 0; + box-shadow: rgba(255, 255, 255, 0.15) 0 1px 0; + border: 1px solid #2f3031; +} +/* line 409, ../scss/include/_skeleton.scss */ +#jqt ul.rounded { + -webkit-border-radius: 8px; + border-radius: 8px; +} +/* line 412, ../scss/include/_skeleton.scss */ +#jqt ul.rounded li:first-child, +#jqt ul.rounded li:first-child a { + border-top: 0; + -webkit-border-top-left-radius: 8px; + border-top-left-radius: 8px; + -webkit-border-top-right-radius: 8px; + border-top-right-radius: 8px; +} +/* line 416, ../scss/include/_skeleton.scss */ +#jqt ul.rounded li:last-child, +#jqt ul.rounded li:last-child a { + -webkit-border-bottom-left-radius: 8px; + border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + border-bottom-right-radius: 8px; +} +/* line 422, ../scss/include/_skeleton.scss */ +#jqt ul.form li { + padding: 7px 10px; +} +/* line 425, ../scss/include/_skeleton.scss */ +#jqt ul.form li.error { + border: 2px solid red; +} +/* line 428, ../scss/include/_skeleton.scss */ +#jqt ul.form li.error + #jqt ul.form li.error { + border-top: 0; +} +/* line 438, ../scss/include/_skeleton.scss */ +#jqt ul.metal li { + background-image: none; + border-top: 1px solid #fff; + border-bottom: 1px solid #666; + font-size: 26px; +} +/* line 445, ../scss/include/_skeleton.scss */ +#jqt ul.metal li a { + line-height: 26px; + margin: 0; + padding: 13px 0; +} +/* line 451, ../scss/include/_skeleton.scss */ +#jqt ul.metal li em { + display: block; + font-size: 14px; + font-style: normal; + width: 50%; + line-height: 14px; +} +/* line 459, ../scss/include/_skeleton.scss */ +#jqt ul.metal li small { + float: right; + position: relative; + margin-top: 10px; + font-weight: bold; +} +/* line 473, ../scss/include/_skeleton.scss */ +#jqt ul.edgetoedge li { + font-size: 20px; +} +/* line 476, ../scss/include/_skeleton.scss */ +#jqt ul.edgetoedge li:first-child { + border-top: 0; +} +/* line 480, ../scss/include/_skeleton.scss */ +#jqt ul.edgetoedge li.sep { + font-size: 16px; + padding: 2px 10px; +} +/* line 485, ../scss/include/_skeleton.scss */ +#jqt ul.edgetoedge li em { + font-weight: normal; + font-style: normal; +} +/* line 494, ../scss/include/_skeleton.scss */ +#jqt ul.plastic { + font-size: 18px; +} +/* line 498, ../scss/include/_skeleton.scss */ +#jqt ul.plastic li { + border-width: 1px 0; + border-style: solid; + background-image: none; + background-color: #2a2b2c; + border-top-color: #2f3031; + border-bottom-color: #232324; +} +/* line 506, ../scss/include/_skeleton.scss */ +#jqt ul.plastic li:nth-child(odd) { + background-image: none; + background-color: #2f3031; +} +/* line 510, ../scss/include/_skeleton.scss */ +#jqt ul.plastic li a.active.loading { + background-image: url(img/loading.gif); + background-position: 95% center; + background-repeat: no-repeat; +} +/* line 515, ../scss/include/_skeleton.scss */ +#jqt ul.plastic li small { + color: #949698; + font-size: 13px; + font-weight: bold; + text-transform: uppercase; +} +/* line 525, ../scss/include/_skeleton.scss */ +#jqt ul.individual { + border: 0; + background: none; + clear: both; + overflow: hidden; +} +/* line 531, ../scss/include/_skeleton.scss */ +#jqt ul.individual li { + font-size: 14px; + text-align: center; + -webkit-border-radius: 8px; + border-radius: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 48%; + float: left; + display: block; + padding: 11px 10px 14px 10px; +} +/* line 541, ../scss/include/_skeleton.scss */ +#jqt ul.individual li + li { + float: right; +} +/* line 546, ../scss/include/_skeleton.scss */ +#jqt ul.individual a { + line-height: 16px; + margin: -11px -10px -14px -10px; + padding: 11px 10px 14px 10px; + -webkit-border-radius: 8px; + border-radius: 8px; +} +/* line 555, ../scss/include/_skeleton.scss */ +#jqt .toggle { + width: 94px; + position: relative; + height: 27px; + display: block; + overflow: hidden; + float: right; +} +/* line 563, ../scss/include/_skeleton.scss */ +#jqt .toggle input[type="checkbox"] { + margin: 0; + -webkit-border-radius: 5px; + border-radius: 5px; + height: 27px; + overflow: hidden; + width: 149px; + border: 0; + -webkit-transition: left 0.15s ease-in-out; + transition: left 0.15s ease-in-out; + position: absolute; + top: 0; + left: -55px; + -webkit-appearance: textarea; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +/* line 577, ../scss/include/_skeleton.scss */ +#jqt .toggle input[type="checkbox"]:checked { + left: 0px; +} +/* line 583, ../scss/include/_skeleton.scss */ +#jqt .info { + font-size: 12px; + line-height: 16px; + text-align: center; + color: #444; + padding: 15px; + font-weight: bold; +} +/* line 12, ../scss/jqtouch.scss */ +#jqt { + /* Lists */ + +} +/* line 13, ../scss/jqtouch.scss */ +#jqt > * { + background-image: url('data:image/png;base64,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'), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7b7c7f), color-stop(30%, #696a6d), color-stop(65%, #555658), color-stop(100%, #464748)); + background-image: url('data:image/png;base64,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'), -webkit-linear-gradient(top, #7b7c7f, #696a6d 30%, #555658 65%, #464748); + background-image: url('data:image/png;base64,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'), linear-gradient(top, #7b7c7f, #696a6d 30%, #555658 65%, #464748); +} +/* line 20, ../scss/jqtouch.scss */ +#jqt .toolbar { + background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 12.5, color-stop(12.5%, #181819), color-stop(12.5%, rgba(11, 11, 12, 0))), -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 12.5, color-stop(12.5%, #181819), color-stop(12.5%, rgba(11, 11, 12, 0))), -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 12.5, color-stop(12.5%, rgba(255, 255, 255, 0.1)), color-stop(12.5%, rgba(255, 255, 255, 0))), -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 12.5, color-stop(12.5%, rgba(255, 255, 255, 0.1)), color-stop(12.5%, rgba(255, 255, 255, 0))); + background-image: -webkit-radial-gradient(#181819 12.5%, rgba(11, 11, 12, 0) 12.5%), -webkit-radial-gradient(#181819 12.5%, rgba(11, 11, 12, 0) 12.5%), -webkit-radial-gradient(rgba(255, 255, 255, 0.1) 12.5%, rgba(255, 255, 255, 0) 12.5%), -webkit-radial-gradient(rgba(255, 255, 255, 0.1) 12.5%, rgba(255, 255, 255, 0) 12.5%); + background-image: radial-gradient(#181819 12.5%, rgba(11, 11, 12, 0) 12.5%), radial-gradient(#181819 12.5%, rgba(11, 11, 12, 0) 12.5%), radial-gradient(rgba(255, 255, 255, 0.1) 12.5%, rgba(255, 255, 255, 0) 12.5%), radial-gradient(rgba(255, 255, 255, 0.1) 12.5%, rgba(255, 255, 255, 0) 12.5%); + background-repeat: repeat; + background-position: 0 0, 8px 8px, 0 1px, 8px 9px; + background-color: #2f3031; + background-size: 16px 16px; +} +/* line 29, ../scss/jqtouch.scss */ +#jqt ul li { + border-top: 1px solid #48494b; + background-image: none; + background-color: rgba(85, 86, 88, 0.2); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(123, 124, 127, 0.2)), color-stop(3%, rgba(98, 99, 101, 0.2)), color-stop(100%, rgba(72, 73, 75, 0.2))); + background-image: -webkit-linear-gradient(top, rgba(123, 124, 127, 0.2), rgba(98, 99, 101, 0.2) 3%, rgba(72, 73, 75, 0.2)); + background-image: linear-gradient(top, rgba(123, 124, 127, 0.2), rgba(98, 99, 101, 0.2) 3%, rgba(72, 73, 75, 0.2)); +} +/* line 33, ../scss/jqtouch.scss */ +#jqt ul li a { + color: white; + text-shadow: #3c3d3e 0 -1px 0; +} +/* line 37, ../scss/jqtouch.scss */ +#jqt ul li .toggle input[type="checkbox"] { + -webkit-border-radius: 5px; + border-radius: 5px; + background: #ffffff url(../img/jqt/on_off.png) 0 0 no-repeat; +} +/* line 42, ../scss/jqtouch.scss */ +#jqt ul li input[type='submit'] { + background-image: none; + background-color: white; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(50%, #ffffff), color-stop(51%, #ffffff), color-stop(100%, #f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #ffffff 50%, #ffffff 51%, #f2f2f2); + background-image: linear-gradient(top, #ffffff, #ffffff 50%, #ffffff 51%, #f2f2f2); + border: 1px outset black; +} +/* line 47, ../scss/jqtouch.scss */ +#jqt ul li small.counter { + -webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0; + box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0; +} +/* line 54, ../scss/jqtouch.scss */ +#jqt ul.metal li { + background-image: none; + border-top: 1px solid #fff; + border-bottom: 1px solid #666; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#eeeeee), to(#9c9ea0)); +} +/* line 60, ../scss/jqtouch.scss */ +#jqt ul.metal li a { + text-shadow: #fff 0 1px 0; +} +/* line 62, ../scss/jqtouch.scss */ +#jqt ul.metal li a.active { + color: #000; +} +/* line 65, ../scss/jqtouch.scss */ +#jqt ul.metal li em { + color: #444; +} +/* line 71, ../scss/jqtouch.scss */ +#jqt ul.edgetoedge li { + background-image: none; + background-color: #3c3d3e; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #282829), color-stop(100%, #2f3031)); + background-image: -webkit-linear-gradient(top, #282829, #2f3031); + background-image: linear-gradient(top, #282829, #2f3031); + border-bottom: 1px solid #1e1e1f; + border-top: 1px solid #343536; +} +/* line 76, ../scss/jqtouch.scss */ +#jqt ul.edgetoedge li.sep { + background-image: none; + background-color: rgba(0, 0, 0, 0.3); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(38, 38, 38, 0.3)), color-stop(30%, rgba(20, 20, 20, 0.3)), color-stop(65%, rgba(0, 0, 0, 0.3)), color-stop(100%, rgba(0, 0, 0, 0.3))); + background-image: -webkit-linear-gradient(top, rgba(38, 38, 38, 0.3), rgba(20, 20, 20, 0.3) 30%, rgba(0, 0, 0, 0.3) 65%, rgba(0, 0, 0, 0.3)); + background-image: linear-gradient(top, rgba(38, 38, 38, 0.3), rgba(20, 20, 20, 0.3) 30%, rgba(0, 0, 0, 0.3) 65%, rgba(0, 0, 0, 0.3)); + color: #949698; + text-shadow: #000000 0 -1px 0; +} +/* line 83, ../scss/jqtouch.scss */ +#jqt .info { + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#cccccc), to(#aaaaaa), color-stop(0.6, #cccccc)); + text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0; + color: #444; + border-top: 1px solid rgba(255, 255, 255, 0.2); +} +div.spinner { + position: relative; + width: 100px; + height: 100px; + display: inline-block; +} +div.spinner div { + width: 12%; + height: 26%; + background: #000; + position: absolute; + left: 44.5%; + top: 37%; + opacity: 0; + -webkit-animation: fade 1s linear infinite; + -webkit-border-radius: 50px; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); +} +div.spinner div.bar01 { + -webkit-transform: rotate(0deg) translate(0, -142%); + -webkit-animation-delay: 0s; +} +div.spinner div.bar02 { + -webkit-transform: rotate(30deg) translate(0, -142%); + -webkit-animation-delay: -0.9167s; +} +div.spinner div.bar03 { + -webkit-transform: rotate(60deg) translate(0, -142%); + -webkit-animation-delay: -0.833s; +} +div.spinner div.bar04 { + -webkit-transform: rotate(90deg) translate(0, -142%); + -webkit-animation-delay: -0.75s; +} +div.spinner div.bar05 { + -webkit-transform: rotate(120deg) translate(0, -142%); + -webkit-animation-delay: -0.667s; +} +div.spinner div.bar06 { + -webkit-transform: rotate(150deg) translate(0, -142%); + -webkit-animation-delay: -0.5833s; +} +div.spinner div.bar07 { + -webkit-transform: rotate(180deg) translate(0, -142%); + -webkit-animation-delay: -0.5s; +} +div.spinner div.bar08 { + -webkit-transform: rotate(210deg) translate(0, -142%); + -webkit-animation-delay: -0.41667s; +} +div.spinner div.bar09 { + -webkit-transform: rotate(240deg) translate(0, -142%); + -webkit-animation-delay: -0.333s; +} +div.spinner div.bar10 { + -webkit-transform: rotate(270deg) translate(0, -142%); + -webkit-animation-delay: -0.25s; +} +div.spinner div.bar11 { + -webkit-transform: rotate(300deg) translate(0, -142%); + -webkit-animation-delay: -0.1667s; +} +div.spinner div.bar12 { + -webkit-transform: rotate(330deg) translate(0, -142%); + -webkit-animation-delay: -0.0833s; +} +@-webkit-keyframes fade { + from { + opacity: 1; + } + to { + opacity: 0.25; + } +} +/* + +Color list: +- login box: + light #ff9955 + dark #ff6622 +- login button: + regular #dd5500 + hover #773311 +- login translations: + box: #cc6622; + not-selected: + color: #ddaa99 + background: #994422 + selected: #772211; +*/ +html { + height: 100%; + -webkit-text-size-adjust: none; + -ms-text-size-adjust: none; +} +body { + font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; + margin: 0px; +} +.ellipsis { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +div#loginForm div.credentialsMessage.error h1 { + color: red; +} +div#loginForm div.validating div.loading { + margin-top: 50px; + margin-bottom: 50px; + margin-left: auto; + margin-right: auto; + width: 100px; +} +/* + +Color list: +- login box: + light #ff9955 + dark #ff6622 +- login button: + regular #dd5500 + hover #773311 +- login translations: + box: #cc6622; + not-selected: + color: #ddaa99 + background: #994422 + selected: #772211; +*/ +html { + height: 100%; + -webkit-text-size-adjust: none; + -ms-text-size-adjust: none; +} +body { + font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; + margin: 0px; +} +.ellipsis { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +#jqt div.cardList ul li.cardListItem a small.favicon { + background: white; + -webkit-border-radius: 3px; + border-radius: 3px; + display: block; + width: 26px; + height: 26px; + padding: 0px; +} +#jqt div.cardList ul li.cardListItem a small.favicon img.favicon { + margin-right: 3px; + margin-top: 3px; + width: 20px; + height: 20px; +} +#jqt div.cardDetail ul li a.password { + color: gray; +} +/* ---------------------------------------- */ +/* +body { + margin: 0; + font-family: Helvetica; + background: #FFFFFF; + color: #000000; + overflow-x: hidden; + -webkit-user-select: none; + -webkit-text-size-adjust: none; +} + + +div.toolbar { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + border-bottom: 1px solid #2d3642; + border-top: 1px solid #6d84a2; + padding: 10px; + height: 45px; +// background: url(./images/old/iPhone/toolbar.png) #6d84a2 repeat-x; + background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUCNddjDEOgEAQAgn//5qltYWFnb1GB4vdSy4WBAYStKyb9+O0FJMYyjMyMWCC35lJM71r6vF1P07/lFSfPx6ZxNLcy1HtihzpA/RWcOj0zlDhAAAAAElFTkSuQmCCCg==) #6d84a2 repeat-x; +} + +div.toolbar h1#pageTitle { + overflow: hidden; + margin-top: 1px; + margin-bottom: 0px; + margin-left: auto; + margin-right: auto; + width: 150px; + height: 25px; + font-size: 20px; + width: 150px; + font-weight: bold; + text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + color: #FFFFFF; +} + +div.toolbar a.button { + position: absolute; + overflow: hidden; + top: 8px; + right: 6px; + margin: 0; + border-width: 0 5px; + padding: 0 3px; + width: auto; + height: 30px; + line-height: 30px; + font-family: inherit; + font-size: 12px; + font-weight: bold; + color: #FFFFFF; + text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; + text-overflow: ellipsis; + text-decoration: none; + white-space: nowrap; + background: none; +// -webkit-border-image: url(./images/old/iPhone/toolButton.png) 0 5 0 5; +} + +div.toolbar a#backButton { + left: 6px; + right: auto; + padding: 0px; + max-width: 55px; + border-width: 0 8px 0 14px; +// -webkit-border-image: url(./images/old/iPhone/backButton.png) 0 8 0 14; + -webkit-border-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAIAAAA6iHCJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtJJREFUeNrEV21P01AYbbtubNExBnXDbYjjZYI4BMdgEANDQoTElw/+Rw0mBs0UiSGaoJFEQEPwjRhFCW/JxrZ2Xdu1fe71bpAhCHzqupPnS5ObPOeec+5zb+lHLxao05HPiwvzr3/++J7N7FFGgaaDLe034+O+wCXyxSKET1u5+Wc98XTK39zeOzjudLmNIoAR2tlaf/Zkqm9gKNI/RBigE9dtb23MJKZj8fvuC16b3WGxsJRxOFfHeQOtH+ZnOI+XRfgEBoLAzz6fjo7ebfD4GYYhMiEdDGRAW6xOt6d7YGzl4xIL/7mgyPL044edkVt19T4EFAJEVQYud+MvOCkHc7MJ3+VrXGOzXrHeZS1s9trjOVj7tiqpONTWBRgD6BVmQFls9iMaSHnx/bu3ffEHgC2gVVqAIojKR3Iw9zLRcjVmtTnA0NydxQDg0IWvq59kYIOeZtWs9gQkagcMcgK/vLjYNXQHcEkas0AcYPdNIPr7Q/0M69B089ofavB5ZVm3OJ2cTwegzAUgxGbSe8tLS52xewjRZGabzAABZt+8mvGHBsiYNF+AAw1cXEBGNUiQqWpAlArM5MSYBXgEOl0NkLcCkxak28MRKbuDMa6KDAwAUnU8HO2Q+N0SJ3OLMCA7V1S9vt7d3tSg5LNV0ACXwOekcGfreVbVVYUqMjOvyPsH71cqkxsZ7NHFJIXBTCMONMAlEryoxAfDucyOmaOpmINyaTowrK23IyDxKbNzUIYoKU3+i37OXpCESvfGCOw11uMMcCkQke4rDlrS1coOSk2VOXftERfKtZsURmLXQUqBVqiUABgrQirc0Xp4Fv4t8kxN8dLkaJQupOVcGnTN0PuQHHlRSG1Eu9tUTLOnxZ5clclsfmK078va7/WN7axomCN2e42Xc/VEIoiiM0KePeM20DTY3M22BZtuhENW1rC/NrI3WVGTmZxSKEr7V4ABAJ+53J1I3nPjAAAAAElFTkSuQmCCCg==) 0 8 0 14; +} + +// ------------------------------------------- + +body.iPhone form.loginForm { + min-height: 372px; + + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + padding: 10px; +// background: #c8c8c8 url(./images/old/iPhone/pinstripes.png); + background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==); +} + +fieldset { + position: relative; + margin: 0 0 20px 0; + padding: 0; + background: #FFFFFF; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border: 1px solid #999999; + text-align: right; + font-size: 16px; +} + +.row { + position: relative; + min-height: 42px; + border-bottom: 1px solid #999999; + -webkit-border-radius: 0; + text-align: right; +} + +fieldset > .row:last-child { + border-bottom: none !important; +} + + +.row > input:not(input[type|=radio]):not(input[type|=checkbox]), +.row > div.fieldValue { + width: 100%; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + margin: 0; + border: none; + padding: 0px 10px 0 112px; + height: 42px; + background: none; + font-size: 16px; + font-weight: normal; + + color: #666a60; + -webkit-user-select: text; +} + +.row > div.fieldValue p { + margin: 0px; + text-align: left; + height: 40px; + vertical-align: middle; + line-height: 40px; +} + +body[orientation="landscape"] .row > div.fieldValue.password { + padding-right: 120px; +// background: url(./images/old/iPhone/password_background.png) no-repeat 105px; + background: url(data:image/png;charset=utf-8;base64,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) no-repeat 105px; +} + +.row > div.fieldValue.password { + color: rgba(255,255,255,0.5); +// background: url(./images/old/iPhone/password_background.png) no-repeat 106px; + background: url(data:image/png;charset=utf-8;base64,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) no-repeat 106px; +} + +.row > div.fieldValue.password.clear { + color: #666a60; + background: none; +} + +.row > input[type|=radio], .row > input[type|=checkbox] { + margin: 7px 7px 0 0; + height: 25px; + width: 25px; +} + + +.row > label { + position: absolute; + margin: 0 0 0 14px; + line-height: 42px; + font-weight: bold; + max-width: 92px; + overflow: hidden; + white-space: nowrap; +} + +body[orientation="landscape"] .row > label { + max-width: 150px; +} + +body[orientation="landscape"] .row > input:not(input[type|=radio]):not(input[type|=checkbox]) { + padding-left: 140px; +} + +.row > img.favicon { + position: absolute; + width: 20px; + height: 20px; + top: 12px; + left: 11px; +} + +.row > span { + padding: 8px 13px; + text-align: left; + display: block; + color: #666a60; + font-size: 10pt; +} + +.row.notes { + -webkit-user-select: text; +} + +// ------------------------------------------- + +.whiteButton { + margin-left: auto; + margin-right: auto; + width: 150px; + display: block; + border-width: 0 12px; + padding: 10px; + text-align: center; + font-size: 20px; + font-weight: bold; + text-decoration: inherit; + color: inherit; + +// -webkit-border-image: url(./images/old/iPhone/whiteButton.png) 0 12 0 12; + -webkit-border-image: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAuCAQAAAB+dNqHAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAdAAAALgChnaVgAAAAAmJLR0QA/4ePzL8AAANhSURBVEjHnZZNaFxVFMd/5747mclMkpmxzYdJtFaJglgFpYSiBAVX7l0UUZGuSkEEu3PtSulCUXFdxYXL7kQQIWD9CsRIqdomGGOaSdJmZjKTeW/eu/e4mKRmrE3n5X83j/ve7/3POfe+d67QrTxP8QLDnMTenkv4kQ2+YZ6d/Y/Kvut+XuZVKtygzVbXC8v0cT+jXORLWneix/mAZZZwKIrSbSAIAcd5kDdZ6kaf4zzfEeLPnHrr+UeOWpMJ9rjYxe7a5ntff/YThhyneJ/Zf9Ep3uEXkhNjX50bHoiStoPE76HWiPQFfcGN+kufLKxheZJ3+aOD5vmIBaLXpz89HSVhzF2Uy2TtGxe/+JksJzjHjgCvMEHz6cnZt7dD5zlAgSlkZy7MrVDgbz43FJimhV46W2vFzutBI3aN8NJZlBbTFAKepZ/o/IszU1Gs95Tz2Uw1nFuiiTE8Rhs9fbIROt/LaISvTaO0mbIM0kTKeefoUSMDCI6SxRCT9d77XlFrCYgQi0PH72vH9CyNMSjO4tGM9do76hXB4y2KU+c8aaR41KJ4SIn6DgqgPq2rggWc+kMEjBUBVDUNKQBiOx+218Pl6tVr+jJhUZx4PYSr4XBSsAKaJH9tpirT7uIoTj3pAna43TJJWtSjYDpxp5bv5OpTb4mOq3IIX0W14ypeUq+rYBH5T9fqbRerWMClrbB4PBgUjZPUuXrUGBW51Yhc71y9LSJi1NgQxVWj3a7aw2gmONSGJtNAxC9v9+56vaoe6aubXEWy4meXe/+VXl42TvqzG4ZFCkRzv/+w3lu436/PX6NNnsUgCctjUUJwnWdGC/ZenpXw47loTRrldu3XwLkSrQmiHbkSP3FkwB4MXpjfWDE3JTfw29ZGAGHjgWJdcDW9XC/0PVS4W47fVj5cuLUmFWlOVlevei8ApVLp8bWclnWU4khpZvTRwaw5VggEINHlZuSv1mcr6zW2ZF22xqLqlWr19uYdGSkeWyn4IY5okX61GBHMrp1HJaYldW4G9Ylm7c/19a4jV6k0+fBmtjbkCwxoDovdQ0lIpEXTNIrbR6OVxWr1joNeJjM+Xhyu2+0+Z6Ocmt17Kj4bBvFgPJTUNlZX4/j/zohAJlMuF4vW5vP7Z3d2kqRW29qKuxr4P1RbNFwZtqq8AAAAAElFTkSuQmCCCg==) 0 12 0 12; + text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; +} + +// ------------------------------------------- + +body.iPhone .loginProgressPanel { + min-height: 372px; + + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + padding: 10px; +// background: #c8c8c8 url(./images/old/iPhone/pinstripes.png); + background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==); +} + +body.iPhone .loadingBar { + margin-left: auto; + margin-right: auto; + margin-top: 60px; +} + +div.loadingBar { + height: 22px; + width: 214px; +// background: url(./images/old/loading/loadingBar.gif) no-repeat center; + background: url(data:image/gif;charset=utf-8;base64,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) no-repeat center; +} + +div.loadingBar div.loadingBarProgress { + height: 100%; + width: 0%; +} + +div.loadingBar div.loadingBarProgress div.loadingBarProgress_left { + height: 100%; + max-width: 8px; +// background: url(./images/old/loading/loadingBarProgress.png) no-repeat 0; + background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAAWCAYAAAC8C2KaAAAACXBIWXMAAAsSAAALEgHS3X78AAACIklEQVR4Ae3brU7DUBQH8HO6PQAazx4BRUKDwfChQTGFQ4wRFGEERdgQONRQoGEzGFISFI8w/DQSWHsP565r0xY2BiWY/ivW+530l52cdr0jwgEBCPy5AE9aUc7XV0kcl4jniGR20lj0QaAYAtzXWHgmNh7v3HTGXfOXgSWnKy6VqEZMCKZxcmiHgFCfAjrjva6XxfgUWNJc3tVBG9mBqEMAAmMFrrl+10r2pgJLTpYO9dZvNTkAZQhAYAoBNh3evz+KRsaBJccLevtXakYdOEMAAj8UCII6Hzx6dlY5nipBjXwTV1GAAAR+KiA1neHZWcOMJY35FS03bAMOCEAgl0CDG0/dMGP5by6xk2s1TIYABFRAjKufo8AyfoUkftyCDwQg8FsBloqdGmaswMf7qt9CYh4E0gLDWBrdCg7SXahBAAK5BEYZa9AnZmStXJSYDAEVENEtT/GtYNAjxl5AfDEgkFtAuGfXCDPW4N0jh9zci2IBCBRdwCTeY1kL2Z65RdYq+rcC159LQLjPFy9rdo0wY9nS+2uLSk5qI6FtxgEBCEwpEJg4flIvr2SrfEgOYxPulI4YBoFYwEiHL/2jqJ4KLNuowVXT4NqMBuAMAQh8I2DkSoPqLDnqU2DZTqmWF4mcXTxzJalQhkBGQJ+piEyL2/5DpifchJttjOpSLenmXMfVvboVBFmkgnOhBYbBJPqTuv41vx10C22Bi4fAfwt8AJe2flCLvH1PAAAAAElFTkSuQmCCCg==) no-repeat 0; +} + +div.loadingBar div.loadingBarProgress div.loadingBarProgress_right { + position: relative; + height: 100%; + margin-left: 8px; +// background: url(./images/old/loading/loadingBarProgress.png) no-repeat right; + background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAAWCAYAAAC8C2KaAAAACXBIWXMAAAsSAAALEgHS3X78AAACIklEQVR4Ae3brU7DUBQH8HO6PQAazx4BRUKDwfChQTGFQ4wRFGEERdgQONRQoGEzGFISFI8w/DQSWHsP565r0xY2BiWY/ivW+530l52cdr0jwgEBCPy5AE9aUc7XV0kcl4jniGR20lj0QaAYAtzXWHgmNh7v3HTGXfOXgSWnKy6VqEZMCKZxcmiHgFCfAjrjva6XxfgUWNJc3tVBG9mBqEMAAmMFrrl+10r2pgJLTpYO9dZvNTkAZQhAYAoBNh3evz+KRsaBJccLevtXakYdOEMAAj8UCII6Hzx6dlY5nipBjXwTV1GAAAR+KiA1neHZWcOMJY35FS03bAMOCEAgl0CDG0/dMGP5by6xk2s1TIYABFRAjKufo8AyfoUkftyCDwQg8FsBloqdGmaswMf7qt9CYh4E0gLDWBrdCg7SXahBAAK5BEYZa9AnZmStXJSYDAEVENEtT/GtYNAjxl5AfDEgkFtAuGfXCDPW4N0jh9zci2IBCBRdwCTeY1kL2Z65RdYq+rcC159LQLjPFy9rdo0wY9nS+2uLSk5qI6FtxgEBCEwpEJg4flIvr2SrfEgOYxPulI4YBoFYwEiHL/2jqJ4KLNuowVXT4NqMBuAMAQh8I2DkSoPqLDnqU2DZTqmWF4mcXTxzJalQhkBGQJ+piEyL2/5DpifchJttjOpSLenmXMfVvboVBFmkgnOhBYbBJPqTuv41vx10C22Bi4fAfwt8AJe2flCLvH1PAAAAAElFTkSuQmCCCg==) no-repeat right; + top: -22px; +} + +// ------------------------------------------- + +body.iPhone .loginErrorPanel { + position: absolute; + min-height: 372px; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + padding: 10px; +// background: #c8c8c8 url(./images/old/iPhone/pinstripes.png); + background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==); +} + +body.iPhone .loginErrorPanel h2 { + text-align: center; + color: red; + margin-top: 40px; +} + +// ------------------------------------------- + +form.cardListSearchForm { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + border-bottom: 1px solid #2d3642; + border-top: 1px solid #6d84a2; + padding: 6px; + height: 45px; +// background: url(./images/old/iPhone/toolbar.png) #6d84a2 repeat-x; + background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUCNddjDEOgEAQAgn//5qltYWFnb1GB4vdSy4WBAYStKyb9+O0FJMYyjMyMWCC35lJM71r6vF1P07/lFSfPx6ZxNLcy1HtihzpA/RWcOj0zlDhAAAAAElFTkSuQmCCCg==) #6d84a2 repeat-x; + margin: 0px; +} + +form.cardListSearchForm input { + margin: 7px; + -webkit-appearance: searchfield; + width: 200px; +} + +ul.cardListPanel { + margin: 0px; + padding: 0px; + list-style-type: none; + min-height: 372px; +} + +li.cardListItem { + height: 43px; + border-bottom: 1px solid #cccccc; +// background: url(./images/old/iPhone/listArrow.png) no-repeat right center; + background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi/P//PwOtARMDHcDwsYQFRJSXl8P4dVC6CZvizs5O8i1BsqARid9Ei+BiQ2KDLKumhSU1QNyKxG+hlkXoEQ+yqAPNogpapK5KNIvaKbUIVxKeAsTvkPg5QCxETUukgfgAkqFPgdgBzVKKLIFZoIJmwR1qBRdNLEC2BJQpV9LCAmRL/gBxAtRwqlqAXqzcgRrOQE0LQIBxtNIiBQAEGAA7xCa2yF9zEgAAAABJRU5ErkJgggo=) no-repeat right center; + +} + +li.cardListItem a { + position: relative; + top: -22px; + left: 40px; + display: block; + white-space: nowrap; + overflow: hidden; +} + +body[orientation="portrait"] li.cardListItem a { + max-width: 250px; +} + +body[orientation="landscape"] li.cardListItem a { + max-width: 400px; +} + +li.cardListItem img { + height: 20px; + width: 20px; + padding: 12px 10px 0px 10px; +} + +li.cardListItem a { + text-decoration: none; + color: black; + font-weight: bold; + font-size: 14pt; + vertical-align: 3px; +} + + +div.cardDetailPanel { + position: absolute; + top: 45px; + min-height: 372px; + + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + padding: 10px; +// background: #c8c8c8 url(./images/old/iPhone/pinstripes.png); + background: #c8c8c8 url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAIAAACdaSOZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpiPHrmCgMC/GNjYwNSAAEGADdNA3dnzPlQAAAAAElFTkSuQmCCCg==); +} + +div.cardDetailPanel > fieldset > div.row > span.directLogin { + width: 100%; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + margin: 0; + border: none; + padding: 12px 10px 0 110px; + height: 42px; + background: none; + font-size: 16px; + font-weight: normal; + + padding-left: 40px; + color: black; +// background: url(./images/old/iPhone/listArrow.png) no-repeat right center; + background: url(data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi/P//PwOtARMDHcDwsYQFRJSXl8P4dVC6CZvizs5O8i1BsqARid9Ei+BiQ2KDLKumhSU1QNyKxG+hlkXoEQ+yqAPNogpapK5KNIvaKbUIVxKeAsTvkPg5QCxETUukgfgAkqFPgdgBzVKKLIFZoIJmwR1qBRdNLEC2BJQpV9LCAmRL/gBxAtRwqlqAXqzcgRrOQE0LQIBxtNIiBQAEGAA7xCa2yF9zEgAAAABJRU5ErkJgggo=) no-repeat right center; +} + +body[orientation="landscape"] div.cardDetailPanel > fieldset > div.row > span.directLogin { + padding-left: 50px; +} + +div.cardDetailPanel h2 { + margin: 0 0 8px 14px; + font-size: inherit; + font-weight: bold; + color: #4d4d70; + text-shadow: rgba(255, 255, 255, 0.75) 1px 1px 0; +} + +body[orientation="portrait"] > * { + width: 320px; +} + +body[orientation="landscape"] > * { + width: 480px; +} +*/
\ No newline at end of file diff --git a/frontend/gamma/css/static.css b/frontend/gamma/css/static.css new file mode 100644 index 0000000..9953a8d --- a/dev/null +++ b/frontend/gamma/css/static.css @@ -0,0 +1,166 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +body { + padding: 0px; + margin: 0px; + font-family: Helvetica, Arial, Geneva, sans-serif; + color: #666666; +} +div.header { + padding: 20px 25px; + background-color: #1f2148; +} +div#logo { + background: url(./images/old/logo.png); + width: 150px; + height: 39px; + display: block; +} +h5.clipperzPayoff { + color: white; + font-size: 13pt; + font-weight: normal; + padding-left: 20px; + white-space: nowrap; + margin: 0px; + padding-left: 4px; +} +/* +h1 { + font-size: 40pt; + color: #333366; +} + +h1 span.logo_z { + color: #ff9400; +} +*/ +div.contentWrapper { + padding: 20px; +} +div.block1 { + float: left; + margin-right: 40px; +} +div.block2 { + float: left; +} +div.languageBlock { + clear: both; + padding-top: 20px; +} +div.flags { + float: left; +} +div.content { + float: left; + margin-left: 20px; + width: 300px; +} +h3 { + margin: 0px; + padding-top: 10px; +} +p { + font-size: 10pt; + line-height: 20px; +} +/* @group RSS feed */ +body.iFrame { + margin: 0px; + padding: 0px; + border: 0px; + font-family: Helvetica, Arial, Geneva, sans-serif; +} +div#feedContent ul { + list-style-type: none; + padding: 0px; + margin: 0px; +} +div#feedContent ul li { + display: none; +} +div#feedContent ul li.selected { + display: block; + padding-top: 6px; +} +div#feedContent ul li.selected em.date { + display: none; +} +div#feedContent ul li.selected a { + display: none; +} +div#feedContent ul li.selected h2 { + font-size: 8pt; + color: #c3c4cf; + margin: 0px; + border: 0px; + padding: 0px; +} +div#feedContent ul li.selected p { + font-size: 8pt; + color: #c3c4cf; + margin: 0px; + display: inline; + line-height: 15px; +} +div#feedContent ul li.selected p a { + font-size: 8pt; + color: #c3c4cf; + display: inline; +} +div.languageBlock div.flags { + height: 64px; + width: 64px; +} +div.languageBlock.en-us div.flags { + background: url(./images/old/flags/en.png); +} +div.languageBlock.zh-cn div.flags { + background: url(./images/old/flags/cn.png); +} +div.languageBlock.fr-fr div.flags { + background: url(./images/old/flags/fr.png); +} +div.languageBlock.it-it div.flags { + background: url(./images/old/flags/it.png); +} +div.languageBlock.ja-jp div.flags { + background: url(./images/old/flags/jp.png); +} +div.languageBlock.pt-br div.flags { + background: url(./images/old/flags/br.png); +} +div.languageBlock.es-es div.flags { + background: url(./images/old/flags/es.png); +} +div.languageBlock.ru-ru div.flags { + background: url(./images/old/flags/ru.png); +} +div.languageBlock.de-de div.flags { + background: url(./images/old/flags/de.png); +} +/* @end */ diff --git a/frontend/gamma/css/web.css b/frontend/gamma/css/web.css index 0a72e09..5d8bc20 100644 --- a/frontend/gamma/css/web.css +++ b/frontend/gamma/css/web.css @@ -23,2188 +23,4077 @@ refer to http://www.clipperz.com. */ /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } div#loading { width: 100%; height: 100%; display: table; background-image: -ms-radial-gradient(center, circle farthest-corner, #4d52b3 0%, #1f2148 100%); /* IE10 */ background-image: -moz-radial-gradient(center, circle farthest-corner, #4d52b3 0%, #1f2148 100%); /* Mozilla Firefox */ background-image: -o-radial-gradient(center, circle farthest-corner, #4d52b3 0%, #1f2148 100%); /* Opera */ background-image: -webkit-radial-gradient(center, circle farthest-corner, #4d52b3 0%, #1f2148 100%); /* Webkit (Chrome 11+) */ background-image: radial-gradient(center, circle farthest-corner, #4d52b3 0%, #1f2148 100%); /* Proposed W3C Markup */ background-image: -webkit-gradient(radial, center center, 0, center center, 495, color-stop(0, #4d52b3), color-stop(1, #1f2148)); /* Webkit (Safari/Chrome 10) */ } div#loading div { display: table-cell; vertical-align: middle; width: 100%; text-align: center; } div#loading div h1 { font-size: 40pt; color: #ffffff; text-shadow: -1px -1px 2px #2e316c, 1px 1px 1px #454aa1; } div#loading div h3 { font-size: 18pt; text-shadow: -1px -1px 1px #2e316c, 1px 1px 1px #454aa1; color: #1f2148; } div#loading div h5 { padding-left: 20px; color: #ff9200; } /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } div.tooltip { position: absolute; z-index: 30001; } div.tooltip div.tooltip_body { border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - border-top: 1px solid #d4d4d4; - border-left: 1px solid #a2a2a2; - border-right: 1px solid #6f6f6f; - border-bottom: 1px solid #3c3c3c; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - border-top: 1px solid #d4d4d4; - border-left: 1px solid #a2a2a2; - border-right: 1px solid #6f6f6f; - border-bottom: 1px solid #3c3c3c; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - border-top: 1px solid #d4d4d4; - border-left: 1px solid #a2a2a2; - border-right: 1px solid #6f6f6f; - border-bottom: 1px solid #3c3c3c; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - border-top: 1px solid #d4d4d4; - border-left: 1px solid #a2a2a2; - border-right: 1px solid #6f6f6f; - border-bottom: 1px solid #3c3c3c; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - border-top: 1px solid #d4d4d4; - border-left: 1px solid #a2a2a2; - border-right: 1px solid #6f6f6f; - border-bottom: 1px solid #3c3c3c; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bbbbbb), to(#555555)); - background: -moz-linear-gradient(0% 100% 90deg, #555555, #bbbbbb); - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; - -webkit-box-shadow: 4px 4px 10px #333333; - -moz-box-shadow: 4px 4px 10px #333333; - box-shadow: 4px 4px 10px #333333; -webkit-box-shadow: 4px 4px 10px #333333; -moz-box-shadow: 4px 4px 10px #333333; box-shadow: 4px 4px 10px #333333; border-top: 1px solid #d4d4d4; border-left: 1px solid #a2a2a2; border-right: 1px solid #6f6f6f; border-bottom: 1px solid #3c3c3c; } div.tooltip div.tooltip_body span { display: block; padding: 10px; font-size: 10pt; color: white; } div.tooltip div.tooltip_body div.tooltip_text { width: 200px; } div.tooltip div.tooltip_arrow { position: absolute; width: 0; height: 0; border: 6px solid transparent; } div.tooltip.BELOW div.tooltip_arrow { top: -12px; left: 97px; border-bottom: 6px solid #bbbbbb; } div.tooltip.ABOVE div.tooltip_arrow { position: static; margin-left: 97px; border-top: 6px solid #555555; } div.tooltip.LEFT div.tooltip_arrow { left: 203px; top: 10px; border-left: 6px solid #747474; } div.tooltip.LEFT div.tooltip_body div.tooltip_text { min-height: 45px; } div.tooltip.RIGHT div.tooltip_arrow { left: -12px; top: 10px; border-right: 6px solid #9c9c9c; } div.tooltip.RIGHT div.tooltip_body div.tooltip_text { min-height: 45px; } +.button.default { + display: inline-block; + height: 20px; + cursor: pointer; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffa76f), to(#ff6622)); + background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffa76f); + border-radius: 5; + -moz-border-radius: 5; + -webkit-border-radius: 5; + border: 1px solid #ff7f46; + padding-top: 4px; + padding-left: 15px; + padding-right: 15px; + padding-bottom: 2px; + color: white; + font-weight: lighter; + text-shadow: -1px -1px 1px #ff6622, 1px 1px 1px #ffa76f; + text-decoration: none; + font-weight: normal; +} +.button.default:hover { + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff8e46), to(#ff6622)); + background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff8e46); +} +.button { + display: inline-block; + height: 20px; + cursor: pointer; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bfbfbf), to(#999999)); + background: -moz-linear-gradient(0% 100% 90deg, #999999, #bfbfbf); + border-radius: 5; + -moz-border-radius: 5; + -webkit-border-radius: 5; + border: 1px solid #ababab; + padding-top: 4px; + padding-left: 15px; + padding-right: 15px; + padding-bottom: 2px; + color: white; + font-weight: lighter; + text-shadow: -1px -1px 1px #999999, 1px 1px 1px #bfbfbf; + text-decoration: none; +} +.button:hover { + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ababab), to(#999999)); + background: -moz-linear-gradient(0% 100% 90deg, #999999, #ababab); +} /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } div.pageHeaderAndBody { height: 100%; } -body > div.pageHeaderAndBody { - height: auto; - min-height: 100%; +div.pageHeaderAndBody div#pageBody { + min-width: 1013px; + padding-bottom: 90px; } -div.pageHeader { +div.pageHeaderAndBody div.pageHeader { background-color: #1f2148; min-width: 1013px; } -div.pageHeader div#miscLinks { +div.pageHeaderAndBody div.pageHeader div#miscLinks { float: right; } -div.pageHeader div#miscLinks ul { +div.pageHeaderAndBody div.pageHeader div#miscLinks ul { margin: 12px 0px 0px; padding: 15px; } -div.pageHeader div#miscLinks ul li { +div.pageHeaderAndBody div.pageHeader div#miscLinks ul li { display: inline; margin: 0px; padding: 0px; border: 0px; } -div.pageHeader div#miscLinks ul li a { +div.pageHeaderAndBody div.pageHeader div#miscLinks ul li a { color: #ffffff; margin: 0px; padding: 0px; border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; padding: 15px; border-left: 1px solid #3e428f; font-weight: normal; text-decoration: none; font-size: 12pt; min-width: 70px; } -div.pageHeader div#miscLinks ul li a:hover { +div.pageHeaderAndBody div.pageHeader div#miscLinks ul li a:hover { color: #b8bae1; } -div.pageHeader div#miscLinks ul li a#donateHeaderLink { +div.pageHeaderAndBody div.pageHeader div#miscLinks ul li a#donateHeaderLink { border-left: 0px; } -div.pageHeader div#logoFrame { +div.pageHeaderAndBody div.pageHeader div#logoFrame { padding: 16px 16px 60px 16px; min-height: 44px; } -div.pageHeader div#logoFrame a { +div.pageHeaderAndBody div.pageHeader div#logoFrame a { color: white; text-decoration: none; } -div.pageHeader div#logoFrame a canvas { - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; - margin: 0px; - padding: 0px; - border: 0px; +div.pageHeaderAndBody div.pageHeader div#logoFrame a canvas { margin: 0px; padding: 0px; border: 0px; width: 150px; height: 39px; } -div.pageHeader div#logoFrame a h5.clipperzPayoff { +div.pageHeaderAndBody div.pageHeader div#logoFrame a h5.clipperzPayoff { font-size: 13pt; font-weight: normal; white-space: nowrap; margin: 0px; padding-left: 4px; } -div.pageHeader div#featureTabs table { +div.pageHeaderAndBody div.pageHeader div#featureTabs table { width: 100%; padding: 6px; padding-left: 15px; padding-right: 15px; padding-bottom: 46px; } -div.pageHeader div#featureTabs table tr td { +div.pageHeaderAndBody div.pageHeader div#featureTabs table tr td { width: 25%; vertical-align: top; font-size: 11pt; color: white; } -div.pageHeader div#featureTabs table tr td img { +div.pageHeaderAndBody div.pageHeader div#featureTabs table tr td img { float: left; } -div.pageHeader div#featureTabs table tr td span { +div.pageHeaderAndBody div.pageHeader div#featureTabs table tr td span { display: block; padding: 5 10 5 85; } -div.pageHeader div#featureTabs canvas.featureIcon { +div.pageHeaderAndBody div.pageHeader div#featureTabs canvas.featureIcon { width: 76px; height: 76px; display: block; float: left; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffad79), to(#ff6622)); background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffad79); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffad79), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffad79); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffad79), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffad79); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffad79), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffad79); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffad79), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffad79); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffad79), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ffad79); - border-radius: 38px; - -moz-border-radius: 38px; - -webkit-border-radius: 38px; - border-radius: 38px; - -moz-border-radius: 38px; - -webkit-border-radius: 38px; - border-radius: 38px; - -moz-border-radius: 38px; - -webkit-border-radius: 38px; - border-radius: 38px; - -moz-border-radius: 38px; - -webkit-border-radius: 38px; - border-radius: 38px; - -moz-border-radius: 38px; - -webkit-border-radius: 38px; border-radius: 38px; -moz-border-radius: 38px; -webkit-border-radius: 38px; } -div.pageHeader div#news { +div.pageHeaderAndBody div.pageHeader div#news { top: -82px; left: 240px; width: 310px; height: 90px; position: absolute; background-color: #616475; -webkit-border-bottom-left-radius: 8px; -moz-border-radius-bottomleft: 8px; border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; -webkit-border-bottom-right-radius: 8px; -moz-border-radius-bottomright: 8px; border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; -webkit-box-shadow: 2px 2px 9px #333333; -moz-box-shadow: 2px 2px 9px #333333; box-shadow: 2px 2px 9px #333333; } -div.pageHeader div#news div#newsframe { +div.pageHeaderAndBody div.pageHeader div#news div#newsframe { margin-left: 10px; margin-right: 10px; height: 75px; overflow: hidden; } -div.pageHeader div#news div#newsframe iframe { +div.pageHeaderAndBody div.pageHeader div#news div#newsframe iframe { width: 290px; border: 0px; color: #616475; background-color: #616475; } -div.pageHeader div#news div.grip { +div.pageHeaderAndBody div.pageHeader div#news div.grip { width: 310px; - height: 12px; + height: 6px; margin-top: 2px; cursor: pointer; } -div.pageHeader div#news div.grip div.gripHandler { +div.pageHeaderAndBody div.pageHeader div#news div.grip div.gripHandler { margin-left: auto; margin-right: auto; margin-top: 8px; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; } -div.pageHeader div#news.open div.grip div.gripHandler { +div.pageHeaderAndBody div.pageHeader div#news.open div.grip div.gripHandler { border-bottom: 5px solid #e9e9ec; } -div.pageHeader div#news.hidden div.grip div.gripHandler { +div.pageHeaderAndBody div.pageHeader div#news.hidden div.grip div.gripHandler { border-top: 5px solid #e9e9ec; } div.pageFooter { margin-top: -90px; height: 90px; clear: both; } div.pageFooter div.footerWrapper { clear: both; padding-top: 10px; } div.pageFooter div.footerWrapper div.footerContent { background-color: #eaebe6; padding: 20px; font-size: 8pt; } div.pageFooter div.footerWrapper div.footerContent canvas.footerStarIcon { width: 40px; height: 40px; float: left; } div.pageFooter div.footerWrapper div.footerContent span.copyright { padding-left: 10px; color: #a0a0a0; } div.pageFooter div.footerWrapper div.footerContent a { padding-left: 50px; display: block; color: #888888; font-weight: bold; text-decoration: none; } -div.pageFooter div.footerWrapper div.footerContent span.applicationVersion { +div.pageFooter div.footerWrapper div.footerContent div.applicationVersion { padding: 8px; color: #888888; background-color: #d2d2d2; position: relative; top: -40px; float: right; } +div.pageFooter div.footerWrapper div.footerContent div.applicationVersion a { + padding-left: 0px; + display: inline; +} /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } div#loginBox { width: 273px; z-index: 19000; top: -30px; right: 30px; position: relative; float: right; } div#loginBox div.header { height: 25px; width: 273px; background-color: #ff9b5a; -webkit-border-top-left-radius: 20px; -moz-border-radius-topleft: 20px; border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-left-radius: 20px; - -moz-border-radius-topleft: 20px; - border-top-left-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; - -webkit-border-top-right-radius: 20px; - -moz-border-radius-topright: 20px; - border-top-right-radius: 20px; -webkit-border-top-right-radius: 20px; -moz-border-radius-topright: 20px; border-top-right-radius: 20px; } div#loginBox div.body { background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); } div#loginBox div.body h4 { color: #ffffff; font-size: 16pt; font-weight: normal; padding-left: 20px; margin: 0px; } div#loginBox div.body form.loginForm { padding: 5px 20px 0px; margin-bottom: 0px; } div#loginBox div.body form.loginForm label { color: #ffffff; font-size: 10pt; display: block; padding-top: 5px; } div#loginBox div.body form.loginForm label.checkbox { display: inline; } div#loginBox div.body form.loginForm input { width: 230px; font-size: 14pt; color: #333366; background-color: #ffffff; border: 1px solid #bb4924; padding: 2px 5px; height: 28px; } div#loginBox div.body form.loginForm input.checkbox { margin: 10px 8px 0px 0px; height: auto; width: auto; border: 0px; } div#loginBox div.body form.loginForm input.checkbox:hover { cursor: pointer; } div#loginBox div.body form.loginForm input.otp { width: 57px; display: inline; padding-left: 0px; padding-right: 0px; height: 28px; font: 8pt monospace; } div#loginBox div.body form.loginForm input.submit { margin: 0px 45px; width: 140px; color: #ffffff; background-color: #d44100; border: 1px solid #bb4924; padding: 6px; font-size: 12pt; height: auto; } div#loginBox div.body form.loginForm input.submit:hover { color: #ffffff; background-color: #7e2700; cursor: pointer; } div#loginBox div.body form.loginForm ul { list-style-type: none; padding: 0px; margin: 0px; } div#loginBox div.body form.loginForm ul li { display: block; } div#loginBox div.body form.loginForm div.translations { margin: 15px -20px; background-color: #c87b59; } div#loginBox div.body form.loginForm div.translations h4 { font-size: 9pt; padding: 6px 20px 0px; } div#loginBox div.body form.loginForm div.translations ul { margin: 0px; padding: 5px 10px 10px; margin-bottom: 15px; } div#loginBox div.body form.loginForm div.translations ul li { font-size: 8pt; color: #ddaa99; background-color: #994422; display: inline-block; padding: 2px 4px; margin: 1px; } div#loginBox div.body form.loginForm div.translations ul li.selected { color: #ffffff; background-color: #772211; } div#loginBox div.body form.loginForm div.translations ul li.selected:hover { cursor: default; } div#loginBox div.body form.loginForm div.translations ul li:hover { cursor: pointer; color: #ffffff; } div#loginBox div.footer { height: 37px; width: 273px; background-color: #ff6622; -webkit-border-bottom-left-radius: 20px; -moz-border-radius-bottomleft: 20px; border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-bottomleft: 20px; - border-bottom-left-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; - -webkit-border-bottom-right-radius: 20px; - -moz-border-radius-bottomright: 20px; - border-bottom-right-radius: 20px; -webkit-border-bottom-right-radius: 20px; -moz-border-radius-bottomright: 20px; border-bottom-right-radius: 20px; } body.ext-gecko div#loginBox form.loginForm div.translations ul li { display: -moz-inline-box; } div#featurePoints { min-width: 400px; padding-top: 15px; padding-bottom: 20px; padding-left: 20px; padding-right: 330px; } div#featurePoints table tbody tr td { width: 50%; vertical-align: top; } div#featurePoints div.block { padding: 10px; color: #86858e; } div#featurePoints div.block h3 { font-weight: normal; font-size: 12pt; margin: 0px; padding: 5px 0px; } div#featurePoints div.block ul { margin: 0px; margin-left: 20px; padding: 0px; list-style-position: outside; } div#featurePoints div.block ul li { font-size: 10pt; padding: 3px 0px; } div.activeFeatures { float: left; margin-left: 20px; height: 100px; } div.activeFeatures a { display: inline-block; padding-left: 46px; color: #ff5906; text-decoration: none; font-size: 10pt; } div.activeFeatures a span.payoff { display: block; font-size: 13pt; font-weight: lighter; color: #9b9689; margin: 0px; padding: 0px; } div.activeFeatures a:hover span.payoff { color: #666666; } div.activeFeatures div.keepTogether a { padding-left: 0px; } div.activeFeatures div.keepTogether div { display: inline-block; padding-right: 15px; } div.activeFeatures div.keepTogether canvas { width: 46px; height: 46px; vertical-align: bottom; } div.activeFeatures div.createAccountLink { display: inline-block; width: 282; height: 65px; + background-image: url(./images/old/home/register.png); margin-right: 20px; } div.activeFeatures div.createAccountLink a.createAccountLink { position: relative; top: -92px; left: 5px; } div.activeFeatures div.createAccountLink a.createAccountLink span.payoff { margin-top: 23px; margin-left: 40px; font-size: 17pt; color: #64626c; } div.activeFeatures div.createAccountLink a.createAccountLink span.link { padding-left: 40px; padding-right: 50px; padding-bottom: 10px; font-size: 12pt; } +div.activeFeatures div.createAccountLink:hover { + background-image: url(./images/old/home/register_selected.png); +} div.activeFeatures div.createAccountLink:hover a.createAccountLink span.payoff { color: #54535a; } div.activeFeatures div.createAccountLink:hover a.createAccountLink span.link { color: white; } div.activeFeatures div.createAccountLink canvas { width: 282px; height: 93px; } /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } div.userInfoBox { position: absolute; width: 160px; height: 120px; top: 100px; left: 15px; color: white; background-color: #ff9955; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); - background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); - border-radius: 10px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -webkit-box-shadow: 2px 2px 9px #333333; -moz-box-shadow: 2px 2px 9px #333333; box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; - -webkit-box-shadow: 2px 2px 9px #333333; - -moz-box-shadow: 2px 2px 9px #333333; - box-shadow: 2px 2px 9px #333333; } div.userInfoBox.locked { z-index: 19001; } div.userInfoBox.locked div.header a.lockButton { - background: url(../images/old/lock/locked.png) no-repeat -5px -2px; + background: url(./images/old/lock/locked.png) no-repeat -5px -2px; } div.userInfoBox.locked div.header a.lockButton:hover { - background: url(../images/old/lock/locked_hover.png) no-repeat -5px -2px; + background: url(./images/old/lock/locked_hover.png) no-repeat -5px -2px; } div.userInfoBox.locked div.body a { display: none; } div.userInfoBox div.header { height: 30px; } div.userInfoBox div.header h1 { font-size: 8pt; font-weight: normal; margin: 0px; padding-top: 12px; padding-left: 12px; } div.userInfoBox div.header a.lockButton { position: absolute; top: 8px; right: 12px; display: block; width: 15px; height: 20px; text-decoration: none; - background: url(../images/old/lock/unlocked.png) no-repeat -5px -2px; + background: url(./images/old/lock/unlocked.png) no-repeat -5px -2px; } div.userInfoBox div.header a.lockButton:hover { - background: url(../images/old/lock/unlocked_hover.png) no-repeat -5px -2px; + background: url(./images/old/lock/unlocked_hover.png) no-repeat -5px -2px; } div.userInfoBox div.body { padding: 0px 12px; } div.userInfoBox div.body h3 { font-size: 11pt; font-weight: bold; margin: 0px; } div.userInfoBox div.body ul { font-size: 8pt; padding: 0px; margin: 4px 0px; list-style-position: inside; - text-shadow: #000000 0 0 0; } div.userInfoBox div.body ul li span.number { font-weight: bold; padding-right: 3px; } div.userInfoBox div.body a { display: block; margin-top: 8px; border-top: 1px solid white; padding-top: 6px; font-size: 10pt; font-weight: bold; color: #d15a22; border-color: #fe9a5f; text-decoration: none; } div.userInfoBox div.body a:hover { color: #8c3b15; } div.sidePanels { float: left; margin-top: 106px; margin-left: 20px; width: 160px; } div.sidePanels div.tabSidePanel { margin-right: -10px; } div.sidePanels div.tabSidePanel ul { margin: 0px; padding-left: 0px; list-style-type: none; color: #f78b46; } div.sidePanels div.tabSidePanel ul.mainTabs { margin: 0px; } div.sidePanels div.tabSidePanel ul.mainTabs li a { display: block; line-height: 30px; height: 43px; padding-left: 40px; color: #ff6621; margin: 0px; font-weight: normal; font-size: 13pt; text-decoration: none; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter { display: none; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add { font-size: 14pt; font-weight: bold; position: relative; top: -34px; right: 16px; background: none; color: #c0531b; padding-left: 15px; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add:hover { color: white; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add span { font-size: 8pt; vertical-align: middle; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add h3 { display: inline; padding-left: 5px; } div.sidePanels div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter { display: block; position: absolute; left: 154px; margin-top: -43px; } div.sidePanels div.tabSidePanel ul.mainTabs li.cards a { - background: url(../images/old/main/tabs/cardsBackground.png) -19px -63px; + background: url(./images/old/main/tabs/cardsBackground.png) -19px -63px; } div.sidePanels div.tabSidePanel ul.mainTabs li.cards a:hover { - background: url(../images/old/main/tabs/cardsBackground.png) -19px -110px; + background: url(./images/old/main/tabs/cardsBackground.png) -19px -110px; } div.sidePanels div.tabSidePanel ul.mainTabs li.cards.selected a { margin-left: -10px; padding-left: 50px; color: white; - background: url(../images/old/main/tabs/cardsBackground.png) -9px -14px; -} -div.sidePanels div.tabSidePanel ul.mainTabs li.cards.selected a:hover { - background: url(../images/old/main/tabs/cardsBackground.png) -9px -14px; -} -div.sidePanels div.tabSidePanel ul.mainTabs li.directLogins a { - background: url(../images/old/main/tabs/directLoginBackground.png) -19px -63px; -} -div.sidePanels div.tabSidePanel ul.mainTabs li.directLogins a:hover { - background: url(../images/old/main/tabs/directLoginBackground.png) -19px -110px; + background: url(./images/old/main/tabs/cardsBackground.png) -9px -14px; } div.sidePanels div.tabSidePanel ul.mainTabs li.directLogins.selected a { margin-left: -10px; padding-left: 50px; color: white; - background: url(../images/old/main/tabs/directLoginBackground.png) -9px -14px; } div.sidePanels div.tabSidePanel ul.mainTabs li.directLogins.selected a:hover { color: white; - background: url(../images/old/main/tabs/directLoginBackground.png) -9px -14px; } div.sidePanels div.tabSidePanel ul.otherTabs { margin: 10px 0px; } div.sidePanels div.tabSidePanel ul.otherTabs li { margin-top: -4px; } div.sidePanels div.tabSidePanel ul.otherTabs li div.selectionHighlighter { display: none; } div.sidePanels div.tabSidePanel ul.otherTabs li a { display: block; line-height: 36px; height: 43px; padding-left: 40px; color: #ff6621; text-decoration: none; } div.sidePanels div.tabSidePanel ul.otherTabs li a:hover { - background: url(../images/old/main/tabs/itemsBackground.png) -10px -49px; + background: url(./images/old/main/tabs/itemsBackground.png) -10px -49px; } div.sidePanels div.tabSidePanel ul.otherTabs li.selected a { margin-left: -10px; padding-left: 50px; - background: url(../images/old/main/tabs/itemsBackground.png) 1px -96px; + background: url(./images/old/main/tabs/itemsBackground.png) 1px -96px; color: white; } div.sidePanels div.tabSidePanel ul.otherTabs li.selected div.selectionHighlighter { display: block; position: absolute; left: 154px; margin-top: -42px; } div.tagSidePanel { /* margin-right: -8px; div.tagSidePanel div.header { height: 50px; - background-image: url(../images/old/main/tabs/tagsBackground.png); + background-image: url(./images/old/main/tabs/tagsBackground.png); } div.tagSidePanel div.header h1 { padding-left: 52px; padding-top: 14px; font-size: 14pt; font-weight: normal; color: #888888; } div.tagSidePanel div.body { - background: url(../images/old/main/tabs/tagsBackground.png) -255px; + background: url(./images/old/main/tabs/tagsBackground.png) -255px; } div.tagSidePanel div.footer { height: 10px; - background: url(../images/old/main/tabs/tagsBackground.png) -510px -40px; + background: url(./images/old/main/tabs/tagsBackground.png) -510px -40px; } div.tagSidePanel ul.tags { margin: 0px; list-style-type: none; padding: 0px; } div.tagSidePanel ul.tags li a { display: block; font-size: 9pt; text-decoration: none; color: #ff6621; padding: 0px 4px 0px 15px; line-height: 20px; } div.tagSidePanel ul.tags li a:hover { background-color: #dddddd; } div.tagSidePanel ul.tags li span.tagCardinality { float: right; font-size: 8pt; color: #999999; margin-right: 15px; margin-top: -17px; } div.tagSidePanel ul.tags li.selected a { background-color: #d4d5cf; } div.tagSidePanel ul.tags li.selected a:hover { background-color: #d4d5cf; } div.tagSidePanel ul.tags li.selected a { font-weight: bold; } */ } div.groupSidePanel { /* margin-right: -10px; div.groupSidePanel div.header { height: 50px; - background-image: url(../images/old/main/tabs/groupsBackground.png); + background-image: url(./images/old/main/tabs/groupsBackground.png); } div.groupSidePanel div.header h1 { padding-left: 52px; padding-top: 14px; font-size: 14pt; font-weight: normal; color: white; } div.groupSidePanel div.header a { float: right; margin-top: -30px; margin-right: 20px; text-decoration: none; color: #666666; font-size: 9pt; line-height: 18px; } div.groupSidePanel div.header a:hover { color: #444444; } div.groupSidePanel div.body { - background: url(../images/old/main/tabs/groupsBackground.png) -255px; + background: url(./images/old/main/tabs/groupsBackground.png) -255px; } div.groupSidePanel div.footer { height: 10px; - background: url(../images/old/main/tabs/groupsBackground.png) -510px -39px; + background: url(./images/old/main/tabs/groupsBackground.png) -510px -39px; } div.groupSidePanel ul.groups { margin: 0px; list-style-type: none; padding: 0px; } div.groupSidePanel ul.groups li a { display: block; font-size: 9pt; text-decoration: none; color: white; padding: 0px 4px 0px 15px; line-height: 20px; } div.groupSidePanel ul.groups li a:hover { background-color: #aaaaaa; } div.groupSidePanel ul.groups li span.groupCardinality { float: right; font-size: 8pt; color: #dddddd; margin-right: 15px; margin-top: -17px; } div.groupSidePanel ul.groups li.selected a { background-color: #bbbbbb; } div.groupSidePanel ul.groups li.selected a:hover { background-color: #bbbbbb; } div.groupSidePanel ul.groups li.selected a { font-weight: bold; } */ } +div.subPanelTabs ul { + margin: 0px; + margin-right: 7px; + padding: 0px; +} +div.subPanelTabs ul li { + display: inline-block; + vertical-align: middle; + height: 50px; + border-right: 1px solid #eef0e3; + border-bottom: 1px solid #d5d5bc; +} +div.subPanelTabs ul li.first { + -webkit-border-top-left-radius: 20px; + -moz-border-radius-topleft: 20px; + border-top-left-radius: 20px; +} +div.subPanelTabs ul li.selected { + background-color: #eef0e3; + border-bottom: 1px solid #eef0e3; + border-right: 1px solid #d5d5bc; +} +div.subPanelTabs ul li.selected:hover { + border-right: 1px solid #d5d5bc; +} +div.subPanelTabs ul li.selected a { + color: #444440; +} +div.subPanelTabs ul li:hover { + border-right: 1px solid #d5d5bc; + background-color: #eef0e3; +} +div.subPanelTabs ul li a { + color: #787872; + text-decoration: none; + display: block; + text-align: center; + padding-top: 15px; + padding-left: 20px; + padding-right: 20px; + font-size: 13pt; +} +div.subPanelContent { + padding-top: 20px; + padding-left: 30px; + padding-right: 30px; + min-height: 280px; + color: #787872; + margin: 0px 6px 0 9px; +} +div.subPanelContent h3 { + margin: 0px; + border: 0px; + padding: 0px; +} +div.subPanelContent ul { + margin: 0px; + padding: 0px; + list-style-type: none; +} +div.subPanelContent ul li { + display: none; +} +div.subPanelContent ul li.selected { + display: block; +} +.downloadOfflineCopy { + display: inline-block; + height: 20px; + cursor: pointer; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#59bc4c), to(#448833)); + background: -moz-linear-gradient(0% 100% 90deg, #448833, #59bc4c); + border-radius: 5; + -moz-border-radius: 5; + -webkit-border-radius: 5; + border: 1px solid #51a23d; + padding-top: 4px; + padding-left: 15px; + padding-right: 15px; + padding-bottom: 2px; + color: white; + font-weight: lighter; + text-shadow: -1px -1px 1px #448833, 1px 1px 1px #59bc4c; + text-decoration: none; +} +.downloadOfflineCopy:hover { + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#49a23d), to(#448833)); + background: -moz-linear-gradient(0% 100% 90deg, #448833, #49a23d); +} +div.SimpleMessagePanel { + position: relative; + left: -225px; + top: -70px; + width: 450px; + height: 140px; +} +div.SimpleMessagePanel div.body { + padding: 20px; + padding-bottom: 15px; + background-color: #f1f1ef; + -webkit-box-shadow: 2px 2px 9px #333333; + -moz-box-shadow: 2px 2px 9px #333333; + box-shadow: 2px 2px 9px #333333; + border-radius: 10; + -moz-border-radius: 10; + -webkit-border-radius: 10; +} +div.SimpleMessagePanel div.body h3 { + font-size: 14pt; + font-weight: normal; + margin: 0px; + padding-top: 4px; + color: #787872; +} +div.SimpleMessagePanel div.body div.img { + width: 50px; + height: 50px; + float: left; + margin-right: 15px; + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9b5a), to(#ff6622)); + background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9b5a); + border-radius: 25px; + -moz-border-radius: 25px; + -webkit-border-radius: 25px; +} +div.SimpleMessagePanel div.body div.img canvas { + width: 50px; + height: 50px; +} +div.SimpleMessagePanel div.body p { + margin: 0; + font-size: 10pt; + font-weight: normal; + color: #787872; + padding-top: 10px; + padding-bottom: 5px; + line-height: 1.3; +} +div.SimpleMessagePanel div.body div.buttonArea { + height: 40px; + clear: both; +} +div.SimpleMessagePanel div.body div.buttonArea > div { + float: right; + margin-left: 15px; + margin-top: 10px; +} +div.SimpleMessagePanel div.passphrase { + padding-left: 65px; +} +div.SimpleMessagePanel div.passphrase input { + width: 250px; + font-size: 14pt; + border: 1px solid #bb4924; + color: #333366; + background-color: white; + padding: 2px 5px; + height: 28px; +} +div.SimpleMessagePanel div.progressBarWrapper { + margin-left: 80px; +} +/* @end */ +/* @group Javascript Alert */ +div#javaScriptAlert div.mask { + position: fixed; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + background-color: black; + z-index: 1001; + -moz-opacity: 0.7; + opacity: .70; + filter: alpha(opacity=70); +} +div#javaScriptAlert div.header { + height: 34px; + width: 468; + background-image: url(./images/old/alert/header.png); +} +div#javaScriptAlert div.body { + background-image: url(./images/old/alert/body.png); + padding: 0px 20px 10px 20px; +} +/* +div#javaScriptAlert div.body div.alert { + padding-left: 100px; + background: url(./images/old/alert/alert.png) no-repeat; +} +*/ +/*div#javaScriptAlert div.body img.alert {*/ +div#javaScriptAlert div.body div.alertLogo { + float: left; + background-image: url(./images/old/alert/alert.png); + width: 88px; + height: 88px; +} +div#javaScriptAlert div.body div.alert { + padding-left: 100px; +} +div#javaScriptAlert div.footer { + height: 34px; + width: 468; + background-image: url(./images/old/alert/footer.png); +} +div#javaScriptAlert div.message { + position: relative; + top: -150px; + z-index: 1002; + /* + left: 100px; + right: 100px; +*/ + + margin-left: auto; + margin-right: auto; + max-width: 468px; +} +div#javaScriptAlert div.message h1 { + font-size: 16pt; + margin: 0px; + color: #ff5930; +} +div#javaScriptAlert div.message p { + margin-top: 0px; + color: #999999; +} +div#javaScriptAlert div.message h3 { + font-size: 12pt; + margin-bottom: 0px; + color: #ff5930; +} +div#javaScriptAlert div.message h5 { + margin: 0px; + color: #999999; +} +/* @end */ +/* @group Components + */ +/* @group LoginProgress */ +div.LoginProgress { + position: relative; + left: -190px; + top: -100px; + width: 380px; + height: 200px; + /* background: url(./images/old/loginProgress/background.png); */ + + background-color: #d7d7c0; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + -webkit-box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.6); + -moz-box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.6); + box-shadow: 5px 5px 7px rgba(0, 0, 0, 0.6); +} +div.LoginProgress div.header { + height: 40px; +} +div.LoginProgress div.header h3 { + font-size: 12pt; + font-weight: normal; + margin: 0px; + color: #777777; + padding-top: 13px; + padding-left: 18px; +} +div.LoginProgress div.body { + height: 120px; + overflow: auto; + padding-left: 20px; + padding-right: 20px; + background-color: #f1f1e9; + /* + margin-left: 19px; + margin-right: 18px; +*/ + +} +div.LoginProgress div.body div.img { + margin: 10px; + width: 50px; + height: 50px; + float: left; +} +div.LoginProgress div.body div.img.ALERT { + /* background-image: url(./images/old/simpleMessageBox/Alert.png); */ + + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9955), to(#ff6622), color-stop(1, #333333)); + background: -moz-linear-gradient(0% 100% 90deg, #ff6622, #ff9955); + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + border-radius: 25px; +} +div.LoginProgress div.body div.img.ALERT canvas { + width: 50px; + height: 50px; + /* background-image: url(./images/old/simpleMessageBox/excalmationPoint.png); */ + +} +div.LoginProgress div.body div.loadingBar { + position: relative; + top: 51px; + left: 60px; +} +div.LoginProgress div.body div.errorBox p { + color: #787872; + padding-top: 20px; + padding-left: 80px; +} +div.LoginProgress div.footer { + margin-left: 19px; + margin-right: 18px; +} +/* +div.LoginProgress div.footer a { + text-decoration: none; + text-align: center; + color: #787872; + display: block; + font-weight: bold; + font-size: 11pt; + width: 100px; + margin-top: 11px; + margin-left: auto; + margin-right: auto; +} +*/ +div.LoginProgress div.buttonArea { + padding-top: 6px; + text-align: center; +} +div.LoginProgress div.button { + display: inline-block; +} +div.LoginProgress div.footer a:hover { + color: #515247; +} +/* @end */ +/* @group SimpleMessagePanel */ +/* -> SimpleMessagePanel.less +div.SimpleMessagePanel { + position: relative; + left: -225px; + top: -70px; + width: 450px; + height: 140px; +//background: url(./images/old/loginProgress/background.png); + background-color: #f1f1ef; + .border-radius(10); +} +//div.SimpleMessagePanel div.header { +// height: 17px; +// background: url(./images/old/simpleMessageBox/background_header.png) no-repeat; +} +div.SimpleMessagePanel div.body { +/ * + height: 120px; + overflow: auto; + margin-left: 19px; + margin-right: 18px; +* / + +// background: url(./images/old/simpleMessageBox/background_body.png) repeat-y; +// padding-left: 25px; +// padding-right: 25px; +// padding-top: 10px; + padding: 20px; + .box-shadow (2px, 2px, 9px, @Global_shadow-color); +} +div.SimpleMessagePanel div.body h3 { + font-size: 14pt; + font-weight: normal; + margin: 0px; + padding-top: 4px; + color: #787872; +} +div.SimpleMessagePanel div.body div.img { + width: 60px; + height: 60px; + float: left; + margin-right: 10px; + + .graduated-background (#ff6622, #ffad79); + .border-radius(30); +} +div.SimpleMessagePanel div.body div.img canvas { + width: 60px; + height: 60px; +} +div.SimpleMessagePanel div.body p { + margin: 0; + font-size: 10pt; + font-weight: normal; + color: #787872; + padding-top: 10px; + padding-bottom: 5px; + line-height: 1.3; +} +div.SimpleMessagePanel div.body div.img.ALERT { +// background: url(./images/old/simpleMessageBox/Alert.png) no-repeat; +} +div.SimpleMessagePanel div.body div.img.INFO { +// background: url(./images/old/simpleMessageBox/Info.png) no-repeat; +} +div.SimpleMessagePanel div.body div.buttonArea { + height: 40px; + clear: both; +} +div.SimpleMessagePanel div.body div.buttonArea > div { + float: right; + margin-left: 15px; + margin-top: 10px; +} +div.SimpleMessagePanel div.footer { + height: 25px; +// background: url(./images/old/simpleMessageBox/background_footer.png) no-repeat; +} +div.SimpleMessagePanel div.passphrase { + padding-left: 65px; +} +div.SimpleMessagePanel div.passphrase input { + width: 250px; + font-size: 14pt; + border: 1px solid #bb4924; + color: #333366; + background-color: white; + padding: 2px 5px; + height: 28px; +} +div.SimpleMessagePanel div.progressBarWrapper { + margin-left: 80px; +} +*/ +/* @end */ +/* @group Button */ +/* -> Button.less +div.button_wrapper { + height: 32px; + background: url(./images/old/button/default_left.png) no-repeat; + cursor: pointer; +} +div.button_wrapper.hover { + background: url(./images/old/button/hover_left.png) no-repeat; +} +div.button_wrapper.clicked { + background: url(./images/old/button/clicked_left.png) no-repeat; +} +div.button_bodyWrapper { + height: 32px; + margin-left: 6px; + padding-right: 6px; + background: url(./images/old/button/default_main.png) repeat-x right 0; +} +div.button_wrapper.hover div.button_bodyWrapper { + background: url(./images/old/button/hover_main.png) repeat-x right 0; +} +div.button_wrapper.clicked div.button_bodyWrapper { + background: url(./images/old/button/clicked_main.png) repeat-x right 0; +} +div.button_body { + text-align: center; + min-width: 60px; + padding: 0px 7px; + padding-top: 8px; +} +div.button_body span { + font-size: 11pt; + color: white; +} +div.button_wrapper.default div.button_body span { + font-weight: bold; +} +/ * +div.button_footer { + margin: 0px; + height: 31px; + width: 6px; + background: green url(./images/old/button/default_right.png) no-repeat; +} +* / +*/ +/* @end */ +/* @group Password enthropy */ +input.entropyLevelIndicator { + background: url(./images/old/passwordField/background.png) no-repeat 0 26px; +} +div.passwordEntropyWrapper { + padding: 0px; + border: 1px solid #bb4924; + border-top: 0px; + margin-bottom: 4px; + background-color: white; + margin-right: 3px; + margin-top: -2; +} +div.passwordEntropy { + height: 4px; + font-size: 1pt; + background: url(./images/old/entropyBackground.gif) repeat-x 0 0; + line-height: 3px; +} +div.messageBox { + position: absolute; + width: 409px; + height: 29px; + top: 23px; + left: 204px; + background: url(./images/old/main/messageBoxBackground.png); +} +div.messageBox h3 { + display: inline-block; + color: #342f6b; + font-weight: bold; + margin: 7px 2px 0px 12px; + font-size: 10pt; +} +body.ext-gecko div.messageBox h3 { + display: -moz-inline-box; +} +div.messageBox h1 { + color: #342f6b; + display: inline; + font-weight: normal; + margin: 0px 1px; + font-size: 9pt; +} +div.messageBox a { + display: block; + width: 20px; + height: 20px; + float: right; + position: absolute; + right: 5px; + top: 4px; + background-image: url(./images/old/main/messageBoxCloseButton.png); +} +div.messageBox a:hover { + background-image: url(./images/old/main/messageBoxCloseButtonActive.png); +} +/* @end */ +/* @group Side panels */ +/* @end */ +/* @end */ +/* @group MainPanels */ +div.mainPanels { + float: left; + width: 833px; + margin-top: -38px; + /* + position: relative; + width: 100%; + min-height: 600px; + top: -40px; + left: 250px; +*/ + +} +div.mainFooter { + clear: both; +} +/* @end */ +/* @group Grids */ +/* @group grid Component */ +/* @group delete */ +/*div.body div.rows table.rows tbody tr td.delete */ +div.delete, +div.new { + padding-left: 5px; + height: 19px; +} +div.new span, +div.delete span { + margin: 0px; + padding: 0px; + border: 0px; + display: inline-block; + height: 19px; + padding-right: 6px; +} +div.new span a, +div.delete span a { + white-space: nowrap; +} +div.delete:hover { + background: url(./images/old/delete_background_left.png) no-repeat 0; +} +div.delete:hover span { + background: url(./images/old/delete_background.png) no-repeat right 0; +} +div.new:hover { + background: url(./images/old/new_background_left.png) no-repeat 0; +} +div.new:hover span { + background: url(./images/old/new_background.png) no-repeat right 0; +} +/* +tr.selected div.delete { + background: url(./images/old/delete_background_left.png) no-repeat 0; +} +tr.selected div.delete span { + background: url(./images/old/delete_background.png) no-repeat right 0; +} +*/ +div.body div.rows table.rows tbody tr td.delete div.delete span a { + visibility: hidden; + font-size: 8pt; + vertical-align: -13px; + color: black; +} +div.body div.rows table.rows tbody tr.selected td.delete div.delete span a { + visibility: visible; +} +div.body div.rows table.rows tbody tr:hover td.delete div.delete span a { + visibility: visible; +} +div.body div.rows table.rows tbody tr:hover td.delete div.delete:hover span a { + color: white; +} +/* +div.body div.rows table.rows tbody tr.selected td.delete div.delete span a { + color: white; +} +*/ +/* @end */ +/* @group header */ +div.gridComponent table.rows thead tr th { + text-align: left; + height: 30px; + vertical-align: bottom; +} +div.gridComponent table.rows thead tr th.sortable span { + cursor: pointer; +} +div.gridComponent table.rows thead tr th.sortable span a { + margin-left: 5px; + padding-left: 10px; +} +div.gridComponent table.rows thead tr th.directLoginTH { + width: 420px; +} +div.gridComponent table.rows thead tr th.latestUpdateTH { + width: 100px; +} +div.gridComponent table.rows thead tr th.commandsTH { + width: 150px; +} +div.gridComponent table.rows thead a { + text-decoration: none; +} +div.gridComponent table.rows thead span { + font-weight: normal; + font-size: 9pt; + line-height: 20px; +} +div.gridComponent div.header div.headerSlot { + float: right; +} +/* @end */ +div.mainPanels div.gridComponent div.body table.rows td.favicon { + padding-left: 25px; +} +div.mainPanels div.gridComponent div.body table.rows td.favicon img { + width: 16px; + height: 16px; + border: 0px; +} +/* @end */ +/* @group Card Grid */ +/* @group DirectLogin links */ +div.gridComponent th.directLoginTH span { + margin-left: 7px; +} +td.card_directLogins div { + display: inline-table; +} +td.card_directLogins span { + display: inline-block; +} +/* +td.card_directLogins a { + display: inline-table; + height: 19px; + + padding-right: 7px; +} + +td.card_directLogins a:hover { + background: url(./images/old/directLink_background.png) right 0; +} +*/ +div.card_directLogin { + display: inline-block; + height: 19px; + padding-left: 7px; +} +div.card_directLogin_ellipses span { + padding-bottom: 2px; +} +div.card_directLogin div.card_directLogin_body { + display: inline-block; + height: 19px; + padding-right: 8px; + background-position: left; +} +div.card_directLogin div.card_directLogin_body a { + vertical-align: -14px; +} +/*div.card_directLogin:hover {*/ +div.card_directLogin:hover { + background: url(./images/old/directLink_background_left.png) no-repeat 0 0; +} +/*div.card_directLogin:hover div {*/ +div.card_directLogin:hover div.card_directLogin_body { + background: url(./images/old/directLink_background.png) right 0; +} +/* @group DirectLogin Popup */ +div.DirectLoginListPopup { + position: absolute; + width: 184px; +} +div.DirectLoginListPopup div.DirectLoginListPopup_body { + background-image: url(./images/old/directLogins_background.png); + padding-top: 8px; +} +div.DirectLoginListPopup div.DirectLoginListPopup_footer { + height: 8px; + background-image: url(./images/old/directLogins_background_bottom.png); +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul { + margin: 0px; + padding-left: 13px; + list-style: none; +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul li { + padding-top: 4px; + height: 20px; + padding-right: 10px; + white-space: nowrap; +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul li div { + padding-right: 10px; + overflow: hidden; +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul li img.favicon { + padding-left: 9px; + padding-right: 5px; +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul li a { + text-decoration: none; + color: white; + font-weight: normal; + font-size: 10pt; + vertical-align: 3px; + white-space: nowrap; + padding-right: 8px; +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul li:hover { + /* background-color: #a5a696; */ + + /* background-color: #7b7d70; */ + + background-color: rgba(123, 125, 112, 0.5); +} +div.DirectLoginListPopup div.DirectLoginListPopup_body ul li:hover a { + background: url(./images/old/directLink_no_background.png) right; +} +/* @end */ +/* @end */ +div.mainPanels div.gridComponent div.header { + /* + height: 90px; + background: url(./images/old/main/blocks/cardGridBackground.png) no-repeat; +*/ + + background: url(./images/old/main/blocks/cardGridBackground.png) no-repeat; + padding-left: 40px; + padding-right: 40px; + padding-top: 20px; + padding-bottom: 10px; +} +div.mainPanels div.gridComponent div.header form.search { + height: 32px; + margin: 0px; +} +div.mainPanels div.gridComponent div.header form.search div.clearSearchButton { + position: absolute; + margin-left: 192px; + width: 22px; + height: 22px; + margin-top: 6px; + background: url(./images/old/filter/clearFilter_notSelected.png) no-repeat; +} +div.mainPanels div.gridComponent div.header form.search div.clearSearchButton:hover { + background: url(./images/old/filter/clearFilter_selected.png) no-repeat; + cursor: pointer; +} +div.mainPanels div.gridComponent div.header form.search div.search { + display: block; + float: left; + width: 217px; +} +div.mainPanels div.gridComponent div.header form.search input.search { + border: 1px solid #76786a; + color: #666666; + font-size: 12pt; + width: 100%; + padding: 4px; + padding-left: 24px; + padding-right: 26px; + background: #e8ecde url(./images/old/main/grid/search.png) no-repeat 2px 4px; +} +div.mainPanels div.gridComponent div.header form.search input.search.disabled { + disabled: disabled; +} +div.mainPanels div.gridComponent div.header form.search input.search.running { + background: #e8ecde url(./images/old/main/grid/running_search.gif) no-repeat 4px 5px; +} +div.mainPanels div.gridComponent div.body { + clear: both; + background: url(./images/old/main/blocks/cardGridBackground.png) repeat-y -836px; +} +div.mainPanels div.gridComponent div.footer { + background: url(./images/old/main/blocks/cardGridBackground.png) 834px -28px; + height: 35px; +} +div.mainPanels div.gridComponent div.body h1 { + margin: 0px; +} +div.mainPanels div.gridComponent div.body div.rows { + margin-left: 9px; + margin-right: 6px; + min-height: 582px; + background: url(./images/old/main/blocks/cardGridStripes.png) 0 7px; +} +div.mainPanels div.gridComponent.noRows div.body table.rows thead, +div.mainPanels div.gridComponent.empty div.body table.rows thead { + visibility: hidden; +} +div.mainPanels div.gridComponent.empty div.body div.rows { + background: #eaebe6 url(./images/old/lock/background_star.png) no-repeat center center; +} +div.mainPanels div.gridComponent.noRows div.body div.rows { + background: #eaebe6; +} +div.mainPanels div.gridComponent div.body table.rows { + display: block; + width: 100%; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.odd.selected { + background-color: #a5a696; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.even.selected { + background-color: #a5a696; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.selected td a { + color: #f3f4eb; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.odd { + background-color: #d4d5cf; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.even { + background-color: #eaebe6; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.odd:hover { + background-color: #a5a696; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.even:hover { + background-color: #a5a696; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr td { + height: 23px; + max-height: 23px; + /* + white-space: nowrap; + overflow: hidden; +*/ + +} +div.mainPanels div.gridComponent div.body table.rows tbody tr td span { + color: #828479; + font-size: 10pt; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr td a { + color: #828479; + font-size: 10pt; + text-decoration: none; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr:hover td span { + color: #f3f4eb; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr.selected td span { + color: #f3f4eb; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr:hover td a { + color: #f3f4eb; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr td.title a { + font-weight: bold; +} +div.mainPanels div.gridComponent div.body table.rows tbody tr td img.favicon { + float: right; + padding-right: 6px; +} +/* @group header */ +div.gridComponent table.rows thead img { + padding-left: 10px; + vertical-align: middle; +} +div.gridComponent table.rows thead tr th { + background-color: #eaebe6; + border-bottom: 1px solid #b3b4af; +} +div.gridComponent table.rows thead span { + color: #8c8f7e; +} +div.gridComponent table.rows thead tr th.unsorted span.sortable a { + background-image: url(./images/old/main/grid/unsorted.png); +} +div.gridComponent table.rows thead tr th.descending span.sortable a { + background-image: url(./images/old/main/grid/descending.png); +} +div.gridComponent table.rows thead tr th.ascending span.sortable a { + background-image: url(./images/old/main/grid/ascending.png); +} +div.gridComponent table.rows thead tr th.faviconTH { + width: 53px; +} +div.gridComponent table.rows thead tr th.titleTH { + width: 200px; + max-width: 200px; +} +div.gridComponent table.rows thead tr th.deleteTH { + width: 50px; +} +/* @end */ +/* @end */ +/* @group Direct login Grid */ +/* +div.mainPanels div.directLoginGrid div.header { +/* + height: 90px; + background: url(./images/old/main/blocks/cardGridBackground.png) no-repeat; +* / +} + +div.mainPanels div.directLoginGrid div.header form.search { + background: url(./images/old/main/blocks/directLoginGridBackground.png) no-repeat; + padding-left: 40px; + padding-top: 20px; + padding-bottom: 10px; + margin: 0px; +} + +div.mainPanels div.directLoginGrid div.header form.search input.search { + border: 1px solid #76786a; + color: #666666; + font-size: 12pt; + padding: 4px; + background-color: #e8ecde; +} + +div.mainPanels div.directLoginGrid div.header form.search input.searchButton { + background-color: #858877; + border: 0px; + color: white; + font-size: 10pt; +} + +div.mainPanels div.directLoginGrid div.body { + background: url(./images/old/main/blocks/directLoginGridBackground.png) repeat-y -836px; +} + +div.mainPanels div.directLoginGrid div.footer { + background: url(./images/old/main/blocks/directLoginGridBackground.png) 834px -28px; + height: 35px; +} + +div.mainPanels div.directLoginGrid div.body h1 { + margin: 0px; +} + +div.mainPanels div.directLoginGrid div.body div.rows { + margin-left: 9px; + margin-right: 6px; + min-height: 582px; + background: url(./images/old/main/blocks/directLoginGridStripes.png) 0 7px; +} + +div.mainPanels div.directLoginGrid div.body table.rows { + display: block; + width: 100%; +} + +div.mainPanels div.directLoginGrid div.body table.rows img { + border: 0px; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr.even { + background-color: #787666; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr.odd { + background-color: #646351; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr.odd:hover { + background-color: #d1d4c6; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr.even:hover { + background-color: #d1d4c6; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr td { + height: 23px; + color: #e1e0d6; + font-size: 10pt; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr:hover td { + color: #777867; +} + +div.mainPanels div.directLoginGrid div.body table.rows tbody tr td.title { + font-weight: bold; +} + +div.directLoginGrid div.body table.rows tbody tr a { + color: #e1e0d6; + text-decoration: none; +} + +div.directLoginGrid div.body table.rows tbody tr:hover a { + color: #777867; +} +*/ +/* @group DirectLogin links */ +/* +td.card_directLogins div { + display: inline-table; +} + +td.card_directLogins span { + display: inline-table; +} +*/ +div.directLogin_directLogin { + display: inline-block; + height: 19px; + padding-left: 7px; +} +div.directLogin_directLogin div.directLogin_directLogin_body { + display: inline-block; + height: 19px; + padding-right: 8px; + background-position: left; +} +div.directLogin_directLogin div.directLogin_directLogin_body a { + vertical-align: -14px; +} +div.directLogin_directLogin:hover { + background: url(./images/old/directLink_background_left.png) no-repeat 0 0; +} +div.directLogin_directLogin:hover div.directLogin_directLogin_body { + background: url(./images/old/directLink_background.png) right 0; +} +table.rows tbody tr td div.directLogin_directLogin:hover div.directLogin_directLogin_body a { + color: #f3f4eb; +} +/* @end */ +/* @group header */ +div.directLoginGrid table.rows thead span { + color: #e1e0d6; +} +div.directLoginGrid table.rows thead tr th { + background-color: #787762; + border-bottom: 1px solid #999883; +} +div.directLoginGrid table.rows thead tr th.faviconTH { + min-width: 53px; + width: 53px; +} +div.directLoginGrid table.rows thead tr th.titleTH { + min-width: 250px; + width: 250px; +} +div.directLoginGrid table.rows thead tr th.titleTH span { + margin-left: 7px; +} +div.directLoginGrid table.rows thead tr th.strengthTH { + width: 100px; +} +div.directLoginGrid table.rows thead tr th.cardTitleTH { + width: 400px; +} +div.directLoginGrid table.rows thead tr th.bookmarkableLinkTH { + width: 64px; +} +div.directLoginGrid table.rows thead tr th.deleteTH { + width: 50px; +} +div.directLoginGrid table.rows thead tr th.latestAccessTH { + width: 100px; +} +div.directLoginGrid table.rows thead tr th.commandsTH { + width: 100px; +} +/* +div.directLoginGrid table.rows thead a { + font-weight: normal; + text-decoration: none; + color: #e9e9df; + font-size: 9pt; + line-height: 20px; +} +*/ +div.directLoginGrid table.rows thead img { + padding-left: 10px; + vertical-align: middle; +} +div.directLoginGrid table.rows thead tr th.unsorted span.sortable a { + background: url(./images/old/main/grid/directLogins/unsorted.png) no-repeat; +} +div.directLoginGrid table.rows thead tr th.descending span.sortable a { + background: url(./images/old/main/grid/directLogins/descending.png) no-repeat; +} +div.directLoginGrid table.rows thead tr th.ascending span.sortable a { + background: url(./images/old/main/grid/directLogins/ascending.png) no-repeat; +} +/* @end */ +/* @end */ +/* @end */ +/* @end */ +/* @group other Panels */ +/* @group common styles */ +/* +div.subPanelTabs ul { + margin: 0px; + margin-right: 7px; + padding: 0px; +} +div.subPanelTabs ul li { + display: inline-block; + vertical-align: middle; + /* width: 130px; * / + + height: 50px; + /* border-right: 1px solid #a5a79c; + border-bottom: 1px solid #a5a79c;* / + + border-right: 1px solid #eef0e3; + border-bottom: 1px solid #d5d5bc; +} +div.subPanelTabs ul li.first:hover { + /* background: url(./images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -9px -5px; * / + +} +div.subPanelTabs ul li:hover { + /* background: url(./images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -45px -5px; * / + + border-right: 1px solid #d5d5bc; + background-color: #eef0e3; +} +div.subPanelTabs ul li a { + color: #787872; + text-decoration: none; + display: block; + text-align: center; + padding-top: 15px; + padding-left: 20px; + padding-right: 20px; + font-size: 13pt; +} +div.subPanelTabs ul li.first { + /* background: url(./images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -9px -5px; * / + + -webkit-border-top-left-radius: 20px; + -moz-border-radius-topleft: 20px; + border-top-left-radius: 20px; +} +div.subPanelTabs ul li.selected { + /* background: url(./images/old/main/blocks/otherPanelBackground_selected.png) no-repeat -45px -5px; * / + + background-color: #eef0e3; + border-bottom: 1px solid #eef0e3; + border-right: 1px solid #d5d5bc; +} +div.subPanelTabs ul li.selected:hover { + border-right: 1px solid #d5d5bc; +} +div.subPanelTabs ul li.selected a { + color: #444440; +} +div.subPanelContent { + padding-top: 20px; + padding-left: 30px; + padding-right: 30px; + min-height: 280px; + color: #787872; + margin: 0px 6px 0 9px; +} +div.subPanelContent ul { + margin: 0px; + padding: 0px; + list-style-type: none; +} +div.subPanelContent ul li.selected { + display: block; +} +div.subPanelContent ul li { + display: none; +} +div.subPanelContent h3 { + margin: 0px; + border: 0px; + padding: 0px; +} +*/ +/* @end */ +/* @group mainPanels otherPanel */ +div.mainPanels div.otherPanel { + margin: 5px 10px; + background-color: #eef0e3; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + -webkit-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6); + -moz-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6); + box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6); +} +div.mainPanels div.otherPanel div.header { + /* background: url(./images/old/main/blocks/otherPanelBackground.png) no-repeat; */ + + /* + height: 90px; +*/ + + background-color: #d5d5bc; + /* padding-left: 9px; + padding-top: 5px; */ + + margin: 0px; + margin-bottom: 0px; + -webkit-border-top-left-radius: 20px; + -webkit-border-top-right-radius: 20px; + -moz-border-radius-topleft: 20px; + -moz-border-radius-topright: 20px; + border-top-left-radius: 20px; + border-top-right-radius: 20px; +} +div.mainPanels div.otherPanel div.body { + /* background: url(./images/old/main/blocks/otherPanelBackground.png) repeat-y -836px; */ + + margin: 0px; + border: 0px; + padding: 0px; +} +div.mainPanels div.otherPanel div.footer { + /* background: url(./images/old/main/blocks/otherPanelBackground.png) 834px -18px; */ + + height: 45px; +} +div.mainPanels div.otherPanel div.body h1 { + margin: 0px; +} +/* @end */ +/* @group Account */ +form.changePassphrase div.currentCredentials, +form.changePassphrase div.newPassphrase { + float: left; + padding: 10px 20px; +} +form.changePassphrase label { + display: inline-block; + width: 150px; +} +form.changePassphrase div.confirm { + clear: both; + padding: 10px 20px; +} +form.changePassphrase div.confirm label { + width: 500px; +} +div.accountPanel h3.manageOTP { + margin-top: 20px; + margin-left: -20px; + padding-top: 10px; + padding-left: 20px; + border-top: 1px solid #aaaaaa; +} +/* @end */ +/* @end */ +/* @group Message Panel (?) */ +/* +div.messagePanelWrapper div.mask { + position: fixed; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + + background-color: black; + z-index:50001; + + -moz-opacity: 0.0; + opacity:.0; + filter: alpha(opacity=0); +/ * + -moz-opacity: 0.7; + opacity:.70; + filter: alpha(opacity=70); +* / +} + +div.messagePanelFrame { + border: 1px solid white; + z-index:50002; +/ * + width: 443px; + height: 155px; + position: fixed; + top: 205px; + left: 260px; + margin-left: auto; + margin-right: auto; + max-width: 468px; +* / +} + + +div.messagePanel { + position: fixed; + z-index:50003; + top: 0px; + left: 0px; +/ * + margin-left: auto; + margin-right: auto; + max-width: 468px; + top: 200px; + left: 250px; + left: 100px; + right: 100px; +* / +} + +div.messagePanel div.header { + height: 34px; + width: 468; + background-image: url(./images/old/alert/header.png); +} + +div.messagePanel div.body { + background-image: url(./images/old/alert/body.png); + padding: 0px 20px 10px 20px; + min-height: 100px; +} +/ * +div#javaScriptAlert div.body div.alert { + padding-left: 100px; + background: url(./images/old/alert/alert.png) no-repeat; +} +* / + +div.messagePanel div.body img.alert { + float: left; +} + +div.messagePanel div.body div.alert { + padding-left: 100px; +} + +div.messagePanel div.footer { + height: 34px; + width: 468; + background-image: url(./images/old/alert/footer.png); +} + +div.messagePanel div.message h1 { + font-size: 16pt; + margin: 0px; + color: #ff5930; +} + +div.messagePanel div.message p { + margin-top: 0px; + color: #999999; +} + +div.messagePanel div.message h3 { + font-size: 12pt; + margin-bottom: 0px; + color: #ff5930; +} + +div.messagePanel div.message h5 { + margin: 0px; + color: #999999; +} + + +*/ +/* @end */ +/* @group LoginProgress (?) */ +/* +div#loginProgress { + position: relative; + left: -198px; + top: -118px; + width: 397px; + height: 236px; + background: url(./images/old/loginProgress/background.png); +} + +div#loginProgress div.header { + height: 52px; +} + +div#loginProgress div.header h3 { + font-size: 12pt; + font-weight: normal; + margin: 0px; + color: #787872; + padding-top: 25px; + padding-left: 35px; +} + +div#loginProgress div.body { + height: 120px; + overflow: auto; + margin-left: 19px; + margin-right: 18px; +} + +div#loginProgress div.footer { + margin-left: 19px; + margin-right: 18px; +} + +div#loginProgress div.footer a { + font-weight: bold; + text-decoration: none; + text-align: center; + color: #787872; + display: block; + font-size: 11pt; + width: 100px; + margin-top: 13px; + margin-left: auto; + margin-right: auto; +} + +div#loginProgress div.footer a:hover { + color: #515247; +} + +*/ +/* @end */ +div#modalDialogMask, +div.modalDialogMask { + z-index: 20000; + /* position: absolute; */ + + position: fixed; + top: 0; + left: 0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + /* background-color: #cccccc; */ + + background-color: #000000; + width: 100%; + height: 100%; + zoom: 1; +} +div#modalDialogFrame, +div.modalDialogFrame { + position: absolute; + /* border: 1px solid white; */ + + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + background-color: #333333; + z-index: 20001; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; +} +div#modalDialog, +div.modalDialog { + z-index: 20001; +} +/*div#modalDialog.scrollable,*/ +div.modalDialog.scrollable { + position: absolute; + top: 0; + left: 50%; +} +/*div#modalDialog.fixed,*/ +div.modalDialog.fixed { + position: fixed; + top: 40%; + left: 50%; +} +div#modalDialog div, +div.modalDialog div { + z-index: 20002; + list-style-type: circle; +} +div.modalDialogMask.simpleMessagePanelMask { + z-index: 20010; +} +div.modalDialogFrame.simpleMessagePanelMask { + z-index: 20011; +} +div.modalDialog.simpleMessagePanelMask { + z-index: 20011; +} +div.modalDialog.simpleMessagePanelMask div { + z-index: 20012; +} +/* @group Bookmarklet */ +div.bookmarklet div.bookmarklet_link { + /* + padding-top: 5px; + padding-left: 4px; + padding-right: 3px; + + float: right; + margin-top: 12px; + margin-right: 13px; +*/ + + height: 34px; +} +div.bookmarklet div.bookmarklet_link a { + color: #838975; + text-decoration: none; + font-weight: bold; + font-size: 10pt; + /* + display: block; + text-align: right; + padding-top: 7px; + padding-right: 11px; + padding-bottom: 6px; +*/ + +} +div.bookmarklet div.bookmarklet_link a div.icon { + background: url(./images/old/bookmarklet/placeholder_icon.png) no-repeat 0 0; + float: left; + width: 34px; + height: 34px; +} +div.bookmarklet div.bookmarklet_link a:hover div.icon { + background: url(./images/old/bookmarklet/placeholder_selected_icon.png) no-repeat 0 0; +} +div.bookmarklet div.bookmarklet_link a div.text { + display: block; + float: right; + background: url(./images/old/bookmarklet/placeholder.png) no-repeat right 0; + white-space: nowrap; + height: 34px; +} +div.bookmarklet div.bookmarklet_link a:hover div.text { + background: url(./images/old/bookmarklet/placeholder_selected.png) no-repeat right 0; +} +div.bookmarklet div.bookmarklet_link a div.text span { + display: block; + padding-top: 10px; + padding-right: 10px; + padding-left: 6px; + clear: both; +} +/* @end */ +/* @group Tooltip */ +/* +div#Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode { + position: absolute; + top: 0px; + left: 0px; +} +*/ +/* @end */ +/* @group News */ +/* +div#news { + top: 11px; + left: 240px; + width: 353px; + height: 85px; + padding-top: 4px; + position: absolute; + overflow: hidden; + background: url(./images/old/note.png) 1px 3px; +} + +div#news.hidden { + display: none; +} + +div#news div.close { + display: inline; + margin-top: 6px; + margin-left: 17px; + float: left; + width: 15px; +} + +div#news div.close a { + text-decoration: none; + color: #929c1b; +} + +div#news div.close a:hover { + text-decoration: none; + color: #3d420b; +} + +div#news div#newsframe { + display: block; + overflow: hidden; + width: 305px; + height: 70px; +} + +div#news div#newsframe iframe { + border: 0px; +} +*/ +/* --------------------------------------- */ +div#news { + top: -82px; + left: 240px; + width: 310px; + height: 90px; + position: absolute; + /* background: url(./images/old/tips/Tips_background.png) 0 -5px; */ + + background-color: #616474; + -webkit-border-bottom-right-radius: 8px; + -webkit-border-bottom-left-radius: 8px; + -moz-border-radius-bottomright: 8px; + -moz-border-radius-bottomleft: 8px; + border-bottom-right-radius: 8px; + border-bottom-left-radius: 8px; + -webkit-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6); + -moz-box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6); + box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.6); +} +/* +div#news.open { + background: url(./images/old/tips/Tips_open.png) 0 -5px; +} + +div#news.hidden { + background: url(./images/old/tips/Tips_close.png) 0 -5px; +} +*/ +/* +div#news div#newsframe { + margin-left: 10px; + margin-right: 10px; + height: 75px; + overflow: hidden; +} +div#news div#newsframe.loading { + background: url(./images/old/loading/news.gif) no-repeat center center; +} +div#news div#newsframe iframe { + width: 290px; + border: 0px; + color: #616474; + background-color: #616474; +} +div#news div.grip { + width: 310px; + height: 12px; + margin-top: 2px; + cursor: pointer; +} +div#news.open div.grip { + background: url(./images/old/tips/close.png) no-repeat center 6px; +} +div#news.hidden div.grip { + background: url(./images/old/tips/open.png) no-repeat center 6px; +} +*/ +/* @end */ +/* @group mainDialog */ +div.mainDialog { + position: relative; + left: -263px; + width: 525px; + height: 325px; +} +div.scrollable div.mainDialog { + top: 0px; +} +div.fixed div.mainDialog { + top: -118px; +} +div.mainDialog div.header { + height: 55px; + background: url(./images/old/cardDialog/background_header.png) no-repeat; +} +div.mainDialog div.header div.title { + padding-top: 16px; + padding-left: 20px; + padding-right: 20px; +} +div.mainDialog div.header div.title input { + width: 100%; + display: block; + font-size: 16pt; + margin: 0px; + border: 0px; + padding: 3px 10px; + color: #787872; + border: 1px solid #cccec0; + background-color: #cccec0; +} +div.mainDialog div.header div.title h3 { + display: block; + font-size: 16pt; + color: #787872; + margin: 0px; + border: 0px; + padding: 3px 10px; +} +div.mainDialog div.header div.title.selectedField input, +div.mainDialog div.header div.title:hover input { + border: 1px solid #515247; + background-color: #b5b7ab; +} +div.mainDialog div.header div.title.disabled:hover input { + border: 1px solid #cccec0; + background-color: #cccec0; +} +div.mainDialog div.body { + padding-top: 0px; + padding-left: 10px; + padding-right: 9px; + min-height: 200px; + background: url(./images/old/cardDialog/background_body.png) repeat-y; +} +div.mainDialog div.body div.mask { + display: none; +} +div.mainDialog.loading div.body div.mask { + display: block; + position: absolute; + top: 55px; + left: 10px; + right: 9px; + bottom: 70px; + z-index: 1001; + background-color: white; + padding-left: 146px; + padding-right: 146px; + padding-top: 70px; +} +div.mainDialog.loading div.body .tabPanels { + display: none; +} +div.mainDialog.loading div.body div.mask h3.progressDescription { + margin: 0px; + text-align: center; + padding-bottom: 10px; + color: #cccec0; + font-size: 14pt; + font-weight: normal; +} +div.loadingBar { + height: 22px; + width: 214px; + background: url(./images/old/loading/loadingBar.gif) no-repeat center top; +} +div.loadingBar div.loadingBarProgressBox { + padding: 2px; +} +div.loadingBar div.loadingBarProgress { + height: 18px; + width: 0%; + /* background-repeat: no-repeat; */ + + background-color: rgba(248, 79, 0, 0.6); + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} +/* +div.loadingBar div.loadingBarProgress div.loadingBarProgress_left { + height: 100%; + max-width: 8px; + background: url(./images/old/loading/loadingBarProgress.png) no-repeat 0; +} + +div.loadingBar div.loadingBarProgress div.loadingBarProgress_right { + position: relative; + height: 100%; + margin-left: 8px; + background: url(./images/old/loading/loadingBarProgress.png) no-repeat right; + top: -22px; +} +*/ +div.mainDialog div.body div ul { + padding: 0px; + clear: both; + margin: 0px; + list-style-type: none; +} +div.mainDialog div.body div.tabs { + height: 20px; +} +div.mainDialog div.body div.tabs ul.tabs { + height: 33px; + /* border-bottom: 1px solid #515247;*/ + + /* background: #cccec0 url(./images/old/cardDialog/tabs_shadow.png) repeat-x 0 -5px;*/ + + background: url(./images/old/cardDialog/tabs_background.png) repeat-x; +} +div.mainDialog div.body div.tabs ul.tabs li { + /* width: 150px; */ + + height: 32px; + font-size: 11pt; + text-align: center; + border-right: 1px solid #515247; + float: left; + color: #787872; + border-bottom: 1px solid #515247; + background: #cccec0 url(./images/old/cardDialog/tabs_shadow.png) repeat-x 0 -5px; + cursor: pointer; +} +div.mainDialog div.body div.tabs ul.tabs li div { + display: none; +} +div.mainDialog div.body div.tabs ul.tabs li span { + display: block; + padding-top: 9px; + padding-bottom: 6px; + padding-left: 40px; + padding-right: 40px; +} +div.mainDialog div.body div.tabs ul.tabs li:hover { + color: #515247; +} +div.mainDialog div.body div.tabs ul.tabs li.disabled:hover { + color: #787872; + cursor: default; +} +div.mainDialog div.body div.tabs ul.tabs li.selected { + color: #515247; + background-color: #f1f2e9; + border-bottom: 1px solid #f1f2e9; + cursor: default; +} +div.mainDialog div.body div.tabs ul.tabs li.selected.disabled:hover { + color: #515247; +} +div.mainDialog div.body div.tabs ul.tabs li.selected div.backToDirectLoginList { + position: absolute; + display: block; + top: 63px; + left: 140; + width: 20px; +} +div.mainDialog div.body div.tabs ul.tabs li.selected div.addDirectLoginButton { + position: absolute; + display: block; + top: 63px; + left: 265px; + width: 20px; +} +div.mainDialog div.body div.tabs ul.tabs li.selected div span { + padding: 0px; + margin: 0px; +} +div.mainDialog div.body div.tabs ul.tabs li.selected div:hover { + cursor: pointer; +} +div.mainDialog div.body .tabPanels { + clear: both; +} +div.mainDialog div.body ul.tabPanels li.tabPanel { + display: none; +} +div.mainDialog div.body ul.tabPanels li.tabPanel.selected { + display: block; +} +div.mainDialog div.body ul.tabPanels li.tabPanel.selected h2 { + margin: 0px; + text-align: center; + padding-top: 50px; + color: #787872; +} +div.mainDialog div.body ul.tabPanels li.tabPanel.selected div.wizardStepDescription { + margin: 0px 20px 10px; + font-size: 10pt; + color: b0b0b0; + font-style: italic; + text-align: center; +} +div.mainDialog div.footer { + height: 70px; + background: url(./images/old/cardDialog/background_footer.png) no-repeat 0 -14px; +} +div.mainDialog div.footer div.buttonArea { + padding-left: 40px; + padding-right: 40px; + padding-top: 15px; +} +div.mainDialog div.footer div.buttonArea div { + padding-left: 20px; + padding-right: 20px; + float: left; + font-weight: bold; + color: #787872; +} +div.mainDialog div.footer div.buttonArea div.disabled { + color: #b1b1a8; +} +div.mainDialog div.footer div.buttonArea div.disabled:hover { + color: #b1b1a8; + cursor: default; +} +div.mainDialog div.footer div.buttonArea div:hover { + color: #515247; + cursor: pointer; +} +div.mainDialog div.footer div.buttonArea div.save { + float: right; +} +/* @end */ +/* @group Card Dialog */ +div.addDirectLoginButton { + height: 20px; + width: 20px ; + background: url(./images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat -9px -9px; + color: white; + font-weight: bold; +} +div.addDirectLoginButton span { + display: block; + height: 20px; + width: 20px ; +} +div.addDirectLoginButton:hover { + background: url(./images/old/cardDialog/addDirectLogin_background.png) no-repeat -9px -9px; +} +/* @group Card Dialog - Direct Login */ +div.directLoginsComponentContainer { + overflow: hidden; + /* background-color: green; */ + +} +div.CardDialog div.directLogins { + /* background-color: yellow; */ + + padding-top: 2px; +} +div.CardDialog div.addNewDirectLoginSplash { + margin: 0px 80px; +} +div.CardDialog div.addNewDirectLoginSplash h3 { + color: #aaaaaa; + text-align: center; + font-weight: normal; + font-size: 11pt; +} +div.CardDialog div.addNewDirectLoginSplash a { + display: block; + text-decoration: none; + margin-left: auto; + margin-right: auto; + width: 190px; + /* color: #787878; */ + + color: rgba(255, 98, 6, 0.75); + text-transform: uppercase; + background: url(./images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat right; +} +div.CardDialog div.addNewDirectLoginSplash a span { + text-align: center; +} +div.CardDialog div.addNewDirectLoginSplash a:hover { + color: #ff6206; + background: url(./images/old/cardDialog/addDirectLogin_background.png) no-repeat right; +} +div.CardDialog div.directLoginItem { + clear: both; + min-height: 32px; + padding-left: 10px; + padding-top: 4px; + padding-bottom: 2px; + /* width: 100px; */ + + max-height: 32px; + overflow: hidden; +} +div.CardDialog div.directLoginItem:hover { + background-color: #cccec0; +} +div.CardDialog div.addDirectLoginListItem { + min-height: 32px; + padding-left: 10px; + padding-top: 4px; + padding-bottom: 2px; + max-height: 32px; + overflow: hidden; + background: url(./images/old/cardDialog/addDirectLogin_disabled_background.png) no-repeat 22px 0; +} +div.CardDialog div.addDirectLoginListItem a { + display: block; + font-size: 11pt; + padding-top: 6px; + padding-left: 50px; + color: rgba(255, 98, 6, 0.75); + text-decoration: none; + text-transform: uppercase; +} +div.CardDialog div.addDirectLoginListItem:hover { + background: url(./images/old/cardDialog/addDirectLogin_background.png) no-repeat 22px 0; + color: #ff6206; + background-color: #cccec0; +} +div.CardDialog div.directLoginItem div.cardDialogRecordDirectLoginComponent_favicon img.favicon { + width: 32px; + height: 32px; + float: left; +} +div.CardDialog div.directLoginItem div.cardDialogRecordDirectLoginComponent_label input { + float: left; + font-size: 11pt; + border: 0px; + padding: 5px; + color: #787872; + border: 1px solid #ededeb; + background-color: #ededeb; + height: 30px; + margin-left: 10px; + width: 68%; + margin-right: 5px; +} +div.CardDialog div.directLoginItem:hover div.cardDialogRecordDirectLoginComponent_label input { + border: 1px solid #515247; + background-color: #b5b7ab; +} +div.CardDialog div.directLoginItem > div.open { + float: left; + margin-top: 5px; + margin-right: 2px; + padding-left: 5px; + visibility: hidden; +} +div.CardDialog div.directLoginItem > div.edit, +div.CardDialog div.directLoginItem > div.delete { + float: left; + margin-top: 5px; + margin-left: 3px; + padding-left: 5px; + visibility: hidden; +} +div.CardDialog div.directLoginItem > div.open a { + display: block; + width: 22px; + height: 22px; + background: url(./images/old/cardDialog/openDirectLogin.png) no-repeat 0 -2px; +} +div.CardDialog div.directLoginItem > div.open a:hover { + background: url(./images/old/cardDialog/openDirectLogin_selected.png) no-repeat 0 -2px; +} +div.CardDialog div.directLoginItem:hover > div.open, +div.CardDialog div.directLoginItem:hover > div.edit, +div.CardDialog div.directLoginItem:hover > div.delete { + visibility: visible; +} +div.CardDialog div.directLoginItem div.edit span { + padding-right: 6px; + display: block; +} +div.CardDialog div.directLoginItem div.open span a, +div.CardDialog div.directLoginItem div.edit span a, +div.CardDialog div.directLoginItem div.delete span a { + font-size: 8pt; + color: #666666; + text-decoration: none; + line-height: 19px; +} +div.CardDialog div.directLoginItem div.edit:hover { + background: url(./images/old/new_background_left.png) no-repeat; +} +div.CardDialog div.directLoginItem div:hover span a { + color: white; +} +div.CardDialog div.directLoginItem div.edit:hover span { + background: url(./images/old/new_background.png) no-repeat right center; +} +div.CardDialog div.directLoginItem div.delete:hover { + background: url(./images/old/delete_background_left.png) no-repeat; +} +div.CardDialog div.directLoginItem div.delete:hover span { + background: url(./images/old/delete_background.png) right; +} +/* @group Direct Login Editing */ +div.CardDialog div.directLoginEditDetail { + position: relative; + /* background-color: red; */ + +} +/* +div.CardDialog div.directLoginEditDetail div.back { + float: left; + width: 30px; +} + +div.CardDialog div.directLoginEditDetail div.back a { + display: block; + padding: 5px; + text-decoration: none; + font-weight: bold; + font-size: 14pt; + color: #cccec0; + + background: url(./images/old/cardDialog/back.png) no-repeat 5px 14px; + width: 20px; + height: 200px; +} + +div.CardDialog div.directLoginEditDetail div.back a:hover { + color: #7f7872; + background: url(./images/old/cardDialog/back_selected.png) no-repeat 5px 14px; +} +*/ +form.directLoginEditingForm div.title, +form.directLoginEditingForm div.favicon { + padding: 5px 10px; +} +form.directLoginEditingForm div.title.disabled:hover { + background-color: #f1f2e9; +} +form.directLoginEditingForm div.title:hover, +form.directLoginEditingForm div.favicon:hover { + background-color: #cccec0; +} +form.directLoginEditingForm div.title input { + /* width: 100%; */ + + margin: 0px; + margin-left: 10px; + width: 440px; +} +form.directLoginEditingForm div.favicon { + padding-left: 10px; +} +/*form.directLoginEditingForm div.favicon img.favicon {*/ +form.directLoginEditingForm img.favicon { + float: left; + width: 32px; + height: 32px; +} +form.directLoginEditingForm div.favicon input { + margin-top: 1px; + width: 465px; +} +form.directLoginEditingForm div.disabled:hover input, +form.directLoginEditingForm div input { + font-size: 11pt; + border: 0px; + padding: 5px; + color: #787872; + border: 1px solid #ededeb; + background-color: #ededeb; + height: 30px; +} +form.directLoginEditingForm div:hover input { + border: 1px solid #515247; + background-color: #b5b7ab; +} +/* @group Bindings */ +div.bindings div.binding > span.formFieldName { + display: inline-block; + width: 140px; + overflow: hidden; + margin-right: 10px; + color: #6b5147; + text-overflow: ellipsis; +} +div.bindings div.binding { + padding-bottom: 3px; +} +div.bindings div.binding > input { + margin-right: 10px; + background: #cccec0; + width: 150px; + border: 1px solid #cccec0; +} +div.bindings div.binding:hover > input { + border: 1px solid #cccec0; +} +div.bindings div.binding > select { + font-size: 13pt; +} +div.bindings div.binding span.fieldLock { + display: inline-block; + width: 20px; + height: 20px; + margin-right: 3px; +} +div.bindings div.binding.showLocked input { + background: url(./images/old/cardDialog/password_background.png) no-repeat 2px 3px; + /* color: black; */ + + overflow: hidden; + background: #cccec0 url(./images/old/cardDialog/password_background.png) no-repeat 2px 3px; + color: rgba(237, 237, 235, 0.1); +} +div.bindings div.binding span.fieldLock a { + display: none; +} +div.bindings div.binding.locked span.fieldLock a { + display: block; + width: 20px; + height: 20px; + text-decoration: none; + background-image: url(./images/old/cardDialog/lock_open.png); +} +div.bindings div.binding.locked.showLocked span.fieldLock a { + background-image: url(./images/old/cardDialog/lock_closed.png); + text-decoration: none; +} +/* @end */ +/* @group FormValues */ +div.formValues { + padding-top: 15px; +} +div.formValues div.formValue div { + margin: 0px; + display: inline-block; +} +div.formValues div.formValue > span.formFieldName { + display: inline-table; + width: 160px; + overflow: hidden; + margin-right: 10px; + color: #6b5147; +} +/* @end */ +/* @group FormValues */ +/* +div.formValues { + padding-top: 15px; +} + +div.formValues div.formValue > span.formFieldName { + display: inline-table; + width: 150px; + overflow: hidden; + margin-right: 35px; + color: #6b5147; +} + +div.formValues div.formValue > select { + padding-left: 20px; +} +*/ +/* @end */ +/* @group Panels */ +div.directLoginEditing { + padding-top: 2px; +} +div.directLoginEditing div.tabContainer { + min-height: 150px; + height: 200px; +} +div.directLoginEditing div.tabContainer > ul.tabs { + display: none; +} +/* +div.directLoginEditing li.configuration, +div.directLoginEditing li.bindings, +div.directLoginEditing li.favicon { + padding: 10px; +} +*/ +div.directLoginEditing li { + padding: 10px; +} +div.directLoginEditing li.configuration > .bookmarkletConfigurationWrapper > textarea { + float: left; + width: 320px; + height: 125px; + font-family: monospace; + font-weight: normal; + font-size: 8pt; + border: 1px solid #ccc; +} +div.directLoginEditing li.configuration > .bookmarkletConfigurationWrapper .bookmarkletComponent { + float: right; +} +div.directLoginEditing li.configuration > textarea.error { + border: 1px solid red; + background-color: rgba(255, 0, 0, 0.1); +} +/* +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer { + padding-top: 10px; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li { + float: left; + padding-left: 10px; + padding-right: 10px; + display: block; + font-size: 10pt; + color: #787872; + cursor: pointer; + + height: 22px; + text-align: center; + border-right: 1px solid #aaa; + border-bottom: 1px solid #aaa; + border-top: 1px solid #aaa; + + background-color: #cccec0; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li:first-child { + border-left: 1px solid #aaa; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs { + height: 23px; + padding-left: 10px; + border-bottom: 1px solid #aaa; + margin-left: 10px; + margin-right: 10px; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li > span { + line-height: 23px; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li.selected { + color: #6a5147; + cursor: default; + border-bottom: 1px solid #f1f2e9; + background-color: #f1f2e9; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabs > li:hover { + color: #6a5147; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabPanels { + padding-bottom: 5px; + margin-left: 10px; + margin-right: 10px; +} + +div.directLoginEditing > form.directLoginEditingForm > div.tabContainer > ul.tabPanels > li.selected { + border-bottom: 1px solid #aaa; + border-left: 1px solid #aaa; + border-right: 1px solid #aaa; +} + +div.directLoginEditing li.configuration { + padding: 5px; +} + +div.directLoginEditing li.configuration > textarea { + width: 100%; + height: 100px; + font-family: monospace; + font-weight: normal; + font-size: 8pt; +} +*/ +/* @end */ +/* @end */ +/* @end */ +/* @group Card Dialog FIELDS */ +div.CardDialog div.body { + padding-bottom: 1px; +} +div.CardDialog div.body table.fields { + width: 100%; + padding-top: 8px; + padding-bottom: 1px; +} +div.CardDialog div.body table.fields thead { + background: url(./images/old/cardDialog/dottedLine_background.png) repeat-x 0 15px; +} +div.CardDialog div.body table.fields tfoot { + background: url(./images/old/cardDialog/dottedLine_background.png) repeat-x 0 bottom; +} +div.CardDialog div.body table.fields thead th { + text-align: left; + font-weight: normal; + font-size: 9pt; + color: #787872; + padding-left: 10px; + padding-bottom: 3px; + /* + border-bottom: 1px dotted; +*/ + +} +div.CardDialog div.body table.fields thead th.fieldStateTH { + width: 10px; +} +div.CardDialog div.body table.fields tbody td.fieldLabel input { + width: 130px; +} +div.CardDialog div.body table.fields thead th.fieldLockTH { + width: 10px; +} +div.CardDialog div.body table.fields tbody td.fieldValue input { + width: 280px; +} +div.CardDialog div.body table.fields thead th.fieldActionTH { + width: 30px; +} +div.CardDialog div.body table.fields thead th.fieldDeleteTH { + width: 40px; +} +div.CardDialog div.body table.fields tbody tr:hover, +div.CardDialog div.body table.fields tbody tr.selectedField { + background-color: #cccec0; +} +div.CardDialog div.body table.fields tbody tr td { + font-size: 11pt; + color: #787872; + height: 35px; +} +div.CardDialog div.body table.fields tbody tr td input { + font-size: 11pt; + border: 0px; + padding: 5px; + color: #787872; + border: 1px solid #ededeb; + background-color: #ededeb; + height: 30px; +} +/* +div.CardDialog div.body table.fields tbody tr td.fieldValue div { + margin-right: 10px; +} + +div.CardDialog div.body table.fields tbody tr td.fieldValue div input { + width: 100%; +} +*/ +div.CardDialog div.body table.fields tbody tr td.fieldValue div.locked input { + background: #ededeb url(./images/old/cardDialog/password_background.png) no-repeat 2px 3px; + color: #ededeb; + color: rgba(237, 237, 235, 0.1); + /* color: black; */ + + /* line-height: 100px; */ + + overflow: hidden; +} +div.locked input.value::-moz-selection { + background: #ff0000; +} +div.locked input.value::selection { + background: #ff0000; +} +div.CardDialog div.body table.fields tbody tr.new.selectedField td input, +div.CardDialog div.body table.fields tbody tr.new:hover td input, +div.CardDialog div.body table.fields tbody tr:hover td input, +div.CardDialog div.body table.fields tbody tr.selectedField td input { + border: 1px solid #515247; + background-color: #b5b7ab; +} +div.CardDialog div.body table.fields tbody tr:hover td.fieldValue div.locked input, +div.CardDialog div.body table.fields tbody tr.selectedField td.fieldValue div.locked input { + background: #b5b7ab url(./images/old/cardDialog/password_background.png) no-repeat 2px 3px; + color: #b5b7ab; + color: rgba(237, 237, 235, 0.1); +} +div.CardDialog div.body table.fields tbody td.fieldLock div { + width: 20px; + height: 19px; + cursor: pointer; +} +div.CardDialog div.body table.fields tbody tr:hover td.fieldLock div.locked { + background-image: url(./images/old/cardDialog/lock_closed.png); +} +div.CardDialog div.body table.fields tbody tr:hover td.fieldLock div.unlocked { + background-image: url(./images/old/cardDialog/lock_open.png); +} +div.CardDialog div.body table.fields tbody tr td.fieldAddDelete div span a { + text-decoration: none; + visibility: hidden; + font-size: 8pt; + vertical-align: -13px; + color: black; +} +div.CardDialog div.body table.fields tbody tr.selectedField td.fieldAddDelete div span a { + visibility: visible; +} +div.CardDialog div.body table.fields tbody tr:hover td.fieldAddDelete div span a { + visibility: visible; +} +div.CardDialog div.body table.fields tbody tr:hover td.fieldAddDelete div:hover span a { + color: white; +} +div.CardDialog div.body div.notes { + background: url(./images/old/cardDialog/dottedLine_background.png) repeat-x 0 0; + padding-top: 2px; +} +div.CardDialog div.body div.notes div { + padding-left: 20px; + padding-right: 20px; + padding-top: 4px; + padding-bottom: 4px; +} +div.CardDialog div.body div.notes div:hover, +div.CardDialog div.body div.notes.selectedField div { + background-color: #cccec0; +} +div.CardDialog.loading div.body div.notes div textarea { + display: none; +} +div.CardDialog div.body div.notes div textarea { + border: 0; + width: 470px; + /* + width: 100%; + height: 100px; + min-height: 400px; + overflow: hidden; +*/ + + color: #787872; + border: 1px solid #ededeb; + background-color: #ededeb; + display: block; + line-height: 12pt; + min-height: 50px; +} +div.CardDialog div.body div.notes div:hover textarea, +div.CardDialog div.body div.notes.selectedField div textarea { + border: 1px solid #515247; + background-color: #b5b7ab; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction { + /* background-color: red; */ + + padding-left: 4px; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a { + display: inline-block; + text-decoration: none; + text-align: center; + width: 16px; + height: 16px; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a.email { + background: url(./images/old/cardDialog/fieldTypes/email.png) no-repeat 0 0; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a.email:hover { + background: url(./images/old/cardDialog/fieldTypes/email_selected.png) no-repeat 0 0; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a.url { + background: url(./images/old/cardDialog/fieldTypes/url.png) no-repeat 0 0; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a.url:hover { + background: url(./images/old/cardDialog/fieldTypes/url_selected.png) no-repeat 0 0; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a.password { + background: url(./images/old/cardDialog/fieldTypes/password.png) no-repeat 0 0; +} +div.CardDialog div.body table.fields tbody tr td.fieldAction a.password:hover { + background: url(./images/old/cardDialog/fieldTypes/password_selected.png) no-repeat 0 0; +} +/* +/ *div.CardDialog div.body table.fields tbody* / tr.new { + background: yellow; +} + +div.CardDialog div.body table.fields tbody tr.new td input { + border: 1px solid red; + background-color: green; +} +*/ +/* @end */ +/* @end */ +div#disabledZone { + display: block; + visibility: visible; +} +div#messageZone { + display: block; + visibility: visible; +} +div.CardDialog div.error div.img { + margin: 10px; + width: 50px; + height: 50px; + float: left; + background-image: url(./images/old/simpleMessageBox/Alert.png); +} +/* @group Ruler */ +/* +div.rulerExtraWrapper { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + overflow: hidden; + background-color: rgba(255, 0, 0, 0.2); + z-index: 24999; +} +*/ +div.rulerWrapper { + left: -1000px; + margin-top: -30px; + margin-left: 50%; + z-index: 25000; +} +div.rulerWrapper.fixed { + position: fixed; +} +div.rulerWrapper.scrollable { + position: absolute; +} +div.ruler { + /* position: absolute; */ + + width: 541px; + height: 96px; + margin-left: -270px; + background: url(./images/old/ruler/ruler.png) no-repeat; +} +div.ruler a { + position: absolute; + display: block; + width: 15px; + height: 15px; + top: 3px; + text-decoration: none; +} +div.ruler a.exit { + margin-left: 2px; + background: url(./images/old/ruler/exit.png) no-repeat; +} +div.ruler a.exit:hover { + background: url(./images/old/ruler/exit_selected.png) no-repeat; +} +div.ruler a.smallButton.previous { + right: 16px; + background: url(./images/old/ruler/small_previous.png) no-repeat; +} +div.ruler a.smallButton.previous:hover { + cursor: pointer; + background: url(./images/old/ruler/small_previous_selected.png) no-repeat; +} +div.ruler a.smallButton.previous.disabled, +div.ruler a.smallButton.previous.disabled:hover { + cursor: default; + background: url(./images/old/ruler/small_previous_disabled.png) no-repeat; +} +div.ruler a.smallButton.next { + right: 3px; + background: url(./images/old/ruler/small_next.png) no-repeat; +} +div.ruler a.smallButton.next:hover { + cursor: pointer; + background: url(./images/old/ruler/small_next_selected.png) no-repeat; +} +div.ruler a.smallButton.next.disabled, +div.ruler a.smallButton.next.disabled:hover { + cursor: default; + background: url(./images/old/ruler/small_next_disabled.png) no-repeat; +} +div.ruler div.steps, +div.ruler div.dots { + position: absolute; + background-color: rgba(255, 255, 255, 0); + margin-left: 30px; + margin-right: 30px; +} +div.ruler div.steps { + top: 25px; + height: 30px; +} +div.ruler div.dots { + top: 58px; + height: 25px; +} +div.ruler div ul { + list-style-type: none; + margin: 0px; + padding: 0px; +} +div.ruler div ul li { + display: inline-block; + vertical-align: top; +} +div.ruler > div.steps > ul > li:first-child, +div.ruler > div.dots > ul > li:first-child { + margin-left: 0px; +} +div.ruler div.steps_3 ul li { + margin-left: 135px; +} +div.ruler div.steps_4 ul li { + margin-left: 67px; +} +div.ruler div.steps_5 ul li { + margin-left: 32px; +} +div.ruler div.steps_6 ul li { + margin-left: 12px; +} +div.ruler div ul li span { + font-weight: bold; + text-align: center; + width: 70px; + display: block; + font-size: 8pt; + overflow: hidden; + color: rgba(0, 0, 0, 0.3); +} +div.ruler div ul li.selected span { + color: black; +} +div.ruler div.dots ul li span { + /* + text-align: center; + width: 26px; + margin-left: 22px; + margin-right: 22px; + height: 25px; + background-color: #e57218; +*/ + + font-size: 40pt; + line-height: 47px; +} +div.ruler div.marker { + position: absolute; + top: -3px; + /* left: -246px; */ + +} +div.ruler div.marker div.markerBody { + width: 77px; + height: 97px; + background: url(./images/old/ruler/marker.png) no-repeat; +} +div.ruler div.marker div.next { + position: absolute; + top: 25px; + left: 76px; + width: 27px; + height: 65px; + background: url(./images/old/ruler/next.png) no-repeat -13px; + z-index: 26000; +} +div.ruler div.marker div.next:hover { + cursor: pointer; + background: url(./images/old/ruler/next.png) no-repeat -2px; +} +div.ruler div.marker div.disabled { + display: none; +} +div.ruler div.marker div.previous { + position: absolute; + top: 25px; + left: -24px; + width: 27px; + height: 65px; + /* background: url(./images/old/ruler/previous.png) no-repeat 13px 1px; */ + + background: url(./images/old/ruler/previous.png) no-repeat 18px 1px; + z-index: 26000; +} +div.ruler div.marker div.previous:hover { + cursor: pointer; + /* background: url(./images/old/ruler/previous.png) no-repeat 2px 1px; */ + + background: url(./images/old/ruler/previous.png) no-repeat 7px 1px; +} +/* @end */ +div.createNewCardSplash { + margin-top: -450px; + margin-left: 250px; + width: 354px; + float: left; + height: 186px; + text-align: center; + background: url(./images/old/main/grid/createNewCardSplash.png) no-repeat; +} +div.createNewCardSplash:hover { + cursor: pointer; + background: url(./images/old/main/grid/createNewCardSplash_selected.png) no-repeat; +} +div.createNewCardSplash span { + display: block; + padding-top: 130px; + font-size: 14pt; + color: #9a9586; +} +div.createNewCardSplash:hover span { + color: #605c4e; +} +/*=============================================*/ +div.NewUserCreation div.tabContainer { + min-height: 150px; + height: 200px; +} +div.NewUserCreation div.tabContainer > ul.tabs { + display: none; +} +ul.createUserStates li.creating { + background: url(./images/old/creatingUser.gif) no-repeat center center; +} +ul.createUserStates li { + height: 100px; +} +ul.createUserStates li span { + display: block; + width: 100%; + text-align: center; + color: #999; + font-style: italic; +} +div.NewUserCreation form.newUserCreationForm ul.tabPanels { + padding-top: 10px; +} +div.NewUserCreation form.newUserCreationForm ul ul { + margin-left: auto; + margin-right: auto; + width: 400px; +} +div.NewUserCreation form.newUserCreationForm ul.credentials li { + height: 45px; +} +div.NewUserCreation form.newUserCreationForm ul.credentials span.label { + text-align: right; + display: inline-block; + font-size: 12pt; + color: #787872; + width: 110px; + vertical-align: baseline; +} +div.NewUserCreation form.newUserCreationForm ul.credentials input { + font-size: 13pt; + color: #787872; + height: 35px; + margin-left: 15px; + padding-left: 5px; +} +div.NewUserCreation form.newUserCreationForm ul.termsOfService li { + padding: 0 0 15 0; +} +div.NewUserCreation form.newUserCreationForm ul.termsOfService input { + display: inline-block; +} +div.NewUserCreation form.newUserCreationForm ul.termsOfService .label { + display: inline-block; + text-align: left; + font-size: 12pt; + color: #787872; + width: 350px; + vertical-align: top; + padding-left: 10px; +} +div.NewUserCreation form.newUserCreationForm ul.termsOfService a { + font-weight: bold; + color: #787872; + text-decoration: none; +} +div.NewUserCreation form.newUserCreationForm ul.termsOfService a:hover { + color: #444; +} +div.NewUserCreation form.newUserCreationForm ul.createUserStates li.done span { + font-size: 16pt; + color: green; +} +div.NewUserCreation form.newUserCreationForm ul.createUserStates li.fail span { + font-size: 16pt; + color: red; +} diff --git a/frontend/gamma/html/exitPage_template.html b/frontend/gamma/html/exit_template.html index e17bee0..e17bee0 100644 --- a/frontend/gamma/html/exitPage_template.html +++ b/frontend/gamma/html/exit_template.html diff --git a/frontend/gamma/html/index_template.html b/frontend/gamma/html/index_template.html index 5f5ed2d..ba7c311 100644 --- a/frontend/gamma/html/index_template.html +++ b/frontend/gamma/html/index_template.html @@ -1,70 +1,79 @@ <html> <head> <title>@page.title@</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <!-- @copyright@ --> @css@ <link rel="shortcut icon" href="./clipperz.ico" /> <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> <script> Clipperz_IEisBroken = false; Clipperz_normalizedNewLine = '\n'; - Clipperz_dumpUrl = "/dump/"; + Clipperz_dumpUrl = "/../dump/"; + Clipperz_version = "@application.version@"; + "use strict"; </script> <!--[if IE]><script> Clipperz_IEisBroken = true; Clipperz_normalizedNewLine = '\x0d\x0a'; </script><![endif]--> @js_LINKED@ </head> <body> <div id="mainDiv"> <div id="loading"> <div> <!-- a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a --> <h1>clipperz</h1> <h3 class="clipperzPayoff">keep it to yourself!</h3> <!-- h5>loading ...</h5 --> </div> </div> @js_EMBEDDED@ </div> <!-- div id="applicationVersionType" class="@application.version.type@"></div --> <script> Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@}); /*offline_data_placeholder*/ + +/* * / + MochiKit.DOM.addLoadEvent(function () { + Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', {username:'j', passphrase:'j'}); + }); +/ * */ </script> <!-- --> <!-- div id="javaScriptAlert"> <div class="mask"></div> <div class="message"> <div class="header"></div> <div class="body"> <div class="alertLogo"></div> <div class="alert"> <h1>Attention!</h1> <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> <h3>Javascript is required to access Clipperz.</h3> <h5>Please enable scripting or upgrade your browser.</h5> </div> </div> <div class="footer"></div> </div> </div --> <!-- --> </body> </html> diff --git a/frontend/gamma/html/mobile.appcache b/frontend/gamma/html/mobile.appcache new file mode 100644 index 0000000..237b5ad --- a/dev/null +++ b/frontend/gamma/html/mobile.appcache @@ -0,0 +1,24 @@ +CACHE MANIFEST +# 2012-02-23-v0.0.1 + +# Entry to add into Apache config: +# AddType text/cache-manifest .appcache + +# Explicitly cached entries +CACHE: +index.mobile.html +*.favico + +# static.html will be served if the user is offline +FALLBACK: +/index.mobile.html /index.mobile.html + +# /main.py /static.html +# images/large/ images/offline.jpg +# *.html /offline.html + + +# Resources that require the user to be online. +NETWORK: +* +# login.php, http://api.twitter.com, etc. diff --git a/frontend/gamma/html/mobile_template.html b/frontend/gamma/html/mobile_template.html index 0a1b54c..184fbd9 100644 --- a/frontend/gamma/html/mobile_template.html +++ b/frontend/gamma/html/mobile_template.html @@ -1,84 +1,66 @@ -<!-- +<!doctype html> +<!-- Conditional comment for mobile ie7 blogs.msdn.com/b/iemobile/ --> +<!--[if IEMobile 7 ]> <html class="no-js iem7" lang="en"> <![endif]--> +<!--[if (gt IEMobile 7)|!(IEMobile)]><!--> <html class="no-js" lang="en" manifest="mobile.appcache"> <!--<![endif]--> +<head> + <title>@page.title@</title> + <meta charset="utf-8"> -Copyright 2008-2011 Clipperz Srl + <meta name="HandheldFriendly" content="True"> + <meta name="MobileOptimized" content="320"> + <meta name="viewport" content="width=device-width"> -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. +<!-- link rel="apple-touch-icon-precomposed" ... --> + <link rel="apple-touch-icon" sizes="114x114" href="data:image/png;charset=utf-8;base64,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"> + <link rel="apple-touch-icon" sizes="72x72" href="data:image/png;charset=utf-8;base64,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"> + <link rel="apple-touch-icon" href="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAIAAAADehTSAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAKJGNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G+fAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m+BkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd+q00KR5yNAlWZzrF+Ie+uNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf+ja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL+kmMGs4i5kfNuQ62EnBuam8tzP+Q+tSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK+Mdg8y5nkZfFO+se9LQr3/09xZr+5GcaSufeAfAww60mAPx+q8u/bAr8rFCLrx7s+vqEkw8qb+p26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC+W8cndbl9t2SfhU+Fb4UfhO+F74GWThknBZ+Em4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1+U0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL+iH6jB9y2x83ok898GOPQX3lk3Itl0A+BrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn+Vmc+NL9L8GcMn8F1kAcXjEKMJAAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrlPw1BAAALFElEQVRoge2aeWxcxR3Hv/OOvbKHvWuv7V0fcQK5E+wEm1w1OZ0Ek1BCARUhWpUCalGl0pMeIKBIFBVVolWJkGhpGiBAoCE0FaQBnEKUg6QkzmUbO7bjIz7iY+9950z/2F1718eujd1KVflp9GTtzux83m9+v+/7zRsDX9qX9r9jZJrjTSaT1+vNOEsg4L927do055quVVVVhcPhUDAYCgYmauFwaNeuXdOfS5jmeFEULRYLpH6AgbHxO5mtRqNxmhNh+qyMMYBBk5NYk4kJwAAjm+g2pmLTZQUAMDAdjMYpR2MxMDr9xMAMsQJMA02wgoEBYAABAViMdQZshlipDqYjFg/ASBiwGKueGhhf0GYqBjTQGNCYqGUMVKN0Blw7U37VRvw64t2YMegqo9r0J5kJVqaD6aBaEmhykjFQFVSf/jwzoVm6CqrFWTGcScN5xqCrdCZYuXE/feihh3bsuM1kMk0GFroKpsUbVeNXmrgyFVRlk2N15+Y8+M17fvGjh8f9dhy/ulyup3/1VE6u6+yZs6/tfX3fvrfa2tomRAWjusrRGCtLqGxyhsXiNR0rx3GVK8ru3llza/W6OSUFPX1DL7+y72pPX2bWDRvW5+Q6ER0qW1Ja9uwTP/3B9/5+6IM9e179+JOjiqKMgWUs5leqgTGAxq/xkAVA07AW5Llrtqy/+/ZbKssX2mcZQDWq+l0O48abV+1540Bm1q/t/CqYChCoKqSwy8ru+/q2e+/YdvrspVffeHv/O3/r6OxMYqVUV/kUv9KRDIux0tE6wPP8qoryu3fWbNu4erYnm4cCGoEqgxM4jnBadEd1VWZWT0HBzWtXQY6OZAmliAQ5qlYu81aW/+TR7z9w8NCRV/a+fezESU3TNE1jusqoRtiwX2mKIDAKqlI9zur15G/fsuHO2zZXLJtrM1GoESjXQHgQHoSCUfACdLmibF5psbe1vSsda/WmDXl5LmgqGE1pABQZNFhgZw/cs/G+OzadPNO4e+9fg6GwpspiTLbiPUfhUqYpIs+trlx+713bt66rKMmzcHoQeg+iZIRyuIHxPHLsxuqbK1/csz+ZbXRJcWDfKzt2bIWOlIyOhePwH0wF1SAIIMY+n2YymWx6J2FanJKNZo0y24DssBlVh1mFEgDTQXiAAziQWOMTVx6EBydIkfCho5d2fvvnyQ+8FL+Wzi5ZXVkOHeBEEB5UBQOggepx1xIeHAElIIAqgwbcRqppANTRfk3CFamvwBDkmYoIAALCARSEgHBgMUQ91bvgiF62sGj+nML65vbxWbdVr8/JcUENINAI3wUEGhHpgNwPXQYA3gDBBmMOzB5YimD2QnSAiAKRErVLDFcfFbgCGGjSMhISJyYx1+pJuEIsDESBy57Fb6laMT4rx3E7ampY80ukcRekLgyLzKgwiekmBxjsmFWKrDJk3wBzAQgHqiTUIFHOji1qCQGLsZIEK5catTxACSfwUDevXfaHv7yravpo1gXz5t64uIjVPUrCXeABHhlMCUCuw0AdRAPsi+CugmMxiAAqJ1iTtDZlr5BgTYnX4SYAFIAosEWl7iXzis9cah3Nun1bdRa5SiId8X1HxkKeJPpQBYNnMXQW1jnI34ysJfEqMVkTRlaEgCERtSQBqiclFgUTQJnAw2bCrevKRrMSQsqXLdDMs0nFbtZ7hO//WIg0QddGgNJbrKwItaD5RWQtRcE2mPLBYsKX9BhLvtEUVi6W/oDONFVWqKIyVSNBmbjdbsIRRmP3lzCn07myYnnN1o1VK28sdpvFSBPp+yc/dEyMXAbVJwsNgAKiBflb4FwBpoMl14rDoCS+LnFKwigna1A0XtFFXwT1bYO1pxo/PHauvqlNVeThhRxtTqdz9U0rajavW1t5Q2GOUYw0kf6jou+kKLWC0klBx6icK5C/GYSPJ9xIJJD4VowQRoms87JmUJjZH+Xqr/hqT33+0fFzFxtbNHV07ZFuWpfLteam5bds+srqFUu8Tl6MNHEDxw3B06LckZDbtMQUsM2Bpwa8MYELEAYwSomsCbJuUmD1S2Jju6/29OcfHTt/obFVU+WJfm9S65qbm7OmsnzrhtUry+Z7sogQbuJ8n5ojdQalI8NICszywFMD3gSqM0ajqhDRTDpnD8jGxk7/kVNNHx4/f7GxdXih09jUtu3u3NzVlWV3bFvzleXzs/p2O/zvTyoeLF4UbAHHM13rCrp6Qta9hy/Unrx4oaFlMojDllFFUywciTQ0tawtv26l56pj4E1CJrGTJoAahOaHuZBAt/DhoMS/sLf21Lkmqk9tYzM1VgD337npkbuWZve8yLHoZMcQQB4CITDmcES2isqS+QtqT7f4gtJ/kLVy2dznfrgz37dbVLunFj4EkK7BmA3eJHIRu5n35hceOtGsalN4bzAF1lyn7YXHvrHI+LEl/NkXeT3FGFQ/THkANfIhd3YWL5g/qevMPHCqrDzHPfPIndULAnbfQZIBlFAIBGMcRgBNAsfDYCVMNZJQSYGnqz/a0D40w6z3377mO9tnu3yv8xizPUy1QbKwnyxxoG2c7wighWDMAnSel41cdG6R99OG/j7fpAJ3Uqw3LS155uENXukdA+1P31OB7QpZH0a+yHwWMjhOD6qDA0QDdMUgSiaBFeflfnimV1Iya0JmVrfT+rsf37bY8ukstSF9TwbSx6/5U23kRMPA0uvnWGinSMbIJwF0GQYDoIIpZjFkM5ntFsuRcwMZXydnYBV47unvVlfP92dLn2RMJx+bc6p3zs92HTle17ps0fW5DquDdI2jwUwHr4GLgoYJiZqFQK49Oxhlda3habF+a3v5g1vz3dL7PDK86JOo9YpW8fjuiw2tPZTq51t9VSvmmTjZJo5JHQYQBYISc63AR418qMjlvNQhdQ6kmyUd68rFnqfuX17Mao3wpwdl4K7qS187pv75YF3sE58/NBAVKhZ6zBg0CamREKvlhQQ3g8moCpBLXMLRejXN82FC1mK39TcPr1lkr7eztvSgIOhXPf/qKfzlHz+LSCNYTe39ue682bkGh+DjuVQJYwAHkEQVzmCzqERXPQ52tBHKBM4d/z0hgLmlhXm52QNyTlDPTqf8BBHV3Bkpev6dy/1DwVQg+vu3Lp7pntURsLGxP6EDNMFK0dWDQBAlhZ4cp3WiqSb0a1tX/6nmyLzrrjOYnLqqWIXguMAUXHu4eN9p8vJ7TWMPBWRFaerFqoUGMwI28+ibjDVVRWMbugeMJ7qLHnsj0t49Ybyli9eevsHDp686crwed25YglUMC1yqChL0hBxnel2P72mNRMev7voGgirvWlQg2Q2aUUxl5eHz41IL+iPZr551P7e/x+cPpOHJoAOSJB05feWabJtfmi/JTCSyWVSHJwtKwmW/49l3o+cvjyf7Catvj5QUed1Gv8vGOBIfy4D2bjR3kCsR77OHDQeOdlBdTfMjmVkBAKyhpedEs1Y622vkNUWR7CadcNApWgbJgXPmlw9dS38kxKh+oRMV1zstCDodAIGk4FILuodMx3qLntwfqm/tncyh0mTrgYGhwAdnhgyOAq9TDYQiVhN6/TjXY3/yTSkUyVzbhyNSV9ixvJDYBFlWceEy+mXnnnO5zx/sDgaDGYdPjRWAqionzve3h/PmFWVJIb8vKv72H5a6yxmkd9g6+0Imh6fYEuobRFvU++vDwnsnO6Z0ljTVfQFr7Rw62mwsLSmqv8q/dHhgKueX7GKHtHhe0WW//Yn9gab2/9a/ExiMZqt11hcYaLfbBHEGzue/tP9P+zclUOrCr+J20QAAAABJRU5ErkJgggo="> + <link rel="shortcut icon" href="data:image/png;charset=utf-8;base64,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"> -* 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. + <meta http-equiv="cleartype" content="on"> + <meta name="apple-mobile-web-app-capable" content="yes"> -* 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 Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + <!-- link rel="apple-touch-startup-image" href="data:image/png;charset=utf-8;base64,iVBORw0K...ggo=" --> +<!-- +@copyright@ --> -<html> -<head> - <title>@page.title@</title> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> -@copyright@ @css@ <link rel="shortcut icon" href="./clipperz.ico" /> <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> <script> Clipperz_IEisBroken = false; Clipperz_normalizedNewLine = '\n'; Clipperz_dumpUrl = "/dump/"; </script> -<!--[if IE]><script> -Clipperz_IEisBroken = true; -Clipperz_normalizedNewLine = '\x0d\x0a'; -</script><![endif]--> - -@CLIPPERZ_DEBUG_VERSION@ +@js_LINKED@ </head> <body> <div id="mainDiv"> <div id="loading"> - <a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a> - <h5 class="clipperzPayoff">keep it to yourself!</h5> - <h2>loading ...</h2> + <div> + <!-- a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a --> + <h1>clipperz</h1> + <h3 class="clipperzPayoff">keep it to yourself!</h3> + <!-- h5>loading ...</h5 --> + </div> </div> -@CLIPPERZ_INSTALLED_VERSION@ - -</div> -<div id="applicationVersionType" class="@application.version.type@"></div> +@js_EMBEDDED@ -<!-- --> -<div id="javaScriptAlert"> - <div class="mask"></div> - <div class="message"> - <div class="header"></div> - <div class="body"> - <div class="alertLogo"></div> - <div class="alert"> - <h1>Attention!</h1> - <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> - <h3>Javascript is required to access Clipperz.</h3> - <h5>Please enable scripting or upgrade your browser.</h5> - </div> - </div> - <div class="footer"></div> - </div> </div> -<!-- --> +<!-- div id="applicationVersionType" class="@application.version.type@"></div --> + +<script> + Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@}); + /*offline_data_placeholder*/ +</script> </body> </html> diff --git a/frontend/gamma/images/old/alert/alert.png b/frontend/gamma/images/old/alert/alert.png Binary files differnew file mode 100644 index 0000000..ade6040 --- a/dev/null +++ b/frontend/gamma/images/old/alert/alert.png diff --git a/frontend/gamma/images/old/alert/body.png b/frontend/gamma/images/old/alert/body.png Binary files differnew file mode 100644 index 0000000..3f0ab21 --- a/dev/null +++ b/frontend/gamma/images/old/alert/body.png diff --git a/frontend/gamma/images/old/alert/footer.png b/frontend/gamma/images/old/alert/footer.png Binary files differnew file mode 100644 index 0000000..a9587c8 --- a/dev/null +++ b/frontend/gamma/images/old/alert/footer.png diff --git a/frontend/gamma/images/old/alert/header.png b/frontend/gamma/images/old/alert/header.png Binary files differnew file mode 100644 index 0000000..079dd13 --- a/dev/null +++ b/frontend/gamma/images/old/alert/header.png diff --git a/frontend/gamma/images/old/bookmarklet/placeholder.png b/frontend/gamma/images/old/bookmarklet/placeholder.png Binary files differnew file mode 100644 index 0000000..792dbf5 --- a/dev/null +++ b/frontend/gamma/images/old/bookmarklet/placeholder.png diff --git a/frontend/gamma/images/old/bookmarklet/placeholder_icon.png b/frontend/gamma/images/old/bookmarklet/placeholder_icon.png Binary files differnew file mode 100644 index 0000000..dc06721 --- a/dev/null +++ b/frontend/gamma/images/old/bookmarklet/placeholder_icon.png diff --git a/frontend/gamma/images/old/bookmarklet/placeholder_selected.png b/frontend/gamma/images/old/bookmarklet/placeholder_selected.png Binary files differnew file mode 100644 index 0000000..d01ac89 --- a/dev/null +++ b/frontend/gamma/images/old/bookmarklet/placeholder_selected.png diff --git a/frontend/gamma/images/old/bookmarklet/placeholder_selected_icon.png b/frontend/gamma/images/old/bookmarklet/placeholder_selected_icon.png Binary files differnew file mode 100644 index 0000000..c8c2a86 --- a/dev/null +++ b/frontend/gamma/images/old/bookmarklet/placeholder_selected_icon.png diff --git a/frontend/gamma/images/old/button/clicked_left.png b/frontend/gamma/images/old/button/clicked_left.png Binary files differnew file mode 100644 index 0000000..332260d --- a/dev/null +++ b/frontend/gamma/images/old/button/clicked_left.png diff --git a/frontend/gamma/images/old/button/clicked_main.png b/frontend/gamma/images/old/button/clicked_main.png Binary files differnew file mode 100644 index 0000000..d0fe732 --- a/dev/null +++ b/frontend/gamma/images/old/button/clicked_main.png diff --git a/frontend/gamma/images/old/button/default_left.png b/frontend/gamma/images/old/button/default_left.png Binary files differnew file mode 100644 index 0000000..94178fc --- a/dev/null +++ b/frontend/gamma/images/old/button/default_left.png diff --git a/frontend/gamma/images/old/button/default_main.png b/frontend/gamma/images/old/button/default_main.png Binary files differnew file mode 100644 index 0000000..8b97bea --- a/dev/null +++ b/frontend/gamma/images/old/button/default_main.png diff --git a/frontend/gamma/images/old/button/hover_left.png b/frontend/gamma/images/old/button/hover_left.png Binary files differnew file mode 100644 index 0000000..de09c1a --- a/dev/null +++ b/frontend/gamma/images/old/button/hover_left.png diff --git a/frontend/gamma/images/old/button/hover_main.png b/frontend/gamma/images/old/button/hover_main.png Binary files differnew file mode 100644 index 0000000..6c07f57 --- a/dev/null +++ b/frontend/gamma/images/old/button/hover_main.png diff --git a/frontend/gamma/images/old/cardDialog/addDirectLogin_background.png b/frontend/gamma/images/old/cardDialog/addDirectLogin_background.png Binary files differnew file mode 100644 index 0000000..130d060 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/addDirectLogin_background.png diff --git a/frontend/gamma/images/old/cardDialog/addDirectLogin_disabled_background.png b/frontend/gamma/images/old/cardDialog/addDirectLogin_disabled_background.png Binary files differnew file mode 100644 index 0000000..e67f5c4 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/addDirectLogin_disabled_background.png diff --git a/frontend/gamma/images/old/cardDialog/back.png b/frontend/gamma/images/old/cardDialog/back.png Binary files differnew file mode 100644 index 0000000..97ef21e --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/back.png diff --git a/frontend/gamma/images/old/cardDialog/back_selected.png b/frontend/gamma/images/old/cardDialog/back_selected.png Binary files differnew file mode 100644 index 0000000..18d4f0a --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/back_selected.png diff --git a/frontend/gamma/images/old/cardDialog/background_body.png b/frontend/gamma/images/old/cardDialog/background_body.png Binary files differnew file mode 100644 index 0000000..9640d23 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/background_body.png diff --git a/frontend/gamma/images/old/cardDialog/background_footer.png b/frontend/gamma/images/old/cardDialog/background_footer.png Binary files differnew file mode 100644 index 0000000..4d70eb3 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/background_footer.png diff --git a/frontend/gamma/images/old/cardDialog/background_header.png b/frontend/gamma/images/old/cardDialog/background_header.png Binary files differnew file mode 100644 index 0000000..3223a1e --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/background_header.png diff --git a/frontend/gamma/images/old/cardDialog/dottedLine_background.png b/frontend/gamma/images/old/cardDialog/dottedLine_background.png Binary files differnew file mode 100644 index 0000000..c447f02 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/dottedLine_background.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/email.png b/frontend/gamma/images/old/cardDialog/fieldTypes/email.png Binary files differnew file mode 100644 index 0000000..afe4e8a --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/email.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/email_selected.png b/frontend/gamma/images/old/cardDialog/fieldTypes/email_selected.png Binary files differnew file mode 100644 index 0000000..017904c --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/email_selected.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/password.png b/frontend/gamma/images/old/cardDialog/fieldTypes/password.png Binary files differnew file mode 100644 index 0000000..fff876d --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/password.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/passwordTooltip.png b/frontend/gamma/images/old/cardDialog/fieldTypes/passwordTooltip.png Binary files differnew file mode 100644 index 0000000..3eb4d4f --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/passwordTooltip.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/password_selected.png b/frontend/gamma/images/old/cardDialog/fieldTypes/password_selected.png Binary files differnew file mode 100644 index 0000000..b9dc839 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/password_selected.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/url.png b/frontend/gamma/images/old/cardDialog/fieldTypes/url.png Binary files differnew file mode 100644 index 0000000..3ac1266 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/url.png diff --git a/frontend/gamma/images/old/cardDialog/fieldTypes/url_selected.png b/frontend/gamma/images/old/cardDialog/fieldTypes/url_selected.png Binary files differnew file mode 100644 index 0000000..77b1143 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/fieldTypes/url_selected.png diff --git a/frontend/gamma/images/old/cardDialog/loading.gif b/frontend/gamma/images/old/cardDialog/loading.gif Binary files differnew file mode 100644 index 0000000..a846634 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/loading.gif diff --git a/frontend/gamma/images/old/cardDialog/lock_closed.png b/frontend/gamma/images/old/cardDialog/lock_closed.png Binary files differnew file mode 100644 index 0000000..5ea9b9e --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/lock_closed.png diff --git a/frontend/gamma/images/old/cardDialog/lock_open.png b/frontend/gamma/images/old/cardDialog/lock_open.png Binary files differnew file mode 100644 index 0000000..cb94955 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/lock_open.png diff --git a/frontend/gamma/images/old/cardDialog/openDirectLogin.png b/frontend/gamma/images/old/cardDialog/openDirectLogin.png Binary files differnew file mode 100644 index 0000000..e0b6a25 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/openDirectLogin.png diff --git a/frontend/gamma/images/old/cardDialog/openDirectLogin_selected.png b/frontend/gamma/images/old/cardDialog/openDirectLogin_selected.png Binary files differnew file mode 100644 index 0000000..a2a6f47 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/openDirectLogin_selected.png diff --git a/frontend/gamma/images/old/cardDialog/password_background.png b/frontend/gamma/images/old/cardDialog/password_background.png Binary files differnew file mode 100644 index 0000000..9432573 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/password_background.png diff --git a/frontend/gamma/images/old/cardDialog/tabs_background.png b/frontend/gamma/images/old/cardDialog/tabs_background.png Binary files differnew file mode 100644 index 0000000..ebaad24 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/tabs_background.png diff --git a/frontend/gamma/images/old/cardDialog/tabs_shadow.png b/frontend/gamma/images/old/cardDialog/tabs_shadow.png Binary files differnew file mode 100644 index 0000000..04b51e6 --- a/dev/null +++ b/frontend/gamma/images/old/cardDialog/tabs_shadow.png diff --git a/frontend/gamma/images/old/creatingUser.gif b/frontend/gamma/images/old/creatingUser.gif Binary files differnew file mode 100644 index 0000000..69448f8 --- a/dev/null +++ b/frontend/gamma/images/old/creatingUser.gif diff --git a/frontend/gamma/images/old/delete_background.png b/frontend/gamma/images/old/delete_background.png Binary files differnew file mode 100644 index 0000000..b9bc088 --- a/dev/null +++ b/frontend/gamma/images/old/delete_background.png diff --git a/frontend/gamma/images/old/delete_background_left.png b/frontend/gamma/images/old/delete_background_left.png Binary files differnew file mode 100644 index 0000000..af3beac --- a/dev/null +++ b/frontend/gamma/images/old/delete_background_left.png diff --git a/frontend/gamma/images/old/directLink_background.png b/frontend/gamma/images/old/directLink_background.png Binary files differnew file mode 100644 index 0000000..b36757a --- a/dev/null +++ b/frontend/gamma/images/old/directLink_background.png diff --git a/frontend/gamma/images/old/directLink_background_left.png b/frontend/gamma/images/old/directLink_background_left.png Binary files differnew file mode 100644 index 0000000..11f282d --- a/dev/null +++ b/frontend/gamma/images/old/directLink_background_left.png diff --git a/frontend/gamma/images/old/directLink_no_background.png b/frontend/gamma/images/old/directLink_no_background.png Binary files differnew file mode 100644 index 0000000..21a18e2 --- a/dev/null +++ b/frontend/gamma/images/old/directLink_no_background.png diff --git a/frontend/gamma/images/old/directLogins_background.png b/frontend/gamma/images/old/directLogins_background.png Binary files differnew file mode 100644 index 0000000..959ecaf --- a/dev/null +++ b/frontend/gamma/images/old/directLogins_background.png diff --git a/frontend/gamma/images/old/directLogins_background_bottom.png b/frontend/gamma/images/old/directLogins_background_bottom.png Binary files differnew file mode 100644 index 0000000..c3c40d0 --- a/dev/null +++ b/frontend/gamma/images/old/directLogins_background_bottom.png diff --git a/frontend/gamma/images/old/filter/clearFilter_notSelected.png b/frontend/gamma/images/old/filter/clearFilter_notSelected.png Binary files differnew file mode 100644 index 0000000..ec2e2fe --- a/dev/null +++ b/frontend/gamma/images/old/filter/clearFilter_notSelected.png diff --git a/frontend/gamma/images/old/filter/clearFilter_selected.png b/frontend/gamma/images/old/filter/clearFilter_selected.png Binary files differnew file mode 100644 index 0000000..6bfb463 --- a/dev/null +++ b/frontend/gamma/images/old/filter/clearFilter_selected.png diff --git a/frontend/gamma/images/old/flags/br.png b/frontend/gamma/images/old/flags/br.png Binary files differnew file mode 100644 index 0000000..51ac06e --- a/dev/null +++ b/frontend/gamma/images/old/flags/br.png diff --git a/frontend/gamma/images/old/flags/cn.png b/frontend/gamma/images/old/flags/cn.png Binary files differnew file mode 100644 index 0000000..4be2967 --- a/dev/null +++ b/frontend/gamma/images/old/flags/cn.png diff --git a/frontend/gamma/images/old/flags/de.png b/frontend/gamma/images/old/flags/de.png Binary files differnew file mode 100644 index 0000000..a66d634 --- a/dev/null +++ b/frontend/gamma/images/old/flags/de.png diff --git a/frontend/gamma/images/old/flags/en.png b/frontend/gamma/images/old/flags/en.png Binary files differnew file mode 100644 index 0000000..6d193aa --- a/dev/null +++ b/frontend/gamma/images/old/flags/en.png diff --git a/frontend/gamma/images/old/flags/es.png b/frontend/gamma/images/old/flags/es.png Binary files differnew file mode 100644 index 0000000..503ffca --- a/dev/null +++ b/frontend/gamma/images/old/flags/es.png diff --git a/frontend/gamma/images/old/flags/it.png b/frontend/gamma/images/old/flags/it.png Binary files differnew file mode 100644 index 0000000..a271baf --- a/dev/null +++ b/frontend/gamma/images/old/flags/it.png diff --git a/frontend/gamma/images/old/flags/jp.png b/frontend/gamma/images/old/flags/jp.png Binary files differnew file mode 100644 index 0000000..19e81e3 --- a/dev/null +++ b/frontend/gamma/images/old/flags/jp.png diff --git a/frontend/gamma/images/old/flags/ru.png b/frontend/gamma/images/old/flags/ru.png Binary files differnew file mode 100644 index 0000000..7391499 --- a/dev/null +++ b/frontend/gamma/images/old/flags/ru.png diff --git a/frontend/gamma/images/old/footer/star.png b/frontend/gamma/images/old/footer/star.png Binary files differnew file mode 100644 index 0000000..7c6e53c --- a/dev/null +++ b/frontend/gamma/images/old/footer/star.png diff --git a/frontend/gamma/images/old/home/box/box_body.png b/frontend/gamma/images/old/home/box/box_body.png Binary files differnew file mode 100644 index 0000000..168c776 --- a/dev/null +++ b/frontend/gamma/images/old/home/box/box_body.png diff --git a/frontend/gamma/images/old/home/box/box_bottom.png b/frontend/gamma/images/old/home/box/box_bottom.png Binary files differnew file mode 100644 index 0000000..f8e72be --- a/dev/null +++ b/frontend/gamma/images/old/home/box/box_bottom.png diff --git a/frontend/gamma/images/old/home/box/box_top.png b/frontend/gamma/images/old/home/box/box_top.png Binary files differnew file mode 100644 index 0000000..ff7b607 --- a/dev/null +++ b/frontend/gamma/images/old/home/box/box_top.png diff --git a/frontend/gamma/images/old/home/download.png b/frontend/gamma/images/old/home/download.png Binary files differnew file mode 100644 index 0000000..deffc1b --- a/dev/null +++ b/frontend/gamma/images/old/home/download.png diff --git a/frontend/gamma/images/old/home/features/bullet.png b/frontend/gamma/images/old/home/features/bullet.png Binary files differnew file mode 100644 index 0000000..1f51609 --- a/dev/null +++ b/frontend/gamma/images/old/home/features/bullet.png diff --git a/frontend/gamma/images/old/home/look.png b/frontend/gamma/images/old/home/look.png Binary files differnew file mode 100644 index 0000000..a2a49eb --- a/dev/null +++ b/frontend/gamma/images/old/home/look.png diff --git a/frontend/gamma/images/old/home/register.png b/frontend/gamma/images/old/home/register.png Binary files differnew file mode 100644 index 0000000..be7c151 --- a/dev/null +++ b/frontend/gamma/images/old/home/register.png diff --git a/frontend/gamma/images/old/home/register_selected.png b/frontend/gamma/images/old/home/register_selected.png Binary files differnew file mode 100644 index 0000000..f29aaae --- a/dev/null +++ b/frontend/gamma/images/old/home/register_selected.png diff --git a/frontend/gamma/images/old/iPhone/backButton.png b/frontend/gamma/images/old/iPhone/backButton.png Binary files differnew file mode 100644 index 0000000..e27ea8c --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/backButton.png diff --git a/frontend/gamma/images/old/iPhone/icon.png b/frontend/gamma/images/old/iPhone/icon.png Binary files differnew file mode 100644 index 0000000..1c97389 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/icon.png diff --git a/frontend/gamma/images/old/iPhone/listArrow.png b/frontend/gamma/images/old/iPhone/listArrow.png Binary files differnew file mode 100644 index 0000000..6421a16 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/listArrow.png diff --git a/frontend/gamma/images/old/iPhone/locked.png b/frontend/gamma/images/old/iPhone/locked.png Binary files differnew file mode 100644 index 0000000..e00d5f6 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/locked.png diff --git a/frontend/gamma/images/old/iPhone/logo_and_header.png b/frontend/gamma/images/old/iPhone/logo_and_header.png Binary files differnew file mode 100644 index 0000000..0fe26a3 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/logo_and_header.png diff --git a/frontend/gamma/images/old/iPhone/password_background.png b/frontend/gamma/images/old/iPhone/password_background.png Binary files differnew file mode 100644 index 0000000..9432573 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/password_background.png diff --git a/frontend/gamma/images/old/iPhone/pinstripes.png b/frontend/gamma/images/old/iPhone/pinstripes.png Binary files differnew file mode 100644 index 0000000..c997775 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/pinstripes.png diff --git a/frontend/gamma/images/old/iPhone/thumb.png b/frontend/gamma/images/old/iPhone/thumb.png Binary files differnew file mode 100644 index 0000000..cefa8fc --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/thumb.png diff --git a/frontend/gamma/images/old/iPhone/toggle.png b/frontend/gamma/images/old/iPhone/toggle.png Binary files differnew file mode 100644 index 0000000..3b62ebf --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/toggle.png diff --git a/frontend/gamma/images/old/iPhone/toggleOn.png b/frontend/gamma/images/old/iPhone/toggleOn.png Binary files differnew file mode 100644 index 0000000..b016814 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/toggleOn.png diff --git a/frontend/gamma/images/old/iPhone/toolbar.png b/frontend/gamma/images/old/iPhone/toolbar.png Binary files differnew file mode 100644 index 0000000..3dde94c --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/toolbar.png diff --git a/frontend/gamma/images/old/iPhone/whiteButton.png b/frontend/gamma/images/old/iPhone/whiteButton.png Binary files differnew file mode 100644 index 0000000..5514b27 --- a/dev/null +++ b/frontend/gamma/images/old/iPhone/whiteButton.png diff --git a/frontend/gamma/images/old/loading/loadingBar.gif b/frontend/gamma/images/old/loading/loadingBar.gif Binary files differnew file mode 100644 index 0000000..b111948 --- a/dev/null +++ b/frontend/gamma/images/old/loading/loadingBar.gif diff --git a/frontend/gamma/images/old/loading/loadingBarProgress.png b/frontend/gamma/images/old/loading/loadingBarProgress.png Binary files differnew file mode 100644 index 0000000..68436ed --- a/dev/null +++ b/frontend/gamma/images/old/loading/loadingBarProgress.png diff --git a/frontend/gamma/images/old/loading/news.gif b/frontend/gamma/images/old/loading/news.gif Binary files differnew file mode 100644 index 0000000..33d70b5 --- a/dev/null +++ b/frontend/gamma/images/old/loading/news.gif diff --git a/frontend/gamma/images/old/lock/background_star.png b/frontend/gamma/images/old/lock/background_star.png Binary files differnew file mode 100644 index 0000000..4dff077 --- a/dev/null +++ b/frontend/gamma/images/old/lock/background_star.png diff --git a/frontend/gamma/images/old/lock/locked.png b/frontend/gamma/images/old/lock/locked.png Binary files differnew file mode 100644 index 0000000..e00d5f6 --- a/dev/null +++ b/frontend/gamma/images/old/lock/locked.png diff --git a/frontend/gamma/images/old/lock/locked_hover.png b/frontend/gamma/images/old/lock/locked_hover.png Binary files differnew file mode 100644 index 0000000..62ad133 --- a/dev/null +++ b/frontend/gamma/images/old/lock/locked_hover.png diff --git a/frontend/gamma/images/old/lock/unlocked.png b/frontend/gamma/images/old/lock/unlocked.png Binary files differnew file mode 100644 index 0000000..13eadfe --- a/dev/null +++ b/frontend/gamma/images/old/lock/unlocked.png diff --git a/frontend/gamma/images/old/lock/unlocked_hover.png b/frontend/gamma/images/old/lock/unlocked_hover.png Binary files differnew file mode 100644 index 0000000..1a45c2f --- a/dev/null +++ b/frontend/gamma/images/old/lock/unlocked_hover.png diff --git a/frontend/gamma/images/old/logo.png b/frontend/gamma/images/old/logo.png Binary files differnew file mode 100644 index 0000000..62b58d9 --- a/dev/null +++ b/frontend/gamma/images/old/logo.png diff --git a/frontend/gamma/images/old/logo_blue.png b/frontend/gamma/images/old/logo_blue.png Binary files differnew file mode 100644 index 0000000..fff4a51 --- a/dev/null +++ b/frontend/gamma/images/old/logo_blue.png diff --git a/frontend/gamma/images/old/main/blocks/cardGridBackground.png b/frontend/gamma/images/old/main/blocks/cardGridBackground.png Binary files differnew file mode 100644 index 0000000..66dabf8 --- a/dev/null +++ b/frontend/gamma/images/old/main/blocks/cardGridBackground.png diff --git a/frontend/gamma/images/old/main/blocks/cardGridStripes.png b/frontend/gamma/images/old/main/blocks/cardGridStripes.png Binary files differnew file mode 100644 index 0000000..fdda774 --- a/dev/null +++ b/frontend/gamma/images/old/main/blocks/cardGridStripes.png diff --git a/frontend/gamma/images/old/main/blocks/directLoginGridBackground.png b/frontend/gamma/images/old/main/blocks/directLoginGridBackground.png Binary files differnew file mode 100644 index 0000000..92dd1b8 --- a/dev/null +++ b/frontend/gamma/images/old/main/blocks/directLoginGridBackground.png diff --git a/frontend/gamma/images/old/main/blocks/directLoginGridStripes.png b/frontend/gamma/images/old/main/blocks/directLoginGridStripes.png Binary files differnew file mode 100644 index 0000000..a6fc345 --- a/dev/null +++ b/frontend/gamma/images/old/main/blocks/directLoginGridStripes.png diff --git a/frontend/gamma/images/old/main/blocks/otherPanelBackground.png b/frontend/gamma/images/old/main/blocks/otherPanelBackground.png Binary files differnew file mode 100644 index 0000000..d9f5ec5 --- a/dev/null +++ b/frontend/gamma/images/old/main/blocks/otherPanelBackground.png diff --git a/frontend/gamma/images/old/main/blocks/otherPanelBackground_selected.png b/frontend/gamma/images/old/main/blocks/otherPanelBackground_selected.png Binary files differnew file mode 100644 index 0000000..0ce1d0c --- a/dev/null +++ b/frontend/gamma/images/old/main/blocks/otherPanelBackground_selected.png diff --git a/frontend/gamma/images/old/main/grid/ascending.png b/frontend/gamma/images/old/main/grid/ascending.png Binary files differnew file mode 100644 index 0000000..9a05f48 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/ascending.png diff --git a/frontend/gamma/images/old/main/grid/createNewCardSplash.png b/frontend/gamma/images/old/main/grid/createNewCardSplash.png Binary files differnew file mode 100644 index 0000000..f7289a5 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/createNewCardSplash.png diff --git a/frontend/gamma/images/old/main/grid/createNewCardSplash_selected.png b/frontend/gamma/images/old/main/grid/createNewCardSplash_selected.png Binary files differnew file mode 100644 index 0000000..13d536f --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/createNewCardSplash_selected.png diff --git a/frontend/gamma/images/old/main/grid/descending.png b/frontend/gamma/images/old/main/grid/descending.png Binary files differnew file mode 100644 index 0000000..868857b --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/descending.png diff --git a/frontend/gamma/images/old/main/grid/directLogins/ascending.png b/frontend/gamma/images/old/main/grid/directLogins/ascending.png Binary files differnew file mode 100644 index 0000000..e1ace30 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/directLogins/ascending.png diff --git a/frontend/gamma/images/old/main/grid/directLogins/descending.png b/frontend/gamma/images/old/main/grid/directLogins/descending.png Binary files differnew file mode 100644 index 0000000..47b0685 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/directLogins/descending.png diff --git a/frontend/gamma/images/old/main/grid/directLogins/unsorted.png b/frontend/gamma/images/old/main/grid/directLogins/unsorted.png Binary files differnew file mode 100644 index 0000000..ecf674e --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/directLogins/unsorted.png diff --git a/frontend/gamma/images/old/main/grid/favicon.png b/frontend/gamma/images/old/main/grid/favicon.png Binary files differnew file mode 100644 index 0000000..00d208d --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/favicon.png diff --git a/frontend/gamma/images/old/main/grid/running_search.gif b/frontend/gamma/images/old/main/grid/running_search.gif Binary files differnew file mode 100644 index 0000000..d02d3b7 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/running_search.gif diff --git a/frontend/gamma/images/old/main/grid/search.png b/frontend/gamma/images/old/main/grid/search.png Binary files differnew file mode 100644 index 0000000..5bc8d62 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/search.png diff --git a/frontend/gamma/images/old/main/grid/unsorted.png b/frontend/gamma/images/old/main/grid/unsorted.png Binary files differnew file mode 100644 index 0000000..4bbcee3 --- a/dev/null +++ b/frontend/gamma/images/old/main/grid/unsorted.png diff --git a/frontend/gamma/images/old/main/messageBoxBackground.png b/frontend/gamma/images/old/main/messageBoxBackground.png Binary files differnew file mode 100644 index 0000000..de598b2 --- a/dev/null +++ b/frontend/gamma/images/old/main/messageBoxBackground.png diff --git a/frontend/gamma/images/old/main/messageBoxCloseButton.png b/frontend/gamma/images/old/main/messageBoxCloseButton.png Binary files differnew file mode 100644 index 0000000..061a7bb --- a/dev/null +++ b/frontend/gamma/images/old/main/messageBoxCloseButton.png diff --git a/frontend/gamma/images/old/main/messageBoxCloseButtonActive.png b/frontend/gamma/images/old/main/messageBoxCloseButtonActive.png Binary files differnew file mode 100644 index 0000000..dbc6871 --- a/dev/null +++ b/frontend/gamma/images/old/main/messageBoxCloseButtonActive.png diff --git a/frontend/gamma/images/old/main/tabs/cardsBackground.png b/frontend/gamma/images/old/main/tabs/cardsBackground.png Binary files differnew file mode 100644 index 0000000..dd3643e --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/cardsBackground.png diff --git a/frontend/gamma/images/old/main/tabs/directLoginBackground.png b/frontend/gamma/images/old/main/tabs/directLoginBackground.png Binary files differnew file mode 100644 index 0000000..23a9b22 --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/directLoginBackground.png diff --git a/frontend/gamma/images/old/main/tabs/groupsBackground.png b/frontend/gamma/images/old/main/tabs/groupsBackground.png Binary files differnew file mode 100644 index 0000000..9cbc9ba --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/groupsBackground.png diff --git a/frontend/gamma/images/old/main/tabs/itemsBackground.png b/frontend/gamma/images/old/main/tabs/itemsBackground.png Binary files differnew file mode 100644 index 0000000..1a276a5 --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/itemsBackground.png diff --git a/frontend/gamma/images/old/main/tabs/selectionHighligher.png b/frontend/gamma/images/old/main/tabs/selectionHighligher.png Binary files differnew file mode 100644 index 0000000..f93fb02 --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/selectionHighligher.png diff --git a/frontend/gamma/images/old/main/tabs/selectionHighligherGray copy.png b/frontend/gamma/images/old/main/tabs/selectionHighligherGray copy.png Binary files differnew file mode 100644 index 0000000..7741a7a --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/selectionHighligherGray copy.png diff --git a/frontend/gamma/images/old/main/tabs/selectionHighligherGray.png b/frontend/gamma/images/old/main/tabs/selectionHighligherGray.png Binary files differnew file mode 100644 index 0000000..8f6a690 --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/selectionHighligherGray.png diff --git a/frontend/gamma/images/old/main/tabs/tagsBackground.png b/frontend/gamma/images/old/main/tabs/tagsBackground.png Binary files differnew file mode 100644 index 0000000..4a8091d --- a/dev/null +++ b/frontend/gamma/images/old/main/tabs/tagsBackground.png diff --git a/frontend/gamma/images/old/main/userInfoBackground.png b/frontend/gamma/images/old/main/userInfoBackground.png Binary files differnew file mode 100644 index 0000000..6756c83 --- a/dev/null +++ b/frontend/gamma/images/old/main/userInfoBackground.png diff --git a/frontend/gamma/images/old/main/userInfoBullet.png b/frontend/gamma/images/old/main/userInfoBullet.png Binary files differnew file mode 100644 index 0000000..3817764 --- a/dev/null +++ b/frontend/gamma/images/old/main/userInfoBullet.png diff --git a/frontend/gamma/images/old/new_background.png b/frontend/gamma/images/old/new_background.png Binary files differnew file mode 100644 index 0000000..f946a47 --- a/dev/null +++ b/frontend/gamma/images/old/new_background.png diff --git a/frontend/gamma/images/old/new_background_left.png b/frontend/gamma/images/old/new_background_left.png Binary files differnew file mode 100644 index 0000000..e9bd958 --- a/dev/null +++ b/frontend/gamma/images/old/new_background_left.png diff --git a/frontend/gamma/images/old/note.png b/frontend/gamma/images/old/note.png Binary files differnew file mode 100644 index 0000000..4e43691 --- a/dev/null +++ b/frontend/gamma/images/old/note.png diff --git a/frontend/gamma/images/old/passwordField/background copy.png b/frontend/gamma/images/old/passwordField/background copy.png Binary files differnew file mode 100644 index 0000000..05050bb --- a/dev/null +++ b/frontend/gamma/images/old/passwordField/background copy.png diff --git a/frontend/gamma/images/old/passwordField/background.png b/frontend/gamma/images/old/passwordField/background.png Binary files differnew file mode 100644 index 0000000..3835a86 --- a/dev/null +++ b/frontend/gamma/images/old/passwordField/background.png diff --git a/frontend/gamma/images/old/ruler/exit.png b/frontend/gamma/images/old/ruler/exit.png Binary files differnew file mode 100644 index 0000000..30ab430 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/exit.png diff --git a/frontend/gamma/images/old/ruler/exit_selected.png b/frontend/gamma/images/old/ruler/exit_selected.png Binary files differnew file mode 100644 index 0000000..07dfca6 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/exit_selected.png diff --git a/frontend/gamma/images/old/ruler/marker.png b/frontend/gamma/images/old/ruler/marker.png Binary files differnew file mode 100644 index 0000000..8d12a88 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/marker.png diff --git a/frontend/gamma/images/old/ruler/next.png b/frontend/gamma/images/old/ruler/next.png Binary files differnew file mode 100644 index 0000000..9d9662c --- a/dev/null +++ b/frontend/gamma/images/old/ruler/next.png diff --git a/frontend/gamma/images/old/ruler/previous.png b/frontend/gamma/images/old/ruler/previous.png Binary files differnew file mode 100644 index 0000000..39f5da3 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/previous.png diff --git a/frontend/gamma/images/old/ruler/ruler.png b/frontend/gamma/images/old/ruler/ruler.png Binary files differnew file mode 100644 index 0000000..546fa7b --- a/dev/null +++ b/frontend/gamma/images/old/ruler/ruler.png diff --git a/frontend/gamma/images/old/ruler/small_next.png b/frontend/gamma/images/old/ruler/small_next.png Binary files differnew file mode 100644 index 0000000..a35c66b --- a/dev/null +++ b/frontend/gamma/images/old/ruler/small_next.png diff --git a/frontend/gamma/images/old/ruler/small_next_disabled.png b/frontend/gamma/images/old/ruler/small_next_disabled.png Binary files differnew file mode 100644 index 0000000..69e7f31 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/small_next_disabled.png diff --git a/frontend/gamma/images/old/ruler/small_next_selected.png b/frontend/gamma/images/old/ruler/small_next_selected.png Binary files differnew file mode 100644 index 0000000..b8aa0c8 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/small_next_selected.png diff --git a/frontend/gamma/images/old/ruler/small_previous.png b/frontend/gamma/images/old/ruler/small_previous.png Binary files differnew file mode 100644 index 0000000..03f90f7 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/small_previous.png diff --git a/frontend/gamma/images/old/ruler/small_previous_disabled.png b/frontend/gamma/images/old/ruler/small_previous_disabled.png Binary files differnew file mode 100644 index 0000000..86a7565 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/small_previous_disabled.png diff --git a/frontend/gamma/images/old/ruler/small_previous_selected.png b/frontend/gamma/images/old/ruler/small_previous_selected.png Binary files differnew file mode 100644 index 0000000..5c61b45 --- a/dev/null +++ b/frontend/gamma/images/old/ruler/small_previous_selected.png diff --git a/frontend/gamma/images/old/tabPanels/background.png b/frontend/gamma/images/old/tabPanels/background.png Binary files differnew file mode 100644 index 0000000..17350c9 --- a/dev/null +++ b/frontend/gamma/images/old/tabPanels/background.png diff --git a/frontend/gamma/images/old/tips/Tips_background.png b/frontend/gamma/images/old/tips/Tips_background.png Binary files differnew file mode 100644 index 0000000..34170b9 --- a/dev/null +++ b/frontend/gamma/images/old/tips/Tips_background.png diff --git a/frontend/gamma/images/old/tips/close.png b/frontend/gamma/images/old/tips/close.png Binary files differnew file mode 100644 index 0000000..554fc8e --- a/dev/null +++ b/frontend/gamma/images/old/tips/close.png diff --git a/frontend/gamma/images/old/tips/open.png b/frontend/gamma/images/old/tips/open.png Binary files differnew file mode 100644 index 0000000..66861d8 --- a/dev/null +++ b/frontend/gamma/images/old/tips/open.png diff --git a/frontend/gamma/images/old/tooltips/body.png b/frontend/gamma/images/old/tooltips/body.png Binary files differnew file mode 100644 index 0000000..ae5b5a3 --- a/dev/null +++ b/frontend/gamma/images/old/tooltips/body.png diff --git a/frontend/gamma/images/old/tooltips/body_bottom.png b/frontend/gamma/images/old/tooltips/body_bottom.png Binary files differnew file mode 100644 index 0000000..4567b5f --- a/dev/null +++ b/frontend/gamma/images/old/tooltips/body_bottom.png diff --git a/frontend/gamma/images/old/tooltips/bottom_arrow.png b/frontend/gamma/images/old/tooltips/bottom_arrow.png Binary files differnew file mode 100644 index 0000000..5884c94 --- a/dev/null +++ b/frontend/gamma/images/old/tooltips/bottom_arrow.png diff --git a/frontend/gamma/images/old/tooltips/left_arrow.png b/frontend/gamma/images/old/tooltips/left_arrow.png Binary files differnew file mode 100644 index 0000000..290d062 --- a/dev/null +++ b/frontend/gamma/images/old/tooltips/left_arrow.png diff --git a/frontend/gamma/images/old/tooltips/right_arrow.png b/frontend/gamma/images/old/tooltips/right_arrow.png Binary files differnew file mode 100644 index 0000000..d0bb64f --- a/dev/null +++ b/frontend/gamma/images/old/tooltips/right_arrow.png diff --git a/frontend/gamma/images/old/tooltips/top_arrow.png b/frontend/gamma/images/old/tooltips/top_arrow.png Binary files differnew file mode 100644 index 0000000..a5e8845 --- a/dev/null +++ b/frontend/gamma/images/old/tooltips/top_arrow.png diff --git a/frontend/gamma/js/Clipperz/Async.js b/frontend/gamma/js/Clipperz/Async.js index 97d8ecf..f7a9517 100644 --- a/frontend/gamma/js/Clipperz/Async.js +++ b/frontend/gamma/js/Clipperz/Async.js @@ -324,387 +324,387 @@ Clipperz.Async.DeferredSynchronizer = function(aName, someMethods) { return result; }/*, this._methodResults */); return this; } MochiKit.Base.update(Clipperz.Async.DeferredSynchronizer.prototype, { //----------------------------------------------------------------------------- 'name': function() { return this._name; }, //----------------------------------------------------------------------------- 'methods': function() { return this._methods; }, 'methodResults': function() { return this._methodResults; }, //----------------------------------------------------------------------------- 'result': function() { return this._result; }, //----------------------------------------------------------------------------- 'numberOfMethodsDone':function() { return this._numberOfMethodsDone; }, 'incrementNumberOfMethodsDone': function() { this._numberOfMethodsDone ++; }, //----------------------------------------------------------------------------- 'run': function(args, aValue) { var deferredResults; var i, c; deferredResults = []; args = args || {}; c = this.methods().length; for (i=0; i<c; i++) { var deferredResult; var methodCalls; var ii, cc; //console.log("TYPEOF", typeof(this.methods()[i])); if (typeof(this.methods()[i]) == 'function') { methodCalls = [ this.methods()[i] ]; } else { methodCalls = this.methods()[i]; } cc = methodCalls.length; deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer.run => " + this.name() + "[" + i + "]", args); for (ii=0; ii<cc; ii++) { deferredResult.addCallback(methodCalls[ii]); } deferredResult.addBoth(MochiKit.Base.method(this, 'handleMethodCallDone', i)); deferredResults.push(deferredResult); } for (i=0; i<c; i++) { deferredResults[i].callback(aValue); } return this.result(); }, //----------------------------------------------------------------------------- 'handleMethodCallDone': function(anIndexValue, aResult) { this.incrementNumberOfMethodsDone(); this.methodResults()[anIndexValue] = aResult; if (this.numberOfMethodsDone() < this.methods().length) { // nothing to do here other than possibly log something } else if (this.numberOfMethodsDone() == this.methods().length) { this.result().callback(); } else if (this.numberOfMethodsDone() > this.methods().length) { alert("Clipperz.Async.Deferred.handleMethodCallDone -> WTF!"); // WTF!!! :( } }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //############################################################################# MochiKit.Base.update(Clipperz.Async, { 'callbacks': function (aName, someFunctions, someArguments, aCallbackValue) { var deferredResult; var i, c; deferredResult = new Clipperz.Async.Deferred(aName, someArguments); c = someFunctions.length; for (i=0; i<c; i++) { deferredResult.addCallback(someFunctions[i]); } deferredResult.callback(aCallbackValue); return deferredResult; }, //------------------------------------------------------------------------- 'forkAndJoin': function (aName, someMethods, args) { return MochiKit.Base.partial(function (aName, someMethods, args, aValue) { var synchronizer; var result; args = args || {}; synchronizer = new Clipperz.Async.DeferredSynchronizer(aName, someMethods); result = synchronizer.run(args, aValue); return result; }, aName, someMethods, args); }, //------------------------------------------------------------------------- 'collectResults': function(aName, someRequests, args) { return MochiKit.Base.partial(function(aName, someRequests, args, aValue) { var deferredResult; var requestKeys; var methods; requestKeys = MochiKit.Base.keys(someRequests); methods = MochiKit.Base.values(someRequests); deferredResult = new Clipperz.Async.Deferred(aName, args); deferredResult.addCallback(Clipperz.Async.forkAndJoin(aName + " [inner forkAndJoin]", methods, args)); deferredResult.addBoth(function(someResults) { var returnFunction; var results; var i,c; var result; if (someResults instanceof MochiKit.Async.CancelledError) { returnFunction = MochiKit.Async.fail; result = someResults; } else { if (someResults instanceof Error) { returnFunction = MochiKit.Async.fail; results = someResults['message']; } else { returnFunction = MochiKit.Async.succeed; results = someResults; } result = {}; c = requestKeys.length; for (i=0; i<c; i++) { result[requestKeys[i]] = results[i]; } } return returnFunction.call(null, result); }); deferredResult.callback(aValue); return deferredResult; }, aName, someRequests, args); }, //------------------------------------------------------------------------- 'collectAll': function (someDeferredObjects) { var deferredResult; deferredResult = new MochiKit.Async.DeferredList(someDeferredObjects, false, false, false); deferredResult.addCallback(function (aResultList) { return MochiKit.Base.map(function (aResult) { if (aResult[0]) { return aResult[1]; - } else { + } else { throw aResult[1]; - } + } }, aResultList); }); return deferredResult; }, //------------------------------------------------------------------------- 'setItem': function (anObject, aKey, aValue) { anObject[aKey] = aValue; return anObject; }, 'setItemOnObject': function (aKey, aValue, anObject) { anObject[aKey] = aValue; return anObject; }, 'setDeferredItemOnObject': function (aKey, aDeferredFunction, anObject) { return Clipperz.Async.callbacks("Clipperz.Async.setDeferredItemOnObject", [ aDeferredFunction, MochiKit.Base.partial(Clipperz.Async.setItem, anObject, aKey) ], {trace:false}, anObject); }, //------------------------------------------------------------------------- 'deferredIf': function (aName, aThenBlock, anElseBlock) { return function (aValue) { var deferredResult; if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) { deferredResult = Clipperz.Async.callbacks(aName + " <then>", aThenBlock, null, aValue); } else { deferredResult = Clipperz.Async.callbacks(aName + " <else>", anElseBlock, null, aValue); } return deferredResult; } }, //------------------------------------------------------------------------- 'log': function(aMessage, aResult) { if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) { Clipperz.log(aMessage + " ", aResult); } return aResult; }, //========================================================================= 'deferredCompare': function (aComparator, aDeferred, bDeferred) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredCompare", {trace:false}); deferredResult.addCallback(Clipperz.Async.collectAll, [aDeferred, bDeferred]); deferredResult.addCallback(function (someResults) { var result; if (aComparator(someResults[0], someResults[1]) > 0) { result = MochiKit.Async.succeed(); } else { result = MochiKit.Async.fail(); }; return result; }); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'insertIntoSortedArray': function (anObject, aDeferredComparator, aSortedResult) { var deferredResult; var i, c; if (aSortedResult.length == 0) { deferredResult = MochiKit.Async.succeed([anObject]); } else { deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.insertIntoSortedArray", {trace:false}); c = aSortedResult.length + 1; for (i=0; i<c; i++) { deferredResult.addCallback(function (aDeferredComparator, aObject, bObject, aContext) { var innerDeferredResult; innerDeferredResult = new Clipperz.Async.Deferred("Clipperz.Async.insertIntoSortedArray <inner compare>", {trace:false}); innerDeferredResult.addCallback(aDeferredComparator, aObject, bObject); innerDeferredResult.addErrback(MochiKit.Async.fail, aContext); innerDeferredResult.callback(); return innerDeferredResult; }, aDeferredComparator, anObject, aSortedResult[i], i); } deferredResult.addMethod(aSortedResult, 'push', anObject); deferredResult.addErrback(function (anError) { aSortedResult.splice(anError.message, 0, anObject); }) deferredResult.addBoth(MochiKit.Async.succeed, aSortedResult); deferredResult.callback(); } return deferredResult; }, //------------------------------------------------------------------------- 'deferredSort': function (aDeferredComparator, someObjects) { var deferredResult; var i, c; deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredSort", {trace:false}); c = someObjects.length; for (i=0; i<c; i++) { deferredResult.addCallback(Clipperz.Async.insertIntoSortedArray, someObjects[i], aDeferredComparator); if ((i % 50) == 0) { // console.log("######### sort wait ##########"); deferredResult.addCallback(MochiKit.Async.wait, 0.5); } } deferredResult.callback([]); return deferredResult; }, //========================================================================= 'deferredFilter': function (aFunction, someObjects) { var deferredResult; var i, c; deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredFilter", {trace:false}); c = someObjects.length; for (i=0; i<c; i++) { deferredResult.addCallback(function (aFunction, anObject, anIndex, aResult) { var innerDeferredResult; innerDeferredResult = new Clipperz.Async.Deferred("Clipperz.Async.deferredFilter <inner - " + anIndex + ">", {trace:false}); innerDeferredResult.addCallback(aFunction, anObject); innerDeferredResult.addCallback(function (aFilterResult) { if (aFilterResult) { aResult.push(anObject); }; }); innerDeferredResult.addBoth(MochiKit.Async.succeed, aResult); innerDeferredResult.callback(); return innerDeferredResult; }, aFunction, someObjects[i], i); } deferredResult.callback([]); return deferredResult; }, 'forEach': function (aFunction) { return MochiKit.Base.partial(function (aFunction, anIterable) { MochiKit.Iter.forEach(anIterable, aFunction); }, aFunction); }, //========================================================================= 'or': function (someValues) { return Clipperz.Async.callbacks("Clipperz.Async.or", [ MochiKit.Base.values, MochiKit.Base.flattenArguments, //function (aValue) { console.log("Record.hasAnyCleanTextData - flatten", aValue); return aValue; }, function(someInnerValues) { return MochiKit.Iter.some(someInnerValues, MochiKit.Base.operator.identity); } ], {trace:false}, someValues); }, //========================================================================= 'clearResult': function () {}, //========================================================================= __syntaxFix__: "syntax fix" }); //############################################################################# CLIPPERZ_DEFERRED_LOGGING_ENABLED = true; CLIPPERZ_DEFERRED_TRACING_ENABLED = false; diff --git a/frontend/gamma/js/Clipperz/Base.js b/frontend/gamma/js/Clipperz/Base.js index 76b2c3f..9d399d9 100644 --- a/frontend/gamma/js/Clipperz/Base.js +++ b/frontend/gamma/js/Clipperz/Base.js @@ -1,271 +1,276 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.Base) == 'undefined') { Clipperz.Base = {}; } Clipperz.Base.VERSION = "0.2"; Clipperz.Base.NAME = "Clipperz.Base"; MochiKit.Base.update(Clipperz.Base, { //------------------------------------------------------------------------- '__repr__': function () { return "[" + this.NAME + " " + this.VERSION + "]"; }, //------------------------------------------------------------------------- 'toString': function () { return this.__repr__(); }, //------------------------------------------------------------------------- 'itemgetter': function (aKeyPath) { // return MochiKit.Base.compose.apply(null, [MochiKit.Base.itemgetter('key3')]); return MochiKit.Base.compose.apply(null, MochiKit.Base.map( MochiKit.Base.itemgetter, MochiKit.Iter.reversed( aKeyPath.split('.') ) ) ); }, //------------------------------------------------------------------------- 'isUrl': function (aValue) { return (MochiKit.Base.urlRegExp.test(aValue)); }, 'isEmail': function (aValue) { return (MochiKit.Base.emailRegExp.test(aValue)); }, //------------------------------------------------------------------------- 'caseInsensitiveCompare': function (a, b) { return MochiKit.Base.compare(a.toLowerCase(), b.toLowerCase()); }, 'reverseComparator': function (aComparator) { return MochiKit.Base.compose(function(aResult) { return -aResult; }, aComparator); }, + 'caseInsensitiveKeyComparator': function (aKey) { + return function (a, b) { + return MochiKit.Base.compare(a[aKey].toLowerCase(), b[aKey].toLowerCase()); + } + }, //------------------------------------------------------------------------- /* 'dependsOn': function(module, deps) { if (!(module in Clipperz)) { MochiKit[module] = {}; } if (typeof(dojo) != 'undefined') { dojo.provide('Clipperz.' + module); } for (var i = 0; i < deps.length; i++) { if (typeof(dojo) != 'undefined') { dojo.require('Clipperz.' + deps[i]); } if (typeof(JSAN) != 'undefined') { JSAN.use('Clipperz.' + deps[i], []); } if (!(deps[i] in Clipperz)) { throw 'Clipperz.' + module + ' depends on Clipperz.' + deps[i] + '!' } } }, */ //------------------------------------------------------------------------- 'trim': function (aValue) { return aValue.replace(/^\s+|\s+$/g, ""); }, //------------------------------------------------------------------------- 'stringToByteArray': function (aValue) { var result; var i, c; result = []; c = aValue.length; for (i=0; i<c; i++) { result[i] = aValue.charCodeAt(i); } return result; }, //......................................................................... 'byteArrayToString': function (anArrayOfBytes) { var result; var i, c; result = ""; c = anArrayOfBytes.length; for (i=0; i<c; i++) { result += String.fromCharCode(anArrayOfBytes[i]); } return result; }, //------------------------------------------------------------------------- 'getValueForKeyInFormContent': function (aFormContent, aKey) { return aFormContent[1][MochiKit.Base.find(aFormContent[0], aKey)]; }, //------------------------------------------------------------------------- 'indexOfObjectInArray': function(anObject, anArray) { var result; var i, c; result = -1; c = anArray.length; for (i=0; ((i<c) && (result < 0)); i++) { if (anArray[i] === anObject) { result = i; } } return result; }, //------------------------------------------------------------------------- 'removeObjectAtIndexFromArray': function(anIndex, anArray) { anArray.splice(anIndex, 1); }, //------------------------------------------------------------------------- 'removeObjectFromArray': function(anObject, anArray) { var objectIndex; objectIndex = Clipperz.Base.indexOfObjectInArray(anObject, anArray); if (objectIndex > -1) { Clipperz.Base.removeObjectAtIndexFromArray(objectIndex, anArray); } else { Clipperz.log("Trying to remove an object not present in the array"); throw Clipperz.Base.exception.ObjectNotFound; } }, 'removeFromArray': function(anArray, anObject) { return Clipperz.Base.removeObjectFromArray(anObject, anArray); }, //------------------------------------------------------------------------- 'splitStringAtFixedTokenSize': function(aString, aTokenSize) { var result; var stringToProcess; stringToProcess = aString; result = []; if (stringToProcess != null) { while (stringToProcess.length > aTokenSize) { result.push(stringToProcess.substring(0, aTokenSize)); stringToProcess = stringToProcess.substring(aTokenSize); } result.push(stringToProcess); } return result; }, //------------------------------------------------------------------------- 'objectType': function(anObject) { var result; if (anObject == null) { result = null; } else { result = typeof(anObject); if (result == "object") { if (anObject instanceof Array) { result = 'array' } else if (anObject.constructor == Boolean) { result = 'boolean' } else if (anObject instanceof Date) { result = 'date' } else if (anObject instanceof Error) { result = 'error' } else if (anObject instanceof Function) { result = 'function' } else if (anObject.constructor == Number) { result = 'number' } else if (anObject.constructor == String) { result = 'string' } else if (anObject instanceof Object) { result = 'object' } else { throw Clipperz.Base.exception.UnknownType; } } } return result; }, //------------------------------------------------------------------------- 'escapeHTML': function(aValue) { var result; result = aValue; result = result.replace(/</g, "<"); result = result.replace(/>/g, ">"); return result; }, //------------------------------------------------------------------------- 'deepClone': function(anObject) { var result; result = Clipperz.Base.evalJSON(Clipperz.Base.serializeJSON(anObject)); return result; }, //------------------------------------------------------------------------- // 'deepCompare': function (aObject, bObject) { // return (Clipperz.Base.serializeJSON(aObject) == Clipperz.Base.serializeJSON(bObject)); // }, diff --git a/frontend/gamma/js/Clipperz/PM/Connection.js b/frontend/gamma/js/Clipperz/PM/Connection.js index b4e8aaa..a05a310 100644 --- a/frontend/gamma/js/Clipperz/PM/Connection.js +++ b/frontend/gamma/js/Clipperz/PM/Connection.js @@ -1,616 +1,640 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } //----------------------------------------------------------------------------- // // Abstract C O N N E C T I O N class // //----------------------------------------------------------------------------- Clipperz.PM.Connection = function (args) { args = args || {}; this._proxy = args.proxy || Clipperz.PM.Proxy.defaultProxy; this._getCredentialsFunction = args.getCredentialsFunction; this._clipperz_pm_crypto_version = null; this._connectionId = null; this._sharedSecret = null; + this._serverLockValue = null; return this; } Clipperz.PM.Connection.prototype = MochiKit.Base.update(null, { 'toString': function() { return "Connection [" + this.version() + "]"; }, //========================================================================= 'version': function() { throw Clipperz.Base.exception.AbstractMethod; }, 'clipperz_pm_crypto_version': function() { if (this._clipperz_pm_crypto_version == null) { var connectionVersions; var versions; var version; var i, c; version = null; connectionVersions = Clipperz.PM.Connection.communicationProtocol.versions; versions = MochiKit.Base.keys(connectionVersions); c = versions.length; for (i=0; i<c; i++) { if (! (versions[i] == 'current')) { if (this instanceof connectionVersions[versions[i]]) { version = versions[i]; }; } } this._clipperz_pm_crypto_version = version; } return this._clipperz_pm_crypto_version; }, //------------------------------------------------------------------------- 'defaultErrorHandler': function(anErrorString, anException) { MochiKit.Logging.logError("### Connection.defaultErrorHandler: " + anErrorString + " (" + anException + ")"); }, //------------------------------------------------------------------------- 'getCredentialsFunction': function () { return this._getCredentialsFunction; }, 'normalizedCredentials': function(someValues) { throw Clipperz.Base.exception.AbstractMethod; }, //========================================================================= 'proxy': function () { return this._proxy; }, //========================================================================= 'register': function () { throw Clipperz.Base.exception.AbstractMethod; }, 'login': function() { throw Clipperz.Base.exception.AbstractMethod; }, //------------------------------------------------------------------------- 'message': function(someArguments, aCallback) { throw Clipperz.Base.exception.AbstractMethod; }, //------------------------------------------------------------------------- 'serverSideUserCredentials': function() { throw Clipperz.Base.exception.AbstractMethod; }, //========================================================================= 'sharedSecret': function () { return this._sharedSecret; }, 'setSharedSecret': function (aValue) { this._sharedSecret = aValue; }, //------------------------------------------------------------------------- 'connectionId': function() { return this._connectionId; }, 'setConnectionId': function(aValue) { this._connectionId = aValue; }, + //------------------------------------------------------------------------- + + 'serverLockValue': function () { + return this._serverLockValue; + }, + + 'setServerLockValue': function (aValue) { + this._serverLockValue = aValue; + }, + //========================================================================= /* // TODO: ????? 'oneTimePassword': function() { return this._oneTimePassword; }, 'setOneTimePassword': function(aValue) { this._oneTimePassword = aValue; }, */ //========================================================================= 'reset': function() { this.setSharedSecret(null); this.setConnectionId(null); }, //========================================================================= __syntaxFix__: "syntax fix" } ); if (typeof(Clipperz.PM.Connection.SRP) == 'undefined') { Clipperz.PM.Connection.SRP = {}; } //----------------------------------------------------------------------------- // // S R P [ 1 . 0 ] C O N N E C T I O N class // //----------------------------------------------------------------------------- Clipperz.PM.Connection.SRP['1.0'] = function (args) { Clipperz.PM.Connection.call(this, args); return this; } Clipperz.PM.Connection.SRP['1.0'].prototype = MochiKit.Base.update(new Clipperz.PM.Connection(), { 'version': function() { return '1.0'; }, //========================================================================= 'register': function (someUserData) { var deferredResult; var cryptoVersion; var srpConnection; cryptoVersion = this.clipperz_pm_crypto_version(); deferredResult = new Clipperz.Async.Deferred("Connection.registerWithVersion", {trace:false}); deferredResult.collectResults({ 'credentials': [ this.getCredentialsFunction(), MochiKit.Base.method(this, 'normalizedCredentials'), MochiKit.Base.bind(function(someCredentials) { var srpConnection; var result; srpConnection = new Clipperz.Crypto.SRP.Connection({ C:someCredentials['username'], P:someCredentials['password'], hash:this.hash() }); result = srpConnection.serverSideCredentials(); result['version'] = Clipperz.PM.Connection.communicationProtocol.currentVersion; return result; }, this) ], 'user': MochiKit.Base.partial(MochiKit.Async.succeed, someUserData), 'version': MochiKit.Base.partial(MochiKit.Async.succeed, Clipperz.PM.Connection.communicationProtocol.currentVersion), 'message': MochiKit.Base.partial(MochiKit.Async.succeed, 'completeRegistration') }); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addMethod(this.proxy(), 'registration'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'updateCredentials': function (aUsername, aPassphrase, someUserData) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("Connection.updateCredentials", {trace:false}); deferredResult.collectResults({ 'credentials': [ MochiKit.Base.method(this, 'normalizedCredentials', {username:aUsername, password:aPassphrase}), MochiKit.Base.bind(function(someCredentials) { var srpConnection; var result; srpConnection = new Clipperz.Crypto.SRP.Connection({ C:someCredentials['username'], P:someCredentials['password'], hash:this.hash() }); result = srpConnection.serverSideCredentials(); result['version'] = Clipperz.PM.Connection.communicationProtocol.currentVersion; return result; }, this) ], 'user': MochiKit.Base.partial(MochiKit.Async.succeed, someUserData) }); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addMethod(this, 'message', 'upgradeUserCredentials'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.callback(); return deferredResult; }, //========================================================================= 'redeemOneTimePassword': function (someParameters) { //console.log("Connections.redeemOneTimePassword", someParameters['username'], someParameters['password']); /* //========================================================================= // LOGIN WITH PASSPHRASE, extracted from the TRUNK version (LoginPanel.js) deferredResult.addCallback(function(anUsername, aOneTimePassword) { var args; args = { 'message': 'oneTimePassword', 'version': Clipperz.PM.Crypto.communicationProtocol.currentVersion, 'parameters': { 'oneTimePasswordKey': Clipperz.PM.DataModel.OneTimePassword.computeKeyWithUsernameAndPassword(anUsername, aOneTimePassword), 'oneTimePasswordKeyChecksum': Clipperz.PM.DataModel.OneTimePassword.computeKeyChecksumWithUsernameAndPassword(anUsername, aOneTimePassword) } } return args; }, anUsername, oneTimePassword); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'OTP_login_loadingOTP'); deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake')); deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'OTP_login_extractingPassphrase'); deferredResult.addCallback(function(aResult) { return Clipperz.PM.Crypto.deferredDecrypt(oneTimePassword, aResult['data'], aResult['version']); }); deferredResult.addCallback(function(aResult) { return (new Clipperz.ByteArray().appendBase64String(aResult['passphrase'])).asString(); }); deferredResult.addMethod(this, 'doLoginWithUsernameAndPassphrase', anUsername), */ var args; var normalizedOTP; normalizedOTP = Clipperz.PM.DataModel.OneTimePassword.normalizedOneTimePassword(someParameters['password']); args = { 'message': 'oneTimePassword', 'version': Clipperz.PM.Connection.communicationProtocol.currentVersion, 'parameters': { 'oneTimePasswordKey': Clipperz.PM.DataModel.OneTimePassword.computeKeyWithUsernameAndPassword(someParameters['username'], normalizedOTP), 'oneTimePasswordKeyChecksum': Clipperz.PM.DataModel.OneTimePassword.computeKeyChecksumWithUsernameAndPassword(someParameters['username'], normalizedOTP) } } return Clipperz.Async.callbacks("Connction.redeemOTP", [ MochiKit.Base.method(this.proxy(), 'handshake', args), function(aResult) { return Clipperz.PM.Crypto.deferredDecrypt({ value: aResult['data'], key: normalizedOTP, version:aResult['version'] }); }, function(aResult) { return (new Clipperz.ByteArray().appendBase64String(aResult['passphrase'])).asString(); } ], {trace:false}) }, - 'login': function(/*anUsername, aPassphrase*/) { + 'login': function(isReconnecting) { var deferredResult; var cryptoVersion; var srpConnection; cryptoVersion = this.clipperz_pm_crypto_version(); - deferredResult = new Clipperz.Async.Deferred("Connection.login", {trace:false}); deferredResult.addCallback(this.getCredentialsFunction()); deferredResult.addMethod(this, 'normalizedCredentials'); // deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'updatedProgressState', 'connection_sendingCredentials'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addCallback(MochiKit.Base.bind(function(someCredentials) { srpConnection = new Clipperz.Crypto.SRP.Connection({ C:someCredentials['username'], P:someCredentials['password'], hash:this.hash() }); }, this)); deferredResult.addCallback(function() { var result; result = { message: 'connect', version: cryptoVersion, parameters: { C: srpConnection.C(), A: srpConnection.A().asString(16) // reconnecting: this.connectionId() } }; // TODO: ????? // if (isReconnecting == true) { // args.parameters['reconnecting'] = aConnection.connectionId(); // } return result; }); deferredResult.addMethod(this.proxy(), 'handshake'); // deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'updatedProgressState', 'connection_credentialVerification'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addCallback(function(someParameters) { var result; srpConnection.set_s(new Clipperz.Crypto.BigInt(someParameters['s'], 16)); srpConnection.set_B(new Clipperz.Crypto.BigInt(someParameters['B'], 16)); // TODO: ????? // if (typeof(someParameters['oneTimePassword']) != 'undefined') { // this.setOneTimePassword(someParameters['oneTimePassword']); // } result = { message: 'credentialCheck', version: cryptoVersion, parameters: { M1: srpConnection.M1() } }; return result; }); deferredResult.addMethod(this.proxy(), 'handshake'); deferredResult.addCallback(function(someParameters) { var result; if (someParameters['M2'] == srpConnection.M2()) { result = MochiKit.Async.succeed(someParameters); } else { result = MochiKit.Async.fail(Clipperz.PM.Connection.exception.WrongChecksum); } return result; }); deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) { this.setConnectionId(someParameters['connectionId']); this.setSharedSecret(srpConnection.K()); // TODO: ????? // if (this.oneTimePassword() != null) { /// ?? result = this.user().oneTimePasswordManager().archiveOneTimePassword(this.oneTimePassword())); // } + + if ((isReconnecting == true) && (this.serverLockValue() != someParameters['lock'])) { + throw Clipperz.PM.Connection.exception.StaleData; + } else { + this.setServerLockValue(someParameters['lock']); + } + return someParameters; }, this)); // deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'updatedProgressState', 'connection_loggedIn'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addCallback(MochiKit.Async.succeed, {result:"done"}); deferredResult.callback(); return deferredResult; }, //========================================================================= 'logout': function() { return Clipperz.Async.callbacks("Connection.logout", [ MochiKit.Base.method(this, 'setSharedSecret'), MochiKit.Base.method(this.proxy(), 'logout', {}) ], {trace:false}); }, //========================================================================= 'ping': function () { // TODO: ping the server in order to have a valid session }, //========================================================================= 'message': function(aMessageName, someParameters) { var args; + var parameters; + + parameters = someParameters || {}; + if (typeof(parameters['user']) != 'undefined') { + parameters['user']['lock'] = this.serverLockValue(); + } //console.log(">>> Connection.message", aMessageName, someParameters); args = { message: aMessageName, srpSharedSecret: this.sharedSecret(), - parameters: (someParameters || {}) +// parameters: (someParameters || {}) + parameters: parameters } return this.sendMessage(args); }, //------------------------------------------------------------------------- 'sendMessage': function(someArguments) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("Connection.sendMessage", {trace:false}); deferredResult.addMethod(this.proxy(), 'message', someArguments); deferredResult.addCallback(MochiKit.Base.bind(function(res) { if (typeof(res['lock']) != 'undefined') { -// TODO: ????? -// ?? this.user().setLock(res['lock']); + this.setServerLockValue(res['lock']); } return res; }, this)); deferredResult.addErrback(MochiKit.Base.method(this, 'messageExceptionHandler'), someArguments); deferredResult.callback(); return deferredResult }, //------------------------------------------------------------------------- 'messageExceptionHandler': function(anOriginalMessageArguments, anError) { var result; console.log(">>> Connection.messageExceptionHandler", anError, anError.message); if (anError instanceof MochiKit.Async.CancelledError) { result = anError; } else { if ((anError.message == 'Trying to communicate without an active connection') || (anError.message == 'No tollManager available for current session') ) { result = this.reestablishConnection(anOriginalMessageArguments); } else if (anError.message == 'Session with stale data') { MochiKit.Signal.signal(this, 'EXCEPTION'); } else { result = anError; } } console.log("<<< Connection.messageExceptionHandler", anError) return result;; }, //========================================================================= 'reestablishConnection': function(anOriginalMessageArguments) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("Connection.reestablishConnection"); deferredResult.addMethod(this, 'reset'); deferredResult.addMethod(this, 'login', true); deferredResult.addCallback(MochiKit.Base.bind(function(aMessage) { aMessage['srpSharedSecret'] = this.sharedSecret(); return aMessage; }, this), anOriginalMessageArguments); deferredResult.addMethod(this, 'sendMessage'); deferredResult.addErrback(MochiKit.Signal.signal, this, 'EXCEPTION', null); deferredResult.callback(); return deferredResult; }, //========================================================================= 'serverSideUserCredentials': function(aUsername, aPassword) { var result; var newSrpConnection; var normalizedAttributes; normalizedAttributes = this.normalizedCredentials({username:aUsername, password:aPassword}); newSrpConnection = new Clipperz.Crypto.SRP.Connection({ C:normalizedAttributes['username'], P:normalizedAttributes['password'], hash:this.hash() }); result = newSrpConnection.serverSideCredentials(); result['version'] = this.clipperz_pm_crypto_version(); return result; }, //========================================================================= 'normalizedCredentials': function(someValues) { var result; result = {} result['username'] = this.hash()(new Clipperz.ByteArray(someValues['username'])).toHexString().substring(2); result['password'] = this.hash()(new Clipperz.ByteArray(someValues['password'] + someValues['username'])).toHexString().substring(2); return result; }, //----------------------------------------------------------------------------- 'hash': function() { return Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].hash; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //----------------------------------------------------------------------------- // // S R P [ 1 . 1 ] C O N N E C T I O N class // //----------------------------------------------------------------------------- Clipperz.PM.Connection.SRP['1.1'] = function (args) { Clipperz.PM.Connection.SRP['1.0'].call(this, args); return this; } Clipperz.PM.Connection.SRP['1.1'].prototype = MochiKit.Base.update(new Clipperz.PM.Connection.SRP['1.0'](), { 'version': function() { return '1.1'; }, //----------------------------------------------------------------------------- 'normalizedCredentials': function(someValues) { var result; result = {} result['username'] = this.hash()(new Clipperz.ByteArray(someValues['username'] + someValues['password'])).toHexString().substring(2); result['password'] = this.hash()(new Clipperz.ByteArray(someValues['password'] + someValues['username'])).toHexString().substring(2); return result; }, //----------------------------------------------------------------------------- 'hash': function() { return Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].hash; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); Clipperz.PM.Connection.exception = { WrongChecksum: new MochiKit.Base.NamedError("Clipperz.ByteArray.exception.InvalidValue"), + StaleData: new MochiKit.Base.NamedError("Stale data"), UnexpectedRequest: new MochiKit.Base.NamedError("Clipperz.ByteArray.exception.UnexpectedRequest") }; Clipperz.PM.Connection.communicationProtocol = { 'currentVersion': '0.2', 'versions': { '0.1': Clipperz.PM.Connection.SRP['1.0'], //Clipperz.Crypto.SRP.versions['1.0'].Connection, '0.2': Clipperz.PM.Connection.SRP['1.1'] //Clipperz.Crypto.SRP.versions['1.1'].Connection }, 'fallbackVersions': { // 'current': '0.1', '0.2': '0.1', '0.1': null } }; MochiKit.Base.update(Clipperz.PM.Connection.communicationProtocol.versions, { 'current': Clipperz.PM.Connection.communicationProtocol.versions[Clipperz.PM.Connection.communicationProtocol.currentVersion] }); MochiKit.Base.update(Clipperz.PM.Connection.communicationProtocol.fallbackVersions, { 'current': Clipperz.PM.Connection.communicationProtocol.fallbackVersions[Clipperz.PM.Connection.communicationProtocol.currentVersion] }); diff --git a/frontend/gamma/js/Clipperz/PM/DataModel/User.js b/frontend/gamma/js/Clipperz/PM/DataModel/User.js index 72d4006..646ce21 100644 --- a/frontend/gamma/js/Clipperz/PM/DataModel/User.js +++ b/frontend/gamma/js/Clipperz/PM/DataModel/User.js @@ -1,814 +1,814 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } //############################################################################# Clipperz.PM.DataModel.User = function (args) { args = args || {}; Clipperz.PM.DataModel.User.superclass.constructor.apply(this, arguments); this._username = args.username || null; this._getPassphraseFunction = args.getPassphraseFunction || null; this._data = null; this._connection = null; this._connectionVersion = 'current'; this._serverData = null; - this._serverLockValue = null; +// this._serverLockValue = null; this._transientState = null; this._deferredLocks = { 'passphrase': new MochiKit.Async.DeferredLock(), 'serverData': new MochiKit.Async.DeferredLock(), // 'recordsIndex': new MochiKit.Async.DeferredLock(), // 'directLoginsIndex': new MochiKit.Async.DeferredLock() // 'preferences': new MochiKit.Async.DeferredLock() // 'oneTimePasswords': new MochiKit.Async.DeferredLock() '__syntaxFix__': 'syntax fix' }; return this; } Clipperz.Base.extend(Clipperz.PM.DataModel.User, Object, { 'toString': function () { return "Clipperz.PM.DataModel.User - " + this.username(); }, //------------------------------------------------------------------------- 'username': function () { return this._username; }, 'setUsername': function (aValue) { this._username = aValue; }, //------------------------------------------------------------------------- 'displayName': function() { return "" + this.username() + ""; }, //------------------------------------------------------------------------- 'data': function () { if (this._data == null) { this._data = new Clipperz.KeyValueObjectStore(/*{'name':'User.data [1]'}*/); }; return this._data; }, //------------------------------------------------------------------------- - +/* 'serverLockValue': function () { return this._serverLockValue; }, 'setServerLockValue': function (aValue) { this._serverLockValue = aValue; }, - +*/ //------------------------------------------------------------------------- 'transientState': function () { if (this._transientState == null) { this._transientState = {} } return this._transientState; }, 'resetTransientState': function (isCommitting) { this._transientState = null; }, //------------------------------------------------------------------------- 'deferredLockForSection': function(aSectionName) { return this._deferredLocks[aSectionName]; }, //------------------------------------------------------------------------- 'getPassphrase': function() { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.getPassphrase", {trace:false}); deferredResult.acquireLock(this.deferredLockForSection('passphrase')); deferredResult.addMethod(this.data(), 'deferredGetOrSet', 'passphrase', this.getPassphraseFunction()); deferredResult.releaseLock(this.deferredLockForSection('passphrase')); deferredResult.callback(); return deferredResult; }, 'getPassphraseFunction': function () { return this._getPassphraseFunction; }, //------------------------------------------------------------------------- 'getCredentials': function () { return Clipperz.Async.collectResults("User; get username and passphrase", { 'username': MochiKit.Base.method(this, 'username'), 'password': MochiKit.Base.method(this, 'getPassphrase') }, {trace:false})(); }, //------------------------------------------------------------------------- 'changePassphrase': function (aNewValue) { return this.updateCredentials(this.username(), aNewValue); }, //......................................................................... 'updateCredentials': function (aUsername, aPassphrase) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.updateCredentials", {trace:false}); // deferredResult.addMethod(this, 'getPassphrase'); // deferredResult.setValue('currentPassphrase'); deferredResult.addMethod(this.connection(), 'ping'); deferredResult.addMethod(this, 'setUsername', aUsername) deferredResult.acquireLock(this.deferredLockForSection('passphrase')); deferredResult.addMethod(this.data(), 'deferredGetOrSet', 'passphrase', aPassphrase); deferredResult.releaseLock(this.deferredLockForSection('passphrase')); // deferredResult.getValue('currentPassphrase'); deferredResult.addMethod(this, 'prepareRemoteDataWithKey', aPassphrase); deferredResult.addMethod(this.connection(), 'updateCredentials', aUsername, aPassphrase); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'initialSetupWithNoData': function () { this._serverData = { 'version': '0.1', 'statistics': "", 'header': { 'data': null, 'version': Clipperz.PM.Crypto.encryptingFunctions.currentVersion, 'recordsIndex': new Clipperz.PM.DataModel.User.Header.RecordIndex({ 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase'), 'recordsData': {'data':null, 'index':{}}, 'recordsStats': null, 'directLoginsData': {'data':null, 'index':{}}, 'encryptedDataVersion': Clipperz.PM.Crypto.encryptingFunctions.currentVersion, 'retrieveRecordDetailFunction': MochiKit.Base.method(this, 'getRecordDetail') }), 'preferences': new Clipperz.PM.DataModel.User.Header.Preferences({ 'name': 'preferences', 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase') }), 'oneTimePasswords': new Clipperz.PM.DataModel.User.Header.OneTimePasswords({ 'name': 'preferences', 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase') }) } }; // this._serverLockValue = Clipperz.PM.Crypto.randomKey(); }, //......................................................................... 'registerAsNewAccount': function () { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.registerAsNewAccount", {trace:false}); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'updateProgress', {'extraSteps':3}); deferredResult.addMethod(this, 'initialSetupWithNoData') deferredResult.addMethod(this, 'getPassphrase'); deferredResult.addMethod(this, 'prepareRemoteDataWithKey'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addMethod(this.connection(), 'register'); - deferredResult.addCallback(MochiKit.Base.itemgetter('lock')); - deferredResult.addMethod(this, 'setServerLockValue'); +// deferredResult.addCallback(MochiKit.Base.itemgetter('lock')); +// deferredResult.addMethod(this, 'setServerLockValue'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'userSuccessfullyRegistered'); // deferredResult.addErrback (MochiKit.Base.method(this, 'handleRegistrationFailure')); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'login': function () { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.login", {trace:false}); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'updateProgress', {'extraSteps':3}); deferredResult.addMethod(this, 'getPassphrase'); deferredResult.addCallback(Clipperz.PM.DataModel.OneTimePassword.isValidOneTimePasswordValue); deferredResult.addCallback(Clipperz.Async.deferredIf("Is the passphrase an OTP", [ MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'updateProgress', {'extraSteps':1}), MochiKit.Base.method(this, 'getCredentials'), MochiKit.Base.method(this.connection(), 'redeemOneTimePassword'), MochiKit.Base.method(this.data(), 'setValue', 'passphrase') ], [])); deferredResult.addErrback(MochiKit.Base.method(this, 'getPassphrase')); - deferredResult.addMethod(this.connection(), 'login'); + deferredResult.addMethod(this.connection(), 'login', false); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'userSuccessfullyLoggedIn'); deferredResult.addErrback (MochiKit.Base.method(this, 'handleConnectionFallback')); deferredResult.callback(); return deferredResult; }, //......................................................................... 'handleConnectionFallback': function(aValue) { var result; if (aValue instanceof MochiKit.Async.CancelledError) { result = aValue; } else { this.setConnectionVersion(Clipperz.PM.Connection.communicationProtocol.fallbackVersions[this.connectionVersion()]); if (this.connectionVersion() != null) { result = new Clipperz.Async.Deferred("User.handleConnectionFallback - retry"); result.addMethod(this, 'login'); result.callback(); } else { result = Clipperz.Async.callbacks("User.handleConnectionFallback - failed", [ MochiKit.Base.method(this.data(), 'removeValue', 'passphrase'), MochiKit.Base.method(this, 'setConnectionVersion', 'current'), MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'userLoginFailed'), MochiKit.Base.partial(MochiKit.Async.fail, Clipperz.PM.DataModel.User.exception.LoginFailed) ], {trace:false}); } } return result; }, //------------------------------------------------------------------------- 'lock': function () { return Clipperz.Async.callbacks("User.lock", [ MochiKit.Base.method(this, 'deleteAllCleanTextData') ], {trace:false}); }, //------------------------------------------------------------------------- 'logout': function () { return Clipperz.Async.callbacks("User.logout", [ MochiKit.Base.method(this, 'deleteAllCleanTextData'), MochiKit.Base.method(this.connection(), 'logout') ], {trace:false}); }, //------------------------------------------------------------------------- 'headerFormatVersion': function(anHeader) { var result; if (anHeader.charAt(0) == '{') { var headerData; headerData = Clipperz.Base.evalJSON(anHeader); result = headerData['version']; } else { result = 'LEGACY'; } return result; }, //------------------------------------------------------------------------- 'unpackServerData': function (someServerData) { var unpackedData; var headerVersion; var recordsIndex; var preferences; var oneTimePasswords; //console.log(">>> ***************** user.unpackServerData", someServerData); - this.setServerLockValue(someServerData['lock']); +// this.setServerLockValue(someServerData['lock']); headerVersion = this.headerFormatVersion(someServerData['header']); switch (headerVersion) { case 'LEGACY': var legacyHeader; legacyHeader = new Clipperz.PM.DataModel.User.Header.Legacy({ 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase'), 'remoteData': { 'data': someServerData['header'], 'version': someServerData['version'], 'recordsStats': someServerData['recordsStats'] }, // 'encryptedDataKeypath': 'data', // 'encryptedVersionKeypath': 'version', 'retrieveRecordDetailFunction': MochiKit.Base.method(this, 'getRecordDetail') }); recordsIndex = legacyHeader; preferences = legacyHeader; oneTimePasswords = legacyHeader; break; case '0.1': var headerData; headerData = Clipperz.Base.evalJSON(someServerData['header']); recordsIndex = new Clipperz.PM.DataModel.User.Header.RecordIndex({ 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase'), 'recordsData': headerData['records'], 'recordsStats': someServerData['recordsStats'], 'directLoginsData': headerData['directLogins'], 'encryptedDataVersion': someServerData['version'], 'retrieveRecordDetailFunction': MochiKit.Base.method(this, 'getRecordDetail') }); // Still missing a test case that actually fais with the old version of the code, where the check for undefined was missing if (typeof(headerData['preferences']) != 'undefined') { preferences = new Clipperz.PM.DataModel.User.Header.Preferences({ 'name': 'preferences', 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase'), 'remoteData': { 'data': headerData['preferences']['data'], 'version': someServerData['version'] } }); } else { preferences = new Clipperz.PM.DataModel.User.Header.Preferences({ 'name': 'preferences', 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase') }); } if (typeof(headerData['oneTimePasswords']) != 'undefined') { oneTimePasswords = new Clipperz.PM.DataModel.User.Header.OneTimePasswords({ 'name': 'preferences', 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase'), 'remoteData': { 'data': headerData['oneTimePasswords']['data'], 'version': someServerData['version'] } }); } else { oneTimePasswords = new Clipperz.PM.DataModel.User.Header.OneTimePasswords({ 'name': 'preferences', 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase') }); } break; } unpackedData = { 'version': someServerData['version'], 'statistics': someServerData['statistics'], 'header': { 'data': someServerData['header'], 'version': headerVersion, 'recordsIndex': recordsIndex, 'preferences': preferences, 'oneTimePasswords': oneTimePasswords } }; this._serverData = unpackedData; //console.log("<<< ***************** user.unpackServerData", this._serverData); return this._serverData; }, //------------------------------------------------------------------------- 'getServerData': function() { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.getServerData", {trace:false}); deferredResult.acquireLock(this.deferredLockForSection('serverData')); deferredResult.addCallback(MochiKit.Base.bind(function(aResult) { var innerDeferredResult; innerDeferredResult = new Clipperz.Async.Deferred("User.getUserDetails.innerDeferred", {trace:false}); if (this._serverData == null) { innerDeferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'loadingUserDetails'); innerDeferredResult.addMethod(this.connection(), 'message', 'getUserDetails'); innerDeferredResult.addMethod(this, 'unpackServerData'); innerDeferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'loadedUserDetails'); } innerDeferredResult.addCallback(MochiKit.Base.bind(function () { return this._serverData; },this)); innerDeferredResult.callback(); return innerDeferredResult; }, this)); deferredResult.releaseLock(this.deferredLockForSection('serverData')); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'connectionVersion': function() { return this._connectionVersion; }, 'setConnectionVersion': function(aValue) { if (this._connectionVersion != aValue) { this.resetConnection(); } this._connectionVersion = aValue; }, //------------------------------------------------------------------------- 'connection': function() { if ((this._connection == null) && (this.connectionVersion() != null) ){ this._connection = new Clipperz.PM.Connection.communicationProtocol.versions[this.connectionVersion()]({ getCredentialsFunction: MochiKit.Base.method(this, 'getCredentials') }); } return this._connection; }, 'resetConnection': function(aValue) { if (this._connection != null) { this._connection.reset(); } this._connection = null; }, //========================================================================= 'getHeaderIndex': function (aKey) { return Clipperz.Async.callbacks("User.getHeaderIndex", [ MochiKit.Base.method(this, 'getServerData'), MochiKit.Base.itemgetter('header'), MochiKit.Base.itemgetter(aKey) ], {trace:false}) }, //========================================================================= 'getRecords': function () { return Clipperz.Async.callbacks("User.getRecords", [ MochiKit.Base.method(this, 'getHeaderIndex', 'recordsIndex'), MochiKit.Base.methodcaller('records'), MochiKit.Base.values ], {trace:false}); }, 'recordWithLabel': function (aLabel) { return Clipperz.Async.callbacks("User.recordWithLabel", [ MochiKit.Base.method(this, 'getRecords'), MochiKit.Base.partial(Clipperz.Async.deferredFilter, function (aRecord) { return Clipperz.Async.callbacks("User.recordWithLabel - check record label", [ MochiKit.Base.methodcaller('label'), MochiKit.Base.partial(MochiKit.Base.operator.eq, aLabel) ], {trace:false}, aRecord); }), function (someFilteredResults) { var result; switch (someFilteredResults.length) { case 0: result = null; break; case 1: result = someFilteredResults[0]; break; default: WTF = TODO; break; } return result; } ], {trace:false}); }, //------------------------------------------------------------------------- 'getRecord': function (aRecordReference) { return Clipperz.Async.callbacks("User.getRecord", [ MochiKit.Base.method(this, 'getHeaderIndex', 'recordsIndex'), MochiKit.Base.methodcaller('records'), MochiKit.Base.itemgetter(aRecordReference), Clipperz.Async.deferredIf("record != null", [ MochiKit.Base.operator.identity ], [ function () { throw "Record does not exists"} ]) ], {trace:false}); }, //------------------------------------------------------------------------- 'getRecordDetail': function (aRecordReference) { return this.connection().message('getRecordDetail', {reference: aRecordReference}); }, //------------------------------------------------------------------------- 'deleteRecord': function (aRecord) { return Clipperz.Async.callbacks("User.deleteRecord", [ MochiKit.Base.method(this, 'getHeaderIndex', 'recordsIndex'), MochiKit.Base.methodcaller('deleteRecord', aRecord) ], {trace:false}); }, //------------------------------------------------------------------------- 'createNewRecord': function () { return Clipperz.Async.callbacks("User.createNewRecord", [ MochiKit.Base.method(this, 'getHeaderIndex', 'recordsIndex'), MochiKit.Base.methodcaller('createNewRecord') ], {trace:false}); }, //========================================================================= 'getDirectLogins': function() { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.getDirectLogins", {trace:false}); deferredResult.addMethod(this, 'getRecords'); deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.compose(MochiKit.Base.values, MochiKit.Base.methodcaller('directLogins'))); deferredResult.addCallback(MochiKit.Base.flattenArray); deferredResult.callback(); return deferredResult; }, //========================================================================= 'getOneTimePasswords': function () { return Clipperz.Async.callbacks("User.getOneTimePasswords", [ MochiKit.Base.method(this, 'getHeaderIndex', 'oneTimePasswords'), MochiKit.Base.methodcaller('oneTimePasswords'), MochiKit.Base.values ], {trace:false}); }, //========================================================================= 'invokeMethodNamedOnHeader': function (aMethodName, aValue) { return Clipperz.Async.collectResults("User.invokeMethodNamedOnHeader [" + aMethodName + "]", { 'recordIndex': [ MochiKit.Base.method(this, 'getHeaderIndex', 'recordsIndex'), MochiKit.Base.methodcaller(aMethodName, aValue) ], 'preferences': [ MochiKit.Base.method(this, 'getHeaderIndex', 'preferences'), MochiKit.Base.methodcaller(aMethodName, aValue) ], 'oneTimePasswords': [ MochiKit.Base.method(this, 'getHeaderIndex', 'oneTimePasswords'), MochiKit.Base.methodcaller(aMethodName, aValue) ]//, // 'statistics': [ // MochiKit.Base.method(this, 'getStatistics'), // MochiKit.Base.methodcaller(aMethodName, aValue) // ] }, {trace:false})(); }, //------------------------------------------------------------------------- 'invokeMethodNamedOnRecords': function (aMethodName, aValue) { return Clipperz.Async.callbacks("User.invokeMethodNamedOnRecords[" + aMethodName + "]", [ MochiKit.Base.method(this, 'getRecords'), MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.methodcaller(aMethodName, aValue)), Clipperz.Async.collectAll ], {trace:false}); }, //========================================================================= 'hasPendingChanges': function () { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.hasPendingChanges", {trace:false}); deferredResult.collectResults({ 'header': [ MochiKit.Base.method(this, 'invokeMethodNamedOnHeader', 'hasPendingChanges'), MochiKit.Base.values ], 'records': MochiKit.Base.method(this, 'invokeMethodNamedOnRecords', 'hasPendingChanges') }); deferredResult.addCallback(Clipperz.Async.or); deferredResult.callback(); // recordsIndex = legacyHeader; // preferences = legacyHeader; // oneTimePasswords = legacyHeader; return deferredResult; }, //========================================================================= 'commitTransientState': function () { return Clipperz.Async.callbacks("User.commitTransientState", [ MochiKit.Base.method(this, 'invokeMethodNamedOnHeader', 'commitTransientState'), MochiKit.Base.method(this, 'invokeMethodNamedOnRecords', 'commitTransientState'), MochiKit.Base.method(this, 'transientState'), - MochiKit.Base.itemgetter('lock'), - MochiKit.Base.method(this, 'setServerLockValue'), +// MochiKit.Base.itemgetter('lock'), +// MochiKit.Base.method(this, 'setServerLockValue'), MochiKit.Base.method(this, 'resetTransientState', true) ], {trace:false}); }, //------------------------------------------------------------------------- 'revertChanges': function () { return Clipperz.Async.callbacks("User.revertChanges", [ MochiKit.Base.method(this, 'invokeMethodNamedOnHeader', 'revertChanges'), MochiKit.Base.method(this, 'invokeMethodNamedOnRecords', 'revertChanges'), MochiKit.Base.method(this, 'resetTransientState', false) ], {trace:false}); }, //========================================================================= 'deleteAllCleanTextData': function () { return Clipperz.Async.callbacks("User.deleteAllCleanTextData", [ MochiKit.Base.method(this, 'invokeMethodNamedOnRecords', 'deleteAllCleanTextData'), MochiKit.Base.method(this, 'invokeMethodNamedOnHeader', 'deleteAllCleanTextData'), MochiKit.Base.method(this.data(), 'removeAllData'), MochiKit.Base.method(this, 'resetTransientState', false) ], {trace:false}); }, //------------------------------------------------------------------------- 'hasAnyCleanTextData': function () { var deferredResult; deferredResult = new Clipperz.Async.Deferred("User.hasAnyCleanTextData", {trace:false}); deferredResult.collectResults({ 'header': [ MochiKit.Base.method(this, 'invokeMethodNamedOnHeader', 'hasAnyCleanTextData'), MochiKit.Base.values ], 'records': MochiKit.Base.method(this, 'invokeMethodNamedOnRecords', 'hasAnyCleanTextData'), 'data': MochiKit.Base.bind(function () { return MochiKit.Async.succeed(! this.data().isEmpty()); }, this), 'transientState': MochiKit.Base.bind(function () { return MochiKit.Async.succeed(MochiKit.Base.keys(this.transientState()).length != 0); }, this) }); deferredResult.addCallback(Clipperz.Async.or); deferredResult.callback(); return deferredResult; }, //========================================================================= 'prepareRemoteDataWithKey': function (aKey /*, aCurrentKey*/) { var deferredResult; var result; result = {}; deferredResult = new Clipperz.Async.Deferred("User.prepareRemoteDataWithKey", {trace:false}); deferredResult.addMethod(this, 'invokeMethodNamedOnHeader', 'prepareRemoteDataWithKey', aKey /*, aCurrentKey*/); deferredResult.addCallback(MochiKit.Base.bind(function (aResult, someHeaderPackedData) { var header; header = {}; header['records'] = someHeaderPackedData['recordIndex']['records']; header['directLogins'] = someHeaderPackedData['recordIndex']['directLogins']; header['preferences'] = {'data': someHeaderPackedData['preferences']['data']}; // this._serverData['header']['preferences']; // Clipperz.Base.evalJSON(this._serverData['header']['data'])['preferences']; // ??????????? header['oneTimePasswords'] = {'data': someHeaderPackedData['oneTimePasswords']['data']}; // this._serverData['header']['oneTimePasswords']; // Clipperz.Base.evalJSON(this._serverData['header']['data'])['oneTimePasswords']; // ??????????? header['version'] = '0.1'; aResult['header'] = Clipperz.Base.serializeJSON(header); aResult['statistics'] = this._serverData['statistics']; // "someHeaderPackedData['statistics']['data']"; return aResult; }, this), result); deferredResult.addCallback(Clipperz.Async.setItem, result, 'version', Clipperz.PM.Crypto.encryptingFunctions.currentVersion); - deferredResult.addCallback(Clipperz.Async.setItem, result, 'lock', this.serverLockValue()); +// deferredResult.addCallback(Clipperz.Async.setItem, result, 'lock', this.serverLockValue()); deferredResult.callback(); return deferredResult; }, //========================================================================= 'saveChanges': function () { var deferredResult; var messageParameters; messageParameters = {}; deferredResult = new Clipperz.Async.Deferred("User.saveChangaes", {trace:false}); deferredResult.addMethod(this, 'getHeaderIndex', 'recordsIndex'); deferredResult.addCallback(MochiKit.Base.methodcaller('prepareRemoteDataForChangedRecords')); deferredResult.addCallback(Clipperz.Async.setItem, messageParameters, 'records'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addMethod(this, 'getPassphrase'); deferredResult.addMethod(this, 'prepareRemoteDataWithKey'); deferredResult.addCallback(Clipperz.Async.setItem, messageParameters, 'user'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addCallback(MochiKit.Async.succeed, messageParameters); deferredResult.addMethod(this.connection(), 'message', 'saveChanges'); deferredResult.addCallback(MochiKit.Base.update, this.transientState()) deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addMethod(this, 'commitTransientState'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'userDataSuccessfullySaved'); deferredResult.addErrbackPass(MochiKit.Base.method(this, 'revertChanges')); deferredResult.addErrbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'failureWhileSavingUserData'); deferredResult.callback(); return deferredResult; }, //========================================================================= __syntaxFix__: "syntax fix" }); //----------------------------------------------------------------------------- Clipperz.PM.DataModel.User.registerNewAccount = function (anUsername, aPassphraseFunction) { var deferredResult; var user; user = new Clipperz.PM.DataModel.User({'username':anUsername, 'getPassphraseFunction':aPassphraseFunction}); deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.DataModel.User.registerNewAccount", {trace:false}); deferredResult.addMethod(user, 'registerAsNewAccount'); deferredResult.addMethod(user, 'login'); deferredResult.addCallback(MochiKit.Async.succeed, user); deferredResult.callback(); return deferredResult; } //----------------------------------------------------------------------------- Clipperz.PM.DataModel.User.exception = { LoginFailed: new MochiKit.Base.NamedError("Clipperz.PM.DataModel.User.exception.LoginFailed"), CredentialUpgradeFailed: new MochiKit.Base.NamedError("Clipperz.PM.DataModel.User.exception.CredentialUpgradeFailed") }; //----------------------------------------------------------------------------- diff --git a/frontend/gamma/js/Clipperz/PM/PIN.js b/frontend/gamma/js/Clipperz/PM/PIN.js new file mode 100644 index 0000000..bc932b2 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/PIN.js @@ -0,0 +1,134 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } +if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } +if (typeof(Clipperz.PM.PIN) == 'undefined') { Clipperz.PM.PIN = {}; } + +MochiKit.Base.update(Clipperz.PM.PIN, { + + //------------------------------------------------------------------------- + + '__repr__': function () { + return "[" + this.NAME + " " + this.VERSION + "]"; + }, + + //------------------------------------------------------------------------- + + 'toString': function () { + return this.__repr__(); + }, + + 'CREDENTIALS': 'CLIPPERZ.CREDENTIALS', + 'FAILURE_COUNT': 'CLIPPERZ.FAILED_LOGIN_COUNT', + 'ALLOWED_RETRY': 3, + + //------------------------------------------------------------------------- + + 'isSet': function () { + return (this.storedCredentials() != null); + }, + + 'storedCredentials': function () { + return localStorage[this.CREDENTIALS]; + }, + + //------------------------------------------------------------------------- + + 'recordFailedAttempt': function () { + var failureCount; + var result; + + failureCount = localStorage[this.FAILURE_COUNT]; + + if (failureCount == null) { + failureCount = 0 + } + + failureCount ++; + + if (failureCount < this.ALLOWED_RETRY) { + localStorage[this.FAILURE_COUNT] = failureCount; + result = failureCount; + } else { + this.removeLocalCredentials(); + result = -1; + } + + return result; + }, + + 'resetFailedAttemptCount': function () { + localStorage.removeItem(this.FAILURE_COUNT); + }, + + 'failureCount': function () { + return localStorage[this.FAILURE_COUNT]; + }, + + //------------------------------------------------------------------------- + + 'deriveKeyFromPin': function (aPIN) { + return Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(aPIN)); + }, + + 'credentialsWithPIN': function (aPIN) { + var byteArrayValue; + var decryptedValue; + var result; + + byteArrayValue = (new Clipperz.ByteArray()).appendBase64String(localStorage[this.CREDENTIALS]); + decryptedValue = Clipperz.Crypto.AES.decrypt(this.deriveKeyFromPin(aPIN), byteArrayValue).asString(); + try { + result = Clipperz.Base.evalJSON(decryptedValue); + } catch (error) { + result = {'username':'fakeusername', 'passphrase':'fakepassphrase'}; + } + + return result; + }, + + 'setCredentialsWithPIN': function (aPIN, someCredentials) { + var encodedValue; + var byteArrayValue; + var encryptedValue; + + encodedValue = Clipperz.Base.serializeJSON(someCredentials); + byteArrayValue = new Clipperz.ByteArray(encodedValue); + encryptedValue = Clipperz.Crypto.AES.encrypt(this.deriveKeyFromPin(aPIN), byteArrayValue).toBase64String(); + + localStorage[this.CREDENTIALS] = encryptedValue; + }, + + 'removeLocalCredentials': function () { + localStorage.removeItem(this.CREDENTIALS); + localStorage.removeItem(this.FAILURE_COUNT); + }, + + //------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" + +}); + diff --git a/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.OfflineCache.js b/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.OfflineCache.js new file mode 100644 index 0000000..803c590 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.OfflineCache.js @@ -0,0 +1,65 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } +if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } + +//============================================================================= + +Clipperz.PM.Proxy.OfflineCache = function(args) { + args = args || {}; + + Clipperz.PM.Proxy.Offline.superclass.constructor.call(this, args); + +// this._dataStore = args.dataStore || new Clipperz.PM.Proxy.Offline.DataStore(args); + + return this; +} + +Clipperz.Base.extend(Clipperz.PM.Proxy.OfflineCache, Clipperz.PM.Proxy, { + + 'toString': function () { + return "Clipperz.PM.Proxy.OfflineCache"; + }, + + //------------------------------------------------------------------------- + +// 'dataStore': function () { +// return this._dataStore; +// }, + + //------------------------------------------------------------------------- + + 'sendMessage': function(aFunctionName, someParameters) { + throw Clipperz.Base.exception.MethodNotImplementedYet; +// return this.dataStore().processMessage(aFunctionName, someParameters); + }, + + //------------------------------------------------------------------------- + + __syntaxFix__: "syntax fix" + +}); + diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js index 2a03fdf..b9d7adf 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js @@ -217,384 +217,388 @@ Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.BaseComponent, /*Ext.Compo //Clipperz.log(">>> enhanceTranslatableElement", anElement); // new Clipperz.PM.UI.Common.Components.TranslatorWidget({ // 'element': anElement // }); MochiKit.Signal.connect(anElement, 'onmouseenter', MochiKit.Base.partial(Clipperz.PM.UI.Common.Components.TranslatorWidget.show, anElement, MochiKit.DOM.getNodeAttribute(anElement, 'stringID'))); MochiKit.Signal.connect(anElement, 'onmouseleave', Clipperz.PM.UI.Common.Components.TranslatorWidget.hide); //Clipperz.log("<<< enhanceTranslatableElement"); }, //----------------------------------------------------- 'update': function(args) { throw Clipperz.Base.exception.AbstractMethod; }, 'updateSelf': function(args) { throw Clipperz.Base.exception.AbstractMethod; }, 'updateComponents': function(args) { throw Clipperz.Base.exception.AbstractMethod; }, //----------------------------------------------------- 'refresh': function() { throw Clipperz.Base.exception.AbstractMethod; }, 'refreshSelf': function() { throw Clipperz.Base.exception.AbstractMethod; }, 'refreshComponents': function(args) { throw Clipperz.Base.exception.AbstractMethod; }, //----------------------------------------------------- 'checkSlotNamed': function(aSlotName) { if (typeof(this._slots[aSlotName]) == 'undefined') { throw new Error("undefined slot"); }; }, //----------------------------------------------------- 'cachedSlots': function() { return this._cachedSlots; }, 'slotNamed': function(aSlotName) { var result; this.checkSlotNamed(aSlotName); if (typeof(this.cachedSlots()[aSlotName]) == 'undefined') { this.cachedSlots()[aSlotName] = new Clipperz.PM.UI.Common.Components.ComponentSlot(this,aSlotName); } result = this.cachedSlots()[aSlotName]; return result; }, //----------------------------------------------------- 'elementForSlotNamed': function(aSlotName) { return MochiKit.DOM.getElement(this._slots[aSlotName]); }, //----------------------------------------------------- 'componentForSlotNamed': function(aSlotName) { return this.slotComponents()[aSlotName]; }, 'setComponentForSlotNamed': function(aComponent, aSlotName) { var domNode; this.checkSlotNamed(aSlotName); if (this.slotComponents()[aSlotName] != null) { this.slotComponents()[aSlotName].remove(); } this.slotComponents()[aSlotName] = aComponent; // domNode = MochiKit.DOM.getElement(this.slotNamed(aSlotName)); domNode = this.elementForSlotNamed(aSlotName); if (domNode != null) { aComponent.renderInNode(domNode); } }, //----------------------------------------------------- /* 'purgeListeners': function() { //MochiKit.Logging.logDebug(">>> Clipperz.PM.UI.Common.Components.BaseComponent.purgeListeners [" + this + "]"); //MochiKit.Logging.logDebug("--- " + this + ".purgeListeners"); Clipperz.NotificationCenter.unregister(this); MochiKit.Signal.disconnectAllTo(this); //MochiKit.Logging.logDebug("<<< Clipperz.PM.UI.Common.Components.BaseComponent.purgeListeners"); }, */ //----------------------------------------------------- 'clear': function() { var slotName; var componentId; MochiKit.Signal.disconnectAllTo(this); for (slotName in this.slotComponents()) { this.slotComponents()[slotName].clear(); } for (componentId in this.components()) { this.components()[componentId].clear(); } // if (this.element() != null) { // this.element().innerHTML = ""; // } if (this.displayElement() != null) { if (this.element() != this.displayElement()) { MochiKit.DOM.removeElement(this.displayElement()); } else { this.displayElement().innerHTML = ""; } } if (this.isModal()) { // TODO: cleanup when the closed element was shown modally. } }, 'remove': function() { var slotName; var componentId; for (slotName in this.slotComponents()) { this.slotComponents()[slotName].remove(); delete this.slotComponents()[slotName]; } for (componentId in this.components()) { this.components()[componentId].remove(); delete this.components()[componentId]; } this.clear(); MochiKit.Signal.disconnectAll(this); }, 'append': function(aNode, aValue) { return Clipperz.DOM.Helper.append(aNode, aValue); }, 'insertBefore': function (aNode, aValue) { return Clipperz.DOM.Helper.insertBefore(aNode, aValue); }, 'insertAfter': function (aNode, aValue) { return Clipperz.DOM.Helper.insertAfter(aNode, aValue); }, //------------------------------------------------------------------------- 'getId': function(aValue) { var result; if (typeof(aValue) != 'undefined') { result = this._ids[aValue]; if (typeof(result) == 'undefined') { _Clipperz_PM_Components_base_id_ ++; result = "Clipperz_PM_Components_" + aValue + "_" + _Clipperz_PM_Components_base_id_; this._ids[aValue] = result; } } else { // result = Clipperz.PM.UI.Common.Components.BaseComponent.superclass.getId.call(this); throw "call to BaseComponent.getId with an undefined value"; } return result; }, + 'getAnchor': function (aValue) { + return '#' + this.getId(aValue); + }, + //------------------------------------------------------------------------- 'getElement': function(aValue) { return Clipperz.DOM.get(this.getId(aValue)); }, //------------------------------------------------------------------------- 'hideElement': function(anElementName) { MochiKit.Style.hideElement(this.getElement(anElementName)); }, 'showElement': function(anElementName) { MochiKit.Style.showElement(this.getElement(anElementName)); }, //------------------------------------------------------------------------- 'activate': function () { this._isActive = true; }, 'deactivate': function () { this._isActive = false; }, 'isActive': function () { return this._isActive; }, //------------------------------------------------------------------------- 'hideSlot': function(aSlotName) { if (this.componentForSlotNamed(aSlotName)) { this.componentForSlotNamed(aSlotName).deactivate(); } MochiKit.Style.hideElement(this.elementForSlotNamed(aSlotName)); }, 'showSlot': function(aSlotName) { if (this.componentForSlotNamed(aSlotName)) { this.componentForSlotNamed(aSlotName).activate(); } MochiKit.Style.showElement(this.elementForSlotNamed(aSlotName)); }, //------------------------------------------------------------------------- 'shouldShowTranslationHints': function () { return false; }, 'shouldShowElementWhileRendering': function() { return true; }, // 'shouldRemoveElementWhenClearningUp': function () { // return true; // }, //------------------------------------------------------------------------- 'isModal': function() { return this._isModal; }, 'setIsModal': function(aValue) { this._isModal = aValue; }, //------------------------------------------------------------------------- 'elementUsedToEnterModalState': function () { return this._elementUsedToEnterModalState; }, 'setElementUsedToEnterModalState': function (aValue) { this._elementUsedToEnterModalState = aValue; }, //------------------------------------------------------------------------- 'modalDialogMask': function () { return 'modalDialogMask'; }, 'modalDialog': function () { return 'modalDialog'; }, 'modalDialogFrame': function() { return 'modalDialogFrame' }, //------------------------------------------------------------------------- 'deferredShowModal': function(args) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("BaseComponent.deferredShowModal", {trace:false}); deferredResult.addMethod(this, 'setIsModal', true); deferredResult.addCallback(MochiKit.Style.showElement, this.modalDialogMask()); deferredResult.addCallback(MochiKit.Base.bind(function(someArgs) { var result; var duration; var from; var to; duration = someArgs.duration || 0.4; this.setElementUsedToEnterModalState(someArgs.openFromElement); from = Clipperz.Style.getSizeAndPosition(someArgs.openFromElement); this.renderInNode(this.modalDialog()); MochiKit.DOM.addElementClass(this.modalDialog(), 'fixed'); to = Clipperz.Style.getSizeAndPosition(this.displayElement()); Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition = Clipperz.Base.deepClone(to); MochiKit.Style.hideElement(this.displayElement()); MochiKit.Style.showElement(this.modalDialogFrame()); result = {from:from, to:to, duration:duration}; return result; }, this, args)); deferredResult.addCallback(Clipperz.Visual.deferredResize, this.modalDialogFrame()); deferredResult.addCallback(MochiKit.Base.bind(function(someArgs) { MochiKit.Style.hideElement(this.modalDialogFrame()); MochiKit.Style.showElement(this.displayElement()); }, this)); deferredResult.addCallback(MochiKit.Async.succeed, arguments[arguments.length - 1]); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- 'deferredHideModal': function(args) { var deferredResult; args = args || {}; deferredResult = new Clipperz.Async.Deferred("BaseComponent.deferredHideModal", {trace:false}); deferredResult.addCallback(MochiKit.Base.bind(function(someArgs) { var result; var from; var toElement; var to; var duration; toElement = args.closeToElement || this.elementUsedToEnterModalState(); duration = someArgs.duration || 0.4; from = Clipperz.Style.getSizeAndPosition(this.displayElement()); to = Clipperz.Style.getSizeAndPosition(toElement); MochiKit.Style.hideElement(this.displayElement()); MochiKit.Style.showElement(this.modalDialogFrame()); result = {from:from, to:to, duration:duration}; return result; }, this, args)); deferredResult.addCallback(Clipperz.Visual.deferredResize, this.modalDialogFrame()); deferredResult.addCallback(MochiKit.Base.bind(function() { MochiKit.Style.hideElement(this.modalDialogFrame()); MochiKit.Style.hideElement(this.modalDialogMask()); }, this)); deferredResult.addMethod(this, 'setIsModal', false); deferredResult.addMethod(this, 'clear'); // ############## deferredResult.addCallback(MochiKit.Async.succeed, arguments[arguments.length - 1]); deferredResult.callback(); return deferredResult; }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); Clipperz.PM.UI.Common.Components.BaseComponent_modalDialog = function() { Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, {tag:'div', id:'modalDialogWrapper', cls:'modalDialogWrapper', children:[ {tag:'div', id:'modalDialogMask', cls:'modalDialogMask'}, {tag:'div', id:'modalDialogFrame', cls:'modalDialogFrame' /*, html:"modal dialog frame"*/}, {tag:'div', id:'modalDialog', cls:'modalDialog'} // {tag:'div', id:'modalDialog', cls:'modalDialog', children:[{tag:'div'}]} ]} ); // MochiKit.Style.hideElement('modalDialogWrapper'); MochiKit.Style.hideElement('modalDialogMask'); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js index 716d851..1010c9d 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js @@ -1,105 +1,113 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); Clipperz.PM.UI.Common.Components.Button = function(args) { args = args || {}; Clipperz.PM.UI.Common.Components.Button.superclass.constructor.apply(this, arguments); this._element = args.element || Clipperz.Base.exception.raise('MandatoryParameter'); this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter'); this._isDefault = args.isDefault || false; this.render(); return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Button, Clipperz.PM.UI.Common.Components.BaseComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Common.Components.Button component"; }, //------------------------------------------------------------------------- 'text': function () { return this._text; }, 'isDefault': function () { return this._isDefault; }, //------------------------------------------------------------------------- 'renderSelf': function () { - this.append(this.element(), {tag:'div', id:this.getId('wrapper'), cls:'button_wrapper', children:[ +/* + this.append(this.element(), {tag:'div', id:this.getId('button'), cls:'button_wrapper', children:[ {tag:'div', id:this.getId('bodyWrapper'), cls:'button_bodyWrapper', children:[ {tag:'div', id:this.getId('body'), cls:'button_body', children:[ {tag:'span', html:this.text()} ]}, {tag:'div', id:this.getId('footer'), cls:'button_footer'} ]} ]}); +*/ +/* + this.append(this.element(), {tag:'div', id:this.getId('button'), cls:'button', children:[ + {tag:'span', html:this.text()} + ]}); +*/ + this.append(this.element(), {tag:'a', id:this.getId('button'), cls:'button', html:this.text()}); if (this.isDefault()) { - MochiKit.DOM.addElementClass(this.getId('wrapper'), 'default'); + MochiKit.DOM.addElementClass(this.getId('button'), 'default'); } - MochiKit.Signal.connect(this.getId('wrapper'), 'onmouseenter', this, 'handleOnMouseEnter'); - MochiKit.Signal.connect(this.getId('wrapper'), 'onmouseleave', this, 'handleOnMouseLeave'); - MochiKit.Signal.connect(this.getId('wrapper'), 'onmousedown', this, 'handleOnMouseDown'); - MochiKit.Signal.connect(this.getId('wrapper'), 'onclick', this, 'handleOnClick'); +// MochiKit.Signal.connect(this.getId('button'), 'onmouseenter', this, 'handleOnMouseEnter'); +// MochiKit.Signal.connect(this.getId('button'), 'onmouseleave', this, 'handleOnMouseLeave'); +// MochiKit.Signal.connect(this.getId('button'), 'onmousedown', this, 'handleOnMouseDown'); + MochiKit.Signal.connect(this.getId('button'), 'onclick', this, 'handleOnClick'); }, //------------------------------------------------------------------------- - +/* 'handleOnMouseEnter': function (anEvent) { - MochiKit.DOM.addElementClass(this.getId('wrapper'), 'hover'); + MochiKit.DOM.addElementClass(this.getId('button'), 'hover'); }, 'handleOnMouseLeave': function (anEvent) { - MochiKit.DOM.removeElementClass(this.getId('wrapper'), 'hover'); - MochiKit.DOM.removeElementClass(this.getId('wrapper'), 'clicked'); + MochiKit.DOM.removeElementClass(this.getId('button'), 'hover'); + MochiKit.DOM.removeElementClass(this.getId('button'), 'clicked'); }, 'handleOnMouseDown': function (anEvent) { - MochiKit.DOM.addElementClass(this.getId('wrapper'), 'clicked'); + MochiKit.DOM.addElementClass(this.getId('button'), 'clicked'); }, - +*/ 'handleOnClick': function (anEvent) { MochiKit.Signal.signal(this, 'onclick', anEvent); }, - + //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js index 1992154..1d816a9 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js @@ -1,279 +1,297 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Common.Components.SimpleMessagePanel = function(args) { args = args || {}; Clipperz.PM.UI.Common.Components.SimpleMessagePanel.superclass.constructor.apply(this, arguments); this._title = args.title || Clipperz.Base.exception.raise('MandatoryParameter'); this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter'); this._type = args.type || Clipperz.Base.exception.raise('MandatoryParameter'); // ALERT, INFO, ERROR this._buttons = args.buttons || Clipperz.Base.exception.raise('MandatoryParameter'); this._buttonComponents = []; this._deferred = null; this.renderModalMask(); return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.SimpleMessagePanel, Clipperz.PM.UI.Common.Components.BaseComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Common.Components.SimpleMessagePanel component"; }, //------------------------------------------------------------------------- 'deferred': function() { if (this._deferred == null) { this._deferred = new Clipperz.Async.Deferred("SimpleMessagePanel.deferred", {trace:false}); } return this._deferred; }, //------------------------------------------------------------------------- 'title': function () { return this._title; }, 'setTitle': function (aValue) { this._title = aValue; if (this.getElement('title') != null) { this.getElement('title').innerHTML = aValue; } }, //------------------------------------------------------------------------- 'text': function () { return this._text; }, 'setText': function (aValue) { this._text = aValue; if (this.getElement('text') != null) { this.getElement('text').innerHTML = aValue; } }, //------------------------------------------------------------------------- 'type': function () { return this._type; }, 'setType': function (aValue) { - if (this.getElement('icon') != null) { - MochiKit.DOM.removeElementClass(this.getId('icon'), this._type); - MochiKit.DOM.addElementClass(this.getId('icon'), aValue); - } +// if (this.getElement('icon') != null) { +// MochiKit.DOM.removeElementClass(this.getId('icon'), this._type); +// MochiKit.DOM.addElementClass(this.getId('icon'), aValue); +// } this._type = aValue; }, + 'icon': function () { + var type = this.type(); + var result; + + if (type == 'ALERT') { + result = '!'; + } else if (type == 'INFO') { + result = 'i'; + } else if (type == 'ERROR') { + result = '!'; + } + + return result; + }, + //------------------------------------------------------------------------- 'buttons': function () { return this._buttons; }, 'setButtons': function (someValues) { MochiKit.Iter.forEach(this.buttonComponents(), MochiKit.Base.methodcaller('clear')); this._buttons = someValues; if (this.getElement('buttonArea') != null) { this.renderButtons(); } }, //......................................................................... 'buttonComponents': function () { return this._buttonComponents; }, //------------------------------------------------------------------------- 'renderSelf': function() { this.append(this.element(), {tag:'div', cls:'SimpleMessagePanel', id:this.getId('panel'), children: [ - {tag:'div', cls:'header', children:[]}, +// {tag:'div', cls:'header', children:[]}, {tag:'div', cls:'body', children:[ - {tag:'div', id:this.getId('icon'), cls:'img ' + this.type(), children:[{tag:'div'}]}, +// {tag:'div', id:this.getId('icon'), cls:'img ' + this.type(), children:[{tag:'div'}]}, + {tag:'div', /*id:this.getId('icon'),*/ cls:'img ' + this.type(), children:[{tag:'canvas', id:this.getId('icon')}]}, {tag:'h3', id:this.getId('title'), html:this.title()}, {tag:'p', id:this.getId('text'), html:this.text()}, {tag:'div', id:this.getId('container')}, {tag:'div', id:this.getId('buttonArea'), cls:'buttonArea', children:[]} - ]}, - {tag:'div', cls:'footer', children:[]} + ]} +// {tag:'div', cls:'footer', children:[]} ]}); + Clipperz.PM.UI.Canvas.marks[this.icon()](this.getElement('icon'), "#ffffff"); + MochiKit.Signal.connect(this.getId('panel'), 'onkeydown', this, 'keyDownHandler'); this.renderButtons(); }, //------------------------------------------------------------------------- 'renderButtons': function () { this.getElement('buttonArea').innerHTML = ''; MochiKit.Base.map(MochiKit.Base.bind(function (aButton) { var buttonElement; var buttonComponent; // element = this.append(this.getElement('buttonArea'), {tag:'div', cls:'button' + (aButton['isDefault'] === true ? ' default' : ''), children:[ // {tag:'a', href:'#'/*, id:this.getId('buttonLink')*/, html:aButton['text']} // ]}); buttonElement = this.append(this.getElement('buttonArea'), {tag:'div'}); buttonComponent = new Clipperz.PM.UI.Common.Components.Button({'element':buttonElement, 'text':aButton['text'], 'isDefault':aButton['isDefault']}); this.buttonComponents().push(buttonComponent); MochiKit.Signal.connect(buttonComponent, 'onclick', MochiKit.Base.method(this, 'buttonEventHandler', aButton)); }, this), MochiKit.Iter.reversed(this.buttons())); }, //------------------------------------------------------------------------- 'displayElement': function() { return this.getElement('panel'); }, //------------------------------------------------------------------------- 'closeOk': function () { this.deferred().callback(); this._deferred = null; }, 'closeCancel': function () { this.deferred().cancel(); this._deferred = null; }, 'closeError': function () { this.deferred().errback(); this._deferred = null; }, //------------------------------------------------------------------------- 'buttonEventHandler': function(aButton, anEvent) { anEvent.preventDefault(); // MochiKit.Signal.signal(this, 'cancelEvent'); switch (aButton['result']) { case 'OK': //console.log("==> OK"); this.closeOk(); break; case 'CANCEL': //console.log("==> CANCEL"); this.closeCancel(); break; default: //console.log("==> ????"); this.closeError(); break; } //console.log("<=="); }, //------------------------------------------------------------------------- 'deferredShow': function (someArgs, aResult) { this.deferredShowModal(someArgs); this.deferred().addMethod(this, 'deferredHideModal', {closeToElement:someArgs.onOkCloseToElement }); this.deferred().addErrback (MochiKit.Base.method(this, 'deferredHideModal', {closeToElement:someArgs.onCancelCloseToElement })); this.deferred().addCallback(MochiKit.Async.succeed, aResult); return this.deferred(); }, //------------------------------------------------------------------------- 'modalDialogMask': function () { return this.getId('modalDialogMask'); }, 'modalDialog': function () { return this.getId('modalDialog'); }, 'modalDialogFrame': function() { return this.getId('modalDialogFrame'); }, //------------------------------------------------------------------------- 'renderModalMask': function () { Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, {tag:'div', id:this.getId('modalDialogWrapper'), cls:'modalDialogWrapper simpleMessagePanelMask', children:[ {tag:'div', id:this.getId('modalDialogMask'), cls:'modalDialogMask simpleMessagePanelMask'}, {tag:'div', id:this.getId('modalDialogFrame'), cls:'modalDialogFrame simpleMessagePanelMask'}, {tag:'div', id:this.getId('modalDialog'), cls:'modalDialog simpleMessagePanelMask'} ]} ); MochiKit.Style.hideElement(this.getId('modalDialogMask')); MochiKit.Style.hideElement(this.getId('modalDialogFrame')); }, //------------------------------------------------------------------------- 'keyDownHandler': function (anEvent) { if (anEvent.key().string == 'KEY_ENTER') { anEvent.preventDefault(); //console.log("13 - RETURN ?", this); this.closeOk(); //console.log('<<< 13') } if (anEvent.key().string == 'KEY_ESCAPE') { anEvent.preventDefault(); //console.log("27 - ESC ?", this); this.closeCancel(); //console.log("<<< 27"); } }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js new file mode 100644 index 0000000..32dfa63 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js @@ -0,0 +1,299 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); + +Clipperz.PM.UI.Mobile.Components.CardDetail = function(args) { + args = args || {}; + + Clipperz.PM.UI.Mobile.Components.CardDetail.superclass.constructor.apply(this, arguments); + +// this._cardReference = null; + + return this; +} + +//============================================================================= + +Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.CardDetail, Clipperz.PM.UI.Common.Components.BaseComponent, { + + //------------------------------------------------------------------------- + + 'toString': function () { + return "Clipperz.PM.UI.Mobile.Components.CardDetail component"; + }, + + //------------------------------------------------------------------------- +/* + 'cardReference': function () { + return this._cardReference; + }, + + 'setCardReference': function (aValue) { + this._cardReference = aValue; + }, +*/ + //------------------------------------------------------------------------- + + 'renderSelf': function () { +console.log("CardDetail.renderSelf"); + this.append(this.element(), {tag:'div', cls:'cardDetail', children:[ + {tag:'div', cls:'toolbar', children:[ + {tag:'a', href:'#', cls:'back', html:"List"}, + {tag:'h1', id:this.getId('cardTitle'), html:"…"} + ]}, + {tag:'div', cls:'scroll', id:this.getId('cardDetails'), children:[ + ]} + ]}); + }, +/* + 'renderSelf': function() { + this.append(this.element(), [ + {tag:'div', cls:'cardDetail', id:this.getId('cardDetail'), children:[ + {tag:'div', id:this.getId('progressBar')} //, + ]} + ]); + + this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); + MochiKit.Signal.signal(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', 0); + }, +*/ + + 'setTitle': function (aValue) { + this.getElement('cardTitle').innerHTML = aValue; + }, + + 'fieldListElement': function () { + var result; + + result = this.getElement('fieldList'); + if (result == null) { + result = this.append(this.getElement('cardDetails'), {tag:'ul', cls:'rounded', id:this.getId('fieldList')}); + } + + return result; + }, + + 'renderFieldValues': function (someFieldValues) { + var fieldClass; + + if ((someFieldValues['actionType'] != 'NONE') || (someFieldValues['label'] != '') && (someFieldValues['value'] != '')) { + if (someFieldValues['isHidden'] == true) { + fieldClass = 'password'; + } else { + fieldClass = ''; + } + + this.append(this.fieldListElement(), {tag:'li', cls:'cardField', children:[ + {tag:'a', href:'#', cls:fieldClass, html:someFieldValues['value'], children:[ + {tag:'small', cls:'label', html:someFieldValues['label']} + ]} + ]}) + } + }, + + 'addField': function (aField) { + var deferredResult; + var fieldValues; + + fieldValues = {}; + deferredResult = new Clipperz.Async.Deferred("CardDetail.addField", {trace:false}); + deferredResult.addMethod(aField, 'label'); + deferredResult.addCallback(function (aValue) { fieldValues['label'] = aValue; }); + deferredResult.addMethod(aField, 'value'); + deferredResult.addCallback(function (aValue) { fieldValues['value'] = aValue; }); + deferredResult.addMethod(aField, 'actionType'); + deferredResult.addCallback(function (aValue) { fieldValues['actionType'] = aValue; }); + deferredResult.addMethod(aField, 'isHidden'); + deferredResult.addCallback(function (aValue) { fieldValues['isHidden'] = aValue; }); + deferredResult.addMethod(this, 'renderFieldValues', fieldValues); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'directLoginElement': function () { + var result; + + result = this.getElement('directLoginList'); + if (result == null) { + this.append(this.getElement('cardDetails'), {tag:'h2', html:"Direct login"}); + result = this.append(this.getElement('cardDetails'), {tag:'ul', cls:'rounded', id:this.getId('directLoginList')}); + } + + return result; + }, + + 'addDirectLogin': function (aDirectLogin) { + this.append(this.directLoginElement(), {tag:'li', cls:'directLogin forward', children:[ + {tag:'a', href:'#', html:"direct login", children:[ + {tag:'small', cls:'favicon', children:[{tag:'img', cls:'favicon', src:'http://www.clipperz.com/favicon.ico'}]} + ]} + ]}) + +console.log("ADD DIRECT LOGIN", aDirectLogin); + }, + + //========================================================================= + + 'showCard': function (aCard) { + var deferredResult; + +// this.render(); + +console.log("CardDetail.showCard", aCard); + deferredResult = new Clipperz.Async.Deferred("CardDetail.showCard", {trace:false}); + deferredResult.addMethod(aCard, 'label'); + deferredResult.addMethod(this, 'setTitle'); + + deferredResult.addMethod(aCard, 'fields'); + deferredResult.addCallback(MochiKit.Base.values); + deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'addField')); + + deferredResult.addMethod(aCard, 'directLogins'); + deferredResult.addCallback(MochiKit.Base.values); + deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'addDirectLogin')); + + + deferredResult.callback(); + + return deferredResult; +// return Clipperz.Async.callbacks("CardDialogController.updateComponentState", [ +// MochiKit.Base.method(this.record(), 'hasPendingChanges'), +// MochiKit.Base.method(this.cardDialogComponent(), 'setShouldEnableSaving'), +// +// MochiKit.Base.method(this.record(), 'label'), +// MochiKit.Base.method(this.cardDialogComponent(), 'setTitle'), +// MochiKit.Base.method(this.record(), 'notes'), +// MochiKit.Base.method(this.cardDialogComponent(), 'setNotes'), +// +// MochiKit.Base.method(this.record(), 'fields'), +// MochiKit.Base.values, +// MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithField')), +// +// MochiKit.Base.method(this.record(), 'directLogins'), +// MochiKit.Base.values, +// MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithDirectLogin')), +// +// MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'), +// MochiKit.Base.noop +// ], {trace:false}); + + }, + + //========================================================================= + + 'showCardDetails': function (someData) { + this.element().innerHTML = ''; + this.append(this.element(), [ + {tag:'fieldset', id:this.getId('fields'), children:MochiKit.Base.map(function (aFieldData) { + return {tag:'div', cls:'row', children:[ + {tag:'label', html:aFieldData['label']}, +// {tag:'span', cls:('fieldValue ' + (aFieldData['isHidden'] ? 'password' : 'text')), html:aFieldData['value']} + {tag:'div', cls:('fieldValue ' + (aFieldData['isHidden'] ? 'password' : 'text')), children:[ + {tag:'div', children:[{tag:'p', html:aFieldData['value']}]} + ]} +// {tag:'input', type:'text', cls:('fieldValue ' + (aFieldData['isHidden'] ? 'password' : 'text')), value:aFieldData['value'], disabled:true} + + ]} + }, someData['fields'])} + ]); + + MochiKit.Iter.forEach(MochiKit.Selector.findChildElements(this.element(), ['span.password']), MochiKit.Base.bind(function (aPasswordElement) { + MochiKit.Signal.connect(aPasswordElement, 'onclick', function (anEvent) { alert(MochiKit.DOM.scrapeText(anEvent.src())); }) + }, this)); + + if (someData['directLogins'].length > 0) { + this.append(this.element(), [ + {tag:'h2', html:"Direct logins"}, + {tag:'fieldset', id:this.getId('directLogins'), children:MochiKit.Base.map(function (aDirectLoginData) { + return {tag:'div', cls:'row', id:('directLogin_' + aDirectLoginData['_reference']), children:[ + {tag:'img', cls:'favicon', src:aDirectLoginData['favicon']}, +// {tag:'input', cls:'directLogin', disabled:'disabled', type:'text', name:aDirectLoginData['label'], value:aDirectLoginData['label']} + {tag:'span', cls:'directLogin', html:aDirectLoginData['label']} + ]} + }, someData['directLogins'])} + ]); + + MochiKit.Base.map(MochiKit.Base.bind(function (aRowNode) { + MochiKit.Signal.connect(aRowNode, 'onclick', this, 'directLoginClickHandler'); + }, this), + MochiKit.Selector.findChildElements(this.getElement('directLogins'), ['div.row']) + ) + }; + + if (someData['notes'] != '') { + this.append(this.element(), [ + {tag:'h2', html:"Notes"}, + {tag:'fieldset', id:this.getId('fieldset'), children:[ + {tag:'div', cls:'row notes', children:[ + {tag:'span', html:someData['notes']} + ]} + ]} + ]); + }; + + return true; + }, + + //------------------------------------------------------------------------- +/* + 'toggleClickHandler': function (anEvent) { + var nextState; + var fieldValue; + +//console.log("TOGGLE"); + anEvent.preventDefault; + fieldValue = MochiKit.Selector.findChildElements(anEvent.src().parentNode.parentNode, ['span.password'])[0]; + + nextState = (MochiKit.DOM.getNodeAttribute(anEvent.src(), 'toggled') != 'true'); + if (nextState) { + MochiKit.DOM.removeElementClass(fieldValue, 'clear'); + } else { + MochiKit.DOM.addElementClass(fieldValue, 'clear'); + } + + MochiKit.DOM.setNodeAttribute(anEvent.src(), 'toggled', nextState); + }, +* / + //========================================================================= +/* + 'directLoginClickHandler': function (anEvent) { + anEvent.preventDefault(); + + if (/(directLogin_)/.test(anEvent.src().id)) { + var directLoginReference; + + directLoginReference = anEvent.src().id.match(/(directLogin_)(.*)/)[2]; + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', {cardReference:this.cardReference(), directLoginReference:directLoginReference}); + } + }, +*/ + //========================================================================= + + __syntaxFix__: "syntax fix" +}); diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardList.js index c3f2701..a4aa212 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardList.js @@ -1,201 +1,254 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ -Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components'); +Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); -Clipperz.PM.UI.iPhone.Components.CardList = function(args) { +Clipperz.PM.UI.Mobile.Components.CardList = function(args) { args = args || {}; - Clipperz.PM.UI.iPhone.Components.CardList.superclass.constructor.apply(this, arguments); + Clipperz.PM.UI.Mobile.Components.CardList.superclass.constructor.apply(this, arguments); this._cardDetail = null; return this; } //============================================================================= -Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.CardList, Clipperz.PM.UI.Common.Components.BaseComponent, { +Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.CardList, Clipperz.PM.UI.Common.Components.BaseComponent, { //------------------------------------------------------------------------- 'toString': function () { - return "Clipperz.PM.UI.iPhone.Components.CardList component"; + return "Clipperz.PM.UI.Mobile.Components.CardList component"; }, //------------------------------------------------------------------------- - 'renderSelf': function(/*aContainer, aPosition*/) { - this.append(this.element(), [ - {tag:'div', cls:'toolbar', id:'toolbar', children:[ - {tag:'h1', id:'pageTitle', html:"cards"}, - {tag:'a', id:'backButton', cls:'button', href:'#', html:"cards"} + 'renderSelf': function () { + this.append(this.element(), {tag:'div', cls:'cardList', children:[ + {tag:'div', cls:'toolbar', children:[ + {tag:'h1', html:"clipperz"}, +// {tag:'input', name:'search', type:'search', autocomplete:'off', placeholder:"search", id:this.getId('search')}, + {tag:'a', href:'#', id:'settings', cls:'button', html:"*"} ]}, - {tag:'div', cls:'cardList', id:this.getId('cardList'), children:[ - {tag:'form', title:'search', cls:'panel cardListSearchForm', id:this.getId('cardListSearchForm'), children:[ - {tag:'input', type:'search', name:'search', value:"", placeholder:"search", id:this.getId('searchField')} - ]}, - {tag:'ul', cls:'panel cardListPanel', id:this.getId('cardListPanel'), children:[]} - ]}, - {tag:'div', cls:'panel cardDetailPanel', id:this.getId('cardDetail')} - ]); - - MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onsubmit', this, 'searchHandler'); - MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeydown', this, 'searchHandler'); - MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeyup', this, 'searchHandler'); + {tag:'div', cls:'scroll', id:this.getId('listBox'), children:[ + {tag:'ul', cls:'rounded', id:this.getId('list'), children:[ + {tag:'li', html:'loading'} + ]} + ]} + ]}); + + MochiKit.Signal.connect(this.getElement('list'), 'onclick', this, 'cardSelectionHandler'); + MochiKit.Signal.connect(this.getElement('list'), 'ontouchstart', this, 'cardSelectionHandler'); +// MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onsubmit', this, 'searchHandler'); +// MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeydown', this, 'searchHandler'); +// MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeyup', this, 'searchHandler'); - MochiKit.Signal.connect(this.getElement('cardListPanel'), 'onclick', this, 'cardListClickHandler'); - MochiKit.Signal.connect('backButton', 'onclick', this, 'backButtonClickHandler'); +// MochiKit.Signal.connect(this.getElement('cardListPanel'), 'onclick', this, 'cardListClickHandler'); +// MochiKit.Signal.connect('backButton', 'onclick', this, 'backButtonClickHandler'); - MochiKit.Style.hideElement('backButton'); - MochiKit.Style.hideElement(this.getElement('cardDetail')); +// MochiKit.Style.hideElement('backButton'); +// MochiKit.Style.hideElement(this.getElement('cardDetail')); }, - //------------------------------------------------------------------------- + 'showCards': function (someCards) { + var cardListElement; + if (this.isFullyRendered() == false) { + this.render(); + }; + + cardListElement = this.getElement('list') + + cardInfo = { + '_rowObject': MochiKit.Async.succeed, + '_reference': MochiKit.Base.methodcaller('reference'), + '_searchableContent': MochiKit.Base.methodcaller('searchableContent'), + 'label': MochiKit.Base.methodcaller('label'), + 'favicon': MochiKit.Base.methodcaller('favicon') + }; + +//console.log("someCards", someCards); + deferredResult = new Clipperz.Async.Deferred("CardList.showCards", {trace:false}); + deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("CardList.value - collectResults", cardInfo, {trace:false})); + deferredResult.addCallback(Clipperz.Async.collectAll); + deferredResult.addCallback(MochiKit.Base.methodcaller('sort', Clipperz.Base.caseInsensitiveKeyComparator('label'))); + deferredResult.addCallbackPass(MochiKit.DOM.replaceChildNodes, cardListElement); +// deferredResult.addCallbackPass(MochiKit.DOM.removeElementClass, cardListElement, 'loading'); + deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'appendCardToList', cardListElement)); + deferredResult.callback(someCards); + }, + + 'appendCardToList': function (aCardListElement, aCardInfo) { +//console.log("appendCardToList", aCardInfo); + this.append(aCardListElement, {tag:'li', cls:'cardListItem arrow', cardreference:aCardInfo['_reference'], children:[ + {tag:'a', href:'#', html:aCardInfo['label'], children:[ + {tag:'small', cls:'favicon', children:[{tag:'img', cls:'favicon', src:aCardInfo['favicon']}]} + ]} + ]}); + }, + + 'cardSelectionHandler': function (anEvent) { + var listElement; + var cardReference; + + anEvent.preventDefault(); + + listElement = anEvent.target(); + if (MochiKit.DOM.getNodeAttribute(listElement, 'cardreference') == null) { + listElement = MochiKit.DOM.getFirstParentByTagAndClassName(anEvent.target(), tagName='li', className='cardListItem'); + } + cardReference = MochiKit.DOM.getNodeAttribute(listElement, 'cardreference'); +console.log("###", listElement, cardReference); + // TODO: Notify card with reference MochiKit.DOM.getNodeAttribute(listElement, 'cardreference') has been selected + MochiKit.Signal.signal(this, 'selectedCard', cardReference); + }, + //------------------------------------------------------------------------- +/* 'searchHandler': function (anEvent) { if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) { // RETURN anEvent.preventDefault(); } else { if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) { anEvent.target().value = ""; } if (anEvent.type() == 'keyup') { MochiKit.Signal.signal(this, 'searchEvent', anEvent.target().value); } } }, //------------------------------------------------------------------------- 'update': function (someObjects) { var cardListPanel; var i,c; cardListPanel = this.getElement('cardListPanel'); cardListPanel.innerHTML = ''; c = someObjects.length; for (i=0; i<c; i++) { this.append(cardListPanel, {tag:'li', cls:'cardListItem', id:('cardListItem_' + someObjects[i]['_reference']), children:[ {tag:'img', src:(someObjects[i]['favicon'] ? someObjects[i]['favicon'] : 'data:application/octet-stream;charset=utf-8;base64,AAABAAEAFxcAAAEAGAD8BgAAFgAAACgAAAAXAAAALgAAAAEAGAAAAAAAAAAAABIXAAASFwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////9zAC////////////////////////////////////////////////////////////////////////////////////////////9pAG////////////////////////////////////////////////////////////////////////////////////////////9rAC////////////////////////////////////////////////////////////////////////////////////////////9yAHP////////////////////////IyMizs7O6urrq6ur////////////Ozs6zs7Ozs7Pq6ur///////////////////////8AAAD////////////////////V1dWXl5eXl5eXl5elpaX4+Pj////Ozs6Xl5eXl5eXl5eenp7///////////////////////8AAAD////////////////////Ozs6Xl5eXl5eXl5eXl5fBwcHq6uqenp6Xl5eXl5eXl5eXl5f///////////////////////8AAAD////////////////////j4+OXl5eXl5eXl5eXl5eXl5elpaWXl5eXl5eXl5eXl5ezs7P///////////////////////8AAAD////////////////////////IyMiXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eenp7x8fH////////////////////////////////////////////////////4+PilpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5fOzs7////////////////////////////////////////////////////////q6uq6urqXl5eXl5eXl5eXl5eXl5eXl5eenp7V1dX4+Pj///////////////////////8AAAD////////////4+PjOzs6lpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e6urrj4+P///////////////8AAAD////////////BwcGXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fx8fH///////////8AAAD///////////+zs7OXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fj4+P///////////8AAAD////////////IyMiXl5eXl5eXl5eXl5e6urqXl5eXl5eXl5eXl5esrKylpaWXl5eXl5eXl5eenp7x8fH///////////8AAAD////////////////Ozs7Ozs7V1dX4+Pj///+Xl5eXl5eXl5eXl5fOzs7////q6urOzs7Ozs7q6ur///////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD////////////////////////////////////IyMiXl5eXl5eenp7x8fH///////////////////////////////////8AAAD////////////////////////////////////////j4+Pj4+Px8fH///////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo=')}, {tag:'a', id:('cardListReference_' + someObjects[i]['_reference']), href:'#', html:someObjects[i]['label']} ]}) MochiKit.Signal.connect('cardListItem_' + someObjects[i]['_reference'], 'onclick', this, 'cardListClickHandler'); } }, 'cardListClickHandler': function (anEvent) { anEvent.preventDefault(); if (/(cardListReference_|cardListItem_)/.test(anEvent.target().id)) { var cardListReference; cardListReference = anEvent.target().id.match(/(cardListReference_|cardListItem_)(.*)/)[2]; //console.log("Showing detail for card named", cardListReference); MochiKit.Signal.signal(this, 'selectedCard', cardListReference); } }, //========================================================================= 'cardDetail': function (someData) { if (this._cardDetail == null) { - this._cardDetail = new Clipperz.PM.UI.iPhone.Components.CardDetail({element:this.getElement('cardDetail')}); + this._cardDetail = new Clipperz.PM.UI.Mobile.Components.CardDetail({element:this.getElement('cardDetail')}); } return this._cardDetail; }, //------------------------------------------------------------------------- 'removeCardDetail': function () { if (this._cardDetail != null) { this._cardDetail.remove(); this._cardDetail = null; } }, //========================================================================= 'showCard': function (someData) { var deferredResult; var offset; offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); this.cardDetail().render(); this.cardDetail().setCardReference(someData['_reference']); MochiKit.Style.setElementPosition(this.cardDetail().element(), {x:offset}); new MochiKit.Visual.Sequence([ // new MochiKit.Visual.Move(this.cardDetail().element(), {x:offset, y:45, mode:'absolute', duration:0, sync:true}), new MochiKit.Visual.Parallel([ new MochiKit.Visual.Move(this.getElement('cardList'), {x:-offset, y:0, mode:'relative', transition:MochiKit.Visual.Transitions.linear, sync:true}), new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:0, y:45, mode:'absolute', transition:MochiKit.Visual.Transitions.linear, sync:true}), // new MochiKit.Visual.ScrollTo('toolbar', {sync:true}), MochiKit.Visual.appear ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) ], {duration:1, sync:true}), MochiKit.Visual.fade(this.getElement('cardList'), {duration:0, sync:true}) ], {}) MochiKit.DOM.getElement('pageTitle').innerHTML = someData['title']; return true; }, //------------------------------------------------------------------------- 'showCardDetails': function (someData) { return this.cardDetail().showCardDetails(someData); }, //========================================================================= 'backButtonClickHandler': function (anEvent) { var offset; anEvent.preventDefault(); MochiKit.DOM.getElement('pageTitle').innerHTML = "cards"; offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); MochiKit.Style.setElementPosition(this.getElement('cardList'), {x:-offset}); MochiKit.DOM.showElement(this.getElement('cardList')); new MochiKit.Visual.Parallel([ new MochiKit.Visual.Move(this.getElement('cardList'), {x:offset, y:0, mode:'relative', transition:MochiKit.Visual.Transitions.linear, sync:true}), new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:offset, y:0, mode:'relative', transition:MochiKit.Visual.Transitions.linear, sync:true}), MochiKit.Visual.fade (this.getElement('cardDetail'), { transition:MochiKit.Visual.Transitions.linear, sync:true}), MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) ], {duration:1, afterFinish:MochiKit.Base.method(this, 'removeCardDetail')}) }, - +*/ //========================================================================= __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js new file mode 100644 index 0000000..eafcdbc --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js @@ -0,0 +1,356 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); + +Clipperz.PM.UI.Mobile.Components.LoginForm = function(args) { + args = args || {}; + + this._pin = ''; + + this._message = null; + this._steps = 0; + this._actualSteps = 0; + + this._callback = null; + this._errorCallback = null; + + this._mode = 'CREDENTIALS'; + + Clipperz.PM.UI.Mobile.Components.LoginForm.superclass.constructor.apply(this, arguments); + + return this; +} + +//============================================================================= + +Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, { + + //------------------------------------------------------------------------- + + 'toString': function () { + return "Clipperz.PM.UI.Mobile.Components.LoginForm component"; + }, + + //------------------------------------------------------------------------- + + 'callback': function () { + return this._callback; + }, + + 'errorCallback': function () { + return this._errorCallback; + }, + + //------------------------------------------------------------------------- + + 'mode': function () { + return this._mode; + }, + + 'setMode': function (aValue) { + this._mode = aValue; + }, + + //.......................................................................... + + 'pin': function () { + return this._pin; + }, + + 'setPin': function (aValue) { + this._pin = aValue; + }, + + //.......................................................................... + + 'username': function () { + return this._username; + }, + + 'setUsername': function (aValue) { + this._username = aValue; + }, + + //.......................................................................... + + 'passphrase': function () { + return this._passphrase; + }, + + 'setPassphrase': function (aValue) { + this._passphrase = aValue; + }, + + //------------------------------------------------------------------------- + + 'message': function () { + return this._message; + }, + + '_setMessage': function (aValue) { + this._message = aValue; + + if (aValue == null) { + MochiKit.Style.hideElement(this.getElement('credentialsMessage')); + } else { + this.getElement('message').innerHTML = aValue; + MochiKit.Style.showElement(this.getElement('credentialsMessage')); + } + }, + + 'setMessage': function (aValue) { + this._setMessage(aValue); + MochiKit.DOM.removeElementClass(this.getElement('credentialsMessage'), 'error'); + }, + + 'setErrorMessage': function (aValue) { + this._setMessage(aValue); + MochiKit.DOM.addElementClass(this.getElement('credentialsMessage'), 'error'); + }, + + //------------------------------------------------------------------------- + + 'setCallbacks': function (args) { + this._callback = args['callback']; + this._errorCallback = args['errorCallback']; + }, + + 'showErrors': function (args) { +//console.log("LoginForm.showErrors", args); + if (args['previousFailedAttempt'] == 'LOGIN') { + this.setErrorMessage("Wrong credentials"); + } else if (args['previousFailedAttempt'] == 'PIN') { + if (args['failedAttempts'] == -1) { + this.setErrorMessage("Wrong PIN - Resetted"); + } else { + this.setErrorMessage("Wrong PIN"); + } + } else { + this.setMessage(null); + } + }, + + 'updateWithArgs': function (args) { + this.renderIfNeeded(); + this.setCallbacks(args); + this.showErrors(args); + this.updateRendering(); + }, + + 'showPinLogin': function (args) { + this.setPin(''); + this.setMode('PIN'); + this.updateWithArgs(args); + +// $(this.getAnchor('PIN')).focus(); + this.getElement('PIN').focus(); + }, + + 'showCredentialsLogin': function (args) { + this.setMode('CREDENTIALS'); + this.updateWithArgs(args); + + if (this.getElement('usernameField').value.length == 0) { +// $(this.getAnchor('usernameField')).focus(); + this.getElement('usernameField').focus(); + } else { +// $(this.getAnchor('passphraseField')).focus(); + this.getElement('passphraseField').focus(); + this.getElement('passphraseField').select(); + } + }, + + //------------------------------------------------------------------------- + + 'renderIfNeeded': function () { + if (this.isFullyRendered() == false) { + this.render(); + }; + this.updateRendering(); + }, + + 'updateRendering': function () { + MochiKit.Style.showElement(this.getElement('credentialsBody')); + MochiKit.Style.hideElement(this.getElement('validating')); + +// this.hideAllPanes(); + MochiKit.Base.map(function (aNode) { MochiKit.Style.hideElement(aNode); }, MochiKit.Selector.findDocElements('div.credentialsBody > div')); + if (this.mode() == 'CREDENTIALS') { + selectedPanel = this.getElement('credentials') + } else if (this.mode() == 'PIN') { + selectedPanel = this.getElement('pin') +// this.updatePinDisplay(); + } else { + throw 'Unhandled login form mode'; + } + MochiKit.Style.showElement(selectedPanel); + + MochiKit.Style.hideElement(this.getElement('validating')); + }, + + 'renderSelf': function() { + var selectedPanel; + this.append(this.element(), {tag:'div', id:'login', children:[ + {tag:'div', cls:'toolbar', children:[ + {tag:'h1', html:"clipperz"} + ]}, + {tag:'div', cls:'scroll', children:[ + //================================================================== + {tag:'div', cls:'credentialsMessage', id:this.getId('credentialsMessage'), children:[ + {tag:'h1', cls:'message', id:this.getId('message'), html:"Message"} + ]}, + //================================================================== + {tag:'div', cls:'credentialsBody', id:this.getId('credentialsBody'), children:[ + //-------------------------------------------------------------- + {tag:'div', cls:'pin', id:this.getId('pin'), children:[ + {tag:'form', cls:'scroll', id:this.getId('pinForm'), children:[ + {tag:'ul', cls:'edit rounded', children:[ + {tag:'li', children:[{tag:'input', type:'number', name:'PIN', placeholder:"PIN", id:this.getId('PIN') }]}, + ]}, + {tag:'a', href:'#', cls:'greenButton', id:this.getId('pinSubmitButton'), html:"Login"} + ]} + ]}, + //-------------------------------------------------------------- + {tag:'div', cls:'credentials', id:this.getId('credentials'), children:[ + {tag:'form', cls:'scroll', id:this.getId('credentialsForm'), children:[ + {tag:'ul', cls:'edit rounded', children:[ + {tag:'li', children:[{tag:'input', type:'email', name:'name', /*value:'joe',*/ placeholder:"username", id:this.getId('usernameField') }]}, + {tag:'li', children:[{tag:'input', type:'password', name:'passphrase', /*value:'clipperz',*/ placeholder:"passphrase", id:this.getId('passphraseField') }]} + ]}, + {tag:'a', href:'#', cls:'greenButton', id:this.getId('credentialsSubmitButton'), html:"Login"} +// {tag:'input', type:'submit', cls:'greenButton', id:this.getId('credentialsSubmitButton'), value:"Login"} + + ]} + ]}, + //-------------------------------------------------------------- + ]}, + //================================================================== + {tag:'div', cls:'validating', id:this.getId('validating'), children:[ + {tag:'div', cls:'loading', children:[ + {tag:'div', cls:'spinner', children:[ + {tag:'div', cls:'bar01'}, + {tag:'div', cls:'bar02'}, + {tag:'div', cls:'bar03'}, + {tag:'div', cls:'bar04'}, + {tag:'div', cls:'bar05'}, + {tag:'div', cls:'bar06'}, + {tag:'div', cls:'bar07'}, + {tag:'div', cls:'bar08'}, + {tag:'div', cls:'bar09'}, + {tag:'div', cls:'bar10'}, + {tag:'div', cls:'bar11'}, + {tag:'div', cls:'bar12'} + ]} + ]}, + {tag:'div', id:this.getId('loadingMessage')}, + {tag:'a', href:'#', cls:'grayButton', id:this.getId('loginCancelButton'), html:"Cancel"} + ]} + //================================================================== + ]} + ]}); + + MochiKit.Signal.connect(this.getElement('credentialsForm'), 'onsubmit', this, 'submitCredentialsHandler'); + MochiKit.Signal.connect(this.getElement('credentialsSubmitButton'), 'onclick', this, 'submitCredentialsHandler'); + + MochiKit.Signal.connect(this.getElement('pinForm'), 'onsubmit', this, 'submitPinHandler'); + MochiKit.Signal.connect(this.getElement('pinSubmitButton'), 'onclick', this, 'submitPinHandler'); + + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'initProgress', this, 'initProgressHandle'); + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'updateProgress', this, 'updateProgressHandle'); + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'advanceProgress', this, 'advanceProgressHandle'); + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'progressDone', this, 'progressDoneHandle'); + }, + + //------------------------------------------------------------------------- + + 'submitPinHandler': function (anEvent) { + var pin; + + this.setMessage(null); + pin = this.getElement('PIN').value; +// $(this.getAnchor('PIN')).blur(); + this.getElement('PIN').blur(); + + credentials = Clipperz.PM.PIN.credentialsWithPIN(pin); + this.loginWithCredentials(credentials); + }, + + 'submitCredentialsHandler': function (anEvent) { +//console.log("submitCredentialsHandler"); + var credentials; + + this.setMessage(null); + + credentials = {}; + credentials['username'] = this.getElement('usernameField').value; + credentials['passphrase'] = this.getElement('passphraseField').value; +// $(this.getAnchor('passphraseField')).blur(); + this.getElement('passphraseField').blur(); + + this.loginWithCredentials(credentials); + }, + + //------------------------------------------------------------------------- + + 'loginWithCredentials': function (someCredentials) { + var args; + + args = {}; + args['credentials'] = someCredentials; + args['errorCallback'] = this.errorCallback(); + + MochiKit.Style.hideElement(this.getElement('credentialsBody')); + MochiKit.Style.showElement(this.getElement('validating')); + + MochiKit.Async.callLater(0.1, this.callback(), args); + }, + + //------------------------------------------------------------------------- + + 'initProgressHandle': function (anEvent) { +//console.log("** initProgressHandle", anEvent); + this._steps = anEvent['steps']; + this._actualSteps = 0; + }, + + 'updateProgressHandle': function (anEvent) { +//console.log("** updateProgressHandle", anEvent); + this._steps += anEvent['extraSteps']; + }, + + 'advanceProgressHandle': function (anEvent) { +//console.log("** advanceProgressHandle", anEvent); + this._actualSteps ++; +//console.log("STEPS: " + this._actualSteps + "/" + this._steps); + }, + + 'progressDoneHandle': function (anEvent) { +//console.log("** progressDoneHandle", anEvent); + }, + + //------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" +}); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js new file mode 100644 index 0000000..12a61f7 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js @@ -0,0 +1,393 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +Clipperz.Base.module('Clipperz.PM.UI.Mobile.Controllers'); + +Clipperz.PM.UI.Mobile.Controllers.MainController = function() { + this._jQTouch = null; + this._user = null; + this._proxy = null; + this._loginForm = null; + this._cardList = null; + this._cardDetail = null; + + return this; +} + +MochiKit.Base.update(Clipperz.PM.UI.Mobile.Controllers.MainController.prototype, { + + 'toString': function () { + return "Clipperz.PM.UI.Mobile.Controllers.MainController"; + }, + + //------------------------------------------------------------------------- + + 'user': function () { + return this._user; + }, + + 'setUser': function (aValue) { + this._user = aValue; + }, + + //------------------------------------------------------------------------- + + 'jQTouch': function () { + return this._jQTouch; + }, + + 'setJQTouch': function (aValue) { + this._jQTouch = aValue; + }, + + //========================================================================= + + 'run': function () { + console.log("MainController.run"); + + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin')); + Clipperz.DOM.Helper.overwrite(MochiKit.DOM.currentDocument().body, {tag:'div', id:'jqt', children:[ + {tag:'div', id:'loginForm'}, + {tag:'div', id:'cardList'}, + {tag:'div', id:'cardDetail'}, + {tag:'div', id:'preferences'} + ]}); + + this.showLoginForm(); + + this.initjQTouch(); + + +// this.showAddToHomeScreenBaloon(); +// this.selectInitialProxy(); + }, + + 'initjQTouch': function () { + var jqt; + + jqt = new $.jQTouch({ + icon: 'data:image/png;charset=utf-8;base64,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', +// icon4: 'jqtouch4.png', +// startupScreen: null, // Pass a string path to a 320px x 460px startup screen for full screen apps. + statusBar: 'black-translucent', // Styles the status bar when running as a fullscreen app. Other options are `default`, `black`, and `black-translucent`. +// addGlossToIcon: true, // Set to 'false' to prevent automatic glossy button effect on icon. + preloadImages: false, // Pass an array of image paths to load them before page loads. Ex: `['images/link_over.png', 'images/link_select.png']` + fixedViewport: true, // Removes the user's ability to scale the page. Ensures the site behaves more like an application. +// fullScreen: true, // The website will become a fullscreen application when saved to a user's home screen. Set to `false` to disable. +// fullScreenClass: 'fullscreen' // Adds a class to the `<body>` when running in full-screen mode, to allow for easy detection and styling. Set to `false` to disable. +// themeSelectionSelector: '#jqt #themes ul', // ??? + +// useAnimations: true, // Set to `false` to disable all animations. +// useFastTouch: true, // Removes ~350ms onClick delay when tapping a link (use in conjunction with the .tap() event) **Experimental** +// useTouchScroll: true, // Adds support for iOS5 scrolling. Set to false to disable. **Experimental** + + cacheGetRequests: false, // Automatically caches GET requests, so subsequent taps reference the pre-loaded views. (default: true) + +// backSelector: '.back, .cancel, .goback', // A CSS selector for back links/buttons. When clicked, the page history goes back one, automatically reversing whichever entrance animation was used. + +// cubeSelector: '.cube', // Link selector for a cube animation. +// dissolveSelector: '.dissolve', // Link selector for a dissolve animation. +// fadeSelector: '.fade', // Link selector for a fade animation. +// flipSelector: '.flip', // Link selector for a 3d flip animation. + formSelector: null, // Sets which forms are automatically submitted via Ajax. (default: 'form') +// popSelector: '.pop', // Link selector for a pop animation. (default: '.pop') +// slideSelector: 'body > * > ul li a', // Link selector for the default slide-left transition. By default applies to all links within an unordered list. Accepts any jQuery-capable selector `'li > a, a:not(.dontslide)'`, etc. (default: 'body > * > ul li a') +// slideupSelector: '.slideup', // Link selector for a slide up animation. (default: '.slideup') +// submitSelector: '.submit', // Selector which, when clicked, will submit its parent form (and close keyboard if open). (default: '.submit') +// swapSelector: '.swap', // Link selector for 3d swap animation. (default: '.swap') +// touchSelector: 'a, .touch', // Selector for items which are automatically given expanded touch events. This makes ordinary links more responsive and provides trigger events like `swipe` (default: 'a, .touch') + + debug: false + }); + + this.setJQTouch(jqt); + }, + + //========================================================================= + + 'showAddToHomeScreenBaloon': function () { +console.log(">>> showAddToHomeScreenBaloon"); + }, + + //------------------------------------------------------------------------- + + 'selectInitialProxy': function () { +//console.log(">>> selectInitialProxy"); + if (this.isOnline()) { +//console.log("--- selectInitialProxy: using default proxy"); + this._proxy = Clipperz.PM.Proxy.defaultProxy; + } else { + if (this.hasLocalData()) { +//console.log("--- selectInitialProxy: using local cache proxy"); + this._proxy = new Clipperz.PM.Proxy.OfflineCache({'shouldPayTolls':false}); + } else { + this.showOfflineError(); + } + } + }, + + //------------------------------------------------------------------------- + + 'showLoginForm': function (args) { + args = args || {}; + + args['callback'] = MochiKit.Base.method(this, 'doLogin'); + + if (Clipperz.PM.PIN.isSet()) { + args['errorCallback'] = MochiKit.Base.method(this, 'handleFailedPinLogin'); + this.loginForm().showPinLogin(args); + } else { + args['errorCallback'] = MochiKit.Base.method(this, 'handleFailedCredentialsLogin'); + this.loginForm().showCredentialsLogin(args); + } + }, + + //......................................................................... + + 'handleFailedCredentialsLogin': function () { +console.log("LOGIN FAILED"); + this.showLoginForm({'previousFailedAttempt':'LOGIN'}); + }, + + //......................................................................... + + 'handleFailedPinLogin': function () { + var failedAttempts; + var status; + + failedAttempts = Clipperz.PM.PIN.recordFailedAttempt(); + this.showLoginForm({'previousFailedAttempt':'PIN', 'failedAttempts': failedAttempts}); + }, + + //------------------------------------------------------------------------- + + 'doLogin': function (someArgs) { + var deferredResult; + var credentials; + var errorCallback; + var user; + var getPassphraseDelegate; + +//console.log(">>> MainController.doLogin", someArgs); + credentials = someArgs['credentials']; + errorCallback = someArgs['errorCallback'] || MochiKit.Base.noop; + + getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, credentials.passphrase); + user = new Clipperz.PM.DataModel.User({'username':credentials.username, 'getPassphraseFunction':getPassphraseDelegate}); + + deferredResult = new Clipperz.Async.Deferred('MainController.doLogin', {trace:false}); + deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); + deferredResult.addCallback(MochiKit.Async.wait, 0.1); + deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); + deferredResult.addMethod(user, 'login'); + deferredResult.addCallbacks( + MochiKit.Base.method(this, 'processSuccessfulLogin', user), + errorCallback + ); + deferredResult.callback(); + + return deferredResult; + }, + + //.......................................................................... + + 'processSuccessfulLogin': function (aUser) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('MainController.processSuccessfulLogin', {trace:false}); + deferredResult.addMethod(Clipperz.PM.PIN, 'resetFailedAttemptCount'); +// deferredResult.addMethod(this, 'removeLoginForm'); + deferredResult.addMethod(this, 'setUser', aUser); + deferredResult.addMethod(this, 'setupApplication'); + deferredResult.addMethod(this, 'runApplication'); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'setupApplication': function () { + var deferredResult; + +console.log(">>> setupApplication"); + deferredResult = new Clipperz.Async.Deferred("MainController.setupApplication", {trace:false}); + deferredResult.addMethod(this, 'welcomeFirstTimeUser'); + deferredResult.addMethod(this, 'showPaymentReminder'); + deferredResult.addMethod(this, 'copyDataLocally'); + deferredResult.callback(arguments); + + return deferredResult; + }, + + + //.......................................................................... + + 'isFirstTimeUser': function () { + return false; + }, + + 'welcomeFirstTimeUser': function () { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('MainController.welcomeFirstTimeUser', {trace:false}); + + if (this.isFirstTimeUser()) { + deferredResult.addCallback(function () { console.log("--> welcome"); }); + } + deferredResult.callback(); + + return deferredResult; + }, + + //.......................................................................... + + 'shouldShowPaymentReminder': function () { + return true; + }, + + 'showPaymentReminder': function () { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('MainController.showPaymentReminder', {trace:false}); + + if (this.shouldShowPaymentReminder()) { + deferredResult.addCallback(function () { console.log("--> payment reminder"); }); + } + deferredResult.callback(); + + return deferredResult; + }, + + //.......................................................................... + + 'canCopyDataLocally': function () { + return false; + }, + + 'copyDataLocally': function () { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('MainController.copyDataLocally', {trace:false}); + + if (this.canCopyDataLocally()) { + deferredResult.addCallback(function () { console.log("--> copy data locally"); }); + } + deferredResult.callback(); + + return deferredResult; + + }, + + //------------------------------------------------------------------------- + + 'runApplication': function () { + var deferredResult; + +//console.log(">>> runApplication"); + deferredResult = new Clipperz.Async.Deferred('MainController.runApplication', {trace:true}); + deferredResult.addMethod(this.user(), 'getRecords'); + deferredResult.addMethod(this, 'showCards'); + deferredResult.callback(); + + return deferredResult; + }, + + //========================================================================= + + 'showOfflineError': function (anException) { + alert("Error: " + anException); + throw anException; + }, + + //========================================================================= + + 'isOnline': function() { + return navigator.onLine; + }, + + 'hasLocalData': function() { + return false; + }, + + //========================================================================= + + 'loginForm': function() { + if (this._loginForm == null) { + this._loginForm = new Clipperz.PM.UI.Mobile.Components.LoginForm({element:MochiKit.DOM.getElement('loginForm')}); + } + + return this._loginForm; + }, + + 'removeLoginForm': function () { + if (this._loginForm != null) { + this._loginForm.remove(); + this._loginForm = null; + } + }, + + //------------------------------------------------------------------------- + + 'cardList': function () { + if (this._cardList == null) { + this._cardList = new Clipperz.PM.UI.Mobile.Components.CardList({element:MochiKit.DOM.getElement('cardList')}); + MochiKit.Signal.connect(this._cardList, 'selectedCard', this, 'selectCardHandler'); + } + + return this._cardList; + }, + + 'showCards': function (someCards) { + this.cardList().showCards(someCards); + this.jQTouch().goTo('#cardList', 'slideleft'); + }, + + //------------------------------------------------------------------------- + + 'cardDetail': function () { + if (this._cardDetail == null) { + this._cardDetail = new Clipperz.PM.UI.Mobile.Components.CardDetail({element:MochiKit.DOM.getElement('cardDetail')}); + } + + return this._cardDetail; + }, + + 'selectCardHandler': function (aCardReference) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("MainController.selectCardHandler", {trace:true}); + deferredResult.addMethod(this.cardDetail(), 'render'); + deferredResult.addMethod(this.jQTouch(), 'goTo', '#cardDetail', 'slideleft'); + deferredResult.addMethod(this.user(), 'getRecord', aCardReference); + deferredResult.addMethod(this.cardDetail(), 'showCard'); + deferredResult.callback(); + + return deferredResult; + }, + + //========================================================================= + __syntaxFix__: "syntax fix" +}); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js index ee6d7a3..d6b0574 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js @@ -1,145 +1,150 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Web.Components.AccountPanel = function(args) { args = args || {}; Clipperz.PM.UI.Web.Components.AccountPanel.superclass.constructor.apply(this, arguments); // this._initiallySelectedTab = args.selected || 'ACCOUNT'; this._initiallySelectedTab = args.selected || 'PASSPHRASE'; this._tabPanelControllerConfiguration = { // 'ACCOUNT': { // tab: 'accountTab', // panel: 'accountPanel' // }, 'PASSPHRASE': { tab: 'passphraseTab', panel: 'passphrasePanel' }, + 'OTP': { + tab: 'OTPTab', + panel: 'OTPPanel' + }, 'PREFERENCES': { tab: 'preferencesTab', panel: 'preferencesPanel' }, 'LOGIN_HISTORY': { tab: 'loginHistoryTab', panel: 'loginHistoryPanel' } }; return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AccountPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Web.Components.AccountPanel component"; }, //------------------------------------------------------------------------- 'renderSelf': function(/*aContainer, aPosition*/) { //Clipperz.log("AccountPanel.renderSelf element", this.element()); this.append(this.element(), [ {tag:'div', cls:'header', children:[ {tag:'div', cls:'subPanelTabs', children:[ {tag:'ul', children:[ // {tag:'li', id:this.getId('accountTab'), children:[{tag:'a', href:'#', html:'Account'}], cls:'first'}, {tag:'li', id:this.getId('passphraseTab'), children:[{tag:'a', href:'#', html:'Passphrase'}], cls:'first'}, + {tag:'li', id:this.getId('OTPTab'), children:[{tag:'a', href:'#', html:'One Time Passwords'}]}, {tag:'li', id:this.getId('preferencesTab'), children:[{tag:'a', href:'#', html:'Preferences'}]}, {tag:'li', id:this.getId('loginHistoryTab'), children:[{tag:'a', href:'#', html:'Login history'}]} ]} ]} ]}, {tag:'div', cls:'body', children:[ {tag:'div', cls:'accountPanel', children:[ {tag:'div', cls:'subPanelContent', children:[ {tag:'ul', children:[ // {tag:'li', id:this.getId('accountPanel'), children:[ // {tag:'h3', html:"-- Account --"} // ]}, {tag:'li', id:this.getId('passphrasePanel'), children:[ {tag:'h3', cls:'changePassphrase', html:"Change passphrase"}, {tag:'form', id:this.getId('changePassphrase'), cls:'changePassphrase', children:[ {tag:'div', cls:'currentCredentials', children:[ {tag:'div', cls:'field username', children:[ {tag:'label', html:"username", 'for':this.getId('currentUsername')}, {tag:'input', id:this.getId('currentUsername')} ]}, {tag:'div', cls:'field passphrase', children:[ {tag:'label', html:"passphrase", 'for':this.getId('currentPassphrase')}, {tag:'input', id:this.getId('currentPassphrase')} ]} ]}, {tag:'div', cls:'newPassphrase', children:[ {tag:'div', cls:'field', children:[ {tag:'label', html:"new passphrase", 'for':this.getId('newPassphrase')}, {tag:'input', id:this.getId('newPassphrase')} ]}, {tag:'div', cls:'field', children:[ {tag:'label', html:"re-new passphrase", 'for':this.getId('reNewPassphrase')}, {tag:'input', id:this.getId('reNewPassphrase')} ]} ]}, {tag:'div', cls:'confirm', children:[ {tag:'input', type:'checkbox', id:this.getId('confirm')}, {tag:'label', html:"I understand that Clipperz will not be able to recover a lost passphrase", 'for':this.getId('confirm')} ]} ]}, {tag:'div', cls:'clear'}, {tag:'div', cls:'confirmButton', id:this.getId('confirmationButton'), children:[ {tag:'span', html:"change passphrase"} - ]}, - - {tag:'h3', cls:'manageOTP', html:"Manage One-Time Passphrases"}, - {} + ]} + ]}, + {tag:'li', id:this.getId('OTPPanel'), children:[ +// {tag:'h3', html:"Manage One-Time Passphrases"} ]}, {tag:'li', id:this.getId('preferencesPanel'), children:[ - {tag:'h3', html:"-- Preferences --"} +// {tag:'h3', html:"-- Preferences --"} ]}, {tag:'li', id:this.getId('loginHistoryPanel'), children:[ - {tag:'h3', html:"-- Login History --"} +// {tag:'h3', html:"-- Login History --"} ]} ]} ]} ]} ]}, {tag:'div', cls:'footer'} ]); this.tabPanelController().setup({selected:this.initiallySelectedTab()}); }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js index d2f1045..462d864 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js @@ -1,108 +1,116 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Web.Components.DataPanel = function(args) { args = args || {}; Clipperz.PM.UI.Web.Components.DataPanel.superclass.constructor.apply(this, arguments); this._initiallySelectedTab = args.selected || 'OFFLINE_COPY'; this._tabPanelControllerConfiguration = { 'OFFLINE_COPY': { tab: 'offlineCopyTab', panel: 'offlineCopyPanel' }, 'SHARING': { tab: 'sharingTab', panel: 'sharingPanel' }, 'IMPORT': { tab: 'importTab', panel: 'importPanel' }, 'EXPORT': { tab: 'exportTab', panel: 'exportPanel' } }; return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DataPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Web.Components.DataPanel component"; }, //------------------------------------------------------------------------- 'renderSelf': function(/*aContainer, aPosition*/) { this.append(this.element(), [ {tag:'div', cls:'header', children:[ {tag:'div', cls:'subPanelTabs', children:[ {tag:'ul', children:[ {tag:'li', id:this.getId('offlineCopyTab'), children:[{tag:'a', href:'#', html:'Offline copy'}], cls:'first'}, {tag:'li', id:this.getId('sharingTab'), children:[{tag:'a', href:'#', html:'Sharing'}]}, {tag:'li', id:this.getId('importTab'), children:[{tag:'a', href:'#', html:'Import'}]}, {tag:'li', id:this.getId('exportTab'), children:[{tag:'a', href:'#', html:'Export'}]} ]} ]} ]}, {tag:'div', cls:'body', children:[ {tag:'div', cls:'accountPanel', children:[ {tag:'div', cls:'subPanelContent', children:[ {tag:'ul', children:[ {tag:'li', id:this.getId('offlineCopyPanel'), children:[ - {tag:'h3', html:"Offline copy"} +// {tag:'h3', html:"Offline copy"}, + {tag:'p', html:"With just one click you can dump all your encrypted data from Clipperz servers to your hard disk and create a read-only offline version of Clipperz to be used when you are not connected to the Internet."}, + {tag:'a', id:this.getId('offlineCopyDownloadLink'), href:'#', html:"Download", cls:'downloadOfflineCopy'} ]}, {tag:'li', id:this.getId('sharingPanel'), children:[ - {tag:'h3', html:"Sharing"} +// {tag:'h3', html:"Sharing"} ]}, {tag:'li', id:this.getId('importPanel'), children:[ - {tag:'h3', html:"Import"} +// {tag:'h3', html:"Import"} ]}, {tag:'li', id:this.getId('exportPanel'), children:[ - {tag:'h3', html:"Export"} +// {tag:'h3', html:"Export"} ]} ]} ]} ]} ]}, {tag:'div', cls:'footer'} ]); this.tabPanelController().setup({selected:this.initiallySelectedTab()}); + MochiKit.Signal.connect(this.getId('offlineCopyDownloadLink'), 'onclick', this, 'downloadOfflineCopy'); }, - + + 'downloadOfflineCopy': function (anEvent) { + anEvent.preventDefault(); + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'downloadOfflineCopy', anEvent.src()); + }, + //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js index 5d082b5..26506e7 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js @@ -1,152 +1,156 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Web.Components.LoginProgress = function(args) { args = args || {}; Clipperz.PM.UI.Web.Components.LoginProgress.superclass.constructor.apply(this, arguments); this._deferred = null; return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginProgress, Clipperz.PM.UI.Common.Components.BaseComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Web.Components.LoginProgress component"; }, //------------------------------------------------------------------------- 'deferred': function() { return this._deferred; }, 'setDeferred': function(aValue) { this._deferred = aValue; }, //------------------------------------------------------------------------- 'renderSelf': function() { // var loginProgressElement; // // loginProgressElement = MochiKit.DOM.getElement('loginProgress'); // // if (loginProgressElement == null) { // loginProgressElement = this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress'}, true); // } //console.log(">> LoginProgress.renderSelf", this.element()); this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress', children: [ // this.append(loginProgressElement, [ {tag:'div', cls:'header', children:[ {tag:'h3', id:this.getId('title'), html:"login progress"} ]}, {tag:'div', cls:'body', children:[ {tag:'div', id:this.getId('progressBar')}, {tag:'div', id:this.getId('errorBox'), cls:'errorBox', children:[ // {tag:'div', cls:'img ALERT', children:[{tag:'div'}]}, {tag:'div', cls:'img ALERT', children:[{tag:'canvas', id:this.getId('canvas')}]}, {tag:'p', html:"Login failed"} ]} ]}, {tag:'div', cls:'footer', children:[ {tag:'div', cls:'buttonArea', id:this.getId('buttonArea'), children:[ - {tag:'div', cls:'button', id:this.getId('button'), children:[ - {tag:'a', href:'#', id:this.getId('buttonLink'), html:"cancel"} - ]} +// {tag:'div', cls:'button', id:this.getId('button'), children:[ +// {tag:'a', href:'#', id:this.getId('buttonLink'), html:"cancel"} +// ]} + {tag:'a', cls:'button', id:this.getId('button'), html:"cancel"} ]} ]} ]}); // ]); Clipperz.PM.UI.Canvas.marks['!'](this.getElement('canvas'), "#ffffff"); this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); MochiKit.Style.hideElement(this.getElement('errorBox')); - MochiKit.Signal.connect(this.getId('buttonLink'), 'onclick', this, 'cancelEventHandler'); +// MochiKit.Signal.connect(this.getId('buttonLink'), 'onclick', this, 'cancelEventHandler'); + MochiKit.Signal.connect(this.getId('button'), 'onclick', this, 'cancelEventHandler'); }, //------------------------------------------------------------------------- 'displayElement': function() { return MochiKit.DOM.getElement('loginProgress'); }, //------------------------------------------------------------------------- 'cancelEventHandler': function(anEvent) { anEvent.preventDefault(); MochiKit.Signal.signal(this, 'cancelEvent'); }, //------------------------------------------------------------------------- 'disableCancel': function() { MochiKit.Style.hideElement(this.getElement('buttonArea')); }, //------------------------------------------------------------------------- 'showErrorMessage': function() { - this.getElement('buttonLink').innerHTML = "close"; +// this.getElement('buttonLink').innerHTML = "close"; + this.getElement('button').innerHTML = "close"; + MochiKit.DOM.addElementClass(this.getElement('button'), 'default'); MochiKit.Style.hideElement(this.getElement('progressBar')); this.getElement('title').innerHTML = "Error"; MochiKit.Style.showElement(this.getElement('errorBox')); MochiKit.Style.showElement(this.getElement('buttonArea')); }, //------------------------------------------------------------------------- 'deferredHideModalAndRemove': function(someParameters, aResult) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("LoginProgress.deferredHideModalAndRemove", {trace:false}); deferredResult.addMethod(this, 'deferredHideModal'); deferredResult.addMethod(this, 'remove'); deferredResult.addCallback(function () { return aResult; }); deferredResult.callback(someParameters); return deferredResult; }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js index a25c8f5..dcf506f 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js @@ -1,68 +1,67 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Web.Components.PageFooter = function(args) { args = args || {}; Clipperz.PM.UI.Web.Components.PageFooter.superclass.constructor.apply(this, arguments); return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PageFooter, Clipperz.PM.UI.Common.Components.BaseComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Web.Components.PageFooter component"; }, //------------------------------------------------------------------------- 'renderSelf': function(/*aContainer, aPosition*/) { this.append(this.element(), [ {tag:'div', cls:'footerWrapper', children:[ {tag:'div', cls:'footerContent', children:[ -// {tag:'div', cls:'footerStarIcon'}, {tag:'canvas', id:this.getId('footerStarIcon'), cls:'footerStarIcon'}, - {tag:'span', cls:'copyright', html:'Copyright © 2009-2012 Clipperz Srl'}, + {tag:'span', cls:'copyright', html:'Copyright © 2009-2013 Clipperz Srl'}, {tag:'a', href:'http://www.clipperz.com/terms_of_service', target:'_blank', html:'terms of service'}, {tag:'a', href:'http://www.clipperz.com/privacy_policy', target:'_blank', html:'privacy policy'}, - {tag:'span', cls:'applicationVersion', html:'application version: [1992]'} + {tag:'div', cls:'applicationVersion', htmlString:'application version: <a href="https://github.com/clipperz/password-manager/tree/' + Clipperz_version + '" target="github">' + Clipperz_version + '</a>'} ]} ]} ]); Clipperz.PM.UI.Canvas.star.normal(this.getElement('footerStarIcon'), "#7e7e7e"); }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js index 3ee6189..0fa369f 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js @@ -1,110 +1,110 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Web.Components.ToolsPanel = function(args) { args = args || {}; Clipperz.PM.UI.Web.Components.ToolsPanel.superclass.constructor.apply(this, arguments); this._initiallySelectedTab = args.selected || 'PASSWORD_GENERATOR'; this._tabPanelControllerConfiguration = { 'PASSWORD_GENERATOR': { tab: 'passwordGeneratorTab', panel: 'passwordGeneratorPanel' }, 'BOOKMARKLET': { tab: 'bookmarkletTab', panel: 'bookmarkletPanel' }, 'COMPACT_EDITION': { tab: 'compactEditionTab', panel: 'compactEditionPanel' }, 'HTTP_AUTH': { tab: 'httpAuthTab', panel: 'httpAuthPanel' } }; return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ToolsPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Web.Components.ToolsPanel component"; }, //------------------------------------------------------------------------- 'renderSelf': function(/*aContainer, aPosition*/) { this.append(this.element(), [ {tag:'div', cls:'header', children:[ {tag:'div', cls:'subPanelTabs', children:[ {tag:'ul', children:[ {tag:'li', id:this.getId('passwordGeneratorTab'), children:[{tag:'a', href:'#', html:'Password generator'}], cls:'first'}, {tag:'li', id:this.getId('bookmarkletTab'), children:[{tag:'a', href:'#', html:'Bookmarklet'}]}, {tag:'li', id:this.getId('compactEditionTab'), children:[{tag:'a', href:'#', html:'Compact edition'}]}, {tag:'li', id:this.getId('httpAuthTab'), children:[{tag:'a', href:'#', html:'HTTP Auth'}]} ]} ]} ]}, {tag:'div', cls:'body', children:[ {tag:'div', cls:'accountPanel', children:[ {tag:'div', cls:'subPanelContent', children:[ {tag:'ul', children:[ {tag:'li', id:this.getId('passwordGeneratorPanel'), children:[ - {tag:'h3', html:"Password generator"} +// {tag:'h3', html:"Password generator"} ]}, {tag:'li', id:this.getId('bookmarkletPanel'), children:[ - {tag:'h3', html:"Bookmarklet"} +// {tag:'h3', html:"Bookmarklet"} ]}, {tag:'li', id:this.getId('compactEditionPanel'), children:[ - {tag:'h3', html:"Compact edition"} +// {tag:'h3', html:"Compact edition"} ]}, {tag:'li', id:this.getId('httpAuthPanel'), children:[ - {tag:'h3', html:"HTTP Auth"} +// {tag:'h3', html:"HTTP Auth"} ]} ]} ]} ]} ]}, {tag:'div', cls:'footer'} ]); this.tabPanelController().setup({selected:this.initiallySelectedTab()}); }, //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js index 9a0e744..1ab2e69 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js @@ -42,285 +42,310 @@ Clipperz.PM.UI.Web.Controllers.AppController = function(args) { // this._directLoginsController = null; this._filterController = null; // new Clipperz.PM.UI.Web.Controllers.FilterController(); //components this._appPage = null; this._userInfoBox = null; this._tabSidePanel = null; // MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'editCard', this, 'handleEditCard'); // MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'deleteCard', this, 'handleDeleteCard'); MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userDataSuccessfullySaved', this, 'userDataSuccessfullySavedHandler'); return this; } MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.AppController.prototype, { 'toString': function() { return "Clipperz.PM.UI.Web.Controllers.AppController"; }, //----------------------------------------------------------------------------- 'setUser': function(anUser) { this._user = anUser; }, 'user': function() { return this._user; }, //----------------------------------------------------------------------------- /* 'tabSlotNames': function() { return this._tabSlotNames; }, */ 'slotNameForTab': function(aTabName) { return this._tabSlotNames[aTabName]; }, 'hideAllAppPageTabSlots': function() { var aTabName; for (aTabName in this._tabSlotNames) { this.appPage().hideSlot(this.slotNameForTab(aTabName)); } }, //----------------------------------------------------------------------------- 'appPage': function() { if (this._appPage == null) { this._appPage = new Clipperz.PM.UI.Web.Components.AppPage(); } return this._appPage; }, //----------------------------------------------------------------------------- 'tabSidePanel': function() { if (this._tabSidePanel == null) { this._tabSidePanel = new Clipperz.PM.UI.Web.Components.TabSidePanel(); } return this._tabSidePanel; }, //----------------------------------------------------------------------------- 'userInfoBox': function() { if (this._userInfoBox == null) { this._userInfoBox = new Clipperz.PM.UI.Web.Components.UserInfoBox(); MochiKit.Signal.connect(this._userInfoBox, 'logout', this, 'handleLogout'); MochiKit.Signal.connect(this._userInfoBox, 'lock', this, 'handleLock'); MochiKit.Signal.connect(this._userInfoBox, 'unlock', this, 'handleUnlock'); } return this._userInfoBox; }, //----------------------------------------------------------------------------- 'accountPanel': function () { if (this._accountPanel == null) { this._accountPanel = new Clipperz.PM.UI.Web.Components.AccountPanel(/*{selected:'Preferences'}*/); } return this._accountPanel; }, //......................................................................... 'dataPanel': function () { if (this._dataPanel == null) { this._dataPanel = new Clipperz.PM.UI.Web.Components.DataPanel(); } return this._dataPanel; }, //......................................................................... 'toolsPanel': function () { if (this._toolsPanel == null) { this._toolsPanel = new Clipperz.PM.UI.Web.Components.ToolsPanel(); } return this._toolsPanel; }, //----------------------------------------------------------------------------- 'filterController': function () { if (this._filterController == null) { this._filterController = new Clipperz.PM.UI.Web.Controllers.FilterController(); } return this._filterController; }, 'cardsController': function() { if (this._cardsController == null) { this._cardsController = new Clipperz.PM.UI.Web.Controllers.CardsController({'filterController':this._filterController}); } return this._cardsController; }, //----------------------------------------------------------------------------- /* 'directLoginsController': function() { //Clipperz.log(">>> AppController.directLoginsController"); if (this._directLoginsController == null) { this._directLoginsController = new Clipperz.PM.UI.Web.Controllers.DirectLoginsController({'filterController':this._filterController}); } //Clipperz.log("<<< AppController.directLoginsController"); return this._directLoginsController; }, */ //----------------------------------------------------------------------------- 'populateUserInfo': function() { var deferredResult; deferredResult = new Clipperz.Async.Deferred("AppController.populateUserInfo", {trace:false}); deferredResult.collectResults({ 'username': MochiKit.Base.methodcaller('displayName'), 'cardsNumber': [ MochiKit.Base.methodcaller('getRecords'), function (someResults) { return someResults.length; } ], 'directLoginsNumber': [ MochiKit.Base.methodcaller('getDirectLogins'), function (someResults) { return someResults.length; } ] }) deferredResult.addMethod(this.userInfoBox(), 'updateUserDetails'); deferredResult.callback(this.user()); return deferredResult; }, //----------------------------------------------------------------------------- 'run': function(args) { var deferredResult; var slot; var page; var user; slot = args.slot; user = args.user; this.setUser(user); slot.setContent(this.appPage()); this.appPage().slotNamed('userInfoBox').setContent(this.userInfoBox()); this.appPage().slotNamed('tabSidePanel').setContent(this.tabSidePanel()); this.appPage().slotNamed('accountPanel').setContent(this.accountPanel()); this.appPage().slotNamed('dataPanel').setContent(this.dataPanel()); this.appPage().slotNamed('toolsPanel').setContent(this.toolsPanel()); this.hideAllAppPageTabSlots(); this.appPage().showSlot(this.slotNameForTab('cards')); - MochiKit.Signal.connect(this.tabSidePanel(), 'tabSelected', this, 'handleTabSelected'); - MochiKit.Signal.connect(this.tabSidePanel(), 'addCard', this, 'handleAddCard'); - MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'addCard', this, 'handleAddCard'); + MochiKit.Signal.connect(this.tabSidePanel(), 'tabSelected', this, 'handleTabSelected'); + MochiKit.Signal.connect(this.tabSidePanel(), 'addCard', this, 'handleAddCard'); + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'addCard', this, 'handleAddCard'); + + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'downloadOfflineCopy', this, 'handleDownloadOfflineCopy'); deferredResult = new Clipperz.Async.Deferred("AppController.run", {trace:false}); deferredResult.addMethod(this.cardsController(), 'run', {slot:this.appPage().slotNamed('cardGrid'), user:user}); // deferredResult.addMethod(this.directLoginsController(), 'run', {slot:this.appPage().slotNamed('directLoginGrid'), user:user}); deferredResult.addMethod(this, 'populateUserInfo'); deferredResult.addCallback(MochiKit.Visual.ScrollTo, 'miscLinks', {duration:0}); deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN'); deferredResult.addMethod(this.tabSidePanel(), 'selectTab', 'cards'); deferredResult.callback(); }, //----------------------------------------------------------------------------- 'handleTabSelected': function (selectedTabName) { var aTabName; var aSlotName; //Clipperz.log(">>> AppController.handleTabSelected", selectedTabName); this.hideAllAppPageTabSlots(); this.appPage().showSlot(this.slotNameForTab(selectedTabName)); switch (selectedTabName) { case 'cards': this.cardsController().focus(); break; // case 'directLogins': // this.directLoginsController().focus(); // break; case 'data': break; case 'account': break; case 'tools': break; } //Clipperz.log("<-- AppController.handleTabSelected", aTabName); }, //============================================================================= 'handleAddCard': function (aSourceElement) { //Clipperz.log("=== AppController.addCard", aSourceElement); this.cardsController().addCard(aSourceElement); }, //============================================================================= 'userDataSuccessfullySavedHandler': function (anEvent) { this.populateUserInfo(); }, //============================================================================= 'handleLogout': function(anEvent) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("AppController.handleLogout", {trace:false}); deferredResult.addMethod(this.user(), 'logout'); deferredResult.addCallback(MochiKit.Signal.signal, this, 'logout'); deferredResult.callback(); return deferredResult; }, //----------------------------------------------------------------------------- 'handleLock': function (anEvent) { return Clipperz.Async.callbacks("AppController.handleLock", [ MochiKit.Base.method(this.cardsController(), 'deleteAllCleanTextData'), MochiKit.Base.method(this.user(), 'lock') ], {trace:false}); }, //............................................................................. 'handleUnlock': function (anEvent) { return Clipperz.Async.callbacks("AppController.handleUnock", [ MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress'), MochiKit.Base.method(this.user(), 'login'), MochiKit.Base.method(this.cardsController(), 'focus'), MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone'), MochiKit.Base.method(this.userInfoBox(), 'unlock') ], {trace:false}); }, + 'handleDownloadOfflineCopy': function (anEvent) { +console.log("AppController.handleDownloadOfflineCopy"); + var downloadHref; + + downloadHref = window.location.href.replace(/\/[^\/]*$/,'') + Clipperz_dumpUrl; + + if (Clipperz_IEisBroken == true) { + window.open(downloadHref, ""); + } else { + var deferredResult; + var newWindow; + + newWindow = window.open("", ""); + + deferredResult = new Clipperz.Async.Deferred("AppController.handleDownloadOfflineCopy", {trace:true}); + deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'echo', {'echo':"echo"}); + deferredResult.addCallback(function(aWindow) { + aWindow.location.href = downloadHref; + }, newWindow); + deferredResult.callback(); + } + }, + //============================================================================= __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js deleted file mode 100644 index 5380aa1..0000000 --- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js +++ b/dev/null @@ -1,163 +0,0 @@ -/* - -Copyright 2008-2011 Clipperz Srl - -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. - -* 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. - -* 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 Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. - -*/ - -Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components'); - -Clipperz.PM.UI.iPhone.Components.CardDetail = function(args) { - args = args || {}; - - Clipperz.PM.UI.iPhone.Components.CardDetail.superclass.constructor.apply(this, arguments); - - this._cardReference = null; - - return this; -} - -//============================================================================= - -Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.CardDetail, Clipperz.PM.UI.Common.Components.BaseComponent, { - - //------------------------------------------------------------------------- - - 'toString': function () { - return "Clipperz.PM.UI.iPhone.Components.CardDetail component"; - }, - - //------------------------------------------------------------------------- - - 'cardReference': function () { - return this._cardReference; - }, - - 'setCardReference': function (aValue) { - this._cardReference = aValue; - }, - - //------------------------------------------------------------------------- - - 'renderSelf': function(/*aContainer, aPosition*/) { - this.append(this.element(), [ - {tag:'div', cls:'cardDetail', id:this.getId('cardDetail'), children:[ - {tag:'div', id:this.getId('progressBar')} //, -// {tag:'h1', cls:'loading', html:"loading"} - ]} - ]); - - this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); - MochiKit.Signal.signal(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', 0); - }, - - //========================================================================= - - 'showCardDetails': function (someData) { - this.element().innerHTML = ''; - this.append(this.element(), [ - {tag:'fieldset', id:this.getId('fields'), children:MochiKit.Base.map(function (aFieldData) { - return {tag:'div', cls:'row', children:[ - {tag:'label', html:aFieldData['label']}, -// {tag:'span', cls:('fieldValue ' + (aFieldData['isHidden'] ? 'password' : 'text')), html:aFieldData['value']} - {tag:'div', cls:('fieldValue ' + (aFieldData['isHidden'] ? 'password' : 'text')), children:[ - {tag:'div', children:[{tag:'p', html:aFieldData['value']}]} - ]} -// {tag:'input', type:'text', cls:('fieldValue ' + (aFieldData['isHidden'] ? 'password' : 'text')), value:aFieldData['value'], disabled:true} - - ]} - }, someData['fields'])} - ]); - - MochiKit.Iter.forEach(MochiKit.Selector.findChildElements(this.element(), ['span.password']), MochiKit.Base.bind(function (aPasswordElement) { - MochiKit.Signal.connect(aPasswordElement, 'onclick', function (anEvent) { alert(MochiKit.DOM.scrapeText(anEvent.src())); }) - }, this)); - - if (someData['directLogins'].length > 0) { - this.append(this.element(), [ - {tag:'h2', html:"Direct logins"}, - {tag:'fieldset', id:this.getId('directLogins'), children:MochiKit.Base.map(function (aDirectLoginData) { - return {tag:'div', cls:'row', id:('directLogin_' + aDirectLoginData['_reference']), children:[ - {tag:'img', cls:'favicon', src:aDirectLoginData['favicon']}, -// {tag:'input', cls:'directLogin', disabled:'disabled', type:'text', name:aDirectLoginData['label'], value:aDirectLoginData['label']} - {tag:'span', cls:'directLogin', html:aDirectLoginData['label']} - ]} - }, someData['directLogins'])} - ]); - - MochiKit.Base.map(MochiKit.Base.bind(function (aRowNode) { - MochiKit.Signal.connect(aRowNode, 'onclick', this, 'directLoginClickHandler'); - }, this), - MochiKit.Selector.findChildElements(this.getElement('directLogins'), ['div.row']) - ) - }; - - if (someData['notes'] != '') { - this.append(this.element(), [ - {tag:'h2', html:"Notes"}, - {tag:'fieldset', id:this.getId('fieldset'), children:[ - {tag:'div', cls:'row notes', children:[ - {tag:'span', html:someData['notes']} - ]} - ]} - ]); - }; - - return true; - }, - - //------------------------------------------------------------------------- -/* - 'toggleClickHandler': function (anEvent) { - var nextState; - var fieldValue; - -//console.log("TOGGLE"); - anEvent.preventDefault; - fieldValue = MochiKit.Selector.findChildElements(anEvent.src().parentNode.parentNode, ['span.password'])[0]; - - nextState = (MochiKit.DOM.getNodeAttribute(anEvent.src(), 'toggled') != 'true'); - if (nextState) { - MochiKit.DOM.removeElementClass(fieldValue, 'clear'); - } else { - MochiKit.DOM.addElementClass(fieldValue, 'clear'); - } - - MochiKit.DOM.setNodeAttribute(anEvent.src(), 'toggled', nextState); - }, -*/ - //========================================================================= - - 'directLoginClickHandler': function (anEvent) { - anEvent.preventDefault(); - - if (/(directLogin_)/.test(anEvent.src().id)) { - var directLoginReference; - - directLoginReference = anEvent.src().id.match(/(directLogin_)(.*)/)[2]; - MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', {cardReference:this.cardReference(), directLoginReference:directLoginReference}); - } - }, - - //========================================================================= - - __syntaxFix__: "syntax fix" -}); diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js deleted file mode 100644 index 5341878..0000000 --- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js +++ b/dev/null @@ -1,178 +0,0 @@ -/* - -Copyright 2008-2011 Clipperz Srl - -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. - -* 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. - -* 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 Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. - -*/ - -Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components'); - -Clipperz.PM.UI.iPhone.Components.LoginForm = function(args) { - args = args || {}; - - Clipperz.PM.UI.iPhone.Components.LoginForm.superclass.constructor.apply(this, arguments); - - return this; -} - -//============================================================================= - -Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, { - - //------------------------------------------------------------------------- - - 'toString': function () { - return "Clipperz.PM.UI.iPhone.Components.LoginForm component"; - }, - - //------------------------------------------------------------------------- - - 'focusOnUsername': function () { - this.getElement('username').focus(); - }, - - //------------------------------------------------------------------------- - - 'username': function () { - return this.getElement('username').value; - }, - - 'passphrase': function () { - return this.getElement('passphrase').value; - }, - - //------------------------------------------------------------------------- - - 'renderSelf': function(/*aContainer, aPosition*/) { - this.append(this.element(), [ - {tag:'div', cls:'toolbar iPhoneClipperzToolbar', children:[ - {tag:'h1', id:'pageTitle', html:'Clipperz'}, - {tag:'a', id:'backButton', cls:'button', href:'#', html:"back"} - ]}, - {tag:'form', title:'Theaters', cls:'panel toolbarlessPanel loginForm', id:this.getId('loginFormPanel'), children:[ - {tag:'fieldset', id:this.getId('fieldset'), children:[ - {tag:'div', cls:'row', children:[ - {tag:'label', html:"username"}, - {tag:'input', type:'text', name:'username', value:"", autocorrect:'off', autocapitalize:'off', id:this.getId('username')} - ]}, - {tag:'div', cls:'row', children:[ - {tag:'label', html:"passphrase"}, - {tag:'input', type:'password', name:'passphrase', value:"", id:this.getId('passphrase')} - ]} - ]}, - {tag:'a', cls:'whiteButton', type:'submit', href:'#', html:"Login", id:this.getId('submit')} - ]}, - {tag:'div', cls:'panel toolbarlessPanel loginProgressPanel', id:this.getId('loginProgressPanel'), children:[ - {tag:'div', id:this.getId('progressBar')} //, -// {tag:'a', cls:'whiteButton', type:'submit', href:'#', html:"Cancel", id:this.getId('cancel')} - ]}, - {tag:'div', cls:'panel loginErrorPanel', id:this.getId('loginErrorPanel'), children:[ - {tag:'div', cls:'errorMessage', id:this.getId('errorMessageBox'), children:[ - {tag:'h2', id:this.getId('errorMessage'), html:"Login failed"} - ]} - ]} - ]); - - MochiKit.Signal.connect(this.getElement('submit'), 'onclick', this, 'submitHandler'); - MochiKit.Signal.connect(this.getElement('loginFormPanel'), 'onsubmit', this, 'submitHandler'); - -// MochiKit.Signal.connect(this.getElement('cancel'), 'onclick', this, 'cancelHandler'); - MochiKit.Signal.connect('backButton', 'onclick', this, 'backHandler'); - - this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); - -// MochiKit.Style.hideElement(this.getElement('errorMessage')); - - this.showLoginForm(); -// MochiKit.Async.callLater(0.2, MochiKit.Base.method(this, 'focusOnUsername')); - }, - - //------------------------------------------------------------------------- - - 'showLoginForm': function () { - MochiKit.Style.showElement(this.getElement('loginFormPanel')); - MochiKit.Style.hideElement(this.getElement('loginProgressPanel')); - MochiKit.Style.hideElement(this.getElement('loginErrorPanel')); - MochiKit.Style.hideElement('backButton'); - }, - - 'slideInLoginForm': function () { - var offset; - - offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); - - MochiKit.Style.showElement(this.getElement('loginFormPanel')); - MochiKit.Style.setElementPosition(this.getElement('loginFormPanel'), {x:-offset, y:0}); - - new MochiKit.Visual.Sequence([ - new MochiKit.Visual.Parallel([ - new MochiKit.Visual.Move(this.getElement('loginErrorPanel'), {x:offset, y:0, mode:'relative', transition:MochiKit.Visual.Transitions.linear, sync:true}), - new MochiKit.Visual.Move(this.getElement('loginFormPanel'), {x:0, y:0, mode:'absolute', transition:MochiKit.Visual.Transitions.linear, sync:true}), - MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) - ], {duration:0.5, sync:true}), - MochiKit.Visual.fade(this.getElement('loginErrorPanel'), {duration:0, sync:true}) - ], {}) - }, - - 'showLoginProgress': function () { - MochiKit.Style.hideElement(this.getElement('loginFormPanel')); - MochiKit.Style.showElement(this.getElement('loginProgressPanel')); - }, - - 'showLoginError': function (anError) { - this.getElement('errorMessage').innerHTML = "Login error"; - - MochiKit.Style.showElement('backButton'); - MochiKit.Style.hideElement(this.getElement('loginProgressPanel')); - MochiKit.Style.showElement(this.getElement('loginErrorPanel')); - MochiKit.Style.setElementPosition(this.getElement('loginErrorPanel'), {x:0, y:45}); - }, - - //------------------------------------------------------------------------- -/* - 'disableCancelButton': function () { - MochiKit.DOM.hideElement(this.getElement('cancel')); - }, -*/ - //------------------------------------------------------------------------- - - 'submitHandler': function (anEvent) { - anEvent.preventDefault(); - - MochiKit.Signal.signal(this, 'doLogin', {'username':this.username(), 'passphrase':this.passphrase()}); - }, - - 'cancelHandler': function (anEvent) { - anEvent.preventDefault(); - -//console.log("CANCEL"); - }, - - 'backHandler': function (anEvent) { - anEvent.preventDefault(); - - this.slideInLoginForm(); - }, - - //------------------------------------------------------------------------- - - __syntaxFix__: "syntax fix" -}); diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js deleted file mode 100644 index 3fcaae1..0000000 --- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js +++ b/dev/null @@ -1,369 +0,0 @@ -/* - -Copyright 2008-2011 Clipperz Srl - -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. - -* 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. - -* 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 Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. - -*/ - -Clipperz.Base.module('Clipperz.PM.UI.iPhone.Controllers'); - -// Some parts of this controller have been derived from the iUI library. - -Clipperz.PM.UI.iPhone.Controllers.MainController = function() { - this._loginForm = null; - this._cardList = null; - this._cachedValues = null; - this._user = null; - - if (typeof window.onorientationchange == 'object') { - MochiKit.Signal.connect(window, 'onorientationchange', this, 'orientationChangeHandler'); - MochiKit.Async.callLater(0, MochiKit.Base.method(this, 'orientationChangeHandler')); - } else { - this.setOrientation('portrait'); -// this.setOrientation('landscape'); - } - - this.addMetaTag('viewport', 'width=devicewidth; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'); - this.addMetaTag('apple-mobile-web-app-capable', 'yes'); - this.addMetaTag('apple-mobile-web-app-status-bar-style', 'black'); - - this.addLinkTag('apple-touch-icon', 'data:image/png;charset=utf-8;base64,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'); -// this.addLinkTag('apple-touch-startup-image', 'default.png'); - -// if (!window.navigator.standalone) // not running as an installed app - - MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', this, 'selectedDirectLoginHandler'); - - MochiKit.DOM.addElementClass(document.body, 'iPhone'); - return this; -} - -MochiKit.Base.update(Clipperz.PM.UI.iPhone.Controllers.MainController.prototype, { - - 'toString': function () { - return "Clipperz.PM.UI.iPhone.Controllers.MainController"; - }, - - //========================================================================= - - 'user': function () { - return this._user; - }, - - 'setUser': function (aValue) { - this._user = aValue; - }, - - //========================================================================= - - 'loginForm': function() { - if (this._loginForm == null) { - MochiKit.DOM.removeElement('mainDiv'); - this._loginForm = new Clipperz.PM.UI.iPhone.Components.LoginForm({element:MochiKit.DOM.currentDocument().body}); - MochiKit.Signal.connect(this._loginForm, 'doLogin', this, 'doLoginHandler') - } - - return this._loginForm; - }, - - 'removeLoginForm': function () { - if (this._loginForm != null) { - this._loginForm.remove(); - this._loginForm = null; - } - }, - - //----------------------------------------------------------------------------- - - 'cardList': function () { - if (this._cardList == null) { - this._cardList = new Clipperz.PM.UI.iPhone.Components.CardList({element:MochiKit.DOM.currentDocument().body}); - MochiKit.Signal.connect(this._cardList, 'searchEvent', this, 'searchEventHandler') - MochiKit.Signal.connect(this._cardList, 'selectedCard', this, 'selecetedCardHandler') - } - - return this._cardList; - }, - - //========================================================================= - - 'currentWidth': function () { - return this._currentWidth; - }, - - 'setCurrentWidth': function (aValue) { - this._currentWidth = aValue; - }, - - //========================================================================= - - 'orientationChangeHandler': function () { - switch(window.orientation) { - case 0: - this.setOrientation('portrait'); - break; - case 90: - case -90: - this.setOrientation('landscape'); - break; - } - }, - - //------------------------------------------------------------------------- - - 'setOrientation': function (anOrientation) { - document.body.setAttribute('orientation', anOrientation); - setTimeout(scrollTo, 100, 0, 1); - }, - - //------------------------------------------------------------------------- - - 'slidePages': function (fromPage, toPage, backwards) { - var axis; - var slideDone; - - slideDone = function () { - // console.log("slideDone"); - if (!hasClass(toPage, "dialog")) { - fromPage.removeAttribute("selected"); - } - checkTimer = setInterval(checkOrientAndLocation, 300); - setTimeout(updatePage, 0, toPage, fromPage); - fromPage.removeEventListener('webkitTransitionEnd', slideDone, false); - } - - axis = (backwards ? fromPage : toPage).getAttribute("axis"); - - clearInterval(checkTimer); - - if (canDoSlideAnim() && axis != 'y') { - slide2(fromPage, toPage, backwards, slideDone); - } else { - slide1(fromPage, toPage, backwards, axis, slideDone); - } - }, - - //------------------------------------------------------------------------- - - 'getCachedValues': function () { - var deferredResult; - - if (this._cachedObjects != null) { - deferredResult = MochiKit.Async.succeed(this._cachedObjects); - } else { - deferredResult = new Clipperz.Async.Deferred("MainController.getCachedValues", {trace:false}); - deferredResult.addMethod(this.user(), 'getRecords'); - deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.getCachedValues - collectResults", { - '_rowObject': MochiKit.Async.succeed, - '_reference': MochiKit.Base.methodcaller('reference'), - 'label': MochiKit.Base.methodcaller('label'), - 'favicon': MochiKit.Base.methodcaller('favicon'), - '_searchableContent': MochiKit.Base.methodcaller('searchableContent') - }, {trace:false})); - deferredResult.addCallback(Clipperz.Async.collectAll); - deferredResult.addCallback(MochiKit.Base.bind(function (someRows) { - this._cachedObjects = someRows; - return this._cachedObjects; - }, this)); - deferredResult.callback(); - } - - return deferredResult; - }, - //========================================================================= - - 'run': function(shouldShowRegistrationForm) { - this.loginForm().render(); - MochiKit.Async.callLater(1, MochiKit.Base.method(this.loginForm(), 'focusOnUsername')); - }, - - //========================================================================= - - 'doLoginHandler': function (someArgs) { - var deferredResult; - var parameters; - var shouldUseOTP; -// var loginProgress; - var user; - var getPassphraseDelegate; - - parameters = someArgs; - shouldUseOTP = (typeof(parameters.passphrase) == 'undefined'); - - getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase); - user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':getPassphraseDelegate}); - - deferredResult = new Clipperz.Async.Deferred("MainController.doLogin", {trace:false}); - deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); - deferredResult.addMethod(this.loginForm(), 'showLoginProgress'); - deferredResult.addCallback(MochiKit.Async.wait, 0.1); - deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); - deferredResult.addMethod(user, 'login'); - deferredResult.addMethod(this, 'setUser', user); - deferredResult.addMethod(user, 'getRecords'); - deferredResult.addMethod(this, 'removeLoginForm'); - deferredResult.addMethod(this.cardList(), 'render'); - deferredResult.addMethod(this, 'displaySelectedRecords', ''); - deferredResult.addErrback(MochiKit.Base.method(this.loginForm(), 'showLoginError')); - deferredResult.callback(); - - return deferredResult; - }, - - //========================================================================= - - 'searchEventHandler': function (aValue) { -//console.log("searching for ... " + aValue); - return this.displaySelectedRecords(aValue); - }, - - //========================================================================= - - '_displaySelectedRows': function (aFilter, someRows) { - var result; - - result = someRows; - - if (aFilter != null) { - var filter; - var filterRegExp; - - filter = aFilter.replace(/[^A-Za-z0-9]/g, "\\$&"); - filterRegExp = new RegExp(filter, "i"); - result = MochiKit.Base.filter(function (aCachedResult) { return filterRegExp.test(aCachedResult['_searchableContent'])}, result); - } - - - result.sort(MochiKit.Base.partial(function (aKey, aComparator, aObject, bObject) { - return aComparator(aObject[aKey], bObject[aKey]); - }, 'label', Clipperz.Base.caseInsensitiveCompare)); - - this.cardList().update(result); - }, - - //------------------------------------------------------------------------- - - 'displaySelectedRecords': function (aFilter) { - return Clipperz.Async.callbacks("MainController.displaySelectedrows", [ - MochiKit.Base.method(this, 'getCachedValues'), - MochiKit.Base.method(this, '_displaySelectedRows', aFilter) - ], {trace:false}); - }, - - //========================================================================= - - 'selecetedCardHandler': function (aRecordReference) { - var deferredResult; - var recordData; - - recordData = {}; -//console.log("Showing detail for card with reference", aRecordReference); - deferredResult = new Clipperz.Async.Deferred("MainController.selectedCardHandler", {trace:false}); - deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); - deferredResult.collectResults({ - '_reference': MochiKit.Base.methodcaller('reference'), - 'title': MochiKit.Base.methodcaller('label'), - 'favicon': MochiKit.Base.methodcaller('favicon') - }); - deferredResult.addCallback(function (someData) { - MochiKit.Base.update(recordData, someData); - }) - deferredResult.addMethod(this.cardList(), 'showCard', recordData); - - deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); - deferredResult.addMethodcaller('notes'); - deferredResult.addCallback(function (someNotes) { - recordData['notes'] = someNotes; - }) - - deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); - deferredResult.addMethodcaller('getCurrentRecordVersion'); - deferredResult.addMethodcaller('fields'); - deferredResult.addCallback(MochiKit.Base.values); - deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.selectedCardHandler - fields", { - 'label': MochiKit.Base.methodcaller('label'), - 'value': MochiKit.Base.methodcaller('value'), - 'isHidden': MochiKit.Base.methodcaller('isHidden') - }, {trace:false})); - deferredResult.addCallback(Clipperz.Async.collectAll); - deferredResult.addCallback(function (someData) { - recordData['fields'] = someData; - }); - - deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); - deferredResult.addMethodcaller('directLogins'); - deferredResult.addCallback(MochiKit.Base.values); - deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.selectedCardHandler - directLogins", { - 'label': MochiKit.Base.methodcaller('label'), - 'favicon': MochiKit.Base.methodcaller('favicon'), - '_reference': MochiKit.Base.methodcaller('reference') - }, {trace:false})); - deferredResult.addCallback(Clipperz.Async.collectAll); - deferredResult.addCallback(function (someData) { - recordData['directLogins'] = someData; - }); - - deferredResult.addMethod(this.cardList(), 'showCardDetails', recordData); - deferredResult.callback(); - - return deferredResult; - }, - - //========================================================================= - - 'selectedDirectLoginHandler': function (someData) { - var deferredResult; - -//console.log("<<< signal - directLogin"); - deferredResult = new Clipperz.Async.Deferred("MainController.selectedDirectLoginHandler", {trace:false}); - deferredResult.addMethod(this.user(), 'getRecord', someData['cardReference']); - deferredResult.addMethodcaller('directLogins'); - deferredResult.addCallback(MochiKit.Base.itemgetter(someData['directLoginReference'])); -// deferredResult.addMethodcaller('runDirectLogin'); - deferredResult.addCallback(Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin); - deferredResult.callback(); - - return deferredResult; - }, - - //========================================================================= - - 'addMetaTag': function (aName, aContent) { - var metaTag; - - metaTag = document.createElement('meta'); - metaTag.name = aName; - metaTag.content = aContent; - document.getElementsByTagName('head')[0].appendChild(metaTag); - }, - - 'addLinkTag': function (aRel, anHref) { - var linkTag; - - linkTag = document.createElement('link'); - linkTag.rel = aRel; - linkTag.href = anHref; - document.getElementsByTagName('head')[0].appendChild(linkTag); - }, - - //========================================================================= - __syntaxFix__: "syntax fix" -});
\ No newline at end of file diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.actionsheet.js b/frontend/gamma/js/JQTouch/extensions/jqt.actionsheet.js new file mode 100644 index 0000000..2a5f8d1 --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.actionsheet.js @@ -0,0 +1,159 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> + + (c) 2012 by jQTouch project members. + See LICENSE.txt for license. + + Author: Thomas Yip +*/ + +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> + + (c) 2012 by jQTouch project members. + See LICENSE.txt for license. + + Author: Thomas Yip +*/ + +(function($) { + var src = $("head script").last().attr("src") || ''; + var scriptpath = src.split('?')[0].split('/').slice(0, -1).join('/')+'/'; + var csspath = scriptpath + 'jqt.actionsheet.css'; + var link = $('<link href="' + csspath + '" rel="stylesheet">'); + $('head').append($(link)); + + function hide(callback) { + var $target = $(this); + var data = $(this).data('actionsheet'); + var $source = data.source; + + var timeout; + + function cleanup() { + clearTimeout(timeout); + + $source.removeClass('transition'); + $target.removeClass('inmotion transition'); + !callback || callback.apply(this, arguments); + }; + timeout = setTimeout(cleanup, 500); + + if (data.shown) { + $(this).data('actionsheet', {}); + $target.one('webkitTransitionEnd', cleanup); + + $source.addClass('transition'); + $target.removeClass('current').addClass('inmotion transition'); + $('#jqt').removeClass('actionopened'); + } + return $target; + } + + function show(callback) { + var $target = $(this); + var data = $(this).data('actionsheet') || {}; + if (!data.shown) { + var $source = $('#jqt .current:not(.actionsheet)'); + + $target.one('webkitTransitionEnd', function() { + $source.removeClass('transition'); + $target.removeClass('inmotion transition'); + !callback || callback.apply(this, arguments); + }); + + data.shown = true; + data.source = $source; + $(this).data('actionsheet', data); + + $source.addClass('transition'); + $target.addClass('inmotion transition'); + $('#jqt').addClass('actionopened'); + setTimeout(function() { + $target.addClass('current'); + }, 50); + } + return $target; + } + + var methods = { + init: function(options) { + $(this).addClass('actionsheet'); + $(this).data({shown: false}); + }, + show: show, + hide: hide + }; + + $.fn.actionsheet = function(method) { + if (methods[method]) { + if ($(this).is('.actionsheet')) { + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + } else { + var msg = 'Target is not a `actionsheet`. Action `' + method + '` is ignored.'; + console.warn(msg); + } + } else if ( typeof method === 'object' || ! method ) { + return methods.init.apply(this, arguments); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' ); + } + }; + + if ($.jQTouch) { + $.jQTouch.addTapHandler({ + name: 'open-actionsheet', + isSupported: function(e, params) { + return params.$el.is('.action'); + }, + fn: function(e, params) { + params.$el.removeClass('active'); + + var $target = $(params.hash); + $target.actionsheet('show'); + + return false; + } + }); + $.jQTouch.addTapHandler({ + name: 'follow-actionlink', + isSupported: function(e, params) { + if ($('#jqt').hasClass('actionopened')) { + return params.$el.is('.actionsheet a'); + } + return false; + }, + fn: function(e, params) { + params.$el.removeClass('active'); + + var $target = params.$el.closest('.actionsheet'); + $target.actionsheet('hide', function() { + if (!params.$el.is('.dismiss')) { + params.$el.trigger('tap'); + } + }); + return false; + } + }); + } else { + console.error('Extension `jqt.actionsheet` failed to load. jQT not found'); + } +})($); diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.autotitles.js b/frontend/gamma/js/JQTouch/extensions/jqt.autotitles.js new file mode 100644 index 0000000..94f3d9b --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.autotitles.js @@ -0,0 +1,52 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Created by David Kaneda <http://www.davidkaneda.com> + Maintained by Thomas Yip <http://beedesk.com/> + Sponsored by Sencha Labs <http://www.sencha.com/> + Special thanks to Jonathan Stark <http://www.jonathanstark.com/> + + Documentation and issue tracking on GitHub <http://github.com/senchalabs/jQTouch/> + + (c) 2009-2011 Sencha Labs + jQTouch may be freely distributed under the MIT license. + +*/ + +(function($) { + if ($.jQTouch) + { + $.jQTouch.addExtension(function AutoTitles(jQT){ + + var titleSelector='.toolbar h1'; + + $(function(){ + $('#jqt').bind('pageAnimationStart', function(e, data){ + if (data.direction === 'in'){ + var $title = $(titleSelector, $(e.target)); + var $ref = $(e.target).data('referrer'); + if ($title.length && $ref && $title.text() === ''){ + $title.html($ref.text()); + } + } + }); + }); + + function setTitleSelector(ts){ + titleSelector=ts; + } + + return { + setTitleSelector: setTitleSelector + }; + + }); + } +})($); diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.floaty.js b/frontend/gamma/js/JQTouch/extensions/jqt.floaty.js new file mode 100644 index 0000000..c7e4485 --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.floaty.js @@ -0,0 +1,96 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Created by David Kaneda <http://www.davidkaneda.com> + Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> + + Special thanks to Jonathan Stark <http://jonathanstark.com/> + and pinch/zoom <http://www.pinchzoom.com/> + + (c) 2009 by jQTouch project members. + See LICENSE.txt for license. + +*/ + +(function($) { + if ($.jQTouch) + { + $.jQTouch.addExtension(function Floaty(jQT){ + + $.fn.makeFloaty = function(options){ + var defaults = { + align: 'top', + spacing: 20, + time: '.3s' + }; + + var settings = $.extend({}, defaults, options); + + settings.align = (settings.align == 'top') ? 'top' : 'bottom'; + + return this.each(function(){ + var $el = $(this); + + $el.css({ + '-webkit-transition': 'top ' + settings.time + ' ease-in-out', + 'display': 'block', + 'min-height': '0 !important' + }).data('settings', settings); + + $(document).scroll(function(){ + if ($el.data('floatyVisible') === 'true') + { + $el.scrollFloaty(); + } + }); + $el.scrollFloaty(); + }); + }; + + $.fn.scrollFloaty = function(){ + + + return this.each(function(){ + var $el = $(this); + var settings = $el.data('settings'); // Settings not being set as object w/Zepto + var wHeight = $('html').attr('clientHeight'); // WRONG + + var newY = window.pageYOffset + + ((settings.align == 'top') ? + settings.spacing : wHeight - settings.spacing - $el.get(0).offsetHeight); + + $el.css('top', newY).data('floatyVisible', true); + }); + }; + + $.fn.hideFloaty = function(){ + return this.each(function(){ + var $el = $(this); + var oh = $el.get(0).offsetHeight; + + $el.css('top', -oh-10).data('floatyVisible', false); + }); + }; + + $.fn.toggleFloaty = function(){ + return this.each(function(){ + var $el = $(this); + if ($el.data('floatyVisible') === 'true'){ + $el.hideFloaty(); + } + else + { + $el.scrollFloaty(); + } + }); + }; + }); + } +})($);
\ No newline at end of file diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.location.js b/frontend/gamma/js/JQTouch/extensions/jqt.location.js new file mode 100644 index 0000000..9d53a1a --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.location.js @@ -0,0 +1,51 @@ +(function($) { + if ($.jQTouch) + { + $.jQTouch.addExtension(function Location(){ + + var latitude, longitude, callback, callback2; + + function updateLocation(fn, fn2) { + if (navigator.geolocation) + { + callback = fn; + callback2 = fn2; + navigator.geolocation.getCurrentPosition(savePosition, failResponse); + return true; + } else { + console.log('Device not capable of geo-location.'); + fn(false); + return false; + } + } + function failResponse(error){ + if (callback2) { + callback2(error); + } + } + function savePosition(position) { + latitude = position.coords.latitude; + longitude = position.coords.longitude; + if (callback) { + callback(getLocation()); + } + } + function getLocation() { + if (latitude && longitude) { + return { + latitude: latitude, + longitude: longitude + }; + + } else { + console.log('No location available. Try calling updateLocation() first.'); + return false; + } + } + return { + updateLocation: updateLocation, + getLocation: getLocation + }; + }); + } +})($);
\ No newline at end of file diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js b/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js new file mode 100644 index 0000000..8d21aca --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js @@ -0,0 +1,137 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> + + (c) 2012 by jQTouch project members. + See LICENSE.txt for license. + + Author: Thomas Yip +*/ + +(function($) { + var src = $("head script").last().attr("src") || ''; + var scriptpath = src.split('?')[0].split('/').slice(0, -1).join('/')+'/'; + var csspath = scriptpath + 'jqt.menusheet.css'; + var link = $('<link href="' + csspath + '" rel="stylesheet">'); + $('head').append($(link)); + + function hide(callback) { + var $target = $(this); + var data = $(this).data('menusheet'); + if (data.shown) { + $(this).data('menusheet', {}); + var $source = data.source; + $source.unbind('touchstart mousedown', data.closehandler); + $source.one('webkitTransitionEnd', function() { + $source.removeClass('inmotion transition in'); + $target.removeClass('inmotion out'); + !callback || callback.apply(this, arguments); + }); + + $source.addClass('inmotion transition in'); + $target.addClass('inmotion out').removeClass('current'); + $('#jqt').removeClass('menuopened'); + } + return $target; + } + + function show(callback) { + var $target = $(this); + var data = $(this).data('menusheet') || {}; + if (!data.shown) { + var $source = $('#jqt .current:not(.menusheet)'); + var closehandler = function() { + $target.menusheet('hide'); + return false; + }; + + $source.one('webkitTransitionEnd', function() { + $source.one('touchstart mousedown', closehandler); + $source.removeClass('inmotion transition out'); + $target.removeClass('inmotion in'); + !callback || callback.apply(this, arguments); + }); + + data.shown = true; + data.closehandler = closehandler; + data.source = $source; + $(this).data('menusheet', data); + + $source.addClass('inmotion transition out'); + $target.addClass('current in'); + $('#jqt').addClass('menuopened'); + } + return $target; + } + + var methods = { + init: function(options) { + $(this).addClass('menusheet'); + $(this).data({shown: false}); + }, + show: show, + hide: hide + }; + + $.fn.menusheet = function(method) { + if (methods[method]) { + if ($(this).is('.menusheet')) { + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + } else { + var msg = 'Target is not a `menusheet`. Action `' + method + '` is ignored.'; + console.warn(msg); + } + } else if ( typeof method === 'object' || ! method ) { + return methods.init.apply(this, arguments); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' ); + } + }; + + if ($.jQTouch) { + $.jQTouch.addTapHandler({ + name: 'open-menusheet', + isSupported: function(e, params) { + return params.$el.is('.menu'); + }, + fn: function(e, params) { + params.$el.removeClass('active'); + + var $target = $(params.hash); + $target.menusheet('show'); + + return false; + } + }); + $.jQTouch.addTapHandler({ + name: 'follow-menulink', + isSupported: function(e, params) { + if ($('#jqt').hasClass('menuopened')) { + return params.$el.is('.menusheet a'); + } + return false; + }, + fn: function(e, params) { + params.$el.removeClass('active'); + + var $target = params.$el.closest('.menusheet'); + $target.menusheet('hide', function() { + if (!params.$el.is('.dismiss')) { + params.$el.trigger('tap'); + } + }); + return false; + } + }); + } else { + console.error('Extension `jqt.menusheet` failed to load. jQT not found'); + } +})($); diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.offline.js b/frontend/gamma/js/JQTouch/extensions/jqt.offline.js new file mode 100644 index 0000000..b333a16 --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.offline.js @@ -0,0 +1,97 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Created by David Kaneda <http://www.davidkaneda.com> + Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> + + Special thanks to Jonathan Stark <http://jonathanstark.com/> + + Lots of this code is specifically derived from Jonathan's book, + "Building iPhone Apps with HTML, CSS, and JavaScript" + + (c) 2009 by jQTouch project members. + See LICENSE.txt for license. + +*/ + +(function($) { + if ($.jQTouch) + { + $.jQTouch.addExtension(function Offline(){ + + // Convenience array of status values + var cacheStatusValues = []; + cacheStatusValues[0] = 'uncached'; + cacheStatusValues[1] = 'idle'; + cacheStatusValues[2] = 'checking'; + cacheStatusValues[3] = 'downloading'; + cacheStatusValues[4] = 'updateready'; + cacheStatusValues[5] = 'obsolete'; + + // Listeners for all possible events + var cache = window.applicationCache; + cache.addEventListener('cached', logEvent, false); + cache.addEventListener('checking', logEvent, false); + cache.addEventListener('downloading', logEvent, false); + cache.addEventListener('error', logEvent, false); + cache.addEventListener('noupdate', logEvent, false); + cache.addEventListener('obsolete', logEvent, false); + cache.addEventListener('progress', logEvent, false); + cache.addEventListener('updateready', logEvent, false); + + // Log every event to the console + function logEvent(e) { + var online, status, type, message; + online = (isOnline()) ? 'yes' : 'no'; + status = cacheStatusValues[cache.status]; + type = e.type; + message = 'online: ' + online; + message+= ', event: ' + type; + message+= ', status: ' + status; + if (type == 'error' && navigator.onLine) { + message+= ' There was an unknown error, check your Cache Manifest.'; + } + console.log(message); + } + + function isOnline() { + return navigator.onLine; + } + + if (!$('html').attr('manifest')) { + console.log('No Cache Manifest listed on the <html> tag.') + } + + // Swap in newly download files when update is ready + cache.addEventListener('updateready', function(e){ + // Don't perform "swap" if this is the first cache + if (cacheStatusValues[cache.status] != 'idle') { + cache.swapCache(); + console.log('Swapped/updated the Cache Manifest.'); + } + } + , false); + + // These two functions check for updates to the manifest file + function checkForUpdates(){ + cache.update(); + } + function autoCheckForUpdates(){ + setInterval(function(){cache.update()}, 10000); + } + + return { + isOnline: isOnline, + checkForUpdates: checkForUpdates, + autoCheckForUpdates: autoCheckForUpdates + } + }); + } +})(jQuery);
\ No newline at end of file diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js b/frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js new file mode 100755 index 0000000..ef3a75d --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js @@ -0,0 +1,123 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> + + (c) 2011 by jQTouch project members. + See LICENSE.txt for license. + +*/ + +(function($) { + if ($.jQTouch) { + + var scriptpath = $("script").last().attr("src").split('?')[0].split('/').slice(0, -1).join('/')+'/'; + + $.jQTouch.addExtension(function ThemeSwitcher(jQT) { + + var current, + link, + titles = {}, + defaults = { + themeStyleSelector: 'link[rel="stylesheet"][title]', + themeIncluded: [ + {title: 'jQTouch', href: scriptpath + '../themes/css/jqtouch.css'}, + {title: 'Apple', href: scriptpath + '../themes/css/apple.css'}, + {title: 'Vanilla', href: scriptpath + '../themes/css/vanilla.css'} + + ] + }, + options = $.extend({}, defaults, jQT.settings); + + function setStyleState(item, title) { + var $item = $(item); + + if ($item.attr('title') === title) { + item.disabled = false; // workaround for Firefox on Zepto + $item.removeAttr('disabled'); + } else { + item.disabled = true; // workaround for Firefox on Zepto + $item.attr('disabled', true); + } + } + + function initializeStyleState(item, title) { + // and, workaround for WebKit by initializing the 'disabled' attribute + if (!current) { + current = title; + } + setStyleState(item, current); + } + + // public + function switchStyle(title) { + current = title; + $(options.themeStyleSelector).each(function(i, item) { + setStyleState(item, title); + }); + } + + // collect title names, from <head> + $(options.themeStyleSelector).each(function(i, item) { + var $item = $(item); + var title = $item.attr('title'); + + titles[title] = true; + + initializeStyleState(item, title); + }); + + // add included theme + for (var i=0; i < options.themeIncluded.length; i++) { + var hash = options.themeIncluded[i]; + if (!(hash.title in titles)) { + link = $('<link title="' + hash.title + '" href="' + hash.href + '" rel="stylesheet">'); + $('head').append($(link)); + + titles[hash.title] = true; + + initializeStyleState(link, hash.title); + } + } + + if (options.themeSelectionSelector) { + // create UI items + for (var title in titles) { + var $item = $('<li><a href="#" data-title="' + title + '">' + title + '</a></li>'); + $(options.themeSelectionSelector).append($item); + } + + // bind to UI items + $(options.themeSelectionSelector).delegate('* > a', 'tap', function(e) { + e.preventDefault(); + e.stopPropagation(); + + var $a = $(this).closest('a'); + $a.removeClass('active'); + switchStyle($a.attr('data-title')); + + // poor-man simulation of radio button behaviour + $(options.themeSelectionSelector).find('a').removeClass('selected'); + $a.addClass('selected'); + }); + + // poor-man simulation of radio button behaviour + $(options.themeSelectionSelector).closest('#jqt > *').bind('pageAnimationEnd', function(e, data){ + if (data.direction === 'in') { + $(options.themeSelectionSelector).find('a[data-title="' + current + '"]').addClass('selected'); + } + }); + } + + return {switchStyle: switchStyle}; + + }); + } +})($); diff --git a/frontend/gamma/js/JQTouch/jqtouch.js b/frontend/gamma/js/JQTouch/jqtouch.js new file mode 100644 index 0000000..bdc6d2e --- a/dev/null +++ b/frontend/gamma/js/JQTouch/jqtouch.js @@ -0,0 +1,889 @@ +/* + + _/ _/_/ _/_/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ + _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ + _/ + _/ + + Created by David Kaneda <http://www.davidkaneda.com> + Maintained by Thomas Yip <http://beedesk.com/> + Sponsored by Sencha Labs <http://www.sencha.com/> + Special thanks to Jonathan Stark <http://www.jonathanstark.com/> + + Documentation and issue tracking on GitHub <http://github.com/senchalabs/jQTouch/> + + (c) 2009-2011 Sencha Labs + jQTouch may be freely distributed under the MIT license. + +*/ +(function() { + + var fx; + if ('Zepto' in window) { + fx = window.Zepto; + fx.fn.prop = fx.fn.attr; + + Event.prototype.isDefaultPrevented = function() { + return this.defaultPrevented; + }; + } else if ('jQuery' in window) { + fx = window.jQuery; + + // trick to get Zepto/touch.js to work for jQuery + window.Zepto = $; + } else { + throw('Either Zepto or jQuery is required but neither can be found.'); + } + + $.jQTouch = function(options) { + // Initialize internal jQT variables + var $ = fx, + $body, + $head=$('head'), + history=[], + newPageCount=0, + jQTSettings={}, + $currentPage='', + orientation='portrait', + touchSelectors=[], + publicObj={}, + tapBuffer=100, // High click delay = ~350, quickest animation (slide) = 250 + extensions=$.jQTouch.prototype.extensions, + extTapHandlers=$.jQTouch.prototype.tapHandlers, + tapHandlers=[], + animations=[], + hairExtensions='', + defaults = { + addGlossToIcon: true, + backSelector: '.back, .cancel, .goback', + cacheGetRequests: true, + debug: true, + defaultAnimation: 'slideleft', + fixedViewport: true, + formSelector: 'form', + fullScreen: true, + fullScreenClass: 'fullscreen', + icon: null, + icon4: null, // available in iOS 4.2 and later. + preloadImages: false, + startupScreen: null, + statusBar: 'default', // other options: black-translucent, black + submitSelector: '.submit', + touchSelector: 'a, .touch', + trackScrollPositions: true, + useAnimations: true, + useFastTouch: true, + useTouchScroll: true, + animations: [ // highest to lowest priority + {name:'cubeleft', selector:'.cubeleft, .cube', is3d: true}, + {name:'cuberight', selector:'.cuberight', is3d: true}, + {name:'dissolve', selector:'.dissolve'}, + {name:'fade', selector:'.fade'}, + {name:'flipleft', selector:'.flipleft, .flip', is3d: true}, + {name:'flipright', selector:'.flipright', is3d: true}, + {name:'pop', selector:'.pop', is3d: true}, + {name:'swapleft', selector:'.swap', is3d: true}, + {name:'slidedown', selector:'.slidedown'}, + {name:'slideright', selector:'.slideright'}, + {name:'slideup', selector:'.slideup'}, + {name:'slideleft', selector:'.slideleft, .slide, #jqt > * > ul li a'} + ] + }; // end defaults + + function warn(message) { + if (window.console !== undefined && jQTSettings.debug === true) { + console.warn(message); + } + } + function addAnimation(animation) { + if (typeof(animation.selector) === 'string' && typeof(animation.name) === 'string') { + animations.push(animation); + } + } + function addTapHandler(tapHandler) { + if (typeof(tapHandler.name) === 'string' + && typeof(tapHandler.isSupported) === 'function' + && typeof(tapHandler.fn) === 'function') { + + tapHandlers.push(tapHandler); + } + } + function addPageToHistory(page, animation) { + history.unshift({ + page: page, + animation: animation, + hash: '#' + page.attr('id'), + id: page.attr('id') + }); + } + + // Unfortunately, we can not assume the "tap" event + // is being used for links, forms, etc. + function clickHandler(e) { + // Figure out whether to prevent default + var $el = $(e.target); + + // Find the nearest tappable ancestor + if (!$el.is(touchSelectors.join(', '))) { + $el = $(e.target).closest(touchSelectors.join(', ')); + } + + // Prevent default if we found an internal link (relative or absolute) + if ($el && $el.attr('href') && !$el.isExternalLink()) { + warn('Need to prevent default click behavior'); + e.preventDefault(); + } else { + warn('No need to prevent default click behavior'); + } + + // Trigger a tap event if touchstart is not on the job + if ($.support.touch) { + warn('Not converting click to a tap event because touch handler is on the job'); + } else { + warn('Converting click event to a tap event because touch handlers are not present or off'); + $(e.target).trigger('tap', e); + } + + } + function doNavigation(fromPage, toPage, animation, goingBack) { + + goingBack = goingBack ? goingBack : false; + + // Error check for target page + if (toPage === undefined || toPage.length === 0) { + $.fn.unselect(); + warn('Target element is missing.'); + return false; + } + + // Error check for fromPage===toPage + if (toPage.hasClass('current')) { + $.fn.unselect(); + warn('You are already on the page you are trying to navigate to.'); + return false; + } + + // Collapse the keyboard + $(':focus').trigger('blur'); + + fromPage.trigger('pageAnimationStart', { direction: 'out', back: goingBack }); + toPage.trigger('pageAnimationStart', { direction: 'in', back: goingBack }); + + if ($.support.animationEvents && animation && jQTSettings.useAnimations) { + // Fail over to 2d animation if need be + if (!$.support.transform3d && animation.is3d) { + warn('Did not detect support for 3d animations, falling back to ' + jQTSettings.defaultAnimation); + animation.name = jQTSettings.defaultAnimation; + } + + // Reverse animation if need be + var finalAnimationName = animation.name, + is3d = animation.is3d ? 'animating3d' : ''; + + if (goingBack) { + finalAnimationName = finalAnimationName.replace(/left|right|up|down|in|out/, reverseAnimation ); + } + + warn('finalAnimationName is ' + finalAnimationName); + + // Bind internal "cleanup" callback + fromPage.bind('webkitAnimationEnd', navigationEndHandler); + + // Trigger animations + $body.addClass('animating ' + is3d); + + var lastScroll = window.pageYOffset; + + // Position the incoming page so toolbar is at top of viewport regardless of scroll position on from page + if (jQTSettings.trackScrollPositions === true) { + toPage.css('top', window.pageYOffset - (toPage.data('lastScroll') || 0)); + } + + toPage.addClass(finalAnimationName + ' in current'); + fromPage.removeClass('current').addClass(finalAnimationName + ' out inmotion'); + + if (jQTSettings.trackScrollPositions === true) { + fromPage.data('lastScroll', lastScroll); + $('.scroll', fromPage).each(function(){ + $(this).data('lastScroll', this.scrollTop); + }); + } + } else { + toPage.addClass('current in'); + fromPage.removeClass('current'); + navigationEndHandler(); + } + + // Housekeeping + $currentPage = toPage; + if (goingBack) { + history.shift(); + } else { + addPageToHistory($currentPage, animation); + } + setHash($currentPage.attr('id')); + + // Private navigationEnd callback + function navigationEndHandler(event) { + var bufferTime = tapBuffer; + + if ($.support.animationEvents && animation && jQTSettings.useAnimations) { + fromPage.unbind('webkitAnimationEnd', navigationEndHandler); + fromPage.removeClass(finalAnimationName + ' out inmotion'); + if (finalAnimationName) { + toPage.removeClass(finalAnimationName); + } + $body.removeClass('animating animating3d'); + if (jQTSettings.trackScrollPositions === true) { + toPage.css('top', -toPage.data('lastScroll')); + + // Have to make sure the scroll/style resets + // are outside the flow of this function. + setTimeout(function(){ + toPage.css('top', 0); + window.scroll(0, toPage.data('lastScroll')); + $('.scroll', toPage).each(function(){ + this.scrollTop = - $(this).data('lastScroll'); + }); + }, 0); + } + } else { + fromPage.removeClass(finalAnimationName + ' out inmotion'); + if (finalAnimationName) { + toPage.removeClass(finalAnimationName); + } + bufferTime += 260; + } + + // In class is intentionally delayed, as it is our ghost click hack + setTimeout(function(){ + toPage.removeClass('in'); + window.scroll(0,0); + }, bufferTime); + + fromPage.unselect(); + + // Trigger custom events + toPage.trigger('pageAnimationEnd', { + direction:'in', animation: animation, back: goingBack + }); + fromPage.trigger('pageAnimationEnd', { + direction:'out', animation: animation, back: goingBack + }); + } + + return true; + } + function reverseAnimation(animation) { + var opposites={ + 'up' : 'down', + 'down' : 'up', + 'left' : 'right', + 'right' : 'left', + 'in' : 'out', + 'out' : 'in' + }; + + return opposites[animation] || animation; + } + function getOrientation() { + return orientation; + } + function goBack() { + + // Error checking + if (history.length < 1 ) { + warn('History is empty.'); + } + + if (history.length === 1 ) { + warn('You are on the first panel.'); + window.history.go(-1); + } + + var from = history[0], + to = history[1]; + + if (doNavigation(from.page, to.page, from.animation, true)) { + return publicObj; + } else { + warn('Could not go back.'); + return false; + } + + } + function goTo(toPage, animation) { + + var fromPage = history[0].page; + + if (typeof animation === 'string') { + for (var i=0, max=animations.length; i < max; i++) { + if (animations[i].name === animation) { + animation = animations[i]; + break; + } + } + } + + if (typeof toPage === 'string') { + var nextPage = $(toPage); + + if (nextPage.length < 1) { + showPageByHref(toPage, { + animation: animation + }); + return; + } else { + toPage = nextPage; + } + } + if (doNavigation(fromPage, toPage, animation)) { + return publicObj; + } else { + warn('Could not animate pages.'); + return false; + } + } + function hashChangeHandler(e) { + if (location.hash === history[0].hash) { + warn('We are on the right panel'); + return true; + } else if (location.hash === '') { + goBack(); + return true; + } else { + if( (history[1] && location.hash === history[1].hash) ) { + goBack(); + return true; + } else { + // Lastly, just try going to the ID... + warn('Could not find ID in history, just forwarding to DOM element.'); + goTo($(location.hash), jQTSettings.defaultAnimation); + } + } + } + function init(options) { + jQTSettings = $.extend({}, defaults, options); + + // Preload images + if (jQTSettings.preloadImages) { + for (var i = jQTSettings.preloadImages.length - 1; i >= 0; i--) { + (new Image()).src = jQTSettings.preloadImages[i]; + } + } + + // Set appropriate icon (retina display available in iOS 4.2 and later.) + var precomposed = (jQTSettings.addGlossToIcon) ? '' : '-precomposed'; + if (jQTSettings.icon) { + hairExtensions += '<link rel="apple-touch-icon' + precomposed + '" href="' + jQTSettings.icon + '" />'; + } + if (jQTSettings.icon4) { + hairExtensions += '<link rel="apple-touch-icon' + precomposed + '" sizes="114x114" href="' + jQTSettings.icon4 + '" />'; + } + // Set startup screen + if (jQTSettings.startupScreen) { + hairExtensions += '<link rel="apple-touch-startup-image" href="' + jQTSettings.startupScreen + '" />'; + } + + // Set viewport + if (jQTSettings.fixedViewport) { + hairExtensions += '<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>'; + } + + // Set full-screen + if (jQTSettings.fullScreen) { + hairExtensions += '<meta name="apple-mobile-web-app-capable" content="yes" />'; + if (jQTSettings.statusBar) { + hairExtensions += '<meta name="apple-mobile-web-app-status-bar-style" content="' + jQTSettings.statusBar + '" />'; + } + } + + // Attach hair extensions + if (hairExtensions) { + $head.prepend(hairExtensions); + } + } + + function getAnimation(el) { + var animation; + + for (var i=0, max=animations.length; i < max; i++) { + if (el.is(animations[i].selector)) { + animation = animations[i]; + break; + } + } + + if (!animation) { + warn('Animation could not be found. Using ' + jQTSettings.defaultAnimation + '.'); + animation = jQTSettings.defaultAnimation; + } + return animation; + } + + function insertPages(nodes, animation) { + + var targetPage = null; + + // Call dom.createElement element directly instead of relying on $(nodes), + // to work around: https://github.com/madrobby/zepto/issues/312 + var div = document.createElement('div'); + div.innerHTML = nodes; + + $(div).children().each(function(index, node) { + var $node = $(this); + if (!$node.attr('id')) { + $node.attr('id', 'page-' + (++newPageCount)); + } + + // Remove any existing instance + $('#' + $node.attr('id')).remove(); + + $body.append($node); + $body.trigger('pageInserted', {page: $node}); + + if ($node.hasClass('current') || !targetPage) { + targetPage = $node; + } + }); + if (targetPage !== null) { + goTo(targetPage, animation); + return targetPage; + } else { + return false; + } + } + + function orientationChangeHandler() { + $body.css('minHeight', 1000); + scrollTo(0,0); + var bodyHeight = window.innerHeight; + $body.css('minHeight', bodyHeight); + + orientation = Math.abs(window.orientation) == 90 ? 'landscape' : 'portrait'; + $body.removeClass('portrait landscape').addClass(orientation).trigger('turn', {orientation: orientation}); + } + function setHash(hash) { + // Sanitize + location.hash = '#' + hash.replace(/^#/, ''); + } + function showPageByHref(href, options) { + + var defaults = { + data: null, + method: 'GET', + animation: null, + callback: null, + $referrer: null + }; + + var settings = $.extend({}, defaults, options); + + if (href != '#') { + $.ajax({ + url: href, + data: settings.data, + type: settings.method, + success: function (data) { + var firstPage = insertPages(data, settings.animation); + if (firstPage) { + if (settings.method == 'GET' && jQTSettings.cacheGetRequests === true && settings.$referrer) { + settings.$referrer.attr('href', '#' + firstPage.attr('id')); + } + if (settings.callback) { + settings.callback(true); + } + } + }, + error: function (data) { + if (settings.$referrer) { + settings.$referrer.unselect(); + } + if (settings.callback) { + settings.callback(false); + } + } + }); + } else if (settings.$referrer) { + settings.$referrer.unselect(); + } + } + function submitHandler(e, callback) { + + $(':focus').trigger('blur'); + + e.preventDefault(); + + var $form = (typeof(e)==='string') ? $(e).eq(0) : (e.target ? $(e.target) : $(e)); + + if ($form.length && $form.is(jQTSettings.formSelector) && $form.attr('action')) { + showPageByHref($form.attr('action'), { + data: $form.serialize(), + method: $form.attr('method') || "POST", + animation: getAnimation($form), + callback: callback + }); + return false; + } + return true; + } + function submitParentForm($el) { + + var $form = $el.closest('form'); + if ($form.length === 0) { + warn('No parent form found'); + } else { + warn('About to submit parent form'); + $form.trigger('submit'); + return false; + } + return true; + } + function supportForTransform3d() { + + var head, body, style, div, result; + + head = document.getElementsByTagName('head')[0]; + body = document.body; + + style = document.createElement('style'); + style.textContent = '@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-webkit-transform-3d){#jqt-3dtest{height:3px}}'; + + div = document.createElement('div'); + div.id = 'jqt-3dtest'; + + // Add to the page + head.appendChild(style); + body.appendChild(div); + + // Check the result + result = div.offsetHeight === 3; + + // Clean up + style.parentNode.removeChild(style); + div.parentNode.removeChild(div); + + // Pass back result + warn('Support for 3d transforms: ' + result); + return result; + } + function supportIOS5() { + var support = false; + var REGEX_IOS_VERSION = /OS (\d+)(_\d+)* like Mac OS X/i; + + var agentString = window.navigator.userAgent; + if (REGEX_IOS_VERSION.test(agentString)) { + support = (REGEX_IOS_VERSION.exec(agentString)[1] >= 5); + } + return support; + } + function touchStartHandler(e){ + + var $el = $(e.target), + selectors = touchSelectors.join(', '); + + // Find the nearest tappable ancestor + if (!$el.is(selectors)) { + $el = $el.closest(selectors); + } + + // Make sure we have a tappable element + if ($el.length && $el.attr('href')) { + $el.addClass('active'); + } + + // Remove our active class if we move + $el.on($.support.touch ? 'touchmove' : 'mousemove', function(){ + $el.removeClass('active'); + }); + + $el.on('touchend', function(){ + $el.unbind('touchmove mousemove'); + }); + + } + function tapHandler(e){ + + if (e.isDefaultPrevented()) { + return true; + } + + // Grab the target element + var $el = $(e.target); + + // Find the nearest tappable ancestor + if (!$el.is(touchSelectors.join(', '))) { + $el = $el.closest(touchSelectors.join(', ')); + } + + // Make sure we have a tappable element + if (!$el.length || !$el.attr('href')) { + warn('Could not find a link related to tapped element'); + return true; + } + + // Init some vars + var target = $el.attr('target'), + hash = $el.prop('hash'), + href = $el.attr('href'); + + var params = { + e: e, + $el: $el, + target: target, + hash: hash, + href: href, + jQTSettings: jQTSettings + }; + + // Loop thru all handlers + for (var i=0, len=tapHandlers.length; i<len; i++) { + var handler = tapHandlers[i]; + var supported = handler.isSupported(e, params); + if (supported) { + var flag = handler.fn(e, params); + return flag; + } + } + } + function addDefaultTapHandlers() { + addTapHandler({ + name: 'external-link', + isSupported: function(e, params) { + return params.$el.isExternalLink(); + }, + fn: function(e, params) { + params.$el.unselect(); + return true; + } + }); + addTapHandler({ + name: 'back-selector', + isSupported: function(e, params) { + return params.$el.is(params.jQTSettings.backSelector); + }, + fn: function(e, params) { + // User clicked or tapped a back button + goBack(params.hash); + } + }); + addTapHandler({ + name: 'submit-selector', + isSupported: function(e, params) { + return params.$el.is(params.jQTSettings.submitSelector); + }, + fn: function(e, params) { + // User clicked or tapped a submit element + submitParentForm(params.$el); + } + }); + addTapHandler({ + name: 'webapp', + isSupported: function(e, params) { + return params.target === '_webapp'; + }, + fn: function(e, params) { + // User clicked or tapped an internal link, fullscreen mode + window.location = params.href; + return false; + } + }); + addTapHandler({ + name: 'no-op', + isSupported: function(e, params) { + return params.href === '#'; + }, + fn: function(e, params) { + // Allow tap on item with no href + params.$el.unselect(); + return true; + } + }); + addTapHandler({ + name: 'standard', + isSupported: function(e, params) { + return params.hash && params.hash !== '#'; + }, + fn: function(e, params) { + var animation = getAnimation(params.$el); + // Internal href + params.$el.addClass('active'); + goTo( + $(params.hash).data('referrer', params.$el), + animation, + params.$el.hasClass('reverse') + ); + return false; + } + }); + addTapHandler({ + name: 'external', + isSupported: function(e, params) { + return true; + }, + fn: function(e, params) { + var animation = getAnimation(params.$el); + + // External href + params.$el.addClass('loading active'); + showPageByHref(params.$el.attr('href'), { + animation: animation, + callback: function() { + params.$el.removeClass('loading'); + setTimeout($.fn.unselect, 250, params.$el); + }, + $referrer: params.$el + }); + return false; + } + }); + }; + + // Get the party started + init(options); + + // Document ready stuff + $(document).ready(function RUMBLE() { + // Store some properties in a support object + if (!$.support) $.support = {}; + $.support.animationEvents = (typeof window.WebKitAnimationEvent != 'undefined'); + $.support.touch = (typeof window.TouchEvent != 'undefined') && (window.navigator.userAgent.indexOf('Mobile') > -1) && jQTSettings.useFastTouch; + $.support.transform3d = supportForTransform3d(); + $.support.ios5 = supportIOS5(); + + if (!$.support.touch) { + warn('This device does not support touch interaction, or it has been deactivated by the developer. Some features might be unavailable.'); + } + if (!$.support.transform3d) { + warn('This device does not support 3d animation. 2d animations will be used instead.'); + } + + // Define public jQuery functions + $.fn.isExternalLink = function() { + var $el = $(this); + return ($el.attr('target') == '_blank' || $el.attr('rel') == 'external' || $el.is('a[href^="http://maps.google.com"], a[href^="mailto:"], a[href^="tel:"], a[href^="javascript:"], a[href*="youtube.com/v"], a[href*="youtube.com/watch"]')); + }; + $.fn.makeActive = function() { + return $(this).addClass('active'); + }; + $.fn.unselect = function(obj) { + if (obj) { + obj.removeClass('active'); + } else { + $('.active').removeClass('active'); + } + }; + + // Add extensions + for (var i=0, max=extensions.length; i < max; i++) { + var fn = extensions[i]; + if ($.isFunction(fn)) { + $.extend(publicObj, fn(publicObj)); + } + } + + // Add extensions tapHandlers + for (var i=0, max=extTapHandlers.length; i < max; i++) { + addTapHandler(extTapHandlers[i]); + } + // Add default tapHandlers + addDefaultTapHandlers(); + + // Add animations + for (var j=0, max_anims=defaults.animations.length; j < max_anims; j++) { + var animation = defaults.animations[j]; + if(jQTSettings[animation.name + 'Selector'] !== undefined){ + animation.selector = jQTSettings[animation.name + 'Selector']; + } + addAnimation(animation); + } + + // Create an array of stuff that needs touch event handling + touchSelectors.push(jQTSettings.touchSelector); + touchSelectors.push(jQTSettings.backSelector); + touchSelectors.push(jQTSettings.submitSelector); + $(touchSelectors.join(', ')).css('-webkit-touch-callout', 'none'); + + // Make sure we have a jqt element + $body = $('#jqt'); + var anatomy_lessons = []; + + if ($body.length === 0) { + warn('Could not find an element with the id "jqt", so the body id has been set to "jqt". If you are having any problems, wrapping your panels in a div with the id "jqt" might help.'); + $body = $(document.body).attr('id', 'jqt'); + } + + // Add some specific css if need be + if ($.support.transform3d) { + anatomy_lessons.push('supports3d'); + } + if ($.support.ios5 && jQTSettings.useTouchScroll) { + anatomy_lessons.push('touchscroll'); + } + + if (jQTSettings.fullScreenClass && window.navigator.standalone === true) { + anatomy_lessons.push(jQTSettings.fullScreenClass, jQTSettings.statusBar); + } + + // Bind events + + $body + .addClass(anatomy_lessons.join(' ')) + .bind('click', clickHandler) + .bind('orientationchange', orientationChangeHandler) + .bind('submit', submitHandler) + .bind('tap', tapHandler) + .bind( $.support.touch ? 'touchstart' : 'mousedown', touchStartHandler) + .trigger('orientationchange'); + + $(window).bind('hashchange', hashChangeHandler); + + var startHash = location.hash; + + // Determine what the initial view should be + if ($('#jqt > .current').length === 0) { + $currentPage = $('#jqt > *:first-child').addClass('current'); + } else { + $currentPage = $('#jqt > .current'); + } + + setHash($currentPage.attr('id')); + addPageToHistory($currentPage); + + if ($(startHash).length === 1) { + goTo(startHash); + } + }); + + // Expose public methods and properties + publicObj = { + addAnimation: addAnimation, + animations: animations, + getOrientation: getOrientation, + goBack: goBack, + insertPages: insertPages, + goTo: goTo, + history: history, + settings: jQTSettings, + submitForm: submitHandler + }; + return publicObj; + }; + + $.jQTouch.prototype.extensions = []; + $.jQTouch.prototype.tapHandlers = []; + + // Extensions directly manipulate the jQTouch object, before it's initialized. + $.jQTouch.addExtension = function(extension) { + $.jQTouch.prototype.extensions.push(extension); + }; + + // Experimental tap hanlders that can bypass default jQTouch tap handling + $.jQTouch.addTapHandler = function(extension) { + $.jQTouch.prototype.tapHandlers.push(extension); + }; + +})(); // Double closure, ALL THE WAY ACROSS THE SKY diff --git a/frontend/gamma/js/Zepto/ajax.js b/frontend/gamma/js/Zepto/ajax.js new file mode 100644 index 0000000..f4da150 --- a/dev/null +++ b/frontend/gamma/js/Zepto/ajax.js @@ -0,0 +1,285 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + var jsonpID = 0, + isObject = $.isObject, + document = window.document, + key, + name, + rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, + scriptTypeRE = /^(?:text|application)\/javascript/i, + xmlTypeRE = /^(?:text|application)\/xml/i, + jsonType = 'application/json', + htmlType = 'text/html', + blankRE = /^\s*$/ + + // trigger a custom event and return false if it was cancelled + function triggerAndReturn(context, eventName, data) { + var event = $.Event(eventName) + $(context).trigger(event, data) + return !event.defaultPrevented + } + + // trigger an Ajax "global" event + function triggerGlobal(settings, context, eventName, data) { + if (settings.global) return triggerAndReturn(context || document, eventName, data) + } + + // Number of active Ajax requests + $.active = 0 + + function ajaxStart(settings) { + if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart') + } + function ajaxStop(settings) { + if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop') + } + + // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable + function ajaxBeforeSend(xhr, settings) { + var context = settings.context + if (settings.beforeSend.call(context, xhr, settings) === false || + triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) + return false + + triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]) + } + function ajaxSuccess(data, xhr, settings) { + var context = settings.context, status = 'success' + settings.success.call(context, data, status, xhr) + triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]) + ajaxComplete(status, xhr, settings) + } + // type: "timeout", "error", "abort", "parsererror" + function ajaxError(error, type, xhr, settings) { + var context = settings.context + settings.error.call(context, xhr, type, error) + triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error]) + ajaxComplete(type, xhr, settings) + } + // status: "success", "notmodified", "error", "timeout", "abort", "parsererror" + function ajaxComplete(status, xhr, settings) { + var context = settings.context + settings.complete.call(context, xhr, status) + triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]) + ajaxStop(settings) + } + + // Empty function, used as default callback + function empty() {} + + $.ajaxJSONP = function(options){ + if (!('type' in options)) return $.ajax(options) + + var callbackName = 'jsonp' + (++jsonpID), + script = document.createElement('script'), + abort = function(){ + $(script).remove() + if (callbackName in window) window[callbackName] = empty + ajaxComplete('abort', xhr, options) + }, + xhr = { abort: abort }, abortTimeout + + if (options.error) script.onerror = function() { + xhr.abort() + options.error() + } + + window[callbackName] = function(data){ + clearTimeout(abortTimeout) + $(script).remove() + delete window[callbackName] + ajaxSuccess(data, xhr, options) + } + + serializeData(options) + script.src = options.url.replace(/=\?/, '=' + callbackName) + $('head').append(script) + + if (options.timeout > 0) abortTimeout = setTimeout(function(){ + xhr.abort() + ajaxComplete('timeout', xhr, options) + }, options.timeout) + + return xhr + } + + $.ajaxSettings = { + // Default type of request + type: 'GET', + // Callback that is executed before request + beforeSend: empty, + // Callback that is executed if the request succeeds + success: empty, + // Callback that is executed the the server drops error + error: empty, + // Callback that is executed on request complete (both: error and success) + complete: empty, + // The context for the callbacks + context: null, + // Whether to trigger "global" Ajax events + global: true, + // Transport + xhr: function () { + return new window.XMLHttpRequest() + }, + // MIME types mapping + accepts: { + script: 'text/javascript, application/javascript', + json: jsonType, + xml: 'application/xml, text/xml', + html: htmlType, + text: 'text/plain' + }, + // Whether the request is to another domain + crossDomain: false, + // Default timeout + timeout: 0, + // Whether data should be serialized to string + processData: true + } + + function mimeToDataType(mime) { + return mime && ( mime == htmlType ? 'html' : + mime == jsonType ? 'json' : + scriptTypeRE.test(mime) ? 'script' : + xmlTypeRE.test(mime) && 'xml' ) || 'text' + } + + function appendQuery(url, query) { + return (url + '&' + query).replace(/[&?]{1,2}/, '?') + } + + // serialize payload and append it to the URL for GET requests + function serializeData(options) { + if (options.processData && isObject(options.data)) + options.data = $.param(options.data, options.traditional) + if (options.data && (!options.type || options.type.toUpperCase() == 'GET')) + options.url = appendQuery(options.url, options.data) + } + + $.ajax = function(options){ + var settings = $.extend({}, options || {}) + for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key] + + ajaxStart(settings) + + if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) && + RegExp.$2 != window.location.host + + var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url) + if (dataType == 'jsonp' || hasPlaceholder) { + if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?') + return $.ajaxJSONP(settings) + } + + if (!settings.url) settings.url = window.location.toString() + serializeData(settings) + + var mime = settings.accepts[dataType], + baseHeaders = { }, + protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol, + xhr = $.ajaxSettings.xhr(), abortTimeout + + if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest' + if (mime) { + baseHeaders['Accept'] = mime + if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0] + xhr.overrideMimeType && xhr.overrideMimeType(mime) + } + if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET')) + baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded') + settings.headers = $.extend(baseHeaders, settings.headers || {}) + + xhr.onreadystatechange = function(){ + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + clearTimeout(abortTimeout) + var result, error = false + if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) { + dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type')) + result = xhr.responseText + + try { + if (dataType == 'script') (1,eval)(result) + else if (dataType == 'xml') result = xhr.responseXML + else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result) + } catch (e) { error = e } + + if (error) ajaxError(error, 'parsererror', xhr, settings) + else ajaxSuccess(result, xhr, settings) + } else { + ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings) + } + } + } + + var async = 'async' in settings ? settings.async : true + xhr.open(settings.type, settings.url, async) + + for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name]) + + if (ajaxBeforeSend(xhr, settings) === false) { + xhr.abort() + return false + } + + if (settings.timeout > 0) abortTimeout = setTimeout(function(){ + xhr.onreadystatechange = empty + xhr.abort() + ajaxError(null, 'timeout', xhr, settings) + }, settings.timeout) + + // avoid sending empty string (#319) + xhr.send(settings.data ? settings.data : null) + return xhr + } + + $.get = function(url, success){ return $.ajax({ url: url, success: success }) } + + $.post = function(url, data, success, dataType){ + if ($.isFunction(data)) dataType = dataType || success, success = data, data = null + return $.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType }) + } + + $.getJSON = function(url, success){ + return $.ajax({ url: url, success: success, dataType: 'json' }) + } + + $.fn.load = function(url, success){ + if (!this.length) return this + var self = this, parts = url.split(/\s/), selector + if (parts.length > 1) url = parts[0], selector = parts[1] + $.get(url, function(response){ + self.html(selector ? + $('<div>').html(response.replace(rscript, "")).find(selector) + : response) + success && success.apply(self, arguments) + }) + return this + } + + var escape = encodeURIComponent + + function serialize(params, obj, traditional, scope){ + var array = $.isArray(obj) + $.each(obj, function(key, value) { + if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']' + // handle data in serializeArray() format + if (!scope && array) params.add(value.name, value.value) + // recurse into nested objects + else if (traditional ? $.isArray(value) : isObject(value)) + serialize(params, value, traditional, key) + else params.add(key, value) + }) + } + + $.param = function(obj, traditional){ + var params = [] + params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) } + serialize(params, obj, traditional) + return params.join('&').replace(/%20/g, '+') + } +})(Zepto) diff --git a/frontend/gamma/js/Zepto/assets.js b/frontend/gamma/js/Zepto/assets.js new file mode 100644 index 0000000..b5a5712 --- a/dev/null +++ b/frontend/gamma/js/Zepto/assets.js @@ -0,0 +1,21 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + var cache = [], timeout + + $.fn.remove = function(){ + return this.each(function(){ + if(this.parentNode){ + if(this.tagName === 'IMG'){ + cache.push(this) + this.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=' + if (timeout) clearTimeout(timeout) + timeout = setTimeout(function(){ cache = [] }, 60000) + } + this.parentNode.removeChild(this) + } + }) + } +})(Zepto) diff --git a/frontend/gamma/js/Zepto/data.js b/frontend/gamma/js/Zepto/data.js new file mode 100644 index 0000000..b4c289f --- a/dev/null +++ b/frontend/gamma/js/Zepto/data.js @@ -0,0 +1,67 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +// The following code is heavily inspired by jQuery's $.fn.data() + +;(function($) { + var data = {}, dataAttr = $.fn.data, camelize = $.camelCase, + exp = $.expando = 'Zepto' + (+new Date()) + + // Get value from node: + // 1. first try key as given, + // 2. then try camelized key, + // 3. fall back to reading "data-*" attribute. + function getData(node, name) { + var id = node[exp], store = id && data[id] + if (name === undefined) return store || setData(node) + else { + if (store) { + if (name in store) return store[name] + var camelName = camelize(name) + if (camelName in store) return store[camelName] + } + return dataAttr.call($(node), name) + } + } + + // Store value under camelized key on node + function setData(node, name, value) { + var id = node[exp] || (node[exp] = ++$.uuid), + store = data[id] || (data[id] = attributeData(node)) + if (name !== undefined) store[camelize(name)] = value + return store + } + + // Read all "data-*" attributes from a node + function attributeData(node) { + var store = {} + $.each(node.attributes, function(i, attr){ + if (attr.name.indexOf('data-') == 0) + store[camelize(attr.name.replace('data-', ''))] = + $.zepto.deserializeValue(attr.value) + }) + return store + } + + $.fn.data = function(name, value) { + return value === undefined ? + // set multiple values via object + $.isPlainObject(name) ? + this.each(function(i, node){ + $.each(name, function(key, value){ setData(node, key, value) }) + }) : + // get value from first element + this.length == 0 ? undefined : getData(this[0], name) : + // set value on all elements + this.each(function(){ setData(this, name, value) }) + } + + $.fn.removeData = function(names) { + if (typeof names == 'string') names = names.split(/\s+/) + return this.each(function(){ + var id = this[exp], store = id && data[id] + if (store) $.each(names, function(){ delete store[camelize(this)] }) + }) + } +})(Zepto) diff --git a/frontend/gamma/js/Zepto/detect.js b/frontend/gamma/js/Zepto/detect.js new file mode 100644 index 0000000..22c0386 --- a/dev/null +++ b/frontend/gamma/js/Zepto/detect.js @@ -0,0 +1,42 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + function detect(ua){ + var os = this.os = {}, browser = this.browser = {}, + webkit = ua.match(/WebKit\/([\d.]+)/), + android = ua.match(/(Android)\s+([\d.]+)/), + ipad = ua.match(/(iPad).*OS\s([\d_]+)/), + iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/), + webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/), + touchpad = webos && ua.match(/TouchPad/), + kindle = ua.match(/Kindle\/([\d.]+)/), + silk = ua.match(/Silk\/([\d._]+)/), + blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/), + chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/) + + // todo clean this up with a better OS/browser + // separation. we need to discern between multiple + // browsers on android, and decide if kindle fire in + // silk mode is android or not + + if (browser.webkit = !!webkit) browser.version = webkit[1] + + if (android) os.android = true, os.version = android[2] + if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.') + if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.') + if (webos) os.webos = true, os.version = webos[2] + if (touchpad) os.touchpad = true + if (blackberry) os.blackberry = true, os.version = blackberry[2] + if (kindle) os.kindle = true, os.version = kindle[1] + if (silk) browser.silk = true, browser.version = silk[1] + if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true + if (chrome) browser.chrome = true, browser.version = chrome[1] + } + + detect.call($, navigator.userAgent) + // make available to unit tests + $.__detect = detect + +})(Zepto) diff --git a/frontend/gamma/js/Zepto/event.js b/frontend/gamma/js/Zepto/event.js new file mode 100644 index 0000000..b40af22 --- a/dev/null +++ b/frontend/gamma/js/Zepto/event.js @@ -0,0 +1,248 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={}, + hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' } + + specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents' + + function zid(element) { + return element._zid || (element._zid = _zid++) + } + function findHandlers(element, event, fn, selector) { + event = parse(event) + if (event.ns) var matcher = matcherFor(event.ns) + return (handlers[zid(element)] || []).filter(function(handler) { + return handler + && (!event.e || handler.e == event.e) + && (!event.ns || matcher.test(handler.ns)) + && (!fn || zid(handler.fn) === zid(fn)) + && (!selector || handler.sel == selector) + }) + } + function parse(event) { + var parts = ('' + event).split('.') + return {e: parts[0], ns: parts.slice(1).sort().join(' ')} + } + function matcherFor(ns) { + return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)') + } + + function eachEvent(events, fn, iterator){ + if ($.isObject(events)) $.each(events, iterator) + else events.split(/\s/).forEach(function(type){ iterator(type, fn) }) + } + + function eventCapture(handler, captureSetting) { + return handler.del && + (handler.e == 'focus' || handler.e == 'blur') || + !!captureSetting + } + + function realEvent(type) { + return hover[type] || type + } + + function add(element, events, fn, selector, getDelegate, capture){ + var id = zid(element), set = (handlers[id] || (handlers[id] = [])) + eachEvent(events, fn, function(event, fn){ + var handler = parse(event) + handler.fn = fn + handler.sel = selector + // emulate mouseenter, mouseleave + if (handler.e in hover) fn = function(e){ + var related = e.relatedTarget + if (!related || (related !== this && !$.contains(this, related))) + return handler.fn.apply(this, arguments) + } + handler.del = getDelegate && getDelegate(fn, event) + var callback = handler.del || fn + handler.proxy = function (e) { + var result = callback.apply(element, [e].concat(e.data)) + if (result === false) e.preventDefault(), e.stopPropagation() + return result + } + handler.i = set.length + set.push(handler) + element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture)) + }) + } + function remove(element, events, fn, selector, capture){ + var id = zid(element) + eachEvent(events || '', fn, function(event, fn){ + findHandlers(element, event, fn, selector).forEach(function(handler){ + delete handlers[id][handler.i] + element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture)) + }) + }) + } + + $.event = { add: add, remove: remove } + + $.proxy = function(fn, context) { + if ($.isFunction(fn)) { + var proxyFn = function(){ return fn.apply(context, arguments) } + proxyFn._zid = zid(fn) + return proxyFn + } else if (typeof context == 'string') { + return $.proxy(fn[context], fn) + } else { + throw new TypeError("expected function") + } + } + + $.fn.bind = function(event, callback){ + return this.each(function(){ + add(this, event, callback) + }) + } + $.fn.unbind = function(event, callback){ + return this.each(function(){ + remove(this, event, callback) + }) + } + $.fn.one = function(event, callback){ + return this.each(function(i, element){ + add(this, event, callback, null, function(fn, type){ + return function(){ + var result = fn.apply(element, arguments) + remove(element, type, fn) + return result + } + }) + }) + } + + var returnTrue = function(){return true}, + returnFalse = function(){return false}, + ignoreProperties = /^([A-Z]|layer[XY]$)/, + eventMethods = { + preventDefault: 'isDefaultPrevented', + stopImmediatePropagation: 'isImmediatePropagationStopped', + stopPropagation: 'isPropagationStopped' + } + function createProxy(event) { + var key, proxy = { originalEvent: event } + for (key in event) + if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key] + + $.each(eventMethods, function(name, predicate) { + proxy[name] = function(){ + this[predicate] = returnTrue + return event[name].apply(event, arguments) + } + proxy[predicate] = returnFalse + }) + return proxy + } + + // emulates the 'defaultPrevented' property for browsers that have none + function fix(event) { + if (!('defaultPrevented' in event)) { + event.defaultPrevented = false + var prevent = event.preventDefault + event.preventDefault = function() { + this.defaultPrevented = true + prevent.call(this) + } + } + } + + $.fn.delegate = function(selector, event, callback){ + return this.each(function(i, element){ + add(element, event, callback, selector, function(fn){ + return function(e){ + var evt, match = $(e.target).closest(selector, element).get(0) + if (match) { + evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element}) + return fn.apply(match, [evt].concat([].slice.call(arguments, 1))) + } + } + }) + }) + } + $.fn.undelegate = function(selector, event, callback){ + return this.each(function(){ + remove(this, event, callback, selector) + }) + } + + $.fn.live = function(event, callback){ + $(document.body).delegate(this.selector, event, callback) + return this + } + $.fn.die = function(event, callback){ + $(document.body).undelegate(this.selector, event, callback) + return this + } + + $.fn.on = function(event, selector, callback){ + return !selector || $.isFunction(selector) ? + this.bind(event, selector || callback) : this.delegate(selector, event, callback) + } + $.fn.off = function(event, selector, callback){ + return !selector || $.isFunction(selector) ? + this.unbind(event, selector || callback) : this.undelegate(selector, event, callback) + } + + $.fn.trigger = function(event, data){ + if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event) + fix(event) + event.data = data + return this.each(function(){ + // items in the collection might not be DOM elements + // (todo: possibly support events on plain old objects) + if('dispatchEvent' in this) this.dispatchEvent(event) + }) + } + + // triggers event handlers on current element just as if an event occurred, + // doesn't trigger an actual event, doesn't bubble + $.fn.triggerHandler = function(event, data){ + var e, result + this.each(function(i, element){ + e = createProxy(typeof event == 'string' ? $.Event(event) : event) + e.data = data + e.target = element + $.each(findHandlers(element, event.type || event), function(i, handler){ + result = handler.proxy(e) + if (e.isImmediatePropagationStopped()) return false + }) + }) + return result + } + + // shortcut methods for `.bind(event, fn)` for each event type + ;('focusin focusout load resize scroll unload click dblclick '+ + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+ + 'change select keydown keypress keyup error').split(' ').forEach(function(event) { + $.fn[event] = function(callback) { + return callback ? + this.bind(event, callback) : + this.trigger(event) + } + }) + + ;['focus', 'blur'].forEach(function(name) { + $.fn[name] = function(callback) { + if (callback) this.bind(name, callback) + else this.each(function(){ + try { this[name]() } + catch(e) {} + }) + return this + } + }) + + $.Event = function(type, props) { + if (typeof type != 'string') props = type, type = props.type + var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true + if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name]) + event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null) + event.isDefaultPrevented = function(){ return this.defaultPrevented } + return event + } + +})(Zepto) diff --git a/frontend/gamma/js/Zepto/form.js b/frontend/gamma/js/Zepto/form.js new file mode 100644 index 0000000..4d562a6 --- a/dev/null +++ b/frontend/gamma/js/Zepto/form.js @@ -0,0 +1,40 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function ($) { + $.fn.serializeArray = function () { + var result = [], el + $( Array.prototype.slice.call(this.get(0).elements) ).each(function () { + el = $(this) + var type = el.attr('type') + if (this.nodeName.toLowerCase() != 'fieldset' && + !this.disabled && type != 'submit' && type != 'reset' && type != 'button' && + ((type != 'radio' && type != 'checkbox') || this.checked)) + result.push({ + name: el.attr('name'), + value: el.val() + }) + }) + return result + } + + $.fn.serialize = function () { + var result = [] + this.serializeArray().forEach(function (elm) { + result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) ) + }) + return result.join('&') + } + + $.fn.submit = function (callback) { + if (callback) this.bind('submit', callback) + else if (this.length) { + var event = $.Event('submit') + this.eq(0).trigger(event) + if (!event.defaultPrevented) this.get(0).submit() + } + return this + } + +})(Zepto) diff --git a/frontend/gamma/js/Zepto/fx.js b/frontend/gamma/js/Zepto/fx.js new file mode 100644 index 0000000..575449a --- a/dev/null +++ b/frontend/gamma/js/Zepto/fx.js @@ -0,0 +1,102 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($, undefined){ + var prefix = '', eventPrefix, endEventName, endAnimationName, + vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' }, + document = window.document, testEl = document.createElement('div'), + supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, + transform, + transitionProperty, transitionDuration, transitionTiming, + animationName, animationDuration, animationTiming, + cssReset = {} + + function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) } + function downcase(str) { return str.toLowerCase() } + function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) } + + $.each(vendors, function(vendor, event){ + if (testEl.style[vendor + 'TransitionProperty'] !== undefined) { + prefix = '-' + downcase(vendor) + '-' + eventPrefix = event + return false + } + }) + + transform = prefix + 'transform' + cssReset[transitionProperty = prefix + 'transition-property'] = + cssReset[transitionDuration = prefix + 'transition-duration'] = + cssReset[transitionTiming = prefix + 'transition-timing-function'] = + cssReset[animationName = prefix + 'animation-name'] = + cssReset[animationDuration = prefix + 'animation-duration'] = + cssReset[animationTiming = prefix + 'animation-timing-function'] = '' + + $.fx = { + off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined), + speeds: { _default: 400, fast: 200, slow: 600 }, + cssPrefix: prefix, + transitionEnd: normalizeEvent('TransitionEnd'), + animationEnd: normalizeEvent('AnimationEnd') + } + + $.fn.animate = function(properties, duration, ease, callback){ + if ($.isObject(duration)) + ease = duration.easing, callback = duration.complete, duration = duration.duration + if (duration) duration = (typeof duration == 'number' ? duration : + ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000 + return this.anim(properties, duration, ease, callback) + } + + $.fn.anim = function(properties, duration, ease, callback){ + var key, cssValues = {}, cssProperties, transforms = '', + that = this, wrappedCallback, endEvent = $.fx.transitionEnd + + if (duration === undefined) duration = 0.4 + if ($.fx.off) duration = 0 + + if (typeof properties == 'string') { + // keyframe animation + cssValues[animationName] = properties + cssValues[animationDuration] = duration + 's' + cssValues[animationTiming] = (ease || 'linear') + endEvent = $.fx.animationEnd + } else { + cssProperties = [] + // CSS transitions + for (key in properties) + if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') ' + else cssValues[key] = properties[key], cssProperties.push(dasherize(key)) + + if (transforms) cssValues[transform] = transforms, cssProperties.push(transform) + if (duration > 0 && typeof properties === 'object') { + cssValues[transitionProperty] = cssProperties.join(', ') + cssValues[transitionDuration] = duration + 's' + cssValues[transitionTiming] = (ease || 'linear') + } + } + + wrappedCallback = function(event){ + if (typeof event !== 'undefined') { + if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below" + $(event.target).unbind(endEvent, arguments.callee) + } + $(this).css(cssReset) + callback && callback.call(this) + } + if (duration > 0) this.bind(endEvent, wrappedCallback) + + // trigger page reflow so new elements can animate + this.size() && this.get(0).clientLeft + + this.css(cssValues) + + if (duration <= 0) setTimeout(function() { + that.each(function(){ wrappedCallback.call(this) }) + }, 0) + + return this + } + + testEl = null +})(Zepto) diff --git a/frontend/gamma/js/Zepto/fx_methods.js b/frontend/gamma/js/Zepto/fx_methods.js new file mode 100644 index 0000000..23daf6e --- a/dev/null +++ b/frontend/gamma/js/Zepto/fx_methods.js @@ -0,0 +1,71 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($, undefined){ + var document = window.document, docElem = document.documentElement, + origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle + + function anim(el, speed, opacity, scale, callback) { + if (typeof speed == 'function' && !callback) callback = speed, speed = undefined + var props = { opacity: opacity } + if (scale) { + props.scale = scale + el.css($.fx.cssPrefix + 'transform-origin', '0 0') + } + return el.animate(props, speed, null, callback) + } + + function hide(el, speed, scale, callback) { + return anim(el, speed, 0, scale, function(){ + origHide.call($(this)) + callback && callback.call(this) + }) + } + + $.fn.show = function(speed, callback) { + origShow.call(this) + if (speed === undefined) speed = 0 + else this.css('opacity', 0) + return anim(this, speed, 1, '1,1', callback) + } + + $.fn.hide = function(speed, callback) { + if (speed === undefined) return origHide.call(this) + else return hide(this, speed, '0,0', callback) + } + + $.fn.toggle = function(speed, callback) { + if (speed === undefined || typeof speed == 'boolean') + return origToggle.call(this, speed) + else return this.each(function(){ + var el = $(this) + el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback) + }) + } + + $.fn.fadeTo = function(speed, opacity, callback) { + return anim(this, speed, opacity, null, callback) + } + + $.fn.fadeIn = function(speed, callback) { + var target = this.css('opacity') + if (target > 0) this.css('opacity', 0) + else target = 1 + return origShow.call(this).fadeTo(speed, target, callback) + } + + $.fn.fadeOut = function(speed, callback) { + return hide(this, speed, null, callback) + } + + $.fn.fadeToggle = function(speed, callback) { + return this.each(function(){ + var el = $(this) + el[ + (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut' + ](speed, callback) + }) + } + +})(Zepto) diff --git a/frontend/gamma/js/Zepto/gesture.js b/frontend/gamma/js/Zepto/gesture.js new file mode 100644 index 0000000..035455b --- a/dev/null +++ b/frontend/gamma/js/Zepto/gesture.js @@ -0,0 +1,35 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + if ($.os.ios) { + var gesture = {}, gestureTimeout + + function parentIfText(node){ + return 'tagName' in node ? node : node.parentNode + } + + $(document).bind('gesturestart', function(e){ + var now = Date.now(), delta = now - (gesture.last || now) + gesture.target = parentIfText(e.target) + gestureTimeout && clearTimeout(gestureTimeout) + gesture.e1 = e.scale + gesture.last = now + }).bind('gesturechange', function(e){ + gesture.e2 = e.scale + }).bind('gestureend', function(e){ + if (gesture.e2 > 0) { + Math.abs(gesture.e1 - gesture.e2) != 0 && $(gesture.target).trigger('pinch') && + $(gesture.target).trigger('pinch' + (gesture.e1 - gesture.e2 > 0 ? 'In' : 'Out')) + gesture.e1 = gesture.e2 = gesture.last = 0 + } else if ('last' in gesture) { + gesture = {} + } + }) + + ;['pinch', 'pinchIn', 'pinchOut'].forEach(function(m){ + $.fn[m] = function(callback){ return this.bind(m, callback) } + }) + } +})(Zepto) diff --git a/frontend/gamma/js/Zepto/polyfill.js b/frontend/gamma/js/Zepto/polyfill.js new file mode 100644 index 0000000..933d1f8 --- a/dev/null +++ b/frontend/gamma/js/Zepto/polyfill.js @@ -0,0 +1,36 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function(undefined){ + if (String.prototype.trim === undefined) // fix for iOS 3.2 + String.prototype.trim = function(){ return this.replace(/^\s+/, '').replace(/\s+$/, '') } + + // For iOS 3.x + // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce + if (Array.prototype.reduce === undefined) + Array.prototype.reduce = function(fun){ + if(this === void 0 || this === null) throw new TypeError() + var t = Object(this), len = t.length >>> 0, k = 0, accumulator + if(typeof fun != 'function') throw new TypeError() + if(len == 0 && arguments.length == 1) throw new TypeError() + + if(arguments.length >= 2) + accumulator = arguments[1] + else + do{ + if(k in t){ + accumulator = t[k++] + break + } + if(++k >= len) throw new TypeError() + } while (true) + + while (k < len){ + if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t) + k++ + } + return accumulator + } + +})() diff --git a/frontend/gamma/js/Zepto/selector.js b/frontend/gamma/js/Zepto/selector.js new file mode 100644 index 0000000..c0b035a --- a/dev/null +++ b/frontend/gamma/js/Zepto/selector.js @@ -0,0 +1,81 @@ +;(function($){ + var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches + + function visible(elem){ + elem = $(elem) + return !!(elem.width() || elem.height()) && elem.css("display") !== "none" + } + + // Implements a subset from: + // http://api.jquery.com/category/selectors/jquery-selector-extensions/ + // + // Each filter function receives the current index, all nodes in the + // considered set, and a value if there were parentheses. The value + // of `this` is the node currently being considered. The function returns the + // resulting node(s), null, or undefined. + // + // Complex selectors are not supported: + // li:has(label:contains("foo")) + li:has(label:contains("bar")) + // ul.inner:first > li + var filters = $.expr[':'] = { + visible: function(){ if (visible(this)) return this }, + hidden: function(){ if (!visible(this)) return this }, + selected: function(){ if (this.selected) return this }, + checked: function(){ if (this.checked) return this }, + parent: function(){ return this.parentNode }, + first: function(idx){ if (idx === 0) return this }, + last: function(idx, nodes){ if (idx === nodes.length - 1) return this }, + eq: function(idx, _, value){ if (idx === value) return this }, + contains: function(idx, _, text){ if ($(this).text().indexOf(text) > -1) return this }, + has: function(idx, _, sel){ if (zepto.qsa(this, sel).length) return this } + } + + var filterRe = new RegExp('(.*):(\\w+)(?:\\(([^)]+)\\))?$\\s*'), + childRe = /^\s*>/, + classTag = 'Zepto' + (+new Date()) + + function process(sel, fn) { + // quote the hash in `a[href^=#]` expression + sel = sel.replace(/=#\]/g, '="#"]') + var filter, arg, match = filterRe.exec(sel) + if (match && match[2] in filters) { + var filter = filters[match[2]], arg = match[3] + sel = match[1] + if (arg) { + var num = Number(arg) + if (isNaN(num)) arg = arg.replace(/^["']|["']$/g, '') + else arg = num + } + } + return fn(sel, filter, arg) + } + + zepto.qsa = function(node, selector) { + return process(selector, function(sel, filter, arg){ + try { + var taggedParent + if (!sel && filter) sel = '*' + else if (childRe.test(sel)) + // support "> *" child queries by tagging the parent node with a + // unique class and prepending that classname onto the selector + taggedParent = $(node).addClass(classTag), sel = '.'+classTag+' '+sel + + var nodes = oldQsa(node, sel) + } catch(e) { + console.error('error performing selector: %o', selector) + throw e + } finally { + if (taggedParent) taggedParent.removeClass(classTag) + } + return !filter ? nodes : + zepto.uniq($.map(nodes, function(n, i){ return filter.call(n, i, nodes, arg) })) + }) + } + + zepto.matches = function(node, selector){ + return process(selector, function(sel, filter, arg){ + return (!sel || oldMatches(node, sel)) && + (!filter || filter.call(node, null, arg) === node) + }) + } +})(Zepto) diff --git a/frontend/gamma/js/Zepto/stack.js b/frontend/gamma/js/Zepto/stack.js new file mode 100644 index 0000000..c995285 --- a/dev/null +++ b/frontend/gamma/js/Zepto/stack.js @@ -0,0 +1,22 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + $.fn.end = function(){ + return this.prevObject || $() + } + + $.fn.andSelf = function(){ + return this.add(this.prevObject || $()) + } + + 'filter,add,not,eq,first,last,find,closest,parents,parent,children,siblings'.split(',').forEach(function(property){ + var fn = $.fn[property] + $.fn[property] = function(){ + var ret = fn.apply(this, arguments) + ret.prevObject = this + return ret + } + }) +})(Zepto) diff --git a/frontend/gamma/js/Zepto/touch.js b/frontend/gamma/js/Zepto/touch.js new file mode 100644 index 0000000..af109b9 --- a/dev/null +++ b/frontend/gamma/js/Zepto/touch.js @@ -0,0 +1,113 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +;(function($){ + var touch = {}, + touchTimeout, tapTimeout, swipeTimeout, + longTapDelay = 750, longTapTimeout + + function parentIfText(node) { + return 'tagName' in node ? node : node.parentNode + } + + function swipeDirection(x1, x2, y1, y2) { + var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2) + return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down') + } + + function longTap() { + longTapTimeout = null + if (touch.last) { + touch.el.trigger('longTap') + touch = {} + } + } + + function cancelLongTap() { + if (longTapTimeout) clearTimeout(longTapTimeout) + longTapTimeout = null + } + + function cancelAll() { + if (touchTimeout) clearTimeout(touchTimeout) + if (tapTimeout) clearTimeout(tapTimeout) + if (swipeTimeout) clearTimeout(swipeTimeout) + if (longTapTimeout) clearTimeout(longTapTimeout) + touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null + touch = {} + } + + $(document).ready(function(){ + var now, delta + + $(document.body) + .bind('touchstart', function(e){ + now = Date.now() + delta = now - (touch.last || now) + touch.el = $(parentIfText(e.touches[0].target)) + touchTimeout && clearTimeout(touchTimeout) + touch.x1 = e.touches[0].pageX + touch.y1 = e.touches[0].pageY + if (delta > 0 && delta <= 250) touch.isDoubleTap = true + touch.last = now + longTapTimeout = setTimeout(longTap, longTapDelay) + }) + .bind('touchmove', function(e){ + cancelLongTap() + touch.x2 = e.touches[0].pageX + touch.y2 = e.touches[0].pageY + }) + .bind('touchend', function(e){ + cancelLongTap() + + // swipe + if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) || + (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30)) + + swipeTimeout = setTimeout(function() { + touch.el.trigger('swipe') + touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2))) + touch = {} + }, 0) + + // normal tap + else if ('last' in touch) + + // delay by one tick so we can cancel the 'tap' event if 'scroll' fires + // ('tap' fires before 'scroll') + tapTimeout = setTimeout(function() { + + // trigger universal 'tap' with the option to cancelTouch() + // (cancelTouch cancels processing of single vs double taps for faster 'tap' response) + var event = $.Event('tap') + event.cancelTouch = cancelAll + touch.el.trigger(event) + + // trigger double tap immediately + if (touch.isDoubleTap) { + touch.el.trigger('doubleTap') + touch = {} + } + + // trigger single tap after 250ms of inactivity + else { + touchTimeout = setTimeout(function(){ + touchTimeout = null + touch.el.trigger('singleTap') + touch = {} + }, 250) + } + + }, 0) + + }) + .bind('touchcancel', cancelAll) + + $(window).bind('scroll', cancelAll) + }) + + ;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){ + $.fn[m] = function(callback){ return this.bind(m, callback) } + }) +})(Zepto) diff --git a/frontend/gamma/js/Zepto/zepto.js b/frontend/gamma/js/Zepto/zepto.js new file mode 100644 index 0000000..e67b3a2 --- a/dev/null +++ b/frontend/gamma/js/Zepto/zepto.js @@ -0,0 +1,751 @@ +// Zepto.js +// (c) 2010-2012 Thomas Fuchs +// Zepto.js may be freely distributed under the MIT license. + +var Zepto = (function() { + var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter, + document = window.document, + elementDisplay = {}, classCache = {}, + getComputedStyle = document.defaultView.getComputedStyle, + cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 }, + fragmentRE = /^\s*<(\w+|!)[^>]*>/, + tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rootNodeRE = /^(?:body|html)$/i, + + // special attributes that should be get/set via method calls + methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'], + + adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ], + table = document.createElement('table'), + tableRow = document.createElement('tr'), + containers = { + 'tr': document.createElement('tbody'), + 'tbody': table, 'thead': table, 'tfoot': table, + 'td': tableRow, 'th': tableRow, + '*': document.createElement('div') + }, + readyRE = /complete|loaded|interactive/, + classSelectorRE = /^\.([\w-]+)$/, + idSelectorRE = /^#([\w-]*)$/, + tagSelectorRE = /^[\w-]+$/, + toString = {}.toString, + zepto = {}, + camelize, uniq, + tempParent = document.createElement('div') + + zepto.matches = function(element, selector) { + if (!element || element.nodeType !== 1) return false + var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector || + element.oMatchesSelector || element.matchesSelector + if (matchesSelector) return matchesSelector.call(element, selector) + // fall back to performing a selector: + var match, parent = element.parentNode, temp = !parent + if (temp) (parent = tempParent).appendChild(element) + match = ~zepto.qsa(parent, selector).indexOf(element) + temp && tempParent.removeChild(element) + return match + } + + function isFunction(value) { return toString.call(value) == "[object Function]" } + function isObject(value) { return value instanceof Object } + function isPlainObject(value) { + return isObject(value) && value != window && value.__proto__ == Object.prototype + } + function isArray(value) { return value instanceof Array } + function likeArray(obj) { return typeof obj.length == 'number' } + + function compact(array) { return filter.call(array, function(item){ return item != null }) } + function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array } + camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) } + function dasherize(str) { + return str.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/_/g, '-') + .toLowerCase() + } + uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) } + + function classRE(name) { + return name in classCache ? + classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)')) + } + + function maybeAddPx(name, value) { + return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value + } + + function defaultDisplay(nodeName) { + var element, display + if (!elementDisplay[nodeName]) { + element = document.createElement(nodeName) + document.body.appendChild(element) + display = getComputedStyle(element, '').getPropertyValue("display") + element.parentNode.removeChild(element) + display == "none" && (display = "block") + elementDisplay[nodeName] = display + } + return elementDisplay[nodeName] + } + + function children(element) { + return 'children' in element ? + slice.call(element.children) : + $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node }) + } + + // `$.zepto.fragment` takes a html string and an optional tag name + // to generate DOM nodes nodes from the given html string. + // The generated DOM nodes are returned as an array. + // This function can be overriden in plugins for example to make + // it compatible with browsers that don't support the DOM fully. + zepto.fragment = function(html, name, properties) { + if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>") + if (name === undefined) name = fragmentRE.test(html) && RegExp.$1 + if (!(name in containers)) name = '*' + + var nodes, dom, container = containers[name] + container.innerHTML = '' + html + dom = $.each(slice.call(container.childNodes), function(){ + container.removeChild(this) + }) + if (isPlainObject(properties)) { + nodes = $(dom) + $.each(properties, function(key, value) { + if (methodAttributes.indexOf(key) > -1) nodes[key](value) + else nodes.attr(key, value) + }) + } + return dom + } + + // `$.zepto.Z` swaps out the prototype of the given `dom` array + // of nodes with `$.fn` and thus supplying all the Zepto functions + // to the array. Note that `__proto__` is not supported on Internet + // Explorer. This method can be overriden in plugins. + zepto.Z = function(dom, selector) { + dom = dom || [] + dom.__proto__ = arguments.callee.prototype + dom.selector = selector || '' + return dom + } + + // `$.zepto.isZ` should return `true` if the given object is a Zepto + // collection. This method can be overriden in plugins. + zepto.isZ = function(object) { + return object instanceof zepto.Z + } + + // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and + // takes a CSS selector and an optional context (and handles various + // special cases). + // This method can be overriden in plugins. + zepto.init = function(selector, context) { + // If nothing given, return an empty Zepto collection + if (!selector) return zepto.Z() + // If a function is given, call it when the DOM is ready + else if (isFunction(selector)) return $(document).ready(selector) + // If a Zepto collection is given, juts return it + else if (zepto.isZ(selector)) return selector + else { + var dom + // normalize array if an array of nodes is given + if (isArray(selector)) dom = compact(selector) + // Wrap DOM nodes. If a plain object is given, duplicate it. + else if (isObject(selector)) + dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null + // If it's a html fragment, create nodes from it + else if (fragmentRE.test(selector)) + dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null + // If there's a context, create a collection on that context first, and select + // nodes from there + else if (context !== undefined) return $(context).find(selector) + // And last but no least, if it's a CSS selector, use it to select nodes. + else dom = zepto.qsa(document, selector) + // create a new Zepto collection from the nodes found + return zepto.Z(dom, selector) + } + } + + // `$` will be the base `Zepto` object. When calling this + // function just call `$.zepto.init, which makes the implementation + // details of selecting nodes and creating Zepto collections + // patchable in plugins. + $ = function(selector, context){ + return zepto.init(selector, context) + } + + function extend(target, source, deep) { + for (key in source) + if (deep && isPlainObject(source[key])) { + if (!isPlainObject(target[key])) target[key] = {} + extend(target[key], source[key], deep) + } + else if (source[key] !== undefined) target[key] = source[key] + } + + // Copy all but undefined properties from one or more + // objects to the `target` object. + $.extend = function(target){ + var deep, args = slice.call(arguments, 1) + if (typeof target == 'boolean') { + deep = target + target = args.shift() + } + args.forEach(function(arg){ extend(target, arg, deep) }) + return target + } + + // `$.zepto.qsa` is Zepto's CSS selector implementation which + // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`. + // This method can be overriden in plugins. + zepto.qsa = function(element, selector){ + var found + return (element === document && idSelectorRE.test(selector)) ? + ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) : + (element.nodeType !== 1 && element.nodeType !== 9) ? [] : + slice.call( + classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) : + tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) : + element.querySelectorAll(selector) + ) + } + + function filtered(nodes, selector) { + return selector === undefined ? $(nodes) : $(nodes).filter(selector) + } + + $.contains = function(parent, node) { + return parent !== node && parent.contains(node) + } + + function funcArg(context, arg, idx, payload) { + return isFunction(arg) ? arg.call(context, idx, payload) : arg + } + + function setAttribute(node, name, value) { + value == null ? node.removeAttribute(name) : node.setAttribute(name, value) + } + + // access className property while respecting SVGAnimatedString + function className(node, value){ + var klass = node.className, + svg = klass && klass.baseVal !== undefined + + if (value === undefined) return svg ? klass.baseVal : klass + svg ? (klass.baseVal = value) : (node.className = value) + } + + // "true" => true + // "false" => false + // "null" => null + // "42" => 42 + // "42.5" => 42.5 + // JSON => parse if valid + // String => self + function deserializeValue(value) { + var num + try { + return value ? + value == "true" || + ( value == "false" ? false : + value == "null" ? null : + !isNaN(num = Number(value)) ? num : + /^[\[\{]/.test(value) ? $.parseJSON(value) : + value ) + : value + } catch(e) { + return value + } + } + + $.isFunction = isFunction + $.isObject = isObject + $.isArray = isArray + $.isPlainObject = isPlainObject + + $.inArray = function(elem, array, i){ + return emptyArray.indexOf.call(array, elem, i) + } + + $.camelCase = camelize + $.trim = function(str) { return str.trim() } + + // plugin compatibility + $.uuid = 0 + $.support = { } + $.expr = { } + + $.map = function(elements, callback){ + var value, values = [], i, key + if (likeArray(elements)) + for (i = 0; i < elements.length; i++) { + value = callback(elements[i], i) + if (value != null) values.push(value) + } + else + for (key in elements) { + value = callback(elements[key], key) + if (value != null) values.push(value) + } + return flatten(values) + } + + $.each = function(elements, callback){ + var i, key + if (likeArray(elements)) { + for (i = 0; i < elements.length; i++) + if (callback.call(elements[i], i, elements[i]) === false) return elements + } else { + for (key in elements) + if (callback.call(elements[key], key, elements[key]) === false) return elements + } + + return elements + } + + $.grep = function(elements, callback){ + return filter.call(elements, callback) + } + + if (window.JSON) $.parseJSON = JSON.parse + + // Define methods that will be available on all + // Zepto collections + $.fn = { + // Because a collection acts like an array + // copy over these useful array functions. + forEach: emptyArray.forEach, + reduce: emptyArray.reduce, + push: emptyArray.push, + sort: emptyArray.sort, + indexOf: emptyArray.indexOf, + concat: emptyArray.concat, + + // `map` and `slice` in the jQuery API work differently + // from their array counterparts + map: function(fn){ + return $($.map(this, function(el, i){ return fn.call(el, i, el) })) + }, + slice: function(){ + return $(slice.apply(this, arguments)) + }, + + ready: function(callback){ + if (readyRE.test(document.readyState)) callback($) + else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false) + return this + }, + get: function(idx){ + return idx === undefined ? slice.call(this) : this[idx] + }, + toArray: function(){ return this.get() }, + size: function(){ + return this.length + }, + remove: function(){ + return this.each(function(){ + if (this.parentNode != null) + this.parentNode.removeChild(this) + }) + }, + each: function(callback){ + emptyArray.every.call(this, function(el, idx){ + return callback.call(el, idx, el) !== false + }) + return this + }, + filter: function(selector){ + if (isFunction(selector)) return this.not(this.not(selector)) + return $(filter.call(this, function(element){ + return zepto.matches(element, selector) + })) + }, + add: function(selector,context){ + return $(uniq(this.concat($(selector,context)))) + }, + is: function(selector){ + return this.length > 0 && zepto.matches(this[0], selector) + }, + not: function(selector){ + var nodes=[] + if (isFunction(selector) && selector.call !== undefined) + this.each(function(idx){ + if (!selector.call(this,idx)) nodes.push(this) + }) + else { + var excludes = typeof selector == 'string' ? this.filter(selector) : + (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector) + this.forEach(function(el){ + if (excludes.indexOf(el) < 0) nodes.push(el) + }) + } + return $(nodes) + }, + has: function(selector){ + return this.filter(function(){ + return isObject(selector) ? + $.contains(this, selector) : + $(this).find(selector).size() + }) + }, + eq: function(idx){ + return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1) + }, + first: function(){ + var el = this[0] + return el && !isObject(el) ? el : $(el) + }, + last: function(){ + var el = this[this.length - 1] + return el && !isObject(el) ? el : $(el) + }, + find: function(selector){ + var result + if (this.length == 1) result = $(zepto.qsa(this[0], selector)) + else result = this.map(function(){ return zepto.qsa(this, selector) }) + return result + }, + closest: function(selector, context){ + var node = this[0] + while (node && !zepto.matches(node, selector)) + node = node !== context && node !== document && node.parentNode + return $(node) + }, + parents: function(selector){ + var ancestors = [], nodes = this + while (nodes.length > 0) + nodes = $.map(nodes, function(node){ + if ((node = node.parentNode) && node !== document && ancestors.indexOf(node) < 0) { + ancestors.push(node) + return node + } + }) + return filtered(ancestors, selector) + }, + parent: function(selector){ + return filtered(uniq(this.pluck('parentNode')), selector) + }, + children: function(selector){ + return filtered(this.map(function(){ return children(this) }), selector) + }, + contents: function() { + return this.map(function() { return slice.call(this.childNodes) }) + }, + siblings: function(selector){ + return filtered(this.map(function(i, el){ + return filter.call(children(el.parentNode), function(child){ return child!==el }) + }), selector) + }, + empty: function(){ + return this.each(function(){ this.innerHTML = '' }) + }, + // `pluck` is borrowed from Prototype.js + pluck: function(property){ + return $.map(this, function(el){ return el[property] }) + }, + show: function(){ + return this.each(function(){ + this.style.display == "none" && (this.style.display = null) + if (getComputedStyle(this, '').getPropertyValue("display") == "none") + this.style.display = defaultDisplay(this.nodeName) + }) + }, + replaceWith: function(newContent){ + return this.before(newContent).remove() + }, + wrap: function(structure){ + var func = isFunction(structure) + if (this[0] && !func) + var dom = $(structure).get(0), + clone = dom.parentNode || this.length > 1 + + return this.each(function(index){ + $(this).wrapAll( + func ? structure.call(this, index) : + clone ? dom.cloneNode(true) : dom + ) + }) + }, + wrapAll: function(structure){ + if (this[0]) { + $(this[0]).before(structure = $(structure)) + var children + // drill down to the inmost element + while ((children = structure.children()).length) structure = children.first() + $(structure).append(this) + } + return this + }, + wrapInner: function(structure){ + var func = isFunction(structure) + return this.each(function(index){ + var self = $(this), contents = self.contents(), + dom = func ? structure.call(this, index) : structure + contents.length ? contents.wrapAll(dom) : self.append(dom) + }) + }, + unwrap: function(){ + this.parent().each(function(){ + $(this).replaceWith($(this).children()) + }) + return this + }, + clone: function(){ + return this.map(function(){ return this.cloneNode(true) }) + }, + hide: function(){ + return this.css("display", "none") + }, + toggle: function(setting){ + return this.each(function(){ + var el = $(this) + ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide() + }) + }, + prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') }, + next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') }, + html: function(html){ + return html === undefined ? + (this.length > 0 ? this[0].innerHTML : null) : + this.each(function(idx){ + var originHtml = this.innerHTML + $(this).empty().append( funcArg(this, html, idx, originHtml) ) + }) + }, + text: function(text){ + return text === undefined ? + (this.length > 0 ? this[0].textContent : null) : + this.each(function(){ this.textContent = text }) + }, + attr: function(name, value){ + var result + return (typeof name == 'string' && value === undefined) ? + (this.length == 0 || this[0].nodeType !== 1 ? undefined : + (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() : + (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result + ) : + this.each(function(idx){ + if (this.nodeType !== 1) return + if (isObject(name)) for (key in name) setAttribute(this, key, name[key]) + else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name))) + }) + }, + removeAttr: function(name){ + return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) }) + }, + prop: function(name, value){ + return (value === undefined) ? + (this[0] && this[0][name]) : + this.each(function(idx){ + this[name] = funcArg(this, value, idx, this[name]) + }) + }, + data: function(name, value){ + var data = this.attr('data-' + dasherize(name), value) + return data !== null ? deserializeValue(data) : undefined + }, + val: function(value){ + return (value === undefined) ? + (this[0] && (this[0].multiple ? + $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') : + this[0].value) + ) : + this.each(function(idx){ + this.value = funcArg(this, value, idx, this.value) + }) + }, + offset: function(coordinates){ + if (coordinates) return this.each(function(index){ + var $this = $(this), + coords = funcArg(this, coordinates, index, $this.offset()), + parentOffset = $this.offsetParent().offset(), + props = { + top: coords.top - parentOffset.top, + left: coords.left - parentOffset.left + } + + if ($this.css('position') == 'static') props['position'] = 'relative' + $this.css(props) + }) + if (this.length==0) return null + var obj = this[0].getBoundingClientRect() + return { + left: obj.left + window.pageXOffset, + top: obj.top + window.pageYOffset, + width: obj.width, + height: obj.height + } + }, + css: function(property, value){ + if (arguments.length < 2 && typeof property == 'string') + return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property)) + + var css = '' + for (key in property) + if (!property[key] && property[key] !== 0) + this.each(function(){ this.style.removeProperty(dasherize(key)) }) + else + css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';' + + if (typeof property == 'string') + if (!value && value !== 0) + this.each(function(){ this.style.removeProperty(dasherize(property)) }) + else + css = dasherize(property) + ":" + maybeAddPx(property, value) + + return this.each(function(){ this.style.cssText += ';' + css }) + }, + index: function(element){ + return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]) + }, + hasClass: function(name){ + return emptyArray.some.call(this, function(el){ + return this.test(className(el)) + }, classRE(name)) + }, + addClass: function(name){ + return this.each(function(idx){ + classList = [] + var cls = className(this), newName = funcArg(this, name, idx, cls) + newName.split(/\s+/g).forEach(function(klass){ + if (!$(this).hasClass(klass)) classList.push(klass) + }, this) + classList.length && className(this, cls + (cls ? " " : "") + classList.join(" ")) + }) + }, + removeClass: function(name){ + return this.each(function(idx){ + if (name === undefined) return className(this, '') + classList = className(this) + funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){ + classList = classList.replace(classRE(klass), " ") + }) + className(this, classList.trim()) + }) + }, + toggleClass: function(name, when){ + return this.each(function(idx){ + var newName = funcArg(this, name, idx, className(this)) + ;(when === undefined ? !$(this).hasClass(newName) : when) ? + $(this).addClass(newName) : $(this).removeClass(newName) + }) + }, + scrollTop: function(){ + if (!this.length) return + return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY + }, + position: function() { + if (!this.length) return + + var elem = this[0], + // Get *real* offsetParent + offsetParent = this.offsetParent(), + // Get correct offsets + offset = this.offset(), + parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset() + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( $(elem).css('margin-top') ) || 0 + offset.left -= parseFloat( $(elem).css('margin-left') ) || 0 + + // Add offsetParent borders + parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0 + parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0 + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + } + }, + offsetParent: function() { + return this.map(function(){ + var parent = this.offsetParent || document.body + while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static") + parent = parent.offsetParent + return parent + }) + } + } + + // for now + $.fn.detach = $.fn.remove + + // Generate the `width` and `height` functions + ;['width', 'height'].forEach(function(dimension){ + $.fn[dimension] = function(value){ + var offset, Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() }) + if (value === undefined) return this[0] == window ? window['inner' + Dimension] : + this[0] == document ? document.documentElement['offset' + Dimension] : + (offset = this.offset()) && offset[dimension] + else return this.each(function(idx){ + var el = $(this) + el.css(dimension, funcArg(this, value, idx, el[dimension]())) + }) + } + }) + + function traverseNode(node, fun) { + fun(node) + for (var key in node.childNodes) traverseNode(node.childNodes[key], fun) + } + + // Generate the `after`, `prepend`, `before`, `append`, + // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods. + adjacencyOperators.forEach(function(operator, operatorIndex) { + var inside = operatorIndex % 2 //=> prepend, append + + $.fn[operator] = function(){ + // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings + var nodes = $.map(arguments, function(n){ return isObject(n) ? n : zepto.fragment(n) }), + parent, copyByClone = this.length > 1 + if (nodes.length < 1) return this + + return this.each(function(_, target){ + parent = inside ? target : target.parentNode + + // convert all methods to a "before" operation + target = operatorIndex == 0 ? target.nextSibling : + operatorIndex == 1 ? target.firstChild : + operatorIndex == 2 ? target : + null + + nodes.forEach(function(node){ + if (copyByClone) node = node.cloneNode(true) + else if (!parent) return $(node).remove() + + traverseNode(parent.insertBefore(node, target), function(el){ + if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && + (!el.type || el.type === 'text/javascript') && !el.src) + window['eval'].call(window, el.innerHTML) + }) + }) + }) + } + + // after => insertAfter + // prepend => prependTo + // before => insertBefore + // append => appendTo + $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){ + $(html)[operator](this) + return this + } + }) + + zepto.Z.prototype = $.fn + + // Export internal API functions in the `$.zepto` namespace + zepto.uniq = uniq + zepto.deserializeValue = deserializeValue + $.zepto = zepto + + return $ +})() + +// If `$` is not yet defined, point it to `Zepto` +window.Zepto = Zepto +'$' in window || (window.$ = Zepto) diff --git a/frontend/gamma/js/main_iPhone.js b/frontend/gamma/js/main.mobile.js index 0644f68..60a32fa 100644 --- a/frontend/gamma/js/main_iPhone.js +++ b/frontend/gamma/js/main.mobile.js @@ -1,57 +1,64 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ function _pm_logEvent(anEvent) { // console.log("####", anEvent); anEvent.preventDefault(); } function handleGenericDeferredError(anError) { var result; if (anError instanceof MochiKit.Async.CancelledError) { result = anError; } else { MochiKit.Logging.logError("## MainController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack); result = new MochiKit.Async.CancelledError(anError); } return result; } Clipperz.PM.RunTime = {}; function run() { - MochiKit.DOM.removeElement('javaScriptAlert'); Clipperz.PM.Strings.Languages.initSetup(); - Clipperz.PM.RunTime.mainController = new Clipperz.PM.UI.iPhone.Controllers.MainController(); - Clipperz.PM.RunTime.mainController.run(false); + Clipperz.PM.RunTime.mainController = new Clipperz.PM.UI.Mobile.Controllers.MainController(); + Clipperz.PM.RunTime.mainController.run(); } +// if (navigator.standalone == false) { +// window.localStorage.setItem('PIN', '1234'); +// alert("Saved PIN"); +// } else { +// alert (window.localStorage.getItem('PIN')); +// } + + MochiKit.DOM.addLoadEvent(run); diff --git a/frontend/gamma/properties/creditsAndCopyrights.txt b/frontend/gamma/properties/creditsAndCopyrights.txt index 598440d..59f0f0a 100644 --- a/frontend/gamma/properties/creditsAndCopyrights.txt +++ b/frontend/gamma/properties/creditsAndCopyrights.txt @@ -1,336 +1,344 @@ @clipperz.license@ =============================================================================== This application is build using also the following libraries # MochiKit (http://www.mochikit.com) - repository: @mochikit.repository@ (revision: @mochikit.version@) - * Software licence: http://svn.mochikit.com/mochikit/trunk/licence.txt + * Software licence: https://github.com/mochi/mochikit/blob/master/LICENSE.txt | MochiKit is dual-licensed software. It is available under the terms of the | MIT License, or the Academic Free License version 2.1. The full text of | each license is included below. - | + | + | The MochiKit.Style.getElementPosition function is adapted from + | YAHOO.util.Dom.getXY v0.9.0. which is copyrighted by Yahoo! Inc. and + | licensed under the BSD license also reproduced in full below. + | | MIT License | =========== - | + | | Copyright (c) 2005 Bob Ippolito. All rights reserved. - | - | Permission is hereby granted, free of charge, to any person obtaining a copy of this - | software and associated documentation files (the "Software"), to deal in the Software - | without restriction, including without limitation the rights to use, copy, modify, - | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to - | permit persons to whom the Software is furnished to do so, subject to the following - | conditions: - | - | The above copyright notice and this permission notice shall be included in all copies - | or substantial portions of the Software. - | - | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - | PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE - | FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - | DEALINGS IN THE SOFTWARE. - | - | + | + | Permission is hereby granted, free of charge, to any person obtaining a copy + | of this software and associated documentation files (the "Software"), to deal + | in the Software without restriction, including without limitation the rights + | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + | copies of the Software, and to permit persons to whom the Software is furnished + | to do so, subject to the following conditions: + | + | The above copyright notice and this permission notice shall be included in all + | copies or substantial portions of the Software. + | + | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + | + | | Academic Free License v. 2.1 | ============================ - | + | | Copyright (c) 2005 Bob Ippolito. All rights reserved. - | - | This Academic Free License (the "License") applies to any original work of authorship (the - | "Original Work") whose owner (the "Licensor") has placed the following notice immediately - | following the copyright notice for the Original Work: - | + | + | This Academic Free License (the "License") applies to any original work of + | authorship (the "Original Work") whose owner (the "Licensor") has placed the + | following notice immediately following the copyright notice for the Original Work: + | | Licensed under the Academic Free License version 2.1 - | - | 1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, - | non-exclusive, perpetual, sublicenseable license to do the following: + | + | 1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, + | non-exclusive, perpetual, sublicenseable license to do the following: | | a) to reproduce the Original Work in copies; | b) to prepare derivative works ("Derivative Works") based upon the Original Work; | c) to distribute copies of the Original Work and Derivative Works to the public; | d) to perform the Original Work publicly; and | e) to display the Original Work publicly. - | - | 2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, - | non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled - | by the Licensor that are embodied in the Original Work as furnished by the Licensor, to - | make, use, sell and offer for sale the Original Work and Derivative Works. - | - | 3) Grant of Source Code License. The term "Source Code" means the preferred form of the - | Original Work for making modifications to it and all available documentation describing - | how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy - | of the Source Code of the Original Work along with each copy of the Original Work that - | Licensor distributes. Licensor reserves the right to satisfy this obligation by placing - | a machine-readable copy of the Source Code in an information repository reasonably - | calculated to permit inexpensive and convenient access by You for as long as Licensor - | continues to distribute the Original Work, and by publishing the address of that information - | repository in a notice immediately following the copyright notice that applies to the Original - | Work. - | - | 4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any - | contributors to the Original Work, nor any of their trademarks or service marks, may be used - | to endorse or promote products derived from this Original Work without express prior written - | permission of the Licensor. Nothing in this License shall be deemed to grant any rights to - | trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor - | except as expressly stated herein. No patent license is granted to make, use, sell or offer - | to sell embodiments of any patent claims other than the licensed claims defined in Section 2. - | No right is granted to the trademarks of Licensor even if such marks are included in the Original - | Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under - | different terms from this License any Original Work that Licensor otherwise would have a right - | to license. - | - | 5) This section intentionally omitted. - | - | 6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You - | create, all copyright, patent or trademark notices from the Source Code of the Original Work, - | as well as any notices of licensing and any descriptive text identified therein as an "Attribution - | Notice." You must cause the Source Code for any Derivative Works that You create to carry a - | prominent Attribution Notice reasonably calculated to inform recipients that You have modified the - | Original Work. - | - | 7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and - | to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or - | are sublicensed to You under the terms of this License with the permission of the contributor(s) - | of those copyrights and patent rights. Except as expressly stated in the immediately proceeding - | sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, - | either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, - | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL - | WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license - | to Original Work is granted hereunder except under this disclaimer. - | - | 8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including - | negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, - | special, incidental, or consequential damages of any character arising as a result of this License or the - | use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, - | computer failure or malfunction, or any and all other commercial damages or losses. This limitation of - | liability shall not apply to liability for death or personal injury resulting from Licensor's negligence - | to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or - | limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - | - | 9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must - | make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of - | this License. Nothing else but this License (or another written agreement between Licensor and You) grants - | You permission to create Derivative Works based upon the Original Work or to exercise any of the rights - | granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another - | written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent - | laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted - | to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. - | - | 10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise - | any of the rights granted to You by this License as of the date You commence an action, including a cross-claim - | or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This - | termination provision shall not apply for an action alleging patent infringement by combinations of the Original - | Work with other software or hardware. - | - | 11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in - | the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, - | and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United - | Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the - | Original Work outside the scope of this License or after its termination shall be subject to the requirements - | and penalties of the U.S. Copyright Act, 17 U.S.C. ¬ß 101 et seq., the equivalent laws of other countries, - | and international treaty. This section shall survive the termination of this License. - | - | 12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages - | relating thereto, the prevailing party shall be entitled to recover its costs and expenses, - | including, without limitation, reasonable attorneys' fees and costs incurred in connection - | with such action, including any appeal of such action. This section shall survive the - | termination of this License. - | - | 13) Miscellaneous. This License represents the complete agreement concerning the subject - | matter hereof. If any provision of this License is held to be unenforceable, such provision - | shall be reformed only to the extent necessary to make it enforceable. - | - | 14) Definition of "You" in This License. "You" throughout this License, whether in upper - | or lower case, means an individual or a legal entity exercising rights under, and complying - | with all of the terms of, this License. For legal entities, "You" includes any entity that - | controls, is controlled by, or is under common control with you. For purposes of this - | definition, "control" means (i) the power, direct or indirect, to cause the direction or - | management of such entity, whether by contract or otherwise, or (ii) ownership of fifty - | percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - | - | 15) Right to Use. You may use the Original Work in all ways not otherwise restricted or - | conditioned by this License or by law, and Licensor promises not to interfere with or be - | responsible for such uses by You. - | - | This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission - | is hereby granted to copy and distribute this license without modification. This license - | may not be modified without the express written permission of its copyright owner. + | + | 2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, + | non-exclusive, perpetual, sublicenseable license, under patent claims owned or + | controlled by the Licensor that are embodied in the Original Work as furnished by + | the Licensor, to make, use, sell and offer for sale the Original Work and Derivative + | Works. + | + | 3) Grant of Source Code License. The term "Source Code" means the preferred form of + | the Original Work for making modifications to it and all available documentation + | describing how to modify the Original Work. Licensor hereby agrees to provide a + | machine-readable copy of the Source Code of the Original Work along with each copy + | of the Original Work that Licensor distributes. Licensor reserves the right to satisfy + | this obligation by placing a machine-readable copy of the Source Code in an information + | repository reasonably calculated to permit inexpensive and convenient access by You for + | as long as Licensor continues to distribute the Original Work, and by publishing the + | address of that information repository in a notice immediately following the copyright + | notice that applies to the Original Work. + | + | 4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any + | contributors to the Original Work, nor any of their trademarks or service marks, may + | be used to endorse or promote products derived from this Original Work without express + | prior written permission of the Licensor. Nothing in this License shall be deemed to + | grant any rights to trademarks, copyrights, patents, trade secrets or any other + | intellectual property of Licensor except as expressly stated herein. No patent license + | is granted to make, use, sell or offer to sell embodiments of any patent claims other + | than the licensed claims defined in Section 2. No right is granted to the trademarks + | of Licensor even if such marks are included in the Original Work. Nothing in this + | License shall be interpreted to prohibit Licensor from licensing under different terms + | from this License any Original Work that Licensor otherwise would have a right to license. + | + | 5) This section intentionally omitted. + | + | 6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You + | create, all copyright, patent or trademark notices from the Source Code of the Original + | Work, as well as any notices of licensing and any descriptive text identified therein as + | an "Attribution Notice." You must cause the Source Code for any Derivative Works that You + | create to carry a prominent Attribution Notice reasonably calculated to inform recipients + | that You have modified the Original Work. + | + | 7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright + | in and to the Original Work and the patent rights granted herein by Licensor are owned + | by the Licensor or are sublicensed to You under the terms of this License with the + | permission of the contributor(s) of those copyrights and patent rights. Except as expressly + | stated in the immediately proceeding sentence, the Original Work is provided under this + | License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, + | without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A + | PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. + | This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to + | Original Work is granted hereunder except under this disclaimer. + | + | 8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort + | (including negligence), contract, or otherwise, shall the Licensor be liable to any person + | for any direct, indirect, special, incidental, or consequential damages of any character + | arising as a result of this License or the use of the Original Work including, without + | limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, + | or any and all other commercial damages or losses. This limitation of liability shall not + | apply to liability for death or personal injury resulting from Licensor's negligence to + | the extent applicable law prohibits such limitation. Some jurisdictions do not allow the + | exclusion or limitation of incidental or consequential damages, so this exclusion and + | limitation may not apply to You. + | + | 9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative + | Work, You must make a reasonable effort under the circumstances to obtain the express + | assent of recipients to the terms of this License. Nothing else but this License (or + | another written agreement between Licensor and You) grants You permission to create + | Derivative Works based upon the Original Work or to exercise any of the rights granted in + | Section 1 herein, and any attempt to do so except under the terms of this License (or + | another written agreement between Licensor and You) is expressly prohibited by U.S. copyright + | law, the equivalent laws of other countries, and by international treaty. Therefore, by + | exercising any of the rights granted to You in Section 1 herein, You indicate Your + | acceptance of this License and all of its terms and conditions. + | + | 10) Termination for Patent Action. This License shall terminate automatically and You may no + | longer exercise any of the rights granted to You by this License as of the date You + | commence an action, including a cross-claim or counterclaim, against Licensor or any + | licensee alleging that the Original Work infringes a patent. This termination provision + | shall not apply for an action alleging patent infringement by combinations of the Original + | Work with other software or hardware. + | + | 11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be + | brought only in the courts of a jurisdiction wherein the Licensor resides or in which + | Licensor conducts its primary business, and under the laws of that jurisdiction excluding + | its conflict-of-law provisions. The application of the United Nations Convention on Contracts + | for the International Sale of Goods is expressly excluded. Any use of the Original Work + | outside the scope of this License or after its termination shall be subject to the + | requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent + | laws of other countries, and international treaty. This section shall survive the termination + | of this License. + | + | 12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages + | relating thereto, the prevailing party shall be entitled to recover its costs and expenses, + | including, without limitation, reasonable attorneys' fees and costs incurred in connection + | with such action, including any appeal of such action. This section shall survive the + | termination of this License. + | + | 13) Miscellaneous. This License represents the complete agreement concerning the subject matter + | hereof. If any provision of this License is held to be unenforceable, such provision shall + | be reformed only to the extent necessary to make it enforceable. + | + | 14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower + | case, means an individual or a legal entity exercising rights under, and complying with all + | of the terms of, this License. For legal entities, "You" includes any entity that controls, + | is controlled by, or is under common control with you. For purposes of this definition, + | "control" means (i) the power, direct or indirect, to cause the direction or management of + | such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or + | more of the outstanding shares, or (iii) beneficial ownership of such entity. + | + | 15) Right to Use. You may use the Original Work in all ways not otherwise restricted or + | conditioned by this License or by law, and Licensor promises not to interfere with or be + | responsible for such uses by You. + | + | This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is + | hereby granted to copy and distribute this license without modification. This license may not + | be modified without the express written permission of its copyright owner. + | + | + | BSD License + | =========== + | + | Copyright (c) 2006, Yahoo! Inc. + | All rights reserved. + | + | Redistribution and use of this software in source and binary forms, with or without modification, + | are permitted provided that the following conditions are met: + | + | * Redistributions of source code must retain the above copyright notice, this list of + | conditions and the following disclaimer. + | * Redistributions in binary form must reproduce the above copyright notice, this list of + | conditions and the following disclaimer in the documentation and/or other materials provided + | with the distribution. + | * Neither the name of Yahoo! Inc. nor the names of its contributors may be used to endorse or + | promote products derived from this software without specific prior written permission of + | Yahoo! Inc. + | + | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Yahoo! UI Library (http://developer.yahoo.com/yui/) - package version: 0.12 Copyright © 2005-2006 Yahoo! Inc. All rights reserved * Copyright notes: http://docs.yahoo.com/info/copyright/copyright.html * Software licence: http://developer.yahoo.com/yui/license.txt | Software License Agreement (BSD License) | | Copyright (c) 2006, Yahoo! Inc. | All rights reserved. | | Redistribution and use of this software in source and binary forms, with or without modification, are | permitted provided that the following conditions are met: | | * Redistributions of source code must retain the above | copyright notice, this list of conditions and the | following disclaimer. | | * Redistributions in binary form must reproduce the above | copyright notice, this list of conditions and the | following disclaimer in the documentation and/or other | materials provided with the distribution. | | * Neither the name of Yahoo! Inc. nor the names of its | contributors may be used to endorse or promote products | derived from this software without specific prior | written permission of Yahoo! Inc. | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # YUI-ext (http://www.yui-ext.com) - repository: http://yui-ext.googlecode.com/svn/trunk/ (revision: 120) * Software licence: http://yui-ext.googlecode.com/svn/trunk/src/licence.txt | yui-ext | Copyright (c) 2006, Jack Slocum | All rights reserved. | | Redistribution and use in source and binary forms, with or without modification, | are permitted provided that the following conditions are met: | | * Redistributions of source code must retain the above copyright notice, | this list of conditions and the following disclaimer. | * Redistributions in binary form must reproduce the above copyright notice, | this list of conditions and the following disclaimer in the documentation | and/or other materials provided with the distribution. | * Neither the name yui-ext nor the names of its contributors | may be used to endorse or promote products derived from this software | without specific prior written permission. | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# iUI: iPhone User Interface Framework (http://code.google.com/p/iui/) - - package version: 282 - - Copyright (c) 2007-2009, iUI Project Members - - | All rights reserved. - | - | Redistribution and use in source and binary forms, with or without modification, - | are permitted provided that the following conditions are met: - | - | * Redistributions of source code must retain the above copyright notice, this - | list of conditions and the following disclaimer. - | * Redistributions in binary form must reproduce the above copyright notice, - | this list of conditions and the following disclaimer in the documentation - | and/or other materials provided with the distribution. - | * Neither the name of the iUI Project nor the names of its contributors may - | be used to endorse or promote products derived from this software without - | specific prior written permission. - | - | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - # Big Integer Library v. 5.0 - code downloaded on March 5, 2007 from http://www.leemon.com/crypto/BigInt.js | Big Integer Library v. 5.0 | Created 2000, last modified 2006 | Leemon Baird | www.leemon.com | | This file is public domain. You can use it for any purpose without restriction. | I do not guarantee that it is correct, so use it at your own risk. If you use | it for something interesting, I'd appreciate hearing about it. If you find | any bugs or make any improvements, I'd appreciate hearing about those too. | It would also be nice if my name and address were left in the comments. | But none of that is required. # JSON library - code downloaded on October 13, 2008 from http://www.JSON.org/json2.js | http://www.JSON.org/json2.js | 2008-09-01 | | Public Domain. | | NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. | | See http://www.JSON.org/js.html # Other code snippets used in the first demo of the program, and still present just to be able to read record previously written using these same functions: - Code downloaded on March 30, 2006 from http://anmar.eu.org/projects/jssha2/files/jssha2-0.3.zip File used: jsSha2/sha256.js | A JavaScript implementation of the Secure Hash Algorithm, SHA-256 | Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/ | Distributed under the BSD License | Some bits taken from Paul Johnston's SHA-1 implementation - Code downloaded on March 30, 2006 from http://www.fourmilab.ch/javascrypt/javascrypt.zip Files used: entropy.js, aesprng.js, md5.js, aes.js, utf-8.js - Code downloaded on April 26, 2006 from http://pajhome.org.uk/crypt/md5/md5.js | A JavaScript implementation of the RSA Data Security, Inc. MD5 Message | Digest Algorithm, as defined in RFC 1321. | Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. | Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | Distributed under the BSD License | See http://pajhome.org.uk/crypt/md5 for more info. # General notes The code in this page has been processed with a JavaScript compressor and is thus difficult to read. To get the exact version of the code used to build this application you can take a look here: - http://www.clipperz.com/security_privacy/security_code_review diff --git a/frontend/gamma/properties/gamma.properties.json b/frontend/gamma/properties/gamma.properties.json index c847812..eec4194 100644 --- a/frontend/gamma/properties/gamma.properties.json +++ b/frontend/gamma/properties/gamma.properties.json @@ -1,191 +1,191 @@ { "copyright.values": { - "mochikit.repository": "https://github.com/mochi/mochikit.git", - "mochikit.version": "fe8d17bb9ac0a4e5ad4a8d5c2c94a6fac1c92d75" + "mochikit.repository": "https://github.com/mochi/mochikit.git", + "mochikit.version": "fe8d17bb9ac0a4e5ad4a8d5c2c94a6fac1c92d75" }, "html.template": "index_template.html", "js": [ "MochiKit/Base.js", "MochiKit/Iter.js", "MochiKit/Logging.js", "-- MochiKit/DateTime.js", "MochiKit/Format.js", "MochiKit/Async.js", "MochiKit/DOM.js", "MochiKit/Style.js", "MochiKit/LoggingPane.js", "MochiKit/Color.js", "MochiKit/Signal.js", "MochiKit/Position.js", "MochiKit/Selector.js", "MochiKit/Visual.js", "JSON/json2.js", "Clipperz/YUI/Utils.js", "Clipperz/YUI/DomHelper.js", "Clipperz/ByteArray.js", "Clipperz/Base.js", "Clipperz/Async.js", "Clipperz/CSVProcessor.js", "Clipperz/KeePassExportProcessor.js", "Clipperz/Date.js", "Clipperz/DOM.js", "Clipperz/Logging.js", "Clipperz/Signal.js", "Clipperz/Style.js", "Clipperz/Visual.js", "Clipperz/Set.js", "-- Clipperz/Profile.js", "Clipperz/KeyValueObjectStore.js", "Clipperz/Crypto/SHA.js", "Clipperz/Crypto/AES.js", "Clipperz/Crypto/PRNG.js", "Clipperz/Crypto/BigInt.js", "Clipperz/Crypto/Base.js", "Clipperz/Crypto/SRP.js", "Clipperz/Crypto/RSA.js", "Clipperz/PM/Strings/Strings_defaults.js", "Clipperz/PM/Strings/Strings_en-US.js", "-- # Clipperz/PM/Strings/Strings_en-GB.js", "-- # Clipperz/PM/Strings/Strings_en-CA.js", "-- Clipperz/PM/Strings/Strings_it-IT.js", "-- Clipperz/PM/Strings/Strings_pt-BR.js", "-- # Clipperz/PM/Strings/Strings_pt-PT.js", "-- Clipperz/PM/Strings/Strings_ja-JP.js", "-- Clipperz/PM/Strings/Strings_zh-CN.js", "-- Clipperz/PM/Strings/Strings_es-ES.js", "-- Clipperz/PM/Strings/Strings_fr-FR.js", "-- # Clipperz/PM/Strings/Strings_de-DE.js", "-- # Clipperz/PM/Strings/Strings_el-GR.js", "-- # Clipperz/PM/Strings/Strings_ru-RU.js", "-- # Clipperz/PM/Strings/Strings_he-IL.js", "Clipperz/PM/Strings.js", "-- Clipperz/PM/Strings/MessagePanelConfigurations.js", "Clipperz/PM/Date.js", "Clipperz/PM/Toll.js", "Clipperz/PM/Proxy.js", "Clipperz/PM/Proxy/Proxy.JSON.js", "Clipperz/PM/Proxy/Proxy.Offline.js", "Clipperz/PM/Proxy/Proxy.Offline.DataStore.js", "Clipperz/PM/Connection.js", "Clipperz/PM/Crypto.js", "Clipperz/PM/BookmarkletProcessor.js", "Clipperz/PM/DataModel/EncryptedRemoteObject.js", "Clipperz/PM/DataModel/User.js", "Clipperz/PM/DataModel/User.Header.Legacy.js", "Clipperz/PM/DataModel/User.Header.RecordIndex.js", "Clipperz/PM/DataModel/User.Header.Preferences.js", "Clipperz/PM/DataModel/User.Header.OneTimePasswords.js", "Clipperz/PM/DataModel/Record.js", "Clipperz/PM/DataModel/Record.Version.js", "Clipperz/PM/DataModel/Record.Version.Field.js", "Clipperz/PM/DataModel/DirectLogin.js", "Clipperz/PM/DataModel/DirectLoginInput.js", "Clipperz/PM/DataModel/DirectLoginBinding.js", "Clipperz/PM/DataModel/DirectLoginFormValue.js", "Clipperz/PM/DataModel/OneTimePassword.js", "Clipperz/PM/UI/Canvas/Marks/exclamationMark.js", "Clipperz/PM/UI/Canvas/Marks/questionMark.js", "Clipperz/PM/UI/Canvas/Marks/info.js", "Clipperz/PM/UI/Canvas/Features/store.js", "Clipperz/PM/UI/Canvas/Features/protect.js", "Clipperz/PM/UI/Canvas/Features/directLogin.js", "Clipperz/PM/UI/Canvas/Features/share.js", "Clipperz/PM/UI/Canvas/Star/normal.js", "Clipperz/PM/UI/Canvas/CoverActions/look.js", "Clipperz/PM/UI/Canvas/CoverActions/download.js", "Clipperz/PM/UI/Canvas/Tips/open.js", "Clipperz/PM/UI/Canvas/Tips/close.js", "Clipperz/PM/UI/Canvas/RegisterButton/normal.js", "Clipperz/PM/UI/Canvas/Logo/normal.js", "Clipperz/PM/UI/Canvas/GraphicFunctions.js", "Clipperz/PM/UI/Common/Components/BaseComponent.js", "Clipperz/PM/UI/Common/Components/Button.js", "Clipperz/PM/UI/Common/Components/ComponentSlot.js", "Clipperz/PM/UI/Common/Components/FaviconComponent.js", "Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js", "Clipperz/PM/UI/Common/Components/ProgressBar.js", "Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js", "Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js", "Clipperz/PM/UI/Common/Components/TabPanelComponent.js", "Clipperz/PM/UI/Common/Components/Tooltip.js", "Clipperz/PM/UI/Common/Components/TranslatorWidget.js", "Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js", "Clipperz/PM/UI/Common/Controllers/ProgressBarController.js", "Clipperz/PM/UI/Common/Controllers/TabPanelController.js", "Clipperz/PM/UI/Common/Controllers/WizardController.js", "Clipperz/PM/UI/Web/Components/Page.js", "Clipperz/PM/UI/Web/Components/PageHeader.js", "Clipperz/PM/UI/Web/Components/PageFooter.js", "Clipperz/PM/UI/Web/Components/LoginPage.js", "Clipperz/PM/UI/Web/Components/LoginForm.js", "Clipperz/PM/UI/Web/Components/LoginProgress.js", "Clipperz/PM/UI/Web/Components/AppPage.js", "Clipperz/PM/UI/Web/Components/UserInfoBox.js", "Clipperz/PM/UI/Web/Components/TabSidePanel.js", "Clipperz/PM/UI/Web/Components/GridComponent.js", "Clipperz/PM/UI/Web/Components/ColumnManager.js", "Clipperz/PM/UI/Web/Components/TextColumnManager.js", "Clipperz/PM/UI/Web/Components/FaviconColumnManager.js", "Clipperz/PM/UI/Web/Components/ImageColumnManager.js", "Clipperz/PM/UI/Web/Components/DateColumnManager.js", "Clipperz/PM/UI/Web/Components/LinkColumnManager.js", "Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js", "Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js", "Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js", "Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js", "Clipperz/PM/UI/Web/Components/AccountPanel.js", "Clipperz/PM/UI/Web/Components/DataPanel.js", "Clipperz/PM/UI/Web/Components/ToolsPanel.js", "Clipperz/PM/UI/Web/Components/RulerComponent.js", "Clipperz/PM/UI/Web/Components/CardDialogComponent.js", "Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js", "Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js", "Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js", "Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js", "Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js", "Clipperz/PM/UI/Web/Components/BookmarkletComponent.js", "Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js", "Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js", "Clipperz/PM/UI/Web/Components/PasswordTooltip.js", "Clipperz/PM/UI/Web/Controllers/MainController.js", "Clipperz/PM/UI/Web/Controllers/LoginController.js", "Clipperz/PM/UI/Web/Controllers/AppController.js", "Clipperz/PM/UI/Web/Controllers/FilterController.js", "Clipperz/PM/UI/Web/Controllers/GridController.js", "Clipperz/PM/UI/Web/Controllers/CardsController.js", "Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js", "Clipperz/PM/UI/Web/Controllers/CardDialogController.js", "Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js", "Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js", "main.js" ], "css": [ "web.css" ] } diff --git a/frontend/gamma/properties/mobile.properties.json b/frontend/gamma/properties/mobile.properties.json index e26b95f..bdb2d07 100644 --- a/frontend/gamma/properties/mobile.properties.json +++ b/frontend/gamma/properties/mobile.properties.json @@ -1,119 +1,142 @@ { "copyright.values": { - "mochikit.repository": "http://svn.mochikit.com/mochikit/trunk/", - "mochikit.version": "1506" + "mochikit.repository": "https://github.com/mochi/mochikit.git", + "mochikit.version": "fe8d17bb9ac0a4e5ad4a8d5c2c94a6fac1c92d75" }, + + "html.template": "mobile_template.html", + "js": [ "MochiKit/Base.js", "MochiKit/Iter.js", "MochiKit/Logging.js", - "-- MochiKit/DateTime.js", + "MochiKit/DateTime.js", "MochiKit/Format.js", "MochiKit/Async.js", "MochiKit/DOM.js", "MochiKit/Style.js", "MochiKit/LoggingPane.js", - "MochiKit/Color.js", + "-- MochiKit/Color.js", "MochiKit/Signal.js", - "MochiKit/Position.js", + "-- MochiKit/Position.js", "MochiKit/Selector.js", - "MochiKit/Visual.js", + "-- MochiKit/Visual.js", "JSON/json2.js", "Clipperz/YUI/Utils.js", "Clipperz/YUI/DomHelper.js", "Clipperz/ByteArray.js", "Clipperz/Base.js", "Clipperz/Async.js", "-- Clipperz/CSVProcessor.js", "-- Clipperz/KeePassExportProcessor.js", "Clipperz/Date.js", "Clipperz/DOM.js", "Clipperz/Logging.js", "Clipperz/Signal.js", - "Clipperz/Style.js", - "Clipperz/Visual.js", + "-- Clipperz/Style.js", + "-- Clipperz/Visual.js", "Clipperz/Set.js", "Clipperz/KeyValueObjectStore.js", "Clipperz/Crypto/SHA.js", "Clipperz/Crypto/AES.js", "Clipperz/Crypto/PRNG.js", "Clipperz/Crypto/BigInt.js", "Clipperz/Crypto/Base.js", "Clipperz/Crypto/SRP.js", "Clipperz/Crypto/RSA.js", "Clipperz/PM/Strings/Strings_defaults.js", "Clipperz/PM/Strings/Strings_en-US.js", "-- # Clipperz/PM/Strings/Strings_en-GB.js", "-- # Clipperz/PM/Strings/Strings_en-CA.js", "-- Clipperz/PM/Strings/Strings_it-IT.js", "-- Clipperz/PM/Strings/Strings_pt-BR.js", "-- # Clipperz/PM/Strings/Strings_pt-PT.js", "-- Clipperz/PM/Strings/Strings_ja-JP.js", "-- Clipperz/PM/Strings/Strings_zh-CN.js", "-- Clipperz/PM/Strings/Strings_es-ES.js", "-- Clipperz/PM/Strings/Strings_fr-FR.js", "-- # Clipperz/PM/Strings/Strings_de-DE.js", "-- # Clipperz/PM/Strings/Strings_el-GR.js", "-- # Clipperz/PM/Strings/Strings_ru-RU.js", "-- # Clipperz/PM/Strings/Strings_he-IL.js", "Clipperz/PM/Strings.js", "-- Clipperz/PM/Strings/MessagePanelConfigurations.js", "Clipperz/PM/Date.js", "Clipperz/PM/Toll.js", "Clipperz/PM/Proxy.js", "Clipperz/PM/Proxy/Proxy.JSON.js", + "-- Clipperz/PM/Proxy/Proxy.OfflineCache.js", "Clipperz/PM/Proxy/Proxy.Offline.js", + "Clipperz/PM/Proxy/Proxy.Offline.DataStore.js", + "Clipperz/PM/Connection.js", "Clipperz/PM/Crypto.js", - "-- Clipperz/PM/BookmarkletProcessor.js", + "Clipperz/PM/PIN.js", "Clipperz/PM/DataModel/EncryptedRemoteObject.js", "Clipperz/PM/DataModel/User.js", "Clipperz/PM/DataModel/User.Header.Legacy.js", "Clipperz/PM/DataModel/User.Header.RecordIndex.js", "Clipperz/PM/DataModel/User.Header.Preferences.js", "Clipperz/PM/DataModel/User.Header.OneTimePasswords.js", "Clipperz/PM/DataModel/Record.js", "Clipperz/PM/DataModel/Record.Version.js", "Clipperz/PM/DataModel/Record.Version.Field.js", "Clipperz/PM/DataModel/DirectLogin.js", "Clipperz/PM/DataModel/DirectLoginInput.js", "Clipperz/PM/DataModel/DirectLoginBinding.js", "Clipperz/PM/DataModel/DirectLoginFormValue.js", "Clipperz/PM/DataModel/OneTimePassword.js", + "Zepto/zepto.js", + "Zepto/ajax.js", + "Zepto/assets.js", + "Zepto/data.js", + "Zepto/detect.js", + "Zepto/event.js", + "Zepto/form.js", + "Zepto/fx.js", + "Zepto/fx_methods.js", + "Zepto/gesture.js", + "Zepto/polyfill.js", + "Zepto/selector.js", + "Zepto/stack.js", + "Zepto/touch.js", + + "JQTouch/jqtouch.js", + "Clipperz/PM/UI/Common/Components/BaseComponent.js", "-- Clipperz/PM/UI/Common/Components/Button.js", "Clipperz/PM/UI/Common/Components/ComponentSlot.js", "-- Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js", "Clipperz/PM/UI/Common/Components/ProgressBar.js", "-- Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js", "-- Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js", "-- Clipperz/PM/UI/Common/Components/TabPanelComponent.js", "-- Clipperz/PM/UI/Common/Components/Tooltip.js", "-- Clipperz/PM/UI/Common/Components/TranslatorWidget.js", "Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js", "Clipperz/PM/UI/Common/Controllers/ProgressBarController.js", "-- Clipperz/PM/UI/Common/Controllers/TabPanelController.js", - "Clipperz/PM/UI/iPhone/Components/LoginForm.js", - "Clipperz/PM/UI/iPhone/Components/CardList.js", - "Clipperz/PM/UI/iPhone/Components/CardDetail.js", + "Clipperz/PM/UI/Mobile/Components/LoginForm.js", + "Clipperz/PM/UI/Mobile/Components/CardList.js", + "-- Clipperz/PM/UI/Mobile/Components/CardDetail.js", - "Clipperz/PM/UI/iPhone/Controllers/MainController.js", + "Clipperz/PM/UI/Mobile/Controllers/MainController.js", - "main_iPhone.js" + "main.mobile.js" ], "css": [ - "clipperz/iPhone.css" + "mobile.css" ] }
\ No newline at end of file diff --git a/frontend/gamma/tests/tests/Clipperz/PM/PIN.html b/frontend/gamma/tests/tests/Clipperz/PM/PIN.html new file mode 100644 index 0000000..a08b286 --- a/dev/null +++ b/frontend/gamma/tests/tests/Clipperz/PM/PIN.html @@ -0,0 +1,66 @@ +<!-- + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +--> + +<html> +<head> + <title>Clipperz.PM.Proxy - TEST</title> + + <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script> + <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css"> + + <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script> +<!-- + <script type='text/javascript' src='../../../../js/Clipperz/PM/Toll.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script> +--> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/PIN.js'></script> + + <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script> + +</head> +<body> +<pre id="test"> + <script type="text/javascript" src="PIN.test.js"></script> +</pre> +</body> +</html> diff --git a/frontend/gamma/tests/tests/Clipperz/PM/PIN.test.js b/frontend/gamma/tests/tests/Clipperz/PM/PIN.test.js new file mode 100644 index 0000000..ed795dd --- a/dev/null +++ b/frontend/gamma/tests/tests/Clipperz/PM/PIN.test.js @@ -0,0 +1,97 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); + +Clipperz.PM.PIN['CREDENTIALS'] = 'TEST.CLIPPERZ.CREDENTIALS'; +Clipperz.PM.PIN['FAILURE_COUNT'] = 'TEST.CLIPPERZ.FAILED_LOGIN_COUNT'; + + +var tests = { + + //------------------------------------------------------------------------- + + 'clearCredentials': function () { + localStorage.removeItem(Clipperz.PM.PIN['CREDENTIALS']); + localStorage.removeItem(Clipperz.PM.PIN['FAILURE_COUNT']); + }, + + //------------------------------------------------------------------------- + + 'isSet': function () { + tests.clearCredentials(); + + is(false, Clipperz.PM.PIN.isSet(), "after cleaning all values, credentials should not be set"); + + Clipperz.PM.PIN.setCredentialsWithPIN("1234", {'username':'joe', 'passphrase':'eoj'}); + is(true, Clipperz.PM.PIN.isSet(), "once saved, they should be found"); + }, + + 'recordFailedAttempt': function () { + tests.clearCredentials(); + + Clipperz.PM.PIN.setCredentialsWithPIN("1234", {'username':'joe', 'passphrase':'eoj'}); + is(true, Clipperz.PM.PIN.isSet(), "once saved, they should be found"); + Clipperz.PM.PIN.recordFailedAttempt(); + is(true, Clipperz.PM.PIN.isSet(), "1st wrong PIN -> keep credentials"); + Clipperz.PM.PIN.recordFailedAttempt(); + is(true, Clipperz.PM.PIN.isSet(), "2nd wrong PIN -> keep credentials"); + Clipperz.PM.PIN.recordFailedAttempt(); + is(false, Clipperz.PM.PIN.isSet(), "3rd wrong PIN -> REMOVE credentials"); + + Clipperz.PM.PIN.setCredentialsWithPIN("1234", {'username':'joe', 'passphrase':'eoj'}); + is(true, Clipperz.PM.PIN.isSet(), "once saved, they should be found"); + Clipperz.PM.PIN.recordFailedAttempt(); + is(true, Clipperz.PM.PIN.isSet(), "1st wrong PIN -> keep credentials"); + Clipperz.PM.PIN.recordFailedAttempt(); + is(true, Clipperz.PM.PIN.isSet(), "2nd wrong PIN -> keep credentials"); + Clipperz.PM.PIN.resetFailedAttemptCount(); + Clipperz.PM.PIN.recordFailedAttempt(); + is(true, Clipperz.PM.PIN.isSet(), "3rd wrong PIN, but with a successful use in between -> keep credentials"); + }, + + 'credentialsWithPIN': function () { + var credentials; + var pin; + var decryptedCredentials; + + tests.clearCredentials(); + + credentials = {'username': 'joe', 'passphrase':'foobar'}; + pin = '1234'; + Clipperz.PM.PIN.setCredentialsWithPIN(pin, credentials); + decryptedCredentials = Clipperz.PM.PIN.credentialsWithPIN(pin); + + is(decryptedCredentials['username'], credentials['username']); + is(decryptedCredentials['passphrase'], credentials['passphrase']); + }, + + //------------------------------------------------------------------------- + 'syntaxFix': MochiKit.Base.noop +}; + +//############################################################################# + +SimpleTest.runDeferredTests("Clipperz.PM.PIN", tests, {trace:false}); diff --git a/frontend/gamma/tests/tests/Clipperz/PM/index.html b/frontend/gamma/tests/tests/Clipperz/PM/index.html index b9bede1..c3df56a 100644 --- a/frontend/gamma/tests/tests/Clipperz/PM/index.html +++ b/frontend/gamma/tests/tests/Clipperz/PM/index.html @@ -1,53 +1,54 @@ <!-- Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. --> <html> <head> <title>Clipperz.PM.* - tests</title> <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script> <script type="text/javascript" src="../../../SimpleTest/TestRunner.js"></script> </head> <body> <script> TestRunner.runTests( // // This is still a complete mess. // // 'BookmarkletProcessor.html', 'Connection.html', 'Crypto.html', // 'Crypto_other_implementation_comparison.html', 'Crypto_performanceEvaluation.html', // 'CryptoPerformance_ByteArrayArray.html', // 'CryptoPerformance_ByteArrayHex.html', // 'CryptoPerformance_ByteArrayString.html', 'Date.html', + 'PIN.html', 'Proxy.html', 'Toll.html' ); </script> </body> </html>
\ No newline at end of file diff --git a/frontend/gamma/tests/tests/Components/FullApp/User.data.js b/frontend/gamma/tests/tests/Components/FullApp/User.data.js index 7194f6a..4dfc81c 100644 --- a/frontend/gamma/tests/tests/Components/FullApp/User.data.js +++ b/frontend/gamma/tests/tests/Components/FullApp/User.data.js @@ -1,315 +1,315 @@ /* Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. */ testData = { //------------------------------------------------------------------------- 'testData': { users:{ 'catchAllUser': { __masterkey_test_value__: 'masterkey', s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00', v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00' }, /* tt/tt - empty, just created, account */ 'afaadd70f647886043b9196c861dc04f5605baeab3812ea23707fcba08c4a54f': { s: 'df781ec363a380a0bb171d7d4c226248259272a964f04fa2340c77ff84bbc594', v: 'eca214d990ec971a61cd9c5082e62c2d241f8e1ec805a2c26b1d31612747bfb0', version: '0.2', maxNumberOfRecords: '100', userDetails: '{"records":{"index":{},"data":"q/wNeY/xf7Sujn5CIxEYPRSF"},"directLogins":{"index":{},"data":"qcVwiiyOYeDHFZq5T06iF1Wp"},"preferences":{"data":"7ONKfKQk9GYGnlRxFgTgAd4J"},"oneTimePasswords":{"data":"GD66ZNSIqkRl1UxhwyrsSm5r"},"version":"0.1"}', statistics: 'tfQF+BrjAQUWyiXWOMkWApmq', userDetailsVersion: '0.3', records: { } }, /* tt/tt - account with "wrong" direct login */ /* 'afaadd70f647886043b9196c861dc04f5605baeab3812ea23707fcba08c4a54f': { s: 'df781ec363a380a0bb171d7d4c226248259272a964f04fa2340c77ff84bbc594', v: 'eca214d990ec971a61cd9c5082e62c2d241f8e1ec805a2c26b1d31612747bfb0', version: '0.2', maxNumberOfRecords: '100', userDetails: '{"records":{"index":{"8bcad18cc9613d794ca052c02e91198f7d5b6e1b7d595f21b21ea53a72e56aab":"1"},"data":"/+RHG+JLrFhZLYga2H9hsPyugT5bbiPwmNgY/RqE2g90FXfsCOvJ6TnfHX6ufeVfJ5+jUq/mRhWMlKdIqROSBLRL5EbL7i881EyKMNE24zpzUWm9zN6HcATPO2iNvDjsZjv2dEP9QWtAabw4Hc7UB+39WQ=="},"directLogins":{"index":{"dd9c1f84d06d67fe1ca5826b52bf46e56407e7f9d87fb7b7b927831920955338":1},"data":"ZF6BZYAVIJi3xrCPs6XWHwZDveEonG/5WJVKwIXbCGa5fr1myopvpqYbWI09tPCCktlMKP/X/SiIyBxlq7Z953VpOHWx0AYqTpRnw8PfJ+0BJDEblBFCZ8ZZfkZXcfYmNoY7"},"preferences":{"data":"IpjYNIHTXtE/pZvR8TjotEnR"},"oneTimePasswords":{"data":"1ibPl0R6S/LGBFFyH9pio1Oo"},"version":"0.1"}', statistics: 'XhiWkdDyHzuviv5bdxOY/2Q5', userDetailsVersion: '0.3', records: { '8bcad18cc9613d794ca052c02e91198f7d5b6e1b7d595f21b21ea53a72e56aab': { data: '93QXl+c+JmQo4WTl4rYLYb/oHehjntAroteeHd6HqrUiXYoi+02GYrYcKfvE5wgMWvOwvQ4kVdUv5ksa3gJaUzhrpY5GLM3EV3agEkQ6yuKwHgfmAQvES1c6tcw15lNTzGiZ7PHhBrW5I5H6Le0Mf10uW1DOyu6gFl+W5OarbBBGyQmRmASy+CW2l3/lY5pOFxUq3qlkwW/o4KrSiwKOFh3HDvxOQKwovm0v3puLu+NsuL5rz5blUIZpj+CsOmZUhtU5FC5s6iO2L1uj3w8+Yxu279p249H1bv1zxo1zSBpP507uuRH8dKOLsu7JI6PO+UC8PLqVhPU7fHhDhNleurE7AsUo6eHocG0DhxCAm3xeobm1K2iPd0iRprcuRXmwa8HWRDJHTItbQr9D+cnQTT7/DwneRdQzpMaVZHZcKqtAzz07jboy98plrigu03tV2MkXt2veIMLBofxxHqgZ0NJhcfrVta4FlJsrd1vO9RUkoHl+qPJqQZIVGZzoT0rdHS/nLd614EHJSfRYIl+drUEUchIidbRnMzvPTBo2s6bVfUPcQksVop4E85wMo15ah2BHzUe4vjkmM+Ki8ecUVH8jRR5fmZhCGpBFML5U7o+rERYABFuwwRC9FfCXMtmClHc2LypP+iu+lI/VycdHg/m8skQVeCDBv892vqehUs1CpeVAxMtYOJcFtm6roQNPxJe1EI/j4PAi3SEYPCFev1F7u1g4bw4cG5jCGJx6U3qTTYMX5A06dHf4iSSOUeCsrP5U+VJY0KLhU3E66DzOxNIrIyYN6iOJxKCbhH7ILfGdWAV3MlZZOpVoSIqiR7oZo2PwovtudF5tOy9lhz7SEFYLvuQy8r4mqFC7qMVnXJRrBPDZcQDTdXLG33YV6dWX17QpGrpyvPhX5/UDv8E7zc8PdO1YfJmzL1rpArlIXF1EOsLa6BqjQp5bkIlHKugQMjnn3tf4sYK0OhPskbKidfNm59NedQODEoUr5NGwmjSAqTCokt1D7q0K3vMK', version: '0.3', creationDate: 'Wed Jan 20 16:53:47 CET 2010', updateDate: 'Wed Jan 20 16:53:47 CET 2010', accessDate: 'Wed Jan 20 16:53:47 CET 2010', currentVersion: '79047c5ca148b2915014c44d75874cfedf3caee20cd9f97a87ba2a291ccec741', versions: { '79047c5ca148b2915014c44d75874cfedf3caee20cd9f97a87ba2a291ccec741': { header: '####', data: 'mqqGPhRw/397NUZH6B8XJW1y5rMDZD6u7WUuEU77zcNXYEHFNQq319u0G/qD5E63kbI/kHsNXZFFKmNGw5IxDiteWSfYG4RiiapsUxe3ZgsFDDBHFrD5NSrMdIzLFSoNel+1mZUps9AcmkelhkXSCqRiGPyiPIKq7wKXF+Ql6j1AsnCMOCJLlJdTZPqIUUaTYD4z/tvTOS1xRdUiaRjw7cCh2yMms1c5V//3J0xbO10kEC8xvA8nhJnQqsMh2P4h6QFzAZtXYKMehJXwQ5ap7W327EMnCdXw2N0pv9Lr5S9khN/9oTMy2tMIGtN+UZ684zTiAP+479xES6OvmVL04nGyCarIqMNu7oclR75Qv2U14CNRA3gIaMPv', version: '0.3', creationDate: 'Wed Jan 20 16:53:47 CET 2010', updateDate: 'Wed Jan 20 16:53:47 CET 2010', accessDate: 'Wed Jan 20 16:53:47 CET 2010' } } } } }, */ /* tt/tt with "fixed" direct login */ -/* 'afaadd70f647886043b9196c861dc04f5605baeab3812ea23707fcba08c4a54f': { + 'afaadd70f647886043b9196c861dc04f5605baeab3812ea23707fcba08c4a54f': { s: 'df781ec363a380a0bb171d7d4c226248259272a964f04fa2340c77ff84bbc594', v: 'eca214d990ec971a61cd9c5082e62c2d241f8e1ec805a2c26b1d31612747bfb0', version: '0.2', maxNumberOfRecords: '100', userDetails: '{"records":{"index":{"8bcad18cc9613d794ca052c02e91198f7d5b6e1b7d595f21b21ea53a72e56aab":"0"},"data":"K6sV3xYDTHn1PDHmbVhG3PogarwMtHCliSEGaJ5eev/RQv7MW9TCP5efsjATRT4eheX7JkXAoLo+sgMVr2fTyu7f7K0IEYp3mCi27T/TmtTM3b8FoaVfmXWEjN0FGx7N6gK6+lZxhFueRxsOha1+fTLDBg=="},"directLogins":{"index":{"dd9c1f84d06d67fe1ca5826b52bf46e56407e7f9d87fb7b7b927831920955338":"0"},"data":"9aUwb/5nIlAOPKz62xTwylK0dilpWVVEJBag5+LydmBwWxTmlfcB+OO6jGnMgDrjif3LVhWFjfKVSoZs5hSpPvhsSDPaLf5vQhF4igRaQpWI9QhBdfmv3QvZ57ei/gfcal346F4="},"preferences":{"data":"IpjYNIHTXtE/pZvR8TjotEnR"},"oneTimePasswords":{"data":"1ibPl0R6S/LGBFFyH9pio1Oo"},"version":"0.1"}', statistics: 'GHHkZjW0QLdUq6CPnVuDLh86', userDetailsVersion: '0.3', records: { '8bcad18cc9613d794ca052c02e91198f7d5b6e1b7d595f21b21ea53a72e56aab': { data: 'SOcANZTLo4dsjpsPghF2+TndV9+1uYhGjup3StEa1kiFHHzDK6kDZkKwjhP0mxFgixlQHZBnvgsW/xdHGXdmj1RHtaNdHlte7W1Wq5MHbH4XE9bJzQAvQmop8OETgGz7Khp4BbUMVLIXhxoJmP3rMx7ulQHds+WN+S5u+iB73y5nkJwfOXrXDjwwlL1vER92XHE1VJZAjkYRB/xes6SLcITaG9LYVSGSVAhtLIzkmrAvPHPIpZSOI4NQnAMEVPllwtMlWQBEeerN7PIKImyaUd9zPzP+v0S1V+kUyioizScsDdVuaNKa+yqwFKvYYy61nobv3Mg+Fo3EGqY7GOiO7AklRTreZoOkZAdogQlA1DZuIBNSbpcMvm5MoP+PsU3HFSb/Vioo+QEcgTWqVyDNuFGZpkOI2iIBuQCwLmsCwB1JaE/1cCd1fEpOWyiFep0vxwi0ZrtRZQowQd2Ua3UIoaG5u5WoYEMYoH7FFi6Djda4Rf4gxed8rPLE+cNTI/p67OKlbAfr8iz3YZknaH+CXp9pPr7V7xXBCWNxo5DnFPeeqqrxjTAbkeg/Rp2hJeN7/zi0TSWKDUTXfkuUNyewHOHb7M+MIvC1F1CtmqLuU3h8RDINYgPtZTtTk68YBmOG88xYTtClr4kKxmp1scrV3nJ7af+IGoVKZpRAwBJYT3HV33vzO9W35zl14eZ0vVuNoHMNsh9uDxjCwRyPtQzVpQuTIYnHHoO5R17XyIfe599BOSBAGimciprURN3llC2H8YhRtMilQRYvEDVsC+mVZmGAeEdQ5o/AehnpBuVKErRBzotWe6bNMkIQqWfwCLQFBb6ap1gT5hbacrJM4AlaPgOdQsyX9npd3yN/tzjVA1IqWLnoaEXq9EfWXhBuT+juMfSQ2Y8bPbpBKZmWWL06T2fVkaZJN0VFtBXGi0XRFJngPskApLunZOfBYq831jSi8/Z937QVTQKWwOz6rLE8covE3mxJ53gDVcOlvqD9s/NGXbmnt2GnlWhVKpzhTIJ812Hr050/2AI9ZmWnv+ypSqeQ3l0BFh4D+xfk5NRv+dKbxANheZnfZMhR6u8F+jX/W3hUtNCIMQc2vLSQ', version: '0.3', creationDate: 'Wed Jan 20 16:53:47 CET 2010', updateDate: 'Wed Jan 20 16:54:56 CET 2010', accessDate: 'Wed Jan 20 16:54:56 CET 2010', currentVersion: 'c0a8f723bf44e0aae1d69f6f85f8e1b747dfbe5ca0d78c5ebda16b32cf17e16d', versions: { '79047c5ca148b2915014c44d75874cfedf3caee20cd9f97a87ba2a291ccec741': { header: '####', data: 'mqqGPhRw/397NUZH6B8XJW1y5rMDZD6u7WUuEU77zcNXYEHFNQq319u0G/qD5E63kbI/kHsNXZFFKmNGw5IxDiteWSfYG4RiiapsUxe3ZgsFDDBHFrD5NSrMdIzLFSoNel+1mZUps9AcmkelhkXSCqRiGPyiPIKq7wKXF+Ql6j1AsnCMOCJLlJdTZPqIUUaTYD4z/tvTOS1xRdUiaRjw7cCh2yMms1c5V//3J0xbO10kEC8xvA8nhJnQqsMh2P4h6QFzAZtXYKMehJXwQ5ap7W327EMnCdXw2N0pv9Lr5S9khN/9oTMy2tMIGtN+UZ684zTiAP+479xES6OvmVL04nGyCarIqMNu7oclR75Qv2U14CNRA3gIaMPv', version: '0.3', creationDate: 'Wed Jan 20 16:53:47 CET 2010', updateDate: 'Wed Jan 20 16:53:47 CET 2010', accessDate: 'Wed Jan 20 16:54:26 CET 2010' }, 'c0a8f723bf44e0aae1d69f6f85f8e1b747dfbe5ca0d78c5ebda16b32cf17e16d': { header: '####', data: 'ky36e85TGmGQ+O9FXAhHRXEz5eBQogwuyAEgjpsHaSUM22TowYEw/NkWMg4oT4M2DGIYoTyXatvea859F3kMWM5hUe16PaG9J8HzQcEnaTRmi5oe0cMJAlg6pl7ypLt9kUiqDoMIM4lM/eKO8E/bRZWnU1EsxjehYjQQUoeoSyyTAOhHlLfXS99TzCXFrJjO5rAgaJ7iAjNOcQ8Bm6ECau5ao9AVd5hqgMDEmLJhRwygcGHSTek3i3I4o0jIImcqpfNko/4SbEC4p7+V5Rggr1IG5DkeYfKuyqxgulJbtdkcWxAqPReKXUOkmSGlRTje8rjTTLx1Jv7QCc0hLDYc5pLd8j/G7mOwLG1nLTMeNekljKNCTLAhQ+ccDDq35Jv1cNhmA/icmRlMkztbsR7tzqFs+drQ', version: '0.3', previousVersion: '79047c5ca148b2915014c44d75874cfedf3caee20cd9f97a87ba2a291ccec741', previousVersionKey: 'aLMGf0ucGPaKLVv+AunJaZWDg+gGncnBu2Bf7QseH3ma/jcMOZCNHNd44mNPKfZPyoXYZi6/ToxkJh6Nu8PmOL/SsHTlf8FBZxrNm1i7ZS2b3A==', creationDate: 'Wed Jan 20 16:54:56 CET 2010', updateDate: 'Wed Jan 20 16:54:56 CET 2010', accessDate: 'Wed Jan 20 16:54:56 CET 2010' } } } } }, -*/ + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /* joe/clipperz*/ 'f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674': { s: '186f0c40bf73f2af236eaa6c429df225efa933050c9aae65240e93b7b362e3ee', v: 'ac61a6e325ecf329926a86084f591d8852d0ad3e4a6080f2adc901b82395ecaf', version: '0.2', maxNumberOfRecords: '100', userDetails: '{"records":{"index":{"eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5":"0","13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551":"1","062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80":"2","ca01bcb7691f70818feed46c9a2a91883ac543997a395535aedbb49de166690c":"3","507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a":"4","d5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d":"5","de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4":"6","d620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045":"7","f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732":"8","36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113":"9","fe21497ef7435d31f9746c132e4b5ecf5aac5f13b5961ddb55d2bdc3409f28f6":"10","6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18":"11","9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291":"12","6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a":"13","6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728":"14","8b18e8593b5bc2f7ea39a5fab222047034ef2f380fee05be0fa6e1c0972fea39":"15","084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d":"16","c0ce9130ca365bb02418d4305ea1d29e49c3f0e96d44b9d3cb6b4b6843d25065":"17","6dadcd7ab23ece757d6990ce237bdebb68b2df0281c78cc1483d913318112162":"18"},"data":"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"},"directLogins":{"index":{"61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"0","989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"1","9f7979368fa29f66c44bd97ecaf6c545abc800b1c7bb21b7655a68e1514c3906":"2","dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496":"3","aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584":"4","1f9bfd677b531a03168d3f8bd8afabb5357244a7bc355dff50bd6c0a072114a6":"5","a48e38845713462ecc9f827149eeaae87da882031f98ef8ebbf9ee9537b63468":"6","6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f":"7","2df54059e78f5771f23bd285cce19595b38331b73d67020424d9a1b2257db09c":"8","065cd0c270e5e8ce50e4ea8e3828dccdae18c01ab030813d756a87d03fe68784":"9","ddbc8d01300a4f10631cbde09e1246332eade3a877a2205209f9eb9e5bc9da0b":"10","9b7a30e667afc9f76ba77600658b2c13bff52432d444261d39bf3d069a160afe":"11","9fd2929cde3d32d9cbc5f1d787f2f64729a5e12a14410556b31c0c099762c46a":"12","f695fc36ac56bead80c0d20a88e01e382819c18dc268f1679551b7c83db7cb14":"13","f22dc41ffabef4b3bc8f7af804fec975bd50718098322a673cbe4aaff9464ae1":"14","03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c":"15","a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e":"16","cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"17","7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"18","24404059cabc63b2dbff0f42ba57183108b8189ef53ab62fa25141a1caea824b":"19","6e218e5d129105c20ac499307b260eb76bb2e753f6c319e17efdb848675c5fa2":"20","75f306bd520b483e86a1b436d94159020197df0155ab9058fb86586925223dc7":"21"},"data":"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"},"preferences":{"data":"fwQt+Wxhev563xviKvItHr3k5MC7ciMmEayJZ7HfwTcWPqaF5Syf1czPlMQiDQzEgWWs4BmQqB0QCDDMi3VyGCrSzAtIMR4afVdRyQ=="},"oneTimePasswords":{"data":"8WhmNFYrgxqzrJwMx+goddfLb2wlXnREHH77BKpL8h4ZalAwNOAt0yoBMECtlnNcve8ufjGAXL80dgUgtqsTn8fpx7+WDL5fNynv5ve9mJq/qgqctQO+pvnLuvs4867NXYInHr84f+t8f0lyfYRQdpDJfem9ECrn5MrpQ1rvwB2PVKcU0f+VPGhu673QeDbqzF+95JfxF9Tnv1PAePL1EGahUYuxTED4y4fcVmsHKl9yZXcsuheM7ecik93cqOVSlnuN+s5c2KWqjgDdLzUjG2dDHcuY97v7JT7Pns4ad5C9i2dYLtNrSHG7QLw6RBS/EnBwGzK+sWFQFCU8u0qSeFb0eGRjvVb9SfIXSeTqAJK3JC+OLAVGiey34jFckykeQjy5nPjhSpqWWhZdpezvZHno3YCXSGkLqbazL6xtesNaZZAbHBKdrwIOuTdhMwArfX/na/gavciFM0zwGb13w6JX3Ar3iTqhnBR20zmv5vcZwIOjf36LSfSNnjT4sWE1Az+FQPmMPQi4ODHfLSJbwYQhwqM5Wq2yXHpKDf/e2RpBZ5JsUkDEyoGmglcLF+pXwk4Mn9LuNOztxXCRWaZ3M/5uVk4xXOqJax1IlnA4nlu+3N0orF5ipRwd7BfmQekiYyp69m9SJA=="},"version":"0.1"}', statistics: 's6W+Nlk1/14i/BN4u7qN8oTc', userDetailsVersion: '0.3', records: { '062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80': { data: '7sgxSQlqR+wh3g06M2+sWp7raQxjjQ9jLIz2OcEB7SckuQcXNrhMlDCbL6ncSljtzgqhioWrOB409kIG8lc7h6ekghOE/Mhi7rVwAiRfNGB7r3mYxpEXRe96O2RG7E+NcSp8ezl+5gJ9D0o1abXPeFQYGcr95hUioCfyY+xrxY8TJVwdb9nHkYvBdKV7rCl1dTxgsKWK3nlo1T7e5uyiz5YUAE6BrCtTFAqtprLI/xOpRti9C+llohS7D6s8hkCBPZfp3chKFDrgpsCBFLhXN8jrBKSjHi1PJdRQzpJsgrxyeBj0dZx3gTsYOXqrYgdIzFUo7K1Tqb30yNprBiDMr7j0YYXiSvEb7OuOIP+HTXGN+yt09bk9LggyY6Fh0e+tenjQQ3soySN/XznOBpEjXbzXoz6fR1MXVnE9GgaX99LVNqwWfq2rIBdSE/FfspRiWP3BY5jIrEkNeRclS05U1zw3K3wxOL+cB9r2IynSXnK8QcrDNNRZ0W3PhsSFfByUXuviLSEOPuJa1mYP29L9Lj/WyHL1Gyl8xLbt2H41S6+wvIleKMuc7teH6wPXbnYphvbwBowoI6HZTEFkz3dQKhhY6VF/81iCXsuaz6BjyrzFX6SkQ4S3lN1tv4opQMJFvnmHb6EkXqVWfeIXzJIJO+owL4vDOf4okpAD+HPjjlVXhq6fvyM5UBIK9+tzJW78X/zifrQOfWRIhwjVsfUdZWmZ/S35vnHWNuXkM8GBYrDysqxanDtah3U8XLAiIhFtBOzpzr6qGaNDOKKgG3K8QXT4bYHOq1rQVUwzQuKhlCyStrRMQrC5Ry251xmLy6dKfppRarVeGDtzB/30BbtFNdZmzMNG2g+Jj5tFCrEtCMvMiQEWZHMU3tGMFxDef/KKdv1fFTJC16jmaUiCHUZmNjB3EO9R6xPVcMlAVKf57n3efrpRk/GTmm9JhAFkuF/wsveH4JjPpDUdkHYFu5tHbb30sbga3ufBAXbQL4ck10S24akU/cKraFGLvuKGaR2U0i6ih911TBSf3pAfZ3RFbBhVIl+6rSknC5+IXoBR7MRstBPW/xC9pQVjN5Qyn0g3aUjUSI+q4jcTuvMl32NtTJbWRMGhfkrpVzypZTyPnIh6XJkyBghlUARXw23MlbjiZxmY4ScDmcWZRZJWIknHlqjDKFDKNnwrfnEI9qWyMDno+jA/DEQz0mnpdZYEsoz1/qAmAeDt89vx', version: '0.2', creationDate: 'Wed Mar 14 07:46:44 PDT 2007', updateDate: 'Wed Mar 14 07:46:44 PDT 2007', accessDate: 'Fri Jan 08 12:38:42 PST 2010', currentVersion: '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3', versions: { '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3': { header: '####', data: 'GCNNIhDQjMJQZGVSf+95fPtU6eOnFWVhuGm86r8WZGVR2Gf2EjbG1OJ0ZIGpZ/AXgirCMpo5AFxJe0Bay8IYg+xmBqMFhwFxzAgJBYCIts+raSaNRipuY8dTEqDxAqD1cChcG8EhSoiFgQ0fG0I7nNEUDJi0pIt4/ygBcwvAhuAenEp9ZW+oQA0+YysPQRqkz3IieFaOoSEbe5/SqpUilV4q1gTVyzNXvrxzxx+rlvEyGFgFN+vgtUZ1NrwlPk4gVksTpylvv6CFaMGEWKhgMG6efo0rJckKosaJTu1pldJdnmMK4EKNMLOd+jZ6pEhEhYyadrA4+zYU5TlmZA6ASzTaps8piSwZodoi9qY0ch2StK4mAbzeEGe2HdfHuAU9Tyq3Ppk3+VfNdKgpQfYrQOiSlXbKzK636tzXTN/gyrfOTHjBrRl117ywibgSX63ayAYNfcLpKotC', version: '0.2', creationDate: 'Wed Mar 14 07:46:44 PDT 2007', updateDate: 'Wed Mar 14 07:46:44 PDT 2007', accessDate: 'Fri Jan 08 12:38:42 PST 2010' } } }, '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d': { data: 'fGzBu1On7e/6rAoSB1a4fq/CkS8Be/T8UP5cQ93asBTWndSYu2lW4DQ4SXQXSindIi3OnNx/f6SNv/extb7OrMLREF92wXI045ipPwy+DIICb+cQNMJ82Sh4cXaIcAWcyrm+MYri3qq9LBKbpwkILcebZidJ86lmKYHJozUezmfbMcwNCljHs/gYkHVzVcuw9L52Ugc6wC7sjsshh+UH6i4/2Frlrophtx+b1vervNd8eoYiKnedHVXVfW7UJcQoF27eHFgzwYnGvRW0KNXFFhqmPb61TSkIvNdCCvBKDP4SXrWvGgzU89wipvWdUPpQ+fCT6Mp3hPRrbJxwMunmjujZOzBld/HkjnXoiNfBb5akA280WvdyzWYATrjV1ZFx8yQY8G0+lRt/MxjKDc38w4y+Rf5WeRbXboJMvFatwooHUggk6qSRmZVvgOmFmNuDRnRYIFzqK3JclhJeVasnqhR6RiGSowc1Ffr1HhcZCMnXpQABGBkZcHD/zw6YjHRyh9Plw7XAm0xb16HMDtiwt7WLJpxLH/HP99j/A2hvMGWiUiFCaYv7AzyEPTmYbN32D1IsAEE/GC3FG0HypGTBolP8wpAfTRdlvWpJz8oRRdwuLV3Pgpu+kXh5sQyeZI6tnuMPQFmRDcMN1oo3E5V5V585nVMnKTFcXhBzD4UnoV+DQNkG/+iSPybQzz/EZmucEqGEYyjI3kl4MAX8UMEUxE4JO0fF8MzyBI13nxknowAceEammx1dGVaJCoIOdhadaPVPyOzXM1Vp1erVm5k4TsxSx1pll+GOm6hVoNHIuQLDueaMEpRxMhfwc8cDyXURqRGPTgTc0bint5xVjo10fnpX1gcdc/AWL6y3tXM80NW+uFJ4GI7VzyzfcMRzTiRaGi19z8MIx8PbIVGh2sw4FhgGujNsPrpuESvUVT+17M0+v8oEoABNlcizTMFs/sA1uqlPumFASltzmViAzClOsDuCh069hFLjdk/Ex5jy4vPYlwOT8Uq9DJC9ZWuZgiI1DrhWN/8QGAEGxxbvnSZPNCQ9kpD5p+iabinLLWOAirVNgKwIRJRyAu/uR9xKd7J9Wxq8q/ii+y5lGilbo2g24wbDwrkXYVhqp/4J0g+p8Wv1NBjCTSCqV39WEizUCRHo3ee9HnQnBJQDOyTBRuz2odTJtJ5tLYjWXZRdFzFSJrEq+Z1z3oq7LnhZy3YWaFXPeKmBCemMthtNt0nL', version: '0.3', creationDate: 'Fri Oct 17 07:49:20 PDT 2008', updateDate: 'Mon Oct 27 00:58:49 PDT 2008', accessDate: 'Tue Jan 05 01:16:38 PST 2010', currentVersion: '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac', versions: { '0ae362285f103722abbd046eee2b7d10aeae6a1d05cbaf2081392ce9df882bcf': { header: '####', data: 'sG6TUmPSEPFpiJ5YdtghWHmHbvUK63tZCZ+Q5iz2ALas//jN+lZCBhZcjEwPEJskBkK2R0MyAh14wWGh2bBHMjsokgTe+L+x+0c/Zi0epE/IC9gtOBhsTe/hZ2e2xOGF/SbzET3DAAYXvxduZ36f7SvvFnrkkKvpj8wGSdTFcBmzqMb9DL2bRyRCLGLMzE3F1a0q5CufCIRz2TgHm+Uw+kfvvwC7ig/F/5iLW90Ypz3vmEtMEFYFHZ9a8Oh0rsXGfevbMhFqALoywzihQEe/NiB8dwn7GEdYKSQ35rhvZh29ULWOZinqmg0ONe0HYaxx7DbKsVoue57S0CIUlgHLajzHfLfqQg2sFI0OT8TnHsGg0YZ6mM2EdKmEjJiER0cP', version: '0.3', creationDate: 'Fri Oct 17 08:00:31 PDT 2008', updateDate: 'Fri Oct 17 08:00:31 PDT 2008', accessDate: 'Fri Oct 17 08:00:31 PDT 2008' }, '10f45664bbd979a92f37886f1ecc6e52e49798b16dc997aecd37259ad9b2090e': { header: '####', data: 'RdKVaV/WWWchrCse3KtcXd47Bfm6IAwjqVUpaxoed3HeunI42AAm7xYYSjeK8edHpbNRJbhobBAX5OZtWIp/HmgkobKM8CIiWxrWz89FqyrbnPD7+fXdtgF2yTax/0sC1l0ibncdOuJKX6U829oPlXCpXIOjlomc4wEEAD/5V6FbORvdZ9IE/ME3LsG2y02cT2tIpx6+R6wC/PKXhZA2UDsTE6R2Op2BtIzpVORZLXsdyAp/4wvWQxq90i9cEpbsVQsMB10JVyNHNsRTFhIlHi9MVCaMxQvcrwRElMj/Y9x3RbsFzSGKqFLqdg7Fn/U+KYkpYtsgHv9hraPIb9lV5FH16+iItU/HBM6FGezIj1ZkoQ+dgjPfSjTZzgzDYwyb', version: '0.3', creationDate: 'Fri Oct 17 07:49:20 PDT 2008', updateDate: 'Fri Oct 17 07:49:20 PDT 2008', accessDate: 'Fri Oct 17 07:54:23 PDT 2008' }, '2fa7b67e569d5e268d2b70b3d4d3a960d7e437e1937bcb324b67d0b9441db8ba': { header: '####', data: 'dpnI2qKjk0+bfyKktw4ZCWf+rWZ12hO5bda39CwD29JH7KtdpLCLe2LoLd+KKF2wOdpDsoI2iTiwRgFpt77e7DoWJABxq/0aaRCVN9XpqZo08iHiYhJyNlIszO8CdEhX+M3AeZqzTnd6fs91VfIEWggvku2Z+jwr0CbclY6FnOcNnS+1fj+W79Z9XC383GOm2ujjfo3SX/fyNQSw8aX+7AgJIRGR9uHK7M1cVfsNNTbmDb/HDgLlYZ1Pqm/9poHpmS7G4HUoRM2/WjI0R6F48dy5s8vZRi11SCnlnj5oRykScJj6wh2DltbCyesiaTpAjP6MQjTXsZzKpaosaQcQClZw+w6hDD2cA54IaBIv2j5KAHyhxDh2ERdwbdnCsDKPz4+zP+fmKfW295d4OY0l1NCSdcY+75HWTmBWRAooZeDTo7AE8m5sRwxewE0Y8J2MLUYsrs7Rl4kbZCiRRHU7cs+us3fq2DVn2OLGEbkRrK3kA9swT9W8ABqINoA79+DmDaIr6TGxe5AlHkCAl5sYAN4g42UX1NKhl4fWI1Scj9O1Ixds/1UUvqzavld0mE2cR9yt6LntjE5sQSAaexvymAJbU5IIM5NTk7NlY7G3PEvAPjcUsL9SGw==', version: '0.3', creationDate: 'Fri Oct 17 08:00:13 PDT 2008', updateDate: 'Fri Oct 17 08:00:13 PDT 2008', accessDate: 'Fri Oct 17 08:00:13 PDT 2008' }, '5a17723c34226d8cd663f91b11bfa14979e694e461818113ec8abf7194b46b6b': { header: '####', data: 'yRTvhkoY9zDRBwFYf0G5U8zhfS1XWIUfwes6ADNnFyOrHOr7JZvZZHSgkOPnsmN/f5ngcvFaIV9X3TNTmmPLzD/ewgGVMR+ofMLyOIMGhxUDzosSd1+HKqwDZWneZ6xNsci87W8UCfJgoEGrkAtAwktqyS04pcAas74XiRGBWNcv5mHZONwGPckYUnnaVG02Zf+qif6Pp7ugdvXrgncO5oi2AMSoR8GQxMP+tX53YzLwOpabA32PDT6o+aDPwMstJNQjWCXjeYLDIlb0GjL2zgjglX5CfdGw8vNT5hwGEK2D1FkvHkw79m++9sOWd5w9WdGgtS4mrTZP3JHWC1sPqvsIpq6PsrzRrbfCFH7C4X/ya5ciOIZTCNl4dEGAif94zgN74ueY5BF31PNFtaRaQ1waKkbsrU63MrbQbBar9b0hDZoser3BdgDGb1Ecc2GbJM1HbDITttmFDrzy/Ugh2kistHx7Dci8IGgfT7K94TntRFc5R6suEqYRrmOn57YJTZYrwSgbeTqAt/KOE+gL9LawiLJ0IdSC2RQnO3yu/aOEThHxpdLIKiVJoiEQXYVnq2UpnO79GNtplNnUe1hETQ/JT0o5X1bbENyInUsFjPuitAfChXofkAysIhDOHAdifc0Y+pxOHbQLkL65ZOsEDXWSlwMcduMNdQm4LVx26GLIV6yVsaDN+hGta2CxUuSvEIMM6T5xhaPfJ4K57LVw9MbOjRXpmFQz3QgEr8ZZdUxgE+Kj6CtmsjvzXtCQ3Bv/SccTLJSR/LQ8XRdIcPoOlDDy5jSQDF/8lxkgV1V7M3+SI1iWESPT8My5C+RH32F2MNZzthYq5hIFUB3wsM/AaQ==', version: '0.3', creationDate: 'Fri Oct 17 07:59:31 PDT 2008', updateDate: 'Fri Oct 17 07:59:31 PDT 2008', accessDate: 'Fri Oct 17 07:59:31 PDT 2008' }, '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac': { header: '####', data: 'RgIWPbNN3sPkIPBE6lfvf9/EoDFLemTZe0Qh/1wZLrKxLRNzFpUk9+NmeGUp5f1hM3XjXw4cXRvP6GrWq69mz9zGja+1TA6RoW3dFMpSQkbONcrSD1mIjxV2zIvzA/Pangz0ZixbEeHCfwXLvgnevbTXXFjkti3kLHQlk2pJpM3zMl+rMJtcsefszuJ/0tE/bO7sBcFqcYgKAht2OyDQORBAGiW1kI9USKM5OOfJJIZDQ0gDhRgl2U92l3kIOO8hdnj32oRedwfKFmdSRkuMY7ykU0bMuVEVkLi/FWmhHxi66C2ovAztVtMd1IiyoNcHc4UH942GC4pT1A8YQpIHxBAJbrQVhpl9LfFkmJ7xUc6Xs5j0Nv8+z2JGCnJI/D4nDJqYW+iCYtRWu6vUmbg0vGfaYWQFGRZRk8zWfHzHXBvHU8p0QsIjYgCLKiUaU2SRRD2P7JCjeTUrm3I1OI593iPsEH9J2PHCM9OMQ8/Fsdgd7lWgH6P9jLdGUwtb1hGaq8mg3JGrHFXcrVkUEBfeR7xljeSHD7j4YahYrua9EeR8nvq6CNaOr406AWyHse9SXhaOxt8qXRLoELpyQPsaLgafUpsdLjJqHz7J76Rp77NSOtXGplKjAtU1xj+d/agaAKYCjvUJC8/APJI2890Pn7VSXr/TPc5biPEIopyVYEHFqaT4e5nZW1Ku1HXC9gwUwUI9rITG4GzIH1WMEm7oFLNUaSMrdK/UTdTJZ66ENE3B9v9cTUpR0NTkbI+iGKDnc8GHPRlr2ZJwN4KFTxi+o/kkEOBjvRHR55nRh2+dke75LS/fzHQZw5wlyqBv5ZeUZfRA7QHfkj9acR0fJSqqNX25AUzZQnRL3oVpOxFWCMU7QVf5VpnRm9OIOd/5F5EoY7Be4doM/UV9U40F3E6XPZQ8S0GKQzrDjc7jKyGPLNPLUWTmGB39mTNDHZQHh5Xv5Q==', version: '0.3', creationDate: 'Mon Oct 27 00:58:49 PDT 2008', updateDate: 'Mon Oct 27 00:58:49 PDT 2008', accessDate: 'Tue Jan 05 01:16:38 PST 2010' }, 'b57a2d2ffafa8029123362071c09709bb9192f06a17140440f0e41d22143148f': { header: '####', data: 'PQ53T2Vo2D8PoLI1qNX//jLaVZFTDTYk6geT9+4RoThTxvlJ+beDPnQzgYhd9iASaF9GQEEL8JxsBnNpEPa6JPOY4ndFLmDLyFDKXMprxq1UIbzFV6kFoYAk3uCCCa3UCDzdr1KXB2CiiF9HrilaA+xkm8krAvH8I5kZD+j23gByz5cAFvXg7A77KEURpjujURL65DW5M+ceIjo6OXaPW9VO03xhqGt/M47ayObpoEGJZn+X9C8s0SE5wOXHbn38YZlRI480OMvtDAxbEYUeQKMmzu6lO4Nw5hhOUjoPSLr/i3tmDx3nPcDwnSafx6jyA4y31eW6yazqTEOP5I5ArC5mUrF7mAAiFvbHIsMoF8PLj6MONlRIOZgbf9HzCpFdt8xBrX/TXp3LaSAj2XTWgSTFI2cgmU3qqPyibvIfUsB5cVHQCXi692JpC+B85axJ0FLyMl5w3vq0txlPkf6q+dadPYDaLHGZEmDjkWScA1GM5xPJHWFwqGE7ejgXKG0sMYsMKWYk+F2LEUmMHtEvSlpgJBntvcQ1ZjYQxeu4hg5txu1ykkif6fXgkXF6wn6qu+5caeJeNhWtAB4q7WVD47111woYMdkmX7AnDTXSAQ==', version: '0.3', creationDate: 'Fri Oct 17 07:57:17 PDT 2008', updateDate: 'Fri Oct 17 07:57:17 PDT 2008', accessDate: 'Fri Oct 17 07:57:17 PDT 2008' }, 'b713e0a1e2664ac7bfa7ba887329ea023204d10298973e322983b82b222debf6': { header: '####', data: 'H3gIieYrH7Oy8LEWCZpl9vGp9qYdHNCoBNGijYqlcfXt+1JYvPj1abPp12xLNrDUHfaOZklU2Ip4tOf0CDNhgAan7LYyPqFoy9ss2f9/5RLcbjwiIwSduySIL322HTAwqlzlBt/qaJdHHPUrczmu0fb7fT+0dO4gCL/e/IjcHLefUUgNPAbpHG0Nv0+4lNwKZkIQM3tLRtfJyFBIgWKcMcP1XMic33kr24rwybR8Pb0CHZrOOvvUiGqyoED3ZTZf1twUDVNXO7MWCAC5dBc6/Mk/vSmbbGhppXAH02N0g8G5qzZfp3UVikls55VNhRYLHByVsgpkbIrKXyZnBPTwzm7qefpYAXDOgO+164L66/Art2FYGqZQRZLuh5r8oF38', version: '0.3', creationDate: 'Fri Oct 17 07:58:00 PDT 2008', updateDate: 'Fri Oct 17 07:58:00 PDT 2008', accessDate: 'Fri Oct 17 07:58:00 PDT 2008' }, 'c4cea1cd88a86b05f48a99896a37967c3456228283a0406331ca9f67c6f29f97': { header: '####', data: '1znWPwc9JwCe7iOFiUd2iGm4xJd+824B4VRqEtzCQkW46tg25RWfo7XagvK46USB7t6pC8WMLU0M/EC47KucsfpWUqHGbseoXT/8g8E8GoLnIsk9qFyJG7LGd1sUvqBgszLZwjWWG3t9zifmpW5nY9GialBYNmeSLS3bg5xDH+eCEilUUfDe7zGuVSuu/XkHacv/DYUst97e+6u44F7H8Kv8dTywJZpqbmveNPeWfCej2aBXdVV616J5lIRaj2uIYuQYG7blYJh9KZ7yLStdPndl6h65hIJpfWo0PM8nLJuo0lWNHz7misrutnmxJEjkwVIZ5YAmqp1Zz3VC8zw4IxkXrC/sPmp4PaNXgKz9ZJRaY2KV69WmHf7BUQ3QneGngbT0tN526SS5qDFwTGiuIlnYGWvTB2jVrbns68n/d8Fps8sSWfJBvvXJUEkaZB+1WqNilOPGXvyJ5k2O/iucFbRlxwlEHDny+AgsbtXZdp8cHQ4C/O4G0mnUMZuS38gn6e2kQ55mUhxKeORM+J6Rx1y4Iiu9KKNbxyS5eBpAlFB4xS/o35CS4g309vyOEhi37F24bpp4pM0xEPG4mcc/IyChHzaHUGEp1IX1ZO/r3ut9RIN2QWrGLUlZV/9rFKpLLAy6BkY/g8VYNrV8PztOL3rqy/qwqNZouONwPw8w8SA=', version: '0.3', creationDate: 'Fri Oct 17 08:01:59 PDT 2008', updateDate: 'Fri Oct 17 08:01:59 PDT 2008', accessDate: 'Mon Oct 27 00:57:58 PDT 2008' } } }, '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551': { data: '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', version: '0.3', creationDate: 'Wed Mar 14 06:53:11 PDT 2007', updateDate: 'Fri Oct 30 10:52:54 PDT 2009', accessDate: 'Sat Jan 23 02:24:21 PST 2010', currentVersion: '933abcdd036332b566a70beba4ae486123475dad2903b00a939c067c34a074f5', versions: { '106a1116d22c2395906a346da4d830c7afbd2da9a46210d0b7a11de238016783': { header: '####', data: 'jgDUvByveAFnchBQKhiHGYDNDtj/7Aja2RePMer0FCOkkEu5GRAiLkxA3/DD3eiU+g+mCxnjnOaEIYL1O5o0+JP08XapsblZHTRKfveeFfs6sWwuqEHGYULBaXx4XSfK2B12HgpBwa5aD49489AkuyXi7t/aAXcKKJcLB1sC61DI3NsmajUaXHBi31Sp7nKAUpMuiWyguW0JVfH6KUPqyldVDBTBqHAis37c1qoR6aFHFfGgAfb35+syfmPRgemujMRkj2XO6dbt9zAYlHVSYFp9393rwPZoyBfXMMdDtSTmq7H9qbmx31GecHZlFN3NymtPPDYUbQ9mpPVRbxE9NjtiPrI5eGFvb++OdOx75PKjYjCAPWWFZ+4aryNn+h+yqab7pAuoG03ACVVrAFIOn09g1ssol/vqvalulEf3hAIviedyiNAC9D0UDHtzUwyIiELvR9qouXLZ', version: '0.2', creationDate: 'Tue Apr 17 10:13:41 PDT 2007', updateDate: 'Tue Apr 17 10:13:41 PDT 2007', accessDate: 'Tue Apr 17 10:13:41 PDT 2007' }, '111a8a4b6b912b808a93cf5e8785ca223112628d05f0bfc5dfe1eb40cb72ed8a': { header: '####', data: 't524etHmXljCnLC+IM+WPD8Q5VE7wDsSHVNZzFU4hQzk119t/N/vhtfHYz5HgNstU5T8c7h7RHKvFk5f+4ZwgNgDqSH7H2PrH+7/bV8+uuqbe+/3GYOvELjTF7v3xMyYs1B7ruHpT+291HVNZqxajqCl/+9nbG0e5feqNsTXWUTdLzF0szJuCTNr2I+fhxAO0LRVaf8h+MBPYyuBDnfFDuKm899IsgF9YoYRvjaYO69DkElvf4VP2jrXIJsRnGIUfUaIS/wQ54+X4JBZM/9M09MVOw1SVe+cwG+P3xyPUkqnSb77ECo86C0MktzeYFmPnPv2SM2KFA6slctXsyudoaNlReh1k+6no5J5BjaawTfqYjYrAtWSPsuhxYVsZym/X2CVbkz4rMSn+J5Uio9N5uZ6AqgCKdhAJlwzVb3fIIJwvFpVpy/0LMskb7aG2i4eAxwzx1H6rD3Y', version: '0.2', creationDate: 'Wed Mar 14 06:53:11 PDT 2007', updateDate: 'Wed Mar 14 06:53:11 PDT 2007', accessDate: 'Wed Mar 14 07:24:35 PDT 2007' }, '144d6eff3eb5f1cb70c8906741d88018cdeeae3a618ac4066598ad6b04242364': { header: '####', data: 'NPgSZF0eSOzy0/Ns+15Nz4bjSwh4o7fWYgKgwXLRFrF8y3EdbiOH7AiEmmPrCpT1raeYLWCcDIrRTz+/9uvIrz6kK6BjU2emr8YdyLai+PTCRY0SafWS3QiYixX6DJiKIt0SC2F6dfmSHwNsbfTHilFhVXn6wXTJpWvC+sRzw+h42cYpQp0BoLSuFV7vPz/+wtuQdl28BiBgLzGsrtPud0tPcfldGox6Ia/1SrOPcqUr0tnFlNQiUvPU7N0JZgRNyr1PfpAEhmYRI7aEJidsZ36vGQpE0ZQMmQE/9tLS/InALRZT1YXfMsytf0o3y4QlgJrvRgBL7fGiQOZJpU7igLk15xAwU+OLIaYIbr2xlKDJvndHOcrFoYKry9/A/aZSnEYv79wsaf64bBgIVD2WJGLuSFFmzlFnbg/O4kGTin3A8XBpvFA9V6iCMvnEMkrqxD3Qgf7WhxFE1A==', version: '0.2', creationDate: 'Wed Mar 14 07:33:00 PDT 2007', updateDate: 'Wed Mar 14 07:33:00 PDT 2007', accessDate: 'Tue Apr 17 10:12:56 PDT 2007' }, '191d456526b14fc5b4ff11b3f856c9568562bbc68435700a2fef0d176482edda': { header: '####', data: '9rcbGeLFjW1cwULSScOa5zfb9BZqoSi8IvarxwjLVz+4VqApsBZnwJsxJHq/L9zV3SRYlAQRRLNy3lhpO/fJAOg4RNp68KdtA+IZfCsn1MzwfOoBrnTTELPKxDim4US9xQNdJp5ffWoLB8demEL2YkSNTrPVr5crvVPyepuRCzdqUoe6Dba05tR6Ju7/+d9K/cfJg+KI/ziSUSVlOTsIahGkipvMwYzhCOqjljJvdeF6XLLCh7F70lFvpW5vtv5jNmpkgvAhfxgovIZ3tav0WDc+DEdFNHNsCtFhwRYsb1dH5Ry01M8g4vS7PDkuCNYOvjL9bS2Wmy/lVulM9dYdB/d/gKWTjbqgre/IR1TPPdtfiVBo2J9PUvM8P/c2LmQrf63OwjWT74N0D7q/NuVn1KXzREQiyMi6ezzujzJolpNVUNkJFlnSHl+EqnfFiiR5ALZ7Nts4uWLe4Vpn0XmyvHoAVDBK3fw7e3n0tIG4x6k95guIWRKdDpYLOTHOe9jKJbc6KxdGmt21/5pX4KdeWavwirKRcXW6ReJIOVF+KREEZZOGWu7UKWgqgdaMuvxO472zzXzxTBvnpOmnxl/oIkhs23OPxHEwHXX8gXnyA60hd2tthCfmzfI48wWkO40cUTFnqO8htWRXwbUa9gYTjYWDTmoIyK9AgO+PfBLNqx3JzJYAymDcw39ItO2lIcEBkZ4=', version: '0.3', previousVersion: '6ca08e08104f73943447eba327c8d0bdab3ab9a01fabec1bd4734b52034a9544', previousVersionKey: 'RDzOj7LWZcdVg5KmmIT5VXM0cUFeC9tC3n0IXDfNpj12cq0w3k1rpBYbt4eSEkOcdM7Va07FPNdZY4Pd65xBo2MGc56Ka1pX3wW4jTxz350qtw==', creationDate: 'Fri Sep 11 05:54:50 PDT 2009', updateDate: 'Fri Sep 11 05:54:50 PDT 2009', accessDate: 'Fri Sep 11 05:54:50 PDT 2009' }, '1ae171ac58981896484c222ab42373b0b6bc3d054dd56faebdc9018f3abbf549': { header: '####', data: '0ck0NbHAOYieUs5c1U6xSMf3pj743aIv1nnBnB7f4vsvKpMiYleQwr4SwY1W6vhg+3sLnO9C0CCD8Brt4V1wScz/STp4oB3hoy31W4dsAFsUyAWFJ8MrYDsZW3jotIPVbMKxu+4Yp051iDPcFKimDhfAu1zVyiVE9llNj3tP6d9gukUNfGZ5CvFmEXcheHB8t81Z2tgeO70EELFUn7uqKJwh5xCqTeogPtsifmCjgx8Yo6hi19vl2TDAaX0HquFO3WcIAL185tzYZ5rU23BYwxD7hVfan7lngSVq614MsEB3EX9WiHRoissSSajNkKTlTW8zsNj3VlUXKMQiJ2aA9Pi+/Yt9sNAbmyTl6T5TNN4QSquLPLyxO4p+OIjra1WPdmVsCti7fOyGirogfJF0XhZg4imvGXK0c6lPZIlg/OEnoDSTiHXlOYpSgaEw1Js5HZ+390XY0KYPtpsZlY+oeVS4p29HN7x3CEairuIldEsZrk4whiVcwzlnmw3n8wiewumus4eRh9w0CIwJELKeMiz5cX4bX8+AKS+u8O1W0GwKlEGTj/joA/M=', version: '0.3', previousVersion: 'dac2ca240227fdf7a08fedbc998c49ee7b6fd622bb8404e804c5dc7f439bf8fd', previousVersionKey: 'moIwxP20kmN6f/+pgb8pJNqsLUz8Qo2BvcAFnXBmiX2E4oL1pakM9iq0e3IAiNLApmID2TwyAxhsmKj422R9uWXsUFd84LRRt6lMKa3/u1dC1w==', creationDate: 'Sun Oct 04 14:05:10 PDT 2009', updateDate: 'Sun Oct 04 14:05:10 PDT 2009', accessDate: 'Fri Oct 30 10:52:36 PDT 2009' }, '1f1bdb7a21440ac20c6d913d676aa30dc360252d27059e77df51a1be36b2e263': { header: '####', data: 'TaOHH6IoHPKLLoyLyvsBszgsPPcDs6CiLVXzXuXjFSTrhPxzUw9suSsisgDRRs0ncjZ6BCyqoCxMnw6QVvGN4viUwYVR8AWdCg0NMQZ+LkNfq/2WN0M3KyASI8sIdMCwTb57NzOn9soB1HmmmETZfjr7HpY2cc+lS5/4f5rxI8XTEK60lLed+aEuJamAjeZUdgIyu30mMKKjxPfY3Y9iWMwn1OD0zF0mAW+hyEoMhhK7EYlWKCy+4qN0QM+yNFXQyERb04o2n4XrM+qr9df1GtbQMH8igK5VzXIrKjdHjKoLo9G7D7mfx6mRLsmoAJuE0R8gyzotgdBpOgWasHJ82iWEa1dLRKBHJ1d0Lnumv22tvYfasx2DIR5Tmx3kIQ3hFieLSXq48cYMiaZH/IbLiapIOlMgtWDow8JuySBLei/8FAV8jCxSc1Ui/SjbuK/kCvywaSOhDVIxGw==', version: '0.2', creationDate: 'Wed Mar 14 07:26:35 PDT 2007', updateDate: 'Wed Mar 14 07:26:35 PDT 2007', accessDate: 'Wed Mar 14 07:26:35 PDT 2007' }, '30cd48ae2101c0005fdbb57917031ef36c2e5681890f212a95a2863463369043': { header: '####', data: 'jt/CbXS+TEjH/jPrstH7cQZGK3yse470grrhdAOdWoGVtFMmL7fMJZQOKm5IQSrMHFEsH3PoSs99Rr4ui/u71vUb6s/TIsjyv7yihnCYVsOEJOPcnL2wynciILV8p48Lky1wGztW+oSynYOG0CGYDofFhF/MNCBsG1EcTqW7Cf+8rUiS4nA4ZRZVv3HsZp6rCabJsAoK1pmf5tXGJHPjS6xdy1A9ea4bV5Gad0pu8IXvjbZTrDymHem0t8C+oZ7uJ/mG9cFVcNykXoO/TDP0goD6KvTqtdY3VWNNTAERycAW6jFtdMv2W/AFNmnYatZ+EbSbj6/RyGaNnRv/ceBitMh73HRr1EVtZw0wPthMBXwnlPbpkfUwWPBHYpwImligm62/6YBhxDgnMZta7TSi8apT', version: '0.3', previousVersion: 'cd3479e91eedabe34a1b76f0f26c69d7612672281bcf5d682a787a48caa66521', previousVersionKey: '8BbhE8C41VX8B8m3TbfLz4bgSfE01IAUl8Zlu2YFdEhpw1erqInN1eRE6WLyBB5MxckmJpbn6VSizqbFbi/3Id5p/fibHKmbmNp6xu7iIo5zzA==', creationDate: 'Fri May 22 03:30:43 PDT 2009', updateDate: 'Fri May 22 03:30:43 PDT 2009', accessDate: 'Fri May 22 03:31:39 PDT 2009' }, '6ca08e08104f73943447eba327c8d0bdab3ab9a01fabec1bd4734b52034a9544': { header: '####', data: 'XKsPGp4MeuvDrgikcjbMnmw/Gz74sTfyP3lLylbrtEZJ3aGSjRvE7s9o3Ya9GKRhYxNQ0dXT0vM6xIE6r/dMt8PwU+/5dNtRhCGPAHvKmEEGb6EBwR7gUDxQLyFTAYX8ut+CpyNJLQa2pHoEl5aNUTjk6blYrKp0GHKt2Q3PZrjIn78rcOLcKY5bx4OK0h9rN0G8mOFQ0g29knKyaykv8dja/Uy5XBeshKnVT7YRHk1nRuwz69ZcX+1Z2qzfw5sxJx+fDK+otWVpjzDP02qqn7ju/r3GgSnW8p/ghBeurUCLdQiS+fFAevhOwCkZGjPMntG3Q4qVt42VxIiiuvfShdaSsNMOW9Uziew3XwOYL9mNIOSdPSjtry4sKrAh3XNmfuJjWTy+69Iyi85CtQ6xMFilANgSBfTqThUePCrEkv9ZBbvpRovuuljlxqZ3gUmtvwy9a3ACAr8SMGWX0ydQjKyvZhoGRCBM+ZC7zCe/JmIpdklvNd/+HqUgS2iAnf3CeH4gUPQVizFR04Ysgj00xO6v4bdY2bYVKIxunygBGNzySi8DeSREu/rUKWgx0KY7S+Gg/jqFMYpE9oy8CxUCmSLeNrnxUgprPqKrr72yue0kBGVoYyJwhXo4MG+LPV0rtVp8b2GeHE9fYmyEZO2Ke93SrHjezS6CnWQsvjYsFYCLdLtEGwo3mpS46DF69LlO53k=', version: '0.3', previousVersion: '7c80cac9c8b9b5f0f533dd3852d89d6be07963eebfbd2081f2ad6d2f2a06b447', previousVersionKey: 'eEvij0YZ1r+5cNNpleVHE+kjCZlSggZuE+3Kum9b/11JGHTgQ3bY/o5amM+4+FPaiCU0Zd6MWFAI4dPscyvAS9in6WdTOm7z3fQ3uqYAtHghPw==', creationDate: 'Fri Sep 11 05:54:01 PDT 2009', updateDate: 'Fri Sep 11 05:54:01 PDT 2009', accessDate: 'Fri Sep 11 05:54:01 PDT 2009' }, '70720f026f37b571e9765d27c51d3d60c7be0293c3266f1f987c8de9c6b5c416': { header: '####', data: 'NYaYljcgfzrlN1DVgrbyj4AeVhXGjXPho3IQwEKD3ZOx/yEZxldCNSyFsrk7PoRB8Q1T/6VV4CGa4HLRSB7QVCrtVqWyu4KbbmFoX8NIQ0H3xv+TSo3S/b3dldUeyW32ScaGbspaf8nFf0CffsgpGusd+kHdiE3gSLJvH9y5j47KgpyyX4TteVzqgez4dcXIs5tdzJq2eUlknwU4651QeKIuRSmRaDRhhOP4yRgUo/qXMlTJFmHviCh+IumvBdmDoPe3Vc1vZ1r8PxpDJLvDoB8GTDE42NhqHfVrew9ym1xlTD9wswwIEikfOyTq3JM857qPOHRqSqthEvr4WHbm1VW5PReIyse0lugGyOzqtCnADp9NvNI440VjaTd4NBQqF7XrRm56+1u1uTdfYGFV5BRiH1KmrM1sxXQ6PlOF9Lou45ALo20xxvJOLKG0RKLMr8gmVT2bNtOSJw==', version: '0.2', creationDate: 'Wed Mar 14 07:30:09 PDT 2007', updateDate: 'Wed Mar 14 07:30:09 PDT 2007', accessDate: 'Wed Mar 14 07:30:09 PDT 2007' diff --git a/frontend/gamma/tests/tests/Components/FullApp/index.html b/frontend/gamma/tests/tests/Components/FullApp/index.html index bc00fa7..fab110b 100644 --- a/frontend/gamma/tests/tests/Components/FullApp/index.html +++ b/frontend/gamma/tests/tests/Components/FullApp/index.html @@ -1,240 +1,234 @@ <!-- Copyright 2008-2011 Clipperz Srl 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. * 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. * 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 Clipperz Community Edition. If not, see <http://www.gnu.org/licenses/>. --> <html> <head> - <title>Clipperz - online password manager - debug</title> + <title>FullApp TEST - WEB</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <link rel="stylesheet" type="text/css" href="../../../../css/clipperz/clipperz.css" /> - <link rel="stylesheet" type="text/css" href="../../../../css/clipperz/compact.css" /> - <link rel="stylesheet" type="text/css" href="../../../../css/clipperz/ytheme-clipperz.css" /> + <link rel="stylesheet" type="text/css" href="../../../../css/web.css" /> <link rel="shortcut icon" href="./clipperz.ico" /> <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> - <script> Clipperz_IEisBroken = false; Clipperz_normalizedNewLine = '\n'; Clipperz_dumpUrl = "/dump/"; + Clipperz_version = ">>> hg:28fe087a9316 <<<"; </script> <!--[if IE]><script> Clipperz_IEisBroken = true; Clipperz_normalizedNewLine = '\x0d\x0a'; </script><![endif]--> - <script type='text/javascript' src='../../../../js/bookmarklet.js'></script> - <script type='text/javascript' src='../../../../js/bookmarklet_ie.js'></script> + <script type='text/javascript' src='../../../../js/Bookmarklet.js'></script> + <script type='text/javascript' src='../../../../js/Bookmarklet_IE.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Base.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Iter.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Logging.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Format.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Async.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/DOM.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Style.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/LoggingPane.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Color.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Signal.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Position.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Selector.js'></script> <script type='text/javascript' src='../../../../js/MochiKit/Visual.js'></script> <script type='text/javascript' src='../../../../js/JSON/json2.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/YUI/DomHelper.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/CSVProcessor.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/KeePassExportProcessor.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Date.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/DOM.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Signal.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Style.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Visual.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Set.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/Crypto/RSA.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings/Strings_defaults.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Date.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Toll.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.JSON.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/BookmarkletProcessor.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.Legacy.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.RecordIndex.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.Preferences.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.OneTimePasswords.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/Record.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/Record.Version.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/Record.Version.Field.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLogin.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLoginInput.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLoginBinding.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLoginFormValue.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/OneTimePassword.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/BaseComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/Button.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/ComponentSlot.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/FaviconComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/ProgressBar.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/Tooltip.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/WizardController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/Page.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/PageHeader.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/PageFooter.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/LoginPage.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/LoginForm.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/LoginProgress.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/AppPage.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/UserInfoBox.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/TabSidePanel.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/GridComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/ColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/TextColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/FaviconColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/ImageColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DateColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/LinkColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/AccountPanel.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DataPanel.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/ToolsPanel.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/RulerComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/CardDialogComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/BookmarkletComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Components/PasswordTooltip.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/MainController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/LoginController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/AppController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/FilterController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/GridController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/CardsController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/CardDialogController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Marks/exclamationMark.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Marks/questionMark.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Marks/info.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Features/store.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Features/protect.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Features/directLogin.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Features/share.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Star/normal.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/CoverActions/look.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/CoverActions/download.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Tips/open.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Tips/close.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/RegisterButton/normal.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/Logo/normal.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Canvas/GraphicFunctions.js'></script> - <!-- script type='text/javascript' src='../../../../js/main.js'></script --> + <script type='text/javascript' src='../../../../js/main.js'></script> <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script> <script type='text/javascript' src='./User.data.js'></script> - <script type='text/javascript' src='./main_test.js'></script> - </head> <body> <div id="mainDiv"> <div id="loading"> - <a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a> - <h5 class="clipperzPayoff">keep it to yourself!</h5> - <h2>loading ...</h2> + <div> + <!-- a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a --> + <h1>clipperz</h1> + <h3 class="clipperzPayoff">keep it to yourself!</h3> + <!-- h5>loading ...</h5 --> + </div> </div> +@js_EMBEDDED@ - -</div> -<div id="applicationVersionType" class="LIVE"></div> - -<!-- --> -<div id="javaScriptAlert"> - <div class="mask"></div> - <div class="message"> - <div class="header"></div> - <div class="body"> - <div class="alertLogo"></div> - <div class="alert"> - <h1>Attention!</h1> - <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> - <h3>Javascript is required to access Clipperz.</h3> - <h5>Please enable scripting or upgrade your browser.</h5> - </div> - </div> - <div class="footer"></div> - </div> </div> -<!-- --> +<!-- div id="applicationVersionType" class="@application.version.type@"></div --> + +<script> +// Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@}); + /*offline_data_placeholder*/ + + MochiKit.DOM.addLoadEvent(function () { + Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); + + var proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false}); + proxy.dataStore().setupWithEncryptedData(testData['testData']); + Clipperz.PM.Proxy.defaultProxy = proxy; + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', {username:'tt', passphrase:'tt'}); + }); +</script> </body> </html> diff --git a/frontend/gamma/tests/tests/Components/FullApp/main_test.js b/frontend/gamma/tests/tests/Components/FullApp/main_test.js deleted file mode 100644 index b13972a..0000000 --- a/frontend/gamma/tests/tests/Components/FullApp/main_test.js +++ b/dev/null @@ -1,111 +0,0 @@ -/* - -Copyright 2008-2011 Clipperz Srl - -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. - -* 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. - -* 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 Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. - -*/ - -function _pm_logEvent(anEvent) { -// console.log("####", anEvent); - - anEvent.preventDefault(); -} - -function handleGenericDeferredError(anError) { - var result; - - if (anError instanceof MochiKit.Async.CancelledError) { - result = anError; - } else { -MochiKit.Logging.logError("## MainController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack); -//console.log(anError); - result = new MochiKit.Async.CancelledError(anError); - } - - return result; -} - - -Clipperz.PM.RunTime = {}; - - -function run() { - var shouldShowRegistrationForm; - var useCompactDesign; - var controllerParameters; -// var iPhoneDesign; - -// MochiKit.Signal.connect(document.body, 'onkeydown', _pm_logEvent); -// MochiKit.Signal.connect(document.body, 'onkeypress', _pm_logEvent); -// MochiKit.Signal.connect(document.body, 'onclick', _pm_logEvent); - - controllerParameters = {}; - - MochiKit.DOM.removeElement('javaScriptAlert'); - Clipperz.PM.Strings.Languages.initSetup(); - - if (window.location.search.indexOf('registration') != -1) { - shouldShowRegistrationForm = true; - } else { - shouldShowRegistrationForm = false; - } - - if (window.location.search.indexOf('autocomplete') != -1) { - controllerParameters['autocomplete'] = 'on' - } - -// if ((window.location.search.indexOf('iPhone') != -1) || (navigator.userAgent.match('iPhone'))) { -// iPhoneDesign = true; -// } else { -// iPhoneDesign = false; -// } - - if (window.location.search.indexOf('compact') != -1) { - useCompactDesign = true; - } else { - useCompactDesign = false; - } - - if (useCompactDesign == true) { - Clipperz.PM.RunTime.mainController = new Clipperz.PM.UI.Compact.Controllers.MainController(controllerParameters); -// } else if (iPhoneDesign == true) { -// Clipperz.PM.RunTime.mainController = new Clipperz.PM.UI.iPhone.Controllers.MainController(); - } else { - Clipperz.PM.RunTime.mainController = new Clipperz.PM.UI.Web.Controllers.MainController(controllerParameters); - } - - Clipperz.PM.RunTime.mainController.run(shouldShowRegistrationForm); - -//Clipperz.log("HASH: " + window.location.hash); -// if (window.location.hash != "") { -// window.location.hash = "" -// } -//Clipperz.log("HASH cleaned"); -// #credentials=base64encoded({username:'joe', passphrase:'clipperz'}) -// MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', {username:'joe', passphrase:'clipperz'}); -} - -Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); - -var proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false}); -proxy.dataStore().setupWithEncryptedData(testData['testData']); - -MochiKit.DOM.addLoadEvent(run); diff --git a/frontend/gamma/tests/tests/Components/FullApp/mobile.index.html b/frontend/gamma/tests/tests/Components/FullApp/mobile.index.html new file mode 100644 index 0000000..818e3d6 --- a/dev/null +++ b/frontend/gamma/tests/tests/Components/FullApp/mobile.index.html @@ -0,0 +1,204 @@ +<!-- + +Copyright 2008-2011 Clipperz Srl + +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. + +* 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. + +* 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 Clipperz Community Edition. If not, see + <http://www.gnu.org/licenses/>. + +--> + +<!doctype html> +<!-- Conditional comment for mobile ie7 blogs.msdn.com/b/iemobile/ --> +<!--[if IEMobile 7 ]> <html class="no-js iem7" lang="en"> <![endif]--> +<!--[if (gt IEMobile 7)|!(IEMobile)]><!--> <html class="no-js" lang="en" manifest="mobile.appcache"> <!--<![endif]--> +<head> + <title>FullApp TEST - MOBILE</title> + <meta charset="utf-8"> + + <meta name="HandheldFriendly" content="True"> + <meta name="MobileOptimized" content="320"> + <meta name="viewport" content="width=device-width"> + +<!-- link rel="apple-touch-icon-precomposed" ... --> + <link rel="apple-touch-icon" sizes="114x114" href="data:image/png;charset=utf-8;base64,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"> + <link rel="apple-touch-icon" sizes="72x72" href="data:image/png;charset=utf-8;base64,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"> + <link rel="apple-touch-icon" href="data:image/png;charset=utf-8;base64,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"> + <link rel="shortcut icon" href="data:image/png;charset=utf-8;base64,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"> + + <meta http-equiv="cleartype" content="on"> + <meta name="apple-mobile-web-app-capable" content="yes"> + + <link rel="stylesheet" type="text/css" href="../../../../css/mobile.css" /> + <!-- link rel="stylesheet" type="text/css" href="../../../../css/jqtouch.css" / --> + <!-- link rel="apple-touch-startup-image" href="data:image/png;charset=utf-8;base64,iVBORw0K...ggo=" --> + +<script> + Clipperz_IEisBroken = false; + Clipperz_normalizedNewLine = '\n'; + Clipperz_dumpUrl = "/dump/"; + 'use strict'; + + if (typeof(MochiKit) == 'undefined') { + MochiKit = {}; + } + MochiKit['__export__'] = false; +</script> + <!-- Zepto.js modules: polyfill zepto event detect fx ajax form apple-touch-icon--> + <script type='text/javascript' src='../../../../js/Zepto/polyfill.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/zepto.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/event.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/detect.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/fx.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/ajax.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/form.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/touch.js'></script> + <script type='text/javascript' src='../../../../js/Zepto/gesture.js'></script> + + <script type='text/javascript' src='../../../../js/JQTouch/jqtouch.js'></script> + + <script type='text/javascript' src='../../../../js/MochiKit/Base.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/Iter.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/Logging.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/Format.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/Async.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/DOM.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/Style.js'></script> + <script type='text/javascript' src='../../../../js/MochiKit/LoggingPane.js'></script> + <!-- script type='text/javascript' src='../../../../js/MochiKit/Color.js'></script --> + <script type='text/javascript' src='../../../../js/MochiKit/Signal.js'></script> + <!-- script type='text/javascript' src='../../../../js/MochiKit/Position.js'></script --> + <script type='text/javascript' src='../../../../js/MochiKit/Selector.js'></script> + <!-- script type='text/javascript' src='../../../../js/MochiKit/Visual.js'></script --> + + <script type='text/javascript' src='../../../../js/JSON/json2.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/YUI/DomHelper.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script> + <!-- script type='text/javascript' src='../../../../js/Clipperz/CSVProcessor.js'></script --> + <!-- script type='text/javascript' src='../../../../js/Clipperz/KeePassExportProcessor.js'></script --> + <script type='text/javascript' src='../../../../js/Clipperz/Date.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/DOM.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Signal.js'></script> + <!-- script type='text/javascript' src='../../../../js/Clipperz/Style.js'></script --> + <!-- script type='text/javascript' src='../../../../js/Clipperz/Visual.js'></script --> + <script type='text/javascript' src='../../../../js/Clipperz/Set.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/Crypto/RSA.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings/Strings_defaults.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Date.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/Toll.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.JSON.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/PIN.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.Legacy.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.RecordIndex.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.Preferences.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/User.Header.OneTimePasswords.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/Record.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/Record.Version.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/Record.Version.Field.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLogin.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLoginInput.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLoginBinding.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/DirectLoginFormValue.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/DataModel/OneTimePassword.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/BaseComponent.js'></script> +<!-- + <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/ComponentSlot.js'></script> + <!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js'></script --> + +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/FaviconComponent.js'></script --> + <!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/ProgressBar.js'></script --> +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js'></script --> +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js'></script --> +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/Tooltip.js'></script --> +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js'></script --> + + <!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js'></script --> + <!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js'></script --> +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js'></script --> +<!-- script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Common/Controllers/WizardController.js'></script --> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Mobile/Components/LoginForm.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Mobile/Components/CardList.js'></script> + <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Mobile/Components/CardDetail.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/UI/Mobile/Controllers/MainController.js'></script> + <script type='text/javascript' src='../../../../js/main.mobile.js'></script> + + <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script> + <script type='text/javascript' src='./User.data.js'></script> +</head> +<body> +<div id="mainDiv"> + <div id="loading"> + <div> + <!-- a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a --> + <h1>clipperz</h1> + <h3 class="clipperzPayoff">keep it to yourself!</h3> + <!-- h5>loading ...</h5 --> + </div> + </div> + +</div> +<!-- div id="applicationVersionType" class="@application.version.type@"></div --> + +<script> +// Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@}); + /*offline_data_placeholder*/ + + var proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false}); + proxy.dataStore().setupWithEncryptedData(testData['testData']); + Clipperz.PM.Proxy.defaultProxy = proxy; + + Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); +// Clipperz.PM.PIN.setCredentialsWithPIN("1234", {username:'joe', passphrase:'clipperz'}); + + MochiKit.DOM.addLoadEvent(function () { +// MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', { credentials: {username:'joe', passphrase:'clipperz'} }, function () { alert("Doh"); } ); + }); + +</script> + +</body> +</html> diff --git a/scripts/builder/backendBuilder.py b/scripts/builder/backendBuilder.py index 5b91678..36b28ca 100644 --- a/scripts/builder/backendBuilder.py +++ b/scripts/builder/backendBuilder.py @@ -1,131 +1,134 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- import sys, os, json import shutil import hashlib import main #=================================================================== - class BackendBuilder(object): def __init__ (self, projectTargetDir, frontends, versions, settings): self.projectTargetDir = projectTargetDir self.frontends = frontends self.versions = versions self.settings = settings # -------------------------------------------------------------------------- def name (self): raise NotImplementedError() def relativePath (self): raise NotImplementedError() def compileCode (self): raise NotImplementedError() def createPackage (self): raise NotImplementedError() # -------------------------------------------------------------------------- def sourceFolder (self): return os.path.join(main.projectBaseDir() , 'backend', self.relativePath(), 'src') def tempFolder (self): return os.path.join(self.projectTargetDir, '.tmp', self.relativePath()) def frontEndTempFolder (self): return self.tempFolder() def developmentTargetFolder (self): - return os.path.join(self.projectTargetDir, 'development', self.relativePath()) + return os.path.join(self.projectTargetDir, 'development') + def targetFolder (self): return os.path.join(self.projectTargetDir, self.relativePath()) + # -------------------------------------------------------------------------- def writeToFolder (self, folder, filename, content): file = open(os.path.join(folder, filename), 'w') file.write(content.encode('utf-8')) file.close() def configureIndexContent (self, indexContent, requestPathPrefix = ".."): result = indexContent result = result.replace( '@request.path@', requestPathPrefix + '/' + self.settings['request.path'] ) result = result.replace( '@should.pay.toll@', self.settings['should.pay.toll'] ) return result def logChecksums (self, content, message): md5Digest = hashlib.md5(content.encode('utf-8')).hexdigest() shaDigest = hashlib.sha1(content.encode('utf-8')).hexdigest() sha256Digest = hashlib.sha256(content.encode('utf-8')).hexdigest() print message + ": " + md5Digest + " (md5)" print message + ": " + shaDigest + " (sha1)" print message + ": " + sha256Digest + " (sha256)" def shouldCompileCode (self): return ('debug' in self.versions) or ('install' in self.versions) def run (self): print self.name() + " - RUN" if self.shouldCompileCode(): self.compileCode() for frontend in self.frontends: if (frontend.module == frontend.submodule): submoduleExtension = '' else: submoduleExtension = '.' + frontend.submodule main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module)) if 'debug' in self.versions: frontend.copyResourcesToFolder(self.frontEndTempFolder()) index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG')) self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index_debug' + submoduleExtension + '.html'), index) - + if 'install' in self.versions: index = self.configureIndexContent(frontend.assemble()) self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index) self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index" + submoduleExtension + ".html checksum") self.createPackage() - if 'development' in self.versions: - for frontend in self.frontends: - if (frontend.module == frontend.submodule): - submoduleExtension = '' - else: - submoduleExtension = '.' + frontend.submodule - - print "FRONTEND module: " + frontend.module - print "FRONTEND submodule: " + frontend.submodule - - main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module)) - - index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url']) - self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index) +# if 'development' in self.versions: +# for frontend in self.frontends: +# if (frontend.module == frontend.submodule): +# submoduleExtension = '' +# else: +# submoduleExtension = '.' + frontend.submodule +# +# print "FRONTEND module: " + frontend.module +# print "FRONTEND submodule: " + frontend.submodule +# +## main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module)) +# main.createFolder(self.developmentTargetFolder()) +# +# index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url']) +## self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index_development' + submoduleExtension + '.html'), index) +# self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module + submoduleExtension + '.html'), index) #=================================================================== diff --git a/scripts/builder/backends/devBuilder.py b/scripts/builder/backends/devBuilder.py new file mode 100644 index 0000000..671765e --- a/dev/null +++ b/scripts/builder/backends/devBuilder.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- + +import os +import shutil +import subprocess +import main + +from backendBuilder import BackendBuilder + +class DevBuilder(BackendBuilder): + + def name(self): + return "Dev builder" + + + def relativePath(self): + return 'dev' + + +# def frontEndTempFolder (self): +# return os.path.join(self.tempFolder(), 'src', 'main', 'webapp') + + +# def targetFolder (self): +# return self.projectTargetDir + + + def compileCode (self): + pass + + + def createPackage (self): + src = self.tempFolder() + dst = self.targetFolder() + + shutil.copytree(src, dst) + + + def run (self): + print self.name() + " - RUN (dev)" + + for frontend in self.frontends: + if (frontend.module == frontend.submodule): + submoduleExtension = '' + else: + submoduleExtension = '.' + frontend.submodule + + main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module)) + + index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG')) + self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index) + + self.createPackage() + + diff --git a/scripts/builder/frontendBuilder.py b/scripts/builder/frontendBuilder.py index 1f0f92f..e52c31e 100644 --- a/scripts/builder/frontendBuilder.py +++ b/scripts/builder/frontendBuilder.py @@ -1,390 +1,420 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- import sys, os, re import cssmin import jsmin import codecs import shutil import StringIO import urllib import main +#=============================================================================== + class FrontendBuilder(object): def __init__ (self, frontend, settings, repositoryVersion): if '.' in frontend: moduleComponents = frontend.split('.') self.module = moduleComponents[0] self.submodule = moduleComponents[1] else: self.module = frontend self.submodule = frontend self.settings = settings self.projectDir = main.projectBaseDir() # self.repository = repository.repositoryWithPath(self.projectDir) self.repositoryVersion = repositoryVersion self.processedFiles = {} - + + #--------------------------------------------------------------------------- + + def name (self): + raise NotImplementedError() + + + def copyStaticResources (self, targetFolder): + raise NotImplementedError() + + #--------------------------------------------------------------------------- def log (self, message): - print "frontend [" + self.module + "]: " + message + module = self.module + if (self.module != self.submodule): + module = module + "." + self.submodule + print "frontend [" + module + "]: " + message def absolutePathForSources (self): return os.path.join(self.projectDir, 'frontend', self.module) def absolutePathForSourceFile (self, basePath, file): return os.path.join(self.absolutePathForSources(), basePath, file) def absolutePathForTargetFile (self, folder, basePath, file): return os.path.join(folder, self.module, basePath, file) def filterFiles (self, files): result = [] for file in files: if file.startswith('--'): pass else: result.append(file) return result def copyResources (self, sourceFolder, destinationFolder, fileType): - for file in self.filterFiles(self.settings[fileType]): - src = self.absolutePathForSourceFile(fileType, file) - dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) - main.createFolder(os.path.dirname(dst)) - shutil.copy2(src, dst) + if fileType in self.settings: + for file in self.filterFiles(self.settings[fileType]): + src = self.absolutePathForSourceFile(fileType, file) + dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) + main.createFolder(os.path.dirname(dst)) + shutil.copy2(src, dst) + else: + srcFolder = os.path.join(self.absolutePathForSources(), fileType) + dstFolder = os.path.join(destinationFolder, self.module, fileType) + if not(os.path.exists(dstFolder)): + shutil.copytree(srcFolder, dstFolder) + +# try: +# shutil.copytree(srcFolder, dstFolder) +# except: +# pass + def copyResourcesToFolder (self, targetFolder): self.copyResources(self.projectDir, targetFolder, 'css') self.copyResources(self.projectDir, targetFolder, 'js') + self.copyResources(self.projectDir, targetFolder, 'images') + self.copyStaticResources(targetFolder) def loadFilesContent (self, basePath, files): result = "" for file in self.filterFiles(files): try: fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8') except: print "FILE: " + file result += fileHandler.read() + '\n' fileHandler.close() return result def template (self): processedFile = 'html_template' if not self.processedFiles.has_key(processedFile): # self.processedFiles[processedFile] = self.loadFilesContent('html', ['index_template.html']) self.processedFiles[processedFile] = self.loadFilesContent('html', [self.settings['html.template']]) return self.processedFiles[processedFile] def cssminCompressor (self, css): # package found here: # - http://stackoverflow.com/questions/222581/python-script-for-minifying-css/2396777#2396777 # actual downloaded version: http://pypi.python.org/pypi/cssmin/0.1.4 return cssmin.cssmin(css) def regexCssCompressor (self, css): # http://stackoverflow.com/questions/222581/python-script-for-minifying-css/223689#223689 # remove comments - this will break a lot of hacks :-P css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack css = re.sub( r'/\*[\s\S]*?\*/', "", css ) css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack # url() doesn't need quotes css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css ) # spaces may be safely collapsed as generated content will collapse them anyway css = re.sub( r'\s+', ' ', css ) # shorten collapsable colors: #aabbcc to #abc css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css ) # fragment values can loose zeros css = re.sub( r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css ) for rule in re.findall( r'([^{]+){([^}]*)}', css ): # we don't need spaces around operators selectors = [re.sub( r'(?<=[\[\(>+=])\s+|\s+(?=[=~^$*|>+\]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )] # order is important, but we still want to discard repetitions properties = {} porder = [] for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ): key = prop[0].strip().lower() if key not in porder: porder.append( key ) properties[ key ] = prop[1].strip() # output rule if it contains any declarations if properties: print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] ) return css def compressCSS (self, css): self.log("compressing CSS") #return self.regexCssCompressor(css) return self.cssminCompressor(css) #========================================================================== def compressJS_jsmin (self, js, description): self.log("compressing " + description + " code") original = StringIO.StringIO(js) output = StringIO.StringIO() jsMinifier = jsmin.JavascriptMinify() jsMinifier.minify(original, output) result = output.getvalue() original.close() output.close() return result def compressJS_closureCompiler (self, js, description): # Googles Closure compiler # java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js result = js return result def compressJS (self, js, description): return self.compressJS_jsmin(js, description) #return self.compressJS_closureCompiler(js, description) #========================================================================== def packBookmarklet (self, bookmakeletCode, version): replacers = [ ('isLoginForm', 'ilf'), ('findLoginForm', 'flf'), ('findLoginForm', 'flf'), ('formParameters', 'fp' ), ('pageParameters', 'pp' ), ('serializeJSON', 'sj' ), ('reprString', 'rs' ), ('logFormParameters', 'lfp'), ('loadClipperzBookmarklet', 'lcb'), ('loginForm', 'lf' ), ('parameters', 'p' ), ('inputElementValues', 'iev'), ] result = self.compressJS(bookmakeletCode, version + " bookmarklet") result = re.sub('\n', ' ', result) # Fit all in a single line # result = re.sub('\s+', ' ', result) # Collapse "redundant" spaces. WARNING: this could have some evil side effects on constant strings used inside to code!! # result = re.sub('\s?([,\+=\(\)\{\};])\s?', '\\1', result) for replacer in replacers: result = re.sub(replacer[0], replacer[1], result) # <!-- escaping required to handle the bookmarklet code within the javascript code --> result = re.sub('\://', '%3a%2f%2f', result) result = re.sub('/', '%2f', result) # result = re.sub('"', '%22', result) result = re.sub('"', '\\"', result) result = re.sub('\"', '%22', result) result = re.sub('\'', '%22', result) result = re.sub('\\\\', '%5c', result) result = result.strip() result = 'javascript:' + result # replacers = [ # ('aForm', '_1' ), # ('inputFields', '_2' ), # ('passwordFieldsFound', '_3' ), # ('aDocument', '_6' ), # ('aLevel', '_7' ), # # ('result', '_8' ), # ('documentForms', '_9' ), # ('iFrames', '_c' ), # ('anInputElement', '_d' ), # ('options', '_f' ), # ('option', '_12'), # ('aLoginForm', '_13'), # # ('action', '_17'), # ('radioValues', '_18'), # ('radioValueName', '_19'), # ('inputElement', '_1a'), # ('elementValues', '_1b'), # ('radioValue', '_1c'), # ('values', '_1d'), # ('objtype', '_21'), # ('useKey', '_27'), # ('bookmarkletDiv', '_28'), # ('someParameters', '_29'), # ('anException', '_2a'), # ('newDiv', '_2b'), # ('base_url', '_2c'), # ('help_url', '_2d'), # ('logo_image_url', '_2e'), # ('background_image_url','_2f'), # ('close_image_url', '_30'), # # ('bookmarklet_textarea','_31'), # ('innerHTML', '_32'), # ] # for replacer in replacers: # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result) # replacers = [ # ('headNode', '_1' ), # ('clipperzScriptNode', '_2' ), # ] # for replacer in replacers: # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result) # result = re.sub(';', ';\n', result) return result def bookmarklet (self): cacheKey = 'bookmarklet' if not self.processedFiles.has_key(cacheKey): result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";' self.processedFiles[cacheKey] = result else: result = self.processedFiles[cacheKey] return result def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType): result = self.template() - result = result.replace('@page.title@', pageTitle, 1) - result = result.replace('@copyright@', copyright, 1) - result = result.replace('@css@', css, 1) - #result = result.replace('@bookmarklet@', bookmarklet, 1) - result = result.replace('@application.version@', version, 1) - result = result.replace('@application.version.type@', versionType, 1) - result = result.replace('@js_' + jsLoadMode + '@', code, 1) + result = result.replace('@page.title@', pageTitle) + result = result.replace('@copyright@', copyright) + result = result.replace('@css@', css) + #result = result.replace('@bookmarklet@', bookmarklet) + result = result.replace('@application.version@', version) + result = result.replace('@application.version.type@', versionType) + result = result.replace('@js_' + jsLoadMode + '@', code) result = re.sub('@js_[^@]+@', '', result) return result def assembleCopyrightHeader (self): processedFile = 'copyright' if not self.processedFiles.has_key(processedFile): #self.log("assembling copyright header") copyrightValues = self.settings['copyright.values'] license = self.loadFilesContent('../../properties', ['license.txt']) result = self.loadFilesContent('properties', ['creditsAndCopyrights.txt']) result = re.sub('@clipperz.license@', license, result) for key in copyrightValues: result = re.sub('@'+key+'@', copyrightValues[key], result) self.processedFiles[processedFile] = result return self.processedFiles[processedFile] def cssTagsForFiles (self, basePath, files): #<link rel="stylesheet" type="text/css" href="./css/reset-min.css" /> return '\n'.join(map(lambda file: '<link rel="stylesheet" type="text/css" href="' + basePath + '/' + file + '" />', files)) def cssTagForContent (self, content): return '<style type="text/css">' + content + '</style>' def scriptTagsForFiles (self, basePath, files): #<script type='text/javascript' src='./js/src/bookmarklet.js'></script> return '\n'.join(map(lambda file: '<script type="text/javascript" src="' + basePath + '/' + file + '" charset="utf-8"></script>', files)) def scriptTagForContent (self, content): return '<script>' + content + '</script>' def assembleVersion (self, pageTitle, copyright, css, js, jsLoadMode, version, versionType): cacheKey = version + "-" + versionType if not self.processedFiles.has_key(cacheKey): result = self.replaceTemplatePlaceholders(pageTitle, copyright, css, js, jsLoadMode, version, versionType) self.processedFiles[cacheKey] = result else: result = self.processedFiles[cacheKey] #self.log("# cacheKey:\n" + result) return result def assemble (self, assemblyMode='INSTALL', versionType='LIVE'): if versionType == 'LIVE': pageTitle = "Clipperz - " + self.module else: pageTitle = "Clipperz - " + self.module + " [" + versionType + " - " + assemblyMode +"]" if assemblyMode == 'INSTALL': copyright = self.assembleCopyrightHeader() css = self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css']))) js = self.scriptTagForContent( self.bookmarklet() + '\n' + self.compressJS(self.loadFilesContent('js', self.settings['js']), "application") ) jsLoadMode = 'EMBEDDED' elif assemblyMode == 'DEBUG': copyright = self.assembleCopyrightHeader() css = self.cssTagsForFiles('./css', self.filterFiles(self.settings['css'])) js = self.scriptTagForContent(self.bookmarklet()) + \ '\n' + \ self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js'])) jsLoadMode = 'LINKED' elif assemblyMode == 'DEVELOPMENT': copyright = "" css = self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css'])) js = self.scriptTagForContent(self.bookmarklet()) + \ '\n' + \ self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js'])) jsLoadMode = 'LINKED' + versionType = 'development' else: raise NotImplementedError() return self.assembleVersion( pageTitle = pageTitle, copyright = copyright, css = css, js = js, jsLoadMode = jsLoadMode, version = self.repositoryVersion, versionType = versionType ) diff --git a/scripts/builder/frontends/betaBuilder.py b/scripts/builder/frontends/betaBuilder.py new file mode 100644 index 0000000..c5a3e76 --- a/dev/null +++ b/scripts/builder/frontends/betaBuilder.py @@ -0,0 +1,14 @@ +from frontendBuilder import FrontendBuilder +import shutil + +class BetaBuilder(FrontendBuilder): + + def name(self): + return "/beta builder" + + def copyStaticResources (self, targetFolder): + for file in self.filterFiles(self.settings['staticResources']): + src = self.absolutePathForSourceFile('staticResources', file) + dst = self.absolutePathForTargetFile(targetFolder, '', file) + shutil.copy2(src, dst) + diff --git a/scripts/builder/frontends/gammaBuilder.py b/scripts/builder/frontends/gammaBuilder.py new file mode 100644 index 0000000..35fa68b --- a/dev/null +++ b/scripts/builder/frontends/gammaBuilder.py @@ -0,0 +1,26 @@ +from frontendBuilder import FrontendBuilder +import shutil + +class GammaBuilder(FrontendBuilder): + + def name(self): + return "/gamma builder" + + def copyStaticResources (self, targetFolder): + resourcesToCopy = [ + {'folder': 'html', 'source': 'exit_template.html', 'target': 'exit.html'}, + {'folder': 'css', 'source': 'static.css', 'target': 'static.css'} + ] + + for resource in resourcesToCopy: + src = self.absolutePathForSourceFile(resource['folder'], resource['source']) + dst = self.absolutePathForTargetFile(targetFolder, '', resource['target']) + shutil.copy2(src, dst) + + # src = self.absolutePathForSourceFile('html', 'exit_template.html') + # dst = self.absolutePathForTargetFile(targetFolder, '', 'exit.html') + # shutil.copy2(src, dst) + + # src = self.absolutePathForSourceFile('css', 'static.css') + # dst = self.absolutePathForTargetFile(targetFolder, '', 'static.css') + # shutil.copy2(src, dst) diff --git a/scripts/builder/frontends/gamma_mobileBuilder.py b/scripts/builder/frontends/gamma_mobileBuilder.py new file mode 100644 index 0000000..f2e80c9 --- a/dev/null +++ b/scripts/builder/frontends/gamma_mobileBuilder.py @@ -0,0 +1,9 @@ +from frontendBuilder import FrontendBuilder + +class Gamma_MobileBuilder(FrontendBuilder): + + def name(self): + return "/gamma.mobile builder" + + def copyStaticResources (self, targetFolder): + pass diff --git a/scripts/builder/main.py b/scripts/builder/main.py index 6fce65d..b9fe04a 100755 --- a/scripts/builder/main.py +++ b/scripts/builder/main.py @@ -1,177 +1,191 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- import sys import os import json import shutil import pprint import codecs import itertools from collections import deque -import frontendBuilder +#import frontendBuilder import repository pp = pprint.PrettyPrinter(indent=4, depth=4) #-------------------------------------------------------------------- def scriptDir (): return os.path.dirname(sys.argv[0]) def projectBaseDir (): return os.path.abspath(scriptDir() + '/../..') def projectTargetDir(): return projectBaseDir() + '/target/' #-------------------------------------------------------------------- def createFolder (path): if not os.path.exists(path): os.makedirs(path) #-------------------------------------------------------------------- def loadSettings (component, module): # print "MODULE: " + module if '.' in module: moduleComponents = module.split('.') module = moduleComponents[0] submodule = moduleComponents[1] else: submodule = module #settings = codecs.open(projectBaseDir() + os.sep + component + os.sep + module + os.sep + 'properties' + os.sep + submodule + '.properties.json', 'r', 'utf-8') settings = codecs.open(os.path.join(projectBaseDir(), component, module, 'properties', submodule + '.properties.json'), 'r', 'utf-8') result = json.load(settings) settings.close return result #==================================================================== # # def assembleFrontend (frontend, versions): # result = {} # settings = loadSettings('frontend', frontend) # builder = frontendBuilder.FrontendBuilder(frontend, settings, projectBaseDir()) # # for version in versions: # if version == 'install': # result[version] = builder.assembleInstallVersion() # elif version == 'debug': # result[version] = builder.assembleDebugVersion() # else: # raise Exception('unrecognized version: ' + version) # # return result # #==================================================================== def assembleBackend (backend, frontends, versions): settings = loadSettings('backend', backend) builderModuleName = backend + 'Builder' builderClassName = backend.capitalize() + 'Builder' - + #print ("BUILD BACKENDS - module: " + builderModuleName + " , class: " + builderClassName) builderModule = __import__(builderModuleName) builderClass = getattr(builderModule, builderClassName) backendBuilder = builderClass(projectTargetDir(), frontends, versions, settings) backendBuilder.run() #==================================================================== def build (settings, repository): frontends = [] if repository.areTherePendingChanges(): - print "\nWARNING: repository has pending changes\n" + if 'install' in settings['versions']: + raise Exception("repository has pending changes, can't 'install'") + else: + print "\nWARNING: repository has pending changes\n" for frontend in settings['frontends']: - frontends.append(frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version())) + normalizedFrontendName = frontend.replace(".", "_") + builderModuleName = normalizedFrontendName + 'Builder' + builderClassName = normalizedFrontendName.title() + 'Builder' + + #print ("BUILD FRONTEND - module: " + builderModuleName + " , class: " + builderClassName) + builderModule = __import__(builderModuleName) + builderClass = getattr(builderModule, builderClassName) + builder = builderClass(frontend, loadSettings('frontend', frontend), repository.version()) + #builder = frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version()) + frontends.append(builder) for backend in settings['backends']: assembleBackend(backend, frontends, settings['versions']) #-------------------------------------------------------------------- def clean (): # print "cleaning up …" if os.path.exists(projectTargetDir()): shutil.rmtree(projectTargetDir()) #-------------------------------------------------------------------- def usage (message): if message != None: print "ERROR: " + message print # print "build clean" # print "build clean install" print "build install --ALL" print "build install debug --ALL" + print "build install debug development --ALL" # print "build clean install debug --ALL" print "build install debug --backends php python --frontends beta gamma" print "build install debug development --backends php python --frontends beta gamma gamma.mobile" exit(1) #-------------------------------------------------------------------- def allFrontends (): - return ['beta', 'gamma', 'mobile'] + return ['beta', 'gamma', 'gamma.mobile'] def allBackends (): return ['php', 'python'] #-------------------------------------------------------------------- def main (): settings = {} parameters = list(itertools.islice(sys.argv, 1, None)) sys.path.append(os.path.join(scriptDir(), 'backends')) + sys.path.append(os.path.join(scriptDir(), 'frontends')) currentRepository = repository.repositoryWithPath(projectBaseDir()) clean() versions = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters)) settings['versions'] = versions; #['debug', 'install', 'development'] parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters)) if len(parameters) > 0: parameter = parameters.popleft() if parameter == "--ALL": settings['frontends'] = allFrontends() settings['backends'] = allBackends() else: while parameter != None: values = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters)) if parameter == "--backends": settings['backends'] = values elif parameter == "--frontends": settings['frontends'] = values parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters)) if parameters: parameter = parameters.popleft() else: parameter = None if (not settings.has_key('versions')): usage("missing 'versions'") if (not settings.has_key('frontends')): usage("missing 'frontends'") if (not settings.has_key('backends')): usage("missing 'backends'") build(settings, currentRepository) else: usage("Suggestions on how to call the 'build' script:") if __name__ == "__main__": - main() + main() diff --git a/scripts/dev-proxy b/scripts/dev-proxy new file mode 100755 index 0000000..e5980e3 --- a/dev/null +++ b/scripts/dev-proxy @@ -0,0 +1,7 @@ +#!/bin/bash + +readonly CURR_DIR=$(cd "$(dirname "$0")"; pwd -P) + +#${CURR_DIR}/proxy/main.py $@ +python ${CURR_DIR}/proxy/main.py $@ +#twistd -y ${CURR_DIR}/proxy/main.py --pidfile=${CURR_DIR}/../target/proxy/proxy.pid --logfile=${CURR_DIR}/../target/proxy/logs/proxy.log
\ No newline at end of file diff --git a/scripts/proxy/main.py b/scripts/proxy/main.py new file mode 100755 index 0000000..107ba16 --- a/dev/null +++ b/scripts/proxy/main.py @@ -0,0 +1,95 @@ +from twisted.internet import reactor +from twisted.web import proxy, server, http, resource, static +from posixpath import basename, dirname + +import copy +import sys +import os +import pprint + +#-------------------------------------------------------------------- + +def scriptDir (): + return os.path.dirname(sys.argv[0]) + +def projectBaseDir (): + return os.path.abspath(scriptDir() + '/../..') + +def projectTargetDir(): + return projectBaseDir() + '/target/' + +#-------------------------------------------------------------------- + +class ClipperzTestSite(server.Site): + + def __init__(self, resource, logPath=None, timeout=60 * 60 * 12): + server.Site.__init__(self, resource, logPath, timeout) + + + def getResourceFor(self, request): + if request.uri.startswith('/json') or request.uri.startswith('/dump'): + request.site = self + request.sitepath = copy.copy(request.prepath) + result = resource.getChildForRequest(self.resource, request) + + else: + pathParts = request.uri.split('/') + version = pathParts[1] + + if pathParts[2].startswith('index.'): + contentType = 'text/html' + absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2]) + result = static.File(absoluteFilePath, contentType) + + else: +# http://homer.local:8888/beta/css/clipperz/images/loginInfoBackground.png +# pathParts: ['', 'beta', 'css', 'clipperz', 'images', 'loginInfoBackground.png'] + try: + imagePathIndex = pathParts.index('images') + resourceType = 'images' + for _ in range(2, imagePathIndex): + del pathParts[2] + except: + resourceType = pathParts[2] + + basePath = projectBaseDir() + '/frontend' + if resourceType == 'images': + fileExtension = os.path.splitext(request.uri)[1] + if fileExtension == '.png': + contentType = 'image/png' + elif fileExtension == '.jpg': + contentType = 'image/jpeg' + elif fileExtension == '.gif': + contentType = 'image/gif' + else: + print "ERROR - unknown image extension: " + fileExtension + + absoluteFilePath = basePath + '/'.join(pathParts) + else: + resourceType = pathParts[2] + + if resourceType == 'css': + contentType = 'text/css' + elif resourceType == 'js': + contentType = 'text/javascript' + else: + contentType = 'text/html' + + absoluteFilePath = basePath + request.uri + + result = static.File(absoluteFilePath, contentType) + + + return result + + + +def main (): + site = ClipperzTestSite(proxy.ReverseProxyResource('localhost', 8084, '/java-backend')) + reactor.listenTCP(8888, site) + reactor.run() + + +if __name__ == "__main__": + main() + |