Fixed minor issues reported by user after official release of /delta
This commit is contained in:
parent
cdfd739897
commit
1f9c30cdfb
@ -628,6 +628,9 @@ html {
|
||||
input[type=text] {
|
||||
-webkit-appearance: none; }
|
||||
|
||||
.mainPage {
|
||||
height: 100%; }
|
||||
|
||||
.mainPage > #selectionPanel {
|
||||
position: fixed;
|
||||
z-index: 20;
|
||||
@ -687,6 +690,10 @@ input[type=text] {
|
||||
flex: none;
|
||||
cursor: pointer; }
|
||||
|
||||
/* Firefox considers 100% respect to height of the whole window, this is rule is necessary to eliminate the card toolbar offset. */
|
||||
@-moz-document url-prefix() {
|
||||
#mainPanel.extra-wide .subpanel.cardContent {
|
||||
height: calc(100% - 50px); } }
|
||||
#mainPanel {
|
||||
left: 0px; }
|
||||
#mainPanel.extra-wide {
|
||||
@ -728,7 +735,8 @@ input[type=text] {
|
||||
display: none;
|
||||
visibility: hidden; }
|
||||
#mainPanel.extra-wide div.addCardButton {
|
||||
margin-left: 20%; }
|
||||
margin-left: 20%;
|
||||
z-index: 5; }
|
||||
#mainPanel.wide {
|
||||
transition: left 0.3s ease-in-out; }
|
||||
#mainPanel.wide .container {
|
||||
@ -764,7 +772,8 @@ input[type=text] {
|
||||
visibility: visible;
|
||||
display: block; }
|
||||
#mainPanel.narrow div.addCardButton {
|
||||
margin-left: 75%; }
|
||||
margin-left: 75%;
|
||||
z-index: 5; }
|
||||
#mainPanel.open.left {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
@ -1050,7 +1059,7 @@ div.cardContent {
|
||||
-webkit-border-radius: 30px;
|
||||
-moz-border-radius: 30px;
|
||||
border-radius: 30px;
|
||||
z-index: 1;
|
||||
z-index: 5;
|
||||
position: relative;
|
||||
bottom: 0px;
|
||||
font-size: 45pt;
|
||||
@ -1119,7 +1128,8 @@ div.cardContent {
|
||||
position: relative;
|
||||
z-index: 11; }
|
||||
div.cardContent div.cardDetail.column div.editWrapper > div.edit .content {
|
||||
background-color: white; }
|
||||
background-color: white;
|
||||
-webkit-transform: translate3d(0, 0, 0); }
|
||||
div.cardContent div.cardDetail.column div.editWrapper .mask {
|
||||
background-color: rgba(0, 0, 0, 0.6); }
|
||||
div.cardContent div.cardDetail.column > div.view {
|
||||
@ -1181,10 +1191,12 @@ div.cardContent {
|
||||
flex: none;
|
||||
height: 48px;
|
||||
line-height: 48px; }
|
||||
.cardDetailToolbar.edit li.save {
|
||||
cursor: default; }
|
||||
.cardDetailToolbar.edit.hasPendingChanges li.save {
|
||||
cursor: pointer; }
|
||||
.cardDetailToolbar.edit {
|
||||
-webkit-transform: translate3d(0, 0, 0); }
|
||||
.cardDetailToolbar.edit li.save {
|
||||
cursor: default; }
|
||||
.cardDetailToolbar.edit.hasPendingChanges li.save {
|
||||
cursor: pointer; }
|
||||
.cardDetailToolbar.commands > div {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
@ -1572,7 +1584,7 @@ div.dialogBox {
|
||||
font-size: 30pt;
|
||||
line-height: 70px; }
|
||||
#loginPage div.loginForm.narrow footer {
|
||||
max-height: 25px;
|
||||
/* max-height: 25px; */
|
||||
line-height: 20pt; }
|
||||
#loginPage div.loginForm.extra-short header {
|
||||
font-size: 18pt; }
|
||||
@ -1592,17 +1604,19 @@ div.dialogBox {
|
||||
#loginPage div.loginForm.extra-short footer {
|
||||
font-size: 14pt; }
|
||||
|
||||
.links ul li {
|
||||
color: white;
|
||||
cursor: pointer; }
|
||||
.links ul li:after {
|
||||
content: '-';
|
||||
padding-left: 4px;
|
||||
padding-right: 4px; }
|
||||
.links ul li:last-child:after {
|
||||
content: '';
|
||||
padding-left: 0px;
|
||||
padding-right: 0px; }
|
||||
.links ul {
|
||||
margin-bottom: 1em; }
|
||||
.links ul li {
|
||||
color: white;
|
||||
cursor: pointer; }
|
||||
.links ul li:after {
|
||||
content: '-';
|
||||
padding-left: 4px;
|
||||
padding-right: 4px; }
|
||||
.links ul li:last-child:after {
|
||||
content: '';
|
||||
padding-left: 0px;
|
||||
padding-right: 0px; }
|
||||
|
||||
#registrationPage {
|
||||
background-color: black;
|
||||
@ -2568,33 +2582,19 @@ span.count {
|
||||
display: block;
|
||||
margin: 1em 0;
|
||||
border: 0; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card {
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-flex-direction: row;
|
||||
-moz-flex-direction: row;
|
||||
-ms-flex-direction: row;
|
||||
flex-direction: row;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 0px;
|
||||
border-bottom: 1px solid #333; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card.archived {
|
||||
background-color: #333; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card input {
|
||||
width: 30px;
|
||||
margin-top: 6px;
|
||||
-webkit-box-flex: none;
|
||||
-webkit-flex: none;
|
||||
-moz-box-flex: none;
|
||||
-moz-flex: none;
|
||||
-ms-flex: none;
|
||||
flex: none; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-flex-direction: column;
|
||||
-moz-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview {
|
||||
-webkit-box-flex: auto;
|
||||
-webkit-flex: auto;
|
||||
-moz-box-flex: auto;
|
||||
@ -2611,44 +2611,140 @@ span.count {
|
||||
-webkit-flex-direction: column;
|
||||
-moz-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
height: auto; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent h3 {
|
||||
font-size: 24pt;
|
||||
padding-bottom: 6px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent ul.tagList li {
|
||||
display: inline-block;
|
||||
padding-right: 10px;
|
||||
padding-bottom: 5px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent ul.tagList li:before {
|
||||
content: 'tag';
|
||||
font-family: 'clipperz-icons';
|
||||
-webkit-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-moz-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-ms-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-o-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 10pt;
|
||||
padding-right: 5px;
|
||||
line-height: 28px;
|
||||
color: #ccc; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent dl dt {
|
||||
font-size: 12pt;
|
||||
flex-direction: column; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.selectButtons {
|
||||
-webkit-box-flex: none;
|
||||
-webkit-flex: none;
|
||||
-moz-box-flex: none;
|
||||
-moz-flex: none;
|
||||
-ms-flex: none;
|
||||
flex: none;
|
||||
color: gray; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.selectButtons span {
|
||||
padding-right: 10px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.selectButtons a {
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
font-weight: bold; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.selectButtons a:after {
|
||||
font-weight: normal;
|
||||
color: gray;
|
||||
content: " - "; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.selectButtons a:last-child:after {
|
||||
content: ""; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.tagButtons {
|
||||
-webkit-box-flex: none;
|
||||
-webkit-flex: none;
|
||||
-moz-box-flex: none;
|
||||
-moz-flex: none;
|
||||
-ms-flex: none;
|
||||
flex: none;
|
||||
color: gray;
|
||||
line-height: 16pt; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent dl dd {
|
||||
font-size: 16pt;
|
||||
color: white;
|
||||
line-height: 24pt;
|
||||
padding-bottom: 6pt; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent dl dd.PASSWORD {
|
||||
font-family: clipperz-password; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview li.card div.cardContent p {
|
||||
font-size: 10pt;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px; }
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px solid #333; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.tagButtons label {
|
||||
cursor: pointer;
|
||||
line-height: 1.5em; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview div.tagButtons input {
|
||||
font-family: "clipperz-font";
|
||||
font-size: 12pt;
|
||||
color: white;
|
||||
background-color: black;
|
||||
border: 0px;
|
||||
border-bottom: 1px solid #333;
|
||||
outline: none;
|
||||
margin-left: 5px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul {
|
||||
-webkit-box-flex: auto;
|
||||
-webkit-flex: auto;
|
||||
-moz-box-flex: auto;
|
||||
-moz-flex: auto;
|
||||
-ms-flex: auto;
|
||||
flex: auto;
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-flex-direction: row;
|
||||
-moz-flex-direction: row;
|
||||
-ms-flex-direction: row;
|
||||
flex-direction: row;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 0px;
|
||||
border-bottom: 1px solid #333; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card.archived {
|
||||
background-color: #333; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card input {
|
||||
width: 30px;
|
||||
margin-top: 6px;
|
||||
-webkit-box-flex: none;
|
||||
-webkit-flex: none;
|
||||
-moz-box-flex: none;
|
||||
-moz-flex: none;
|
||||
-ms-flex: none;
|
||||
flex: none; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent {
|
||||
-webkit-box-flex: auto;
|
||||
-webkit-flex: auto;
|
||||
-moz-box-flex: auto;
|
||||
-moz-flex: auto;
|
||||
-ms-flex: auto;
|
||||
flex: auto;
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-flex-direction: column;
|
||||
-moz-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
height: auto; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent h3 {
|
||||
font-size: 24pt;
|
||||
padding-bottom: 6px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent ul.tagList li {
|
||||
display: inline-block;
|
||||
padding-right: 10px;
|
||||
padding-bottom: 5px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent ul.tagList li:before {
|
||||
content: 'tag';
|
||||
font-family: 'clipperz-icons';
|
||||
-webkit-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-moz-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-ms-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-o-font-feature-settings: "liga" 1, "dlig" 1;
|
||||
font-feature-settings: "liga" 1, "dlig" 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 10pt;
|
||||
padding-right: 5px;
|
||||
line-height: 28px;
|
||||
color: #ccc; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent dl dt {
|
||||
font-size: 12pt;
|
||||
color: gray;
|
||||
line-height: 16pt; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent dl dd {
|
||||
font-size: 16pt;
|
||||
color: white;
|
||||
line-height: 24pt;
|
||||
padding-bottom: 6pt; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent dl dd.PASSWORD {
|
||||
font-family: clipperz-password; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Preview div.preview ul li.card div.cardContent p {
|
||||
font-size: 10pt;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step.Import h5 {
|
||||
padding-bottom: 15px; }
|
||||
#extraFeaturesPanel .extraFeatureContent .dataImport .content .step table.csvTable {
|
||||
@ -2942,6 +3038,10 @@ div.cardList.narrow {
|
||||
border-bottom: 1px solid black; }
|
||||
#cardDetailPage .view .cardDetailToolbar.narrow .commandMenu.show .commandMenu ul li.disabled, .cardDetail .view .cardDetailToolbar.narrow .commandMenu.show .commandMenu ul li.disabled {
|
||||
color: #ddd; }
|
||||
#cardDetailPage .view .cardField textarea.fieldValue, .cardDetail .view .cardField textarea.fieldValue {
|
||||
line-height: 1em;
|
||||
height: 1.3em;
|
||||
outline: none; }
|
||||
#cardDetailPage .edit .cardDetailToolbar, .cardDetail .edit .cardDetailToolbar {
|
||||
background-color: #1863a1;
|
||||
color: white; }
|
||||
|
File diff suppressed because one or more lines are too long
@ -3,7 +3,7 @@
|
||||
-->
|
||||
<html manifest="manifest.appcache">
|
||||
<head>
|
||||
<title>@page.title@</title>
|
||||
<title>Clipperz - keep it to yourself</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
|
||||
|
||||
|
@ -291,7 +291,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User, Object, {
|
||||
'deleteAccount': function() {
|
||||
var deferredResult;
|
||||
|
||||
deferredResult = new MochiKit.Async.Deferred("User.deleteAccount", {trace: true});
|
||||
deferredResult = new MochiKit.Async.Deferred("User.deleteAccount", {trace:false});
|
||||
deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteUser');
|
||||
deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData'));
|
||||
deferredResult.callback();
|
||||
@ -302,7 +302,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User, Object, {
|
||||
'resetAllLocalData': function() {
|
||||
var deferredResult;
|
||||
|
||||
deferredResult = new MochiKit.Async.Deferred("User.resetAllLocalData", {trace: true});
|
||||
deferredResult = new MochiKit.Async.Deferred("User.resetAllLocalData", {trace:false});
|
||||
deferredResult.addCallback(MochiKit.Base.method(this, 'deleteAllCleanTextData'));
|
||||
deferredResult.addCallback(MochiKit.Base.method(this, function() {
|
||||
this.resetConnection();
|
||||
|
288
frontend/delta/js/Clipperz/PM/DefaultCards.js
Normal file
288
frontend/delta/js/Clipperz/PM/DefaultCards.js
Normal file
@ -0,0 +1,288 @@
|
||||
/*
|
||||
|
||||
Copyright 2008-2015 Clipperz Srl
|
||||
|
||||
This file is part of Clipperz, the online password manager.
|
||||
For further information about its features and functionalities please
|
||||
refer to http://www.clipperz.com.
|
||||
|
||||
* Clipperz 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 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. If not, see http://www.gnu.org/licenses/.
|
||||
|
||||
*/
|
||||
|
||||
Clipperz.PM.DefaultCards = [{
|
||||
"label": "Bank account (SAMPLE) finance samples",
|
||||
"data": {
|
||||
"directLogins": {},
|
||||
"notes": ""
|
||||
},
|
||||
"currentVersion": {
|
||||
"fields": {
|
||||
"a0aecf62b2d09b682efe2fce23c696499af420b1c7913350449c5946bc689fb5": {
|
||||
"label": "Bank",
|
||||
"value": "Deutsche Bank",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"d553591a24b729ad620516baf8231f3b26284e7eb9ed66f87c258602bf429e75": {
|
||||
"label": "Branch n. ",
|
||||
"value": "774942",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"0e4efb8fa7453b3d2503119a4ab5f77ac25345131897d7efb96127bf830a4cc9": {
|
||||
"label": "IBAN",
|
||||
"value": "DE89370400440532015007",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"48a914d71133ba50b62ab721a610f51ca65a0d9a9bc5f99fdb39eb8c1f5efd7b": {
|
||||
"label": "Web",
|
||||
"value": "https://www.db.com",
|
||||
"actionType": "URL",
|
||||
"hidden": null
|
||||
},
|
||||
"33af93bf7e3ba12265cea9248ee610ed8669fa853f6b3c1e3578e4517360f1e3": {
|
||||
"label": "User ID",
|
||||
"value": "76238784",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"2b62204b2de9e56e6ecfb4338d2dca9b87e6540b767a8a7f98b4afeb7859cad8": {
|
||||
"label": "Password",
|
||||
"value": "?)E%[9=GcgzaAftgP[LSEK7JJv",
|
||||
"actionType": "PASSWORD",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"reference": "e0c9c6835696cb7c318549871d53109902a3605e0420bc4a2de18332d792a521"
|
||||
}, {
|
||||
"label": "Bitcoin wallet (SAMPLE) bitcoin finance",
|
||||
"data": {
|
||||
"directLogins": {},
|
||||
"notes": ""
|
||||
},
|
||||
"currentVersion": {
|
||||
"fields": {
|
||||
"3ad0d7f4f945461ec693e822f03102d627aec57445009f8842b639c6067a2e58": {
|
||||
"label": "Type",
|
||||
"value": "paper wallet",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"d2f2a2b2c2df814e5662e336c7c54a48875b80c8858190afd7edec67ccc35b2f": {
|
||||
"label": "Wallet address",
|
||||
"value": "1Q7u3cnwo4tAQoBixPSrS5C39E6VaMHWKb ",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"809e4718e7e6517994a612ffa0ea8aeca9be9bb3f76b7fbf8188e1aaed5a6c69": {
|
||||
"label": "Private key [HEX]",
|
||||
"value": "2ce5820302fd6d8cf756e436484b76fcba11d5664e7bbc643b1bc29994b6bfe5",
|
||||
"actionType": "PASSWORD",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"reference": "34dc4fcad391d9dc794d1454461c9571edd9252604cec8bd8749f69f4c3c2796"
|
||||
}, {
|
||||
"label": "Credit card (SAMPLE) cards finance samples",
|
||||
"data": {
|
||||
"directLogins": {},
|
||||
"notes": ""
|
||||
},
|
||||
"currentVersion": {
|
||||
"fields": {
|
||||
"fcf42bfb358e51cd3b38c5f6603d7078dc5438a71cd680090593f219755eeedb": {
|
||||
"label": "Card circuit",
|
||||
"value": "American Express",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"e8dca8f4b4691c6eb2cce504b92e9668db2cb51279c190891db5e8e547389d93": {
|
||||
"label": "Card n.",
|
||||
"value": "8464 2366 1074 7732",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"548acc6e8addd28ab86f16db04102184a31bb0de7f4d6f3e641b6d1431b77fbc": {
|
||||
"label": "Cardholder name",
|
||||
"value": "Joe Clipperz",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"5088bcc13c39d6956128cf6ca88858238b96c882c99562deb40ce92dcce28a17": {
|
||||
"label": "Expire on",
|
||||
"value": "06/18",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"267ef52c9da17fa412945d64ea5d9cdfd90edc0ffcd39c896081185877c18cb0": {
|
||||
"label": "CVV2",
|
||||
"value": "853",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"571ce776861c51914933ea1ff7670e8dbdd5fa6f8add9d89420f3e93b33d0e61": {
|
||||
"label": "PIN",
|
||||
"value": "2744",
|
||||
"actionType": "PASSWORD",
|
||||
"hidden": true
|
||||
},
|
||||
"3356ea6c5e08149aebe8713e52e07f4ae887d3a37fc794cb522e1f0d1d3830e2": {
|
||||
"label": "Card website",
|
||||
"value": "https://www.americanexpress.com",
|
||||
"actionType": "URL",
|
||||
"hidden": null
|
||||
},
|
||||
"49f051d6974a5053dd56e07ba6316e774992d817875f705f9b792da41b8ae81a": {
|
||||
"label": "User ID",
|
||||
"value": "jclipperz",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"dc63ebdadb6337d696ab6b35a95aa3efb452b5c80eecb499f80bdc5fe053aac7": {
|
||||
"label": "Password",
|
||||
"value": "]Gj2ss{+Grg$fBbg}#E})5Re8G",
|
||||
"actionType": "PASSWORD",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"reference": "57cd76e6394ad853db42a41124e712b14bb3b7efd47e9ff8c56a05e41e1ab831"
|
||||
}, {
|
||||
"label": "Email account (SAMPLE) personal samples",
|
||||
"data": {
|
||||
"directLogins": {},
|
||||
"notes": ""
|
||||
},
|
||||
"currentVersion": {
|
||||
"fields": {
|
||||
"1df133740d37f98bd096a36ee09370f1786031f8f477aa179d4bd2b4470010ad": {
|
||||
"label": "Provider",
|
||||
"value": "Google Gmail",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"ce5ca8805dfe6da30a30aa030158f52609d9b939bd32be902fd49c1c10d6ec6c": {
|
||||
"label": "Email address",
|
||||
"value": "joe.clipperz@gmail.com",
|
||||
"actionType": "EMAIL",
|
||||
"hidden": null
|
||||
},
|
||||
"344f6510501901b7e6f35aa449958c0c50422f1f5c1d00071670e4df598ffbcd": {
|
||||
"label": "Web",
|
||||
"value": "https://mail.google.com",
|
||||
"actionType": "URL",
|
||||
"hidden": null
|
||||
},
|
||||
"bebb291e4d84149e6f60003a8da92ff30fed62d62f4894a31c222e7c82e660ac": {
|
||||
"label": "User",
|
||||
"value": "joe.clipperz",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"a14c4607164c288bbfb64788f740047b5d2b125b752d5a7666b78a8a1c994329": {
|
||||
"label": "password",
|
||||
"value": "]Gj2ss{+Grg$fBbg}#E})5Re8G",
|
||||
"actionType": "PASSWORD",
|
||||
"hidden": true
|
||||
},
|
||||
"16916013430075588cb1983f1bbb7cff75811e06d0a81b987581b2a12454c746": {
|
||||
"label": "IMAP",
|
||||
"value": "imap.gmail.com:993",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"082853916a0f66cae73308e7e5f99f0a540cfd89b20aa76abbc4e0ec2726ccc4": {
|
||||
"label": "SMTP",
|
||||
"value": "smtp.gmail.com:465",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
}
|
||||
}
|
||||
},
|
||||
"reference": "b9bca4fefae5175cecd5474cfb6c17cb7e53a01681aabfa882e2c6c92351958b"
|
||||
}, {
|
||||
"label": "Facebook (SAMPLE) social samples",
|
||||
"data": {
|
||||
"directLogins": {},
|
||||
"notes": ""
|
||||
},
|
||||
"currentVersion": {
|
||||
"fields": {
|
||||
"7a742214b8769b828958e2c6d095a7d71df4ade2e1736c54d2f2d5137f52762a": {
|
||||
"label": "URL",
|
||||
"value": "https://www.facebook.com",
|
||||
"actionType": "URL",
|
||||
"hidden": null
|
||||
},
|
||||
"e1d87357afa8a0b0e981aae7bfbfb5f1248be0e218a040bf4d2f283ef169cd4f": {
|
||||
"label": "Email",
|
||||
"value": "joe.clipperz@gmail.com",
|
||||
"actionType": "EMAIL",
|
||||
"hidden": null
|
||||
},
|
||||
"e91ad9bbacb439ca65e6e11cc9dee70ed5fa8d31f6be3c4a5ec02264fe5140ed": {
|
||||
"label": "Username",
|
||||
"value": "joeclipperz",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"af7da5ef0e3380f05b5501996153c3297c70276a45940e90ed0f7c568b33dbaf": {
|
||||
"label": "Password",
|
||||
"value": ">fA2UEpL6}<6&cSvrcfqfdNjvf",
|
||||
"actionType": "PASSWORD",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"reference": "76bbdd6b73c3b7e4843e152abab9af6c56ddcaf62c93dc84c45472c975e0b814"
|
||||
}, {
|
||||
"label": "Passport (SAMPLE) documents personal samples",
|
||||
"data": {
|
||||
"directLogins": {},
|
||||
"notes": ""
|
||||
},
|
||||
"currentVersion": {
|
||||
"fields": {
|
||||
"a7113badb94eba0de86752a8aa17e9de1c02cb8a537b1e702639073ee8fd2db2": {
|
||||
"label": "Passport n.",
|
||||
"value": "83A4568HL25-66",
|
||||
"actionType": "NONE",
|
||||
"hidden": false
|
||||
},
|
||||
"712b23e8ab1b325379142e2bd50a5d950553c1da1188686b827786923e984660": {
|
||||
"label": "Issued by",
|
||||
"value": "British Embassy in Berlin",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"e7ceb7f25709c195297ae64205d98d654e190290b7dc1b4e379c088a8b64bab1": {
|
||||
"label": "Issue date",
|
||||
"value": "11/09/2014",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
},
|
||||
"79441bc252208b632f1d51dd86ea62de20341c47eec3771ea40611ecff93edad": {
|
||||
"label": "Expiry date",
|
||||
"value": "10/09/2019",
|
||||
"actionType": "NONE",
|
||||
"hidden": null
|
||||
}
|
||||
}
|
||||
},
|
||||
"reference": "132697670c9553c95855e205a8fdd1a93f826836eb76f9657f69e81be262c077"
|
||||
}]
|
@ -291,7 +291,8 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
|
||||
'userDetails': someParameters['user']['header'],
|
||||
'statistics': someParameters['user']['statistics'],
|
||||
'userDetailsVersion': someParameters['user']['version'],
|
||||
'records': {}
|
||||
'records': {},
|
||||
'accountInfo': Clipperz.PM.Proxy.Offline.DataStore.defaultAccountInfo
|
||||
}
|
||||
} else {
|
||||
throw "user already exists";
|
||||
@ -882,4 +883,26 @@ console.log("Proxy.Offline.DataStore.updateOneTimePasswords: userOTPs:", aConnec
|
||||
|
||||
Clipperz.PM.Proxy.Offline.DataStore['exception'] = {
|
||||
'ReadOnly': new MochiKit.Base.NamedError("Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly")
|
||||
};
|
||||
|
||||
Clipperz.PM.Proxy.Offline.DataStore.defaultAccountInfo = {
|
||||
'features': [
|
||||
'UPDATE_CREDENTIALS',
|
||||
'EDIT_CARD',
|
||||
'CARD_DETAILS',
|
||||
'ADD_CARD',
|
||||
'DELETE_CARD',
|
||||
'OFFLINE_COPY',
|
||||
'LIST_CARDS'
|
||||
],
|
||||
'paymentVerificationPending': false,
|
||||
'currentSubscriptionType': 'EARLY_ADOPTER',
|
||||
'isExpiring': false,
|
||||
'latestActiveLevel': 'EARLY_ADOPTER',
|
||||
'payments': [],
|
||||
'featureSet': 'FULL',
|
||||
'latestActiveThreshold': '-1.00000000',
|
||||
'referenceDate': 'Fri, 03 April 2015 08:17:46 UTC',
|
||||
'isExpired': false,
|
||||
'expirationDate': 'Mon, 01 January 4001 00:00:00 UTC'
|
||||
};
|
@ -58,10 +58,33 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({
|
||||
handlePasswordFieldAction: function (aField) {
|
||||
var self = this;
|
||||
var newState = {}
|
||||
|
||||
|
||||
newState[aField['_reference']] = !this.state[aField['_reference']];
|
||||
|
||||
|
||||
return function () {
|
||||
var fieldReference = aField['_reference'];
|
||||
var currentTimeout;
|
||||
|
||||
if (newState[fieldReference]) {
|
||||
currentTimeout = setTimeout(function(){
|
||||
var newState;
|
||||
|
||||
newState = {};
|
||||
newState[fieldReference] = false;
|
||||
|
||||
self.setState(newState);
|
||||
}, Clipperz.PM.UI.Components.Cards.ViewClass.automaticRescrambleTimeout);
|
||||
}
|
||||
|
||||
if (self.state['currentTimeout']) {
|
||||
clearTimeout(self.state['currentTimeout']);
|
||||
delete self.state['currentTimeout'];
|
||||
}
|
||||
|
||||
if (currentTimeout) {
|
||||
newState['currentTimeout'] = currentTimeout;
|
||||
}
|
||||
|
||||
self.setState(newState);
|
||||
};
|
||||
},
|
||||
@ -193,7 +216,12 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({
|
||||
React.DOM.div({'className':'fieldEditAction'}, null),
|
||||
React.DOM.div({'className':'fieldValues'}, [
|
||||
React.DOM.div({'className':'fieldLabel'}, aField['label']),
|
||||
React.DOM.div({'className':Clipperz.PM.UI.Components.classNames(cardFieldValueClasses)}, aField['value']),
|
||||
React.DOM.textarea({
|
||||
'readOnly': true,
|
||||
'onClick': function(e) { e.target.select(); },
|
||||
'className':Clipperz.PM.UI.Components.classNames(cardFieldValueClasses),
|
||||
'value': aField['value']
|
||||
}),
|
||||
]),
|
||||
React.DOM.div({'className':'fieldAction'}, [
|
||||
React.DOM.span({'className':Clipperz.PM.UI.Components.classNames(cardFieldActionClasses), 'onClick':this.handleFieldAction(aField)}, aField['actionType'].toLowerCase() == 'password' ? 'view password' : aField['actionType'].toLowerCase())
|
||||
@ -258,4 +286,6 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({
|
||||
//=========================================================================
|
||||
});
|
||||
|
||||
Clipperz.PM.UI.Components.Cards.ViewClass.automaticRescrambleTimeout = 5000;
|
||||
|
||||
Clipperz.PM.UI.Components.Cards.View = React.createFactory(Clipperz.PM.UI.Components.Cards.ViewClass);
|
||||
|
@ -79,9 +79,7 @@ Clipperz.PM.UI.Components.ExtraFeatures.DataImportClass = React.createClass({
|
||||
]),
|
||||
React.DOM.div({'className': 'content' + ' ' + currentStep + ' ' + this.importContext().inputFormat()}, [
|
||||
React.DOM.div({'className': 'step' + ' ' + currentStep}, [
|
||||
new this.componentWithName(this.importContext().currentStep())({
|
||||
'importContext': this.importContext(),
|
||||
}),
|
||||
new this.componentWithName(this.importContext().currentStep())({'importContext': this.importContext()}),
|
||||
]),
|
||||
this.renderNavbar(currentStep),
|
||||
React.DOM.div({'className': 'buttons' + ' ' + currentStep}, [
|
||||
|
@ -28,7 +28,13 @@ Clipperz.PM.UI.Components.ExtraFeatures.DataImport.ImportClass = React.createCla
|
||||
//=========================================================================
|
||||
|
||||
importHandler: function (anEvent) {
|
||||
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'importCards', this.props.importContext.state('recordsToImport'));
|
||||
var recordsToImport = this.props.importContext.state('recordsToImport');
|
||||
|
||||
if (this.props.importContext.state('useImportTag') && this.props.importContext.state('importTag')) {
|
||||
this.props.importContext.enhanceJsonDataWithImportTag(recordsToImport, this.props.importContext.state('importTag'))
|
||||
}
|
||||
|
||||
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'importCards', recordsToImport);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
|
@ -28,7 +28,7 @@ Clipperz.PM.UI.Components.ExtraFeatures.DataImport.PreviewClass = React.createCl
|
||||
|
||||
getInitialState: function() {
|
||||
var recordsToImport;
|
||||
|
||||
|
||||
recordsToImport = MochiKit.Iter.reduce(
|
||||
function (acc, item) { acc[item['reference']] = item; return acc; },
|
||||
MochiKit.Base.filter(
|
||||
@ -47,6 +47,53 @@ Clipperz.PM.UI.Components.ExtraFeatures.DataImport.PreviewClass = React.createCl
|
||||
|
||||
//=========================================================================
|
||||
|
||||
selectRecordsToImport: function(records) {
|
||||
var newRecordsToImport;
|
||||
var i;
|
||||
|
||||
newRecordsToImport = {};
|
||||
for (i in records) {
|
||||
newRecordsToImport[records[i]['reference']] = records[i];
|
||||
}
|
||||
|
||||
this.setState({'recordsToImport': newRecordsToImport});
|
||||
this.props.importContext.setState('recordsToImport', MochiKit.Base.values(newRecordsToImport));
|
||||
},
|
||||
|
||||
selectAll: function() {
|
||||
this.selectRecordsToImport(this.props.importContext.state('jsonData'));
|
||||
},
|
||||
|
||||
selectNone: function() {
|
||||
this.selectRecordsToImport({});
|
||||
},
|
||||
|
||||
selectNotArchived: function() {
|
||||
this.selectRecordsToImport(MochiKit.Base.filter(function (aRecord) {
|
||||
return !Clipperz.PM.DataModel.Record.labelContainsArchiveTag(aRecord['label']);
|
||||
}, this.props.importContext.state('jsonData')));
|
||||
},
|
||||
|
||||
selectArchived: function() {
|
||||
this.selectRecordsToImport(MochiKit.Base.filter(function (aRecord) {
|
||||
return Clipperz.PM.DataModel.Record.labelContainsArchiveTag(aRecord['label']);
|
||||
}, this.props.importContext.state('jsonData')));
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
handleImportTagTextChange: function() {
|
||||
var newTag = this.refs['importTagText'].getDOMNode().value;
|
||||
|
||||
this.props.importContext.setState('importTag', newTag);
|
||||
},
|
||||
|
||||
handleImportTagCheckboxChange: function() {
|
||||
this.props.importContext.setState('useImportTag', ! this.props.importContext.state('useImportTag'));
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
toggleRecordToImport: function(record) {
|
||||
var newRecordsToImport;
|
||||
var recordPosition;
|
||||
@ -76,6 +123,10 @@ Clipperz.PM.UI.Components.ExtraFeatures.DataImport.PreviewClass = React.createCl
|
||||
tagList = MochiKit.Base.keys(tagObject);
|
||||
tagList = MochiKit.Base.filter(function(aTag) { return !Clipperz.PM.DataModel.Record.isSpecialTag(aTag); }, tagList);
|
||||
|
||||
if (this.props.importContext.state('useImportTag') && this.props.importContext.state('importTag')) {
|
||||
tagList.push(this.props.importContext.state('importTag'));
|
||||
}
|
||||
|
||||
if (tagList.length > 0) {
|
||||
result = React.DOM.ul({'className': 'tagList'},
|
||||
MochiKit.Base.map(function(aTag){
|
||||
@ -123,7 +174,32 @@ Clipperz.PM.UI.Components.ExtraFeatures.DataImport.PreviewClass = React.createCl
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var inputFormat = this.props.importContext.inputFormat();
|
||||
|
||||
return React.DOM.div({'className': 'preview'},
|
||||
React.DOM.div({'className': 'selectButtons'},
|
||||
React.DOM.span({}, "Select:"),
|
||||
React.DOM.a({'onClick': this.selectAll}, "All"),
|
||||
React.DOM.a({'onClick': this.selectNone}, "None"),
|
||||
(inputFormat == 'JSON') ? React.DOM.a({'onClick': this.selectNotArchived}, "Not Archived") : null,
|
||||
(inputFormat == 'JSON') ? React.DOM.a({'onClick': this.selectArchived}, "Archived") : null
|
||||
),
|
||||
React.DOM.div({'className': 'tagButtons'},
|
||||
React.DOM.input({
|
||||
'type': 'checkbox',
|
||||
'id': 'tagCheckbox',
|
||||
'checked': this.props.importContext.state('useImportTag'),
|
||||
'onChange': this.handleImportTagCheckboxChange
|
||||
}),
|
||||
React.DOM.label({'htmlFor': 'tagCheckbox'}, "Apply the following tag to imported cards:"),
|
||||
React.DOM.input({
|
||||
'ref': 'importTagText',
|
||||
'type': 'text',
|
||||
'value': this.props.importContext.state('importTag'),
|
||||
'disabled': ! this.props.importContext.state('useImportTag'),
|
||||
'onChange': this.handleImportTagTextChange
|
||||
})
|
||||
),
|
||||
React.DOM.ul({}, MochiKit.Base.map(MochiKit.Base.method(this, 'renderCard'), this.props.importContext.state('jsonData')))
|
||||
);
|
||||
},
|
||||
|
@ -120,7 +120,7 @@ Clipperz.PM.UI.Components.ExtraFeatures.PassphraseClass = React.createClass({
|
||||
|
||||
React.DOM.p({}, [
|
||||
React.DOM.input({'key':'confirm', 'id':'changePassphraseConfirmCheckbox', 'className':'confirmCheckbox', 'type':'checkbox', 'name':'confirm', 'ref':'confirm'}),
|
||||
React.DOM.label({'htmlFor':'changePassphraseConfirmCheckbox'}, "I understand that Clipperz will not be able to help me recovering a lost passphrase.")
|
||||
React.DOM.label({'htmlFor':'changePassphraseConfirmCheckbox'}, "I understand that Clipperz is unable to recover a lost passphrase.")
|
||||
]),
|
||||
]),
|
||||
React.DOM.button({'key':'button', 'type':'submit', 'disabled':!this.shouldEnableChangePassphraseButton(), 'className':'button'}, "Change passphrase"),
|
||||
|
@ -189,13 +189,13 @@ Clipperz.PM.UI.Components.Pages.RegistrationPageClass = React.createClass({
|
||||
render_TERMS_OF_SERVICE: function () {
|
||||
return React.DOM.div({'key':'termsOfService'}, [
|
||||
React.DOM.div({'key':'termsOfService_choice_1', 'className':'checkboxBlock'}, [
|
||||
React.DOM.label({'key':'termsOfService_label_1', 'htmlFor':'no_password_recovery'}, "I understand that Clipperz will not be able to recover a lost passphrase."),
|
||||
React.DOM.input({'key':'no_password_recovery', 'type':'checkbox', 'name':'no_password_recovery', 'ref':'no_password_recovery'}),
|
||||
React.DOM.p({'key':'termsOfService_description_1'}, "I understand that Clipperz will not be able to recover a lost passphrase.")
|
||||
React.DOM.label({'key':'termsOfService_label_1', 'htmlFor':'no_password_recovery'}, "I understand that Clipperz is unable to recover a lost passphrase."),
|
||||
React.DOM.input({'key':'no_password_recovery', 'type':'checkbox', 'name':'no_password_recovery', 'ref':'no_password_recovery', 'id':'no_password_recovery'}),
|
||||
React.DOM.p({'key':'termsOfService_description_1'}, "I understand that Clipperz is unable to recover a lost passphrase.")
|
||||
]),
|
||||
React.DOM.div({'key':'termsOfService_choice_2', 'className':'checkboxBlock'}, [
|
||||
React.DOM.label({'key':'termsOfService_label_2', 'htmlFor':'agree_terms_of_service'}, "I have read and agreed to the Terms of Service."),
|
||||
React.DOM.input({'key':'agree_terms_of_service', 'type':'checkbox', 'name':'agree_terms_of_service', 'ref':'agree_terms_of_service'}),
|
||||
React.DOM.input({'key':'agree_terms_of_service', 'type':'checkbox', 'name':'agree_terms_of_service', 'ref':'agree_terms_of_service', 'id':'agree_terms_of_service'}),
|
||||
React.DOM.p({'key':'termsOfService_description_2'}, [
|
||||
React.DOM.span({'key':'termsOfService_description_2_p1'}, "I have read and agreed to the "),
|
||||
React.DOM.a({'key':'termsOfService_description_2_p2', 'href':'https://clipperz.com/terms_service/', target:'_blank'}, "Terms of Service.")
|
||||
|
@ -32,6 +32,8 @@ Clipperz.PM.UI.ImportContext = function(anInputComponent) {
|
||||
'isInputStringValid': false,
|
||||
'inputFormat': 'UNDEFINED',
|
||||
'currentStep': 'Input',
|
||||
'useImportTag': true,
|
||||
'importTag': Clipperz.PM.UI.ImportContext.getDefaultImportTag()
|
||||
};
|
||||
|
||||
return this;
|
||||
@ -185,17 +187,20 @@ MochiKit.Base.update(Clipperz.PM.UI.ImportContext.prototype, {
|
||||
},
|
||||
|
||||
enhanceJsonDataWithCardReferences: function (someJsonData) {
|
||||
var now = new XDate();
|
||||
var dateString = now.toString('yyyyMMdd');
|
||||
|
||||
return MochiKit.Base.map(function (item) {
|
||||
item['reference'] = Clipperz.PM.Crypto.randomKey();
|
||||
// item['label'] = "COPY - " + item['label'];
|
||||
item['label'] = item['label'] + ' ' + Clipperz.PM.DataModel.Record.tagChar + "Import_" + dateString;
|
||||
return item;
|
||||
}, someJsonData);
|
||||
},
|
||||
|
||||
enhanceJsonDataWithImportTag: function(someJsonData, aTag) {
|
||||
return MochiKit.Base.map(function (item) {
|
||||
item['label'] = item['label'] + ' ' + Clipperz.PM.DataModel.Record.tagChar + aTag;
|
||||
return item;
|
||||
}, someJsonData);
|
||||
},
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
startCsvWizard: function (csvData) {
|
||||
@ -447,3 +452,10 @@ MochiKit.Base.update(Clipperz.PM.UI.ImportContext.prototype, {
|
||||
//=============================================================================
|
||||
__syntaxFix__: "syntax fix"
|
||||
});
|
||||
|
||||
Clipperz.PM.UI.ImportContext.getDefaultImportTag = function() {
|
||||
var now = new XDate();
|
||||
var dateString = now.toString('yyyyMMdd');
|
||||
|
||||
return "Import_" + dateString;
|
||||
}
|
||||
|
@ -341,7 +341,7 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
deferredResult.addMethod(this, 'setUser', user);
|
||||
deferredResult.addMethod(this, 'runApplication');
|
||||
deferredResult.addMethod(this.overlay(), 'done', "", 1);
|
||||
deferredResult.addErrback(MochiKit.Base.method(this, 'genericErrorHandler', someCredentials));
|
||||
deferredResult.addErrback(MochiKit.Base.method(this, 'genericErrorHandler', someCredentials, "login failed"));
|
||||
deferredResult.addErrback(MochiKit.Base.bind(function (anEvent, anError) {
|
||||
if (anError['isPermanent'] != true) {
|
||||
this.pages()['loginPage'].setProps({disabled:false, 'mode':this.loginMode()});
|
||||
@ -381,7 +381,8 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
MochiKit.Base.partial(MochiKit.Async.succeed, credentials['passphrase'])
|
||||
);
|
||||
deferredResult.addMethod(this, 'doLogin', credentials);
|
||||
deferredResult.addErrback(MochiKit.Base.method(this, 'genericErrorHandler', credentials));
|
||||
deferredResult.addMethod(this,'importCards', Clipperz.PM.DefaultCards);
|
||||
deferredResult.addErrback(MochiKit.Base.method(this, 'genericErrorHandler', credentials, "registration failed"));
|
||||
deferredResult.addErrback(MochiKit.Base.bind(function (anError) {
|
||||
if (anError['isPermanent'] != true) {
|
||||
this.pages()['registrationPage'].setProps({disabled:false});
|
||||
@ -636,7 +637,7 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
rangeFilter = MochiKit.Base.operator.identity;
|
||||
} else if (aFilter['type'] == 'RECENT') {
|
||||
filterCriteria = MochiKit.Base.operator.truth;
|
||||
sortCriteria = Clipperz.Base.reverseComparator(MochiKit.Base.keyComparator('accessDate'));
|
||||
sortCriteria = Clipperz.Base.reverseComparator(MochiKit.Base.keyComparator('_accessDate'));
|
||||
rangeFilter = function (someCards) { return someCards.slice(0, 10)};
|
||||
} else if (aFilter['type'] == 'SEARCH') {
|
||||
filterCriteria = this.regExpFilterGenerator(Clipperz.PM.DataModel.Record.regExpForSearch(aFilter['value']));
|
||||
@ -832,12 +833,13 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
*/
|
||||
//=========================================================================
|
||||
|
||||
genericErrorHandler: function (anEvent, anError) {
|
||||
genericErrorHandler: function (anEvent, aMessage, anError) {
|
||||
var errorMessage;
|
||||
var result;
|
||||
|
||||
result = anError;
|
||||
errorMessage = "login failed";
|
||||
// errorMessage = "login failed";
|
||||
errorMessage = aMessage;
|
||||
|
||||
if (anError['isPermanent'] === true) {
|
||||
this.pages()['errorPage'].setProps({message:anError.message});
|
||||
@ -925,7 +927,7 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
//console.log("ADD ITEM TO HISTORY");
|
||||
//console.log("ADD ITEM TO HISTORY - window", window);
|
||||
//console.log("ADD ITEM TO HISTORY - window.history", window.history);
|
||||
window.history.pushState({'fromPage': fromPage, 'toPage': toPage});
|
||||
window.history.pushState({'fromPage': fromPage, 'toPage': toPage}, "");
|
||||
//# window.history.pushState();
|
||||
//console.log("ADDED ITEM TO HISTORY");
|
||||
} else {
|
||||
@ -956,7 +958,6 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
|
||||
userInfo: function () {
|
||||
var result;
|
||||
|
||||
result = {};
|
||||
|
||||
result['checkPassphraseCallback'] = MochiKit.Base.bind(this.checkPassphrase,this);
|
||||
@ -1011,7 +1012,7 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
|
||||
//console.log("messageBox - this.user()", this.user());
|
||||
if (this.featureSet() == 'EXPIRED') {
|
||||
message = "Exprired subscription";
|
||||
message = "Expired subscription";
|
||||
level = 'ERROR';
|
||||
}
|
||||
|
||||
@ -1102,6 +1103,8 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
resetPanels: function () {
|
||||
this._isSelectionPanelOpen = false;
|
||||
this._isSettingsPanelOpen = false;
|
||||
|
||||
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'closeSettingsPanel');
|
||||
},
|
||||
|
||||
featureAvailableForStyles: function (listOfSupportedStyles) {
|
||||
@ -1344,6 +1347,15 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
MochiKit.Base.method(this.overlay(), 'show', "importing …", true),
|
||||
MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'toggleSettingsPanel'),
|
||||
// MochiKit.Base.method(this.pages()[this.currentPage()], 'setProps', {'mode':'view', 'showGlobalMask':false}),
|
||||
function () { return data; },
|
||||
MochiKit.Base.method(this,'importCards'),
|
||||
MochiKit.Base.method(this.overlay(), 'done', "finished", 1),
|
||||
MochiKit.Base.method(this.pages()[this.currentPage()], 'setProps', {'mode':'view', 'showGlobalMask':false}),
|
||||
], {trace:false});
|
||||
},
|
||||
|
||||
importCards: function(data) {
|
||||
return Clipperz.Async.callbacks("MainController.importCards", [
|
||||
function () { return data; },
|
||||
MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this.user(), 'createNewRecordFromJSON')),
|
||||
|
||||
@ -1358,8 +1370,6 @@ console.log("THE BROWSER IS OFFLINE");
|
||||
MochiKit.Base.method(this.user(), 'saveChanges'),
|
||||
MochiKit.Base.partial(MochiKit.Base.method(this, 'resetRecordsInfo')),
|
||||
MochiKit.Base.partial(MochiKit.Base.method(this, 'refreshUI', null)),
|
||||
MochiKit.Base.method(this.overlay(), 'done', "finished", 1),
|
||||
MochiKit.Base.method(this.pages()[this.currentPage()], 'setProps', {'mode':'view', 'showGlobalMask':false}),
|
||||
], {trace:false});
|
||||
},
|
||||
|
||||
|
@ -51,8 +51,8 @@
|
||||
"MochiKit/Selector.js",
|
||||
"-- MochiKit/Visual.js",
|
||||
|
||||
"React/react-0.13.1.js",
|
||||
"-- React/react.min-0.13.1.js",
|
||||
"-- React/react-0.13.1.js",
|
||||
"React/react.min-0.13.1.js",
|
||||
"-- #React/react-with-addons-0.13.1.js",
|
||||
"-- #React/react-with-addons.min-0.13.1.js",
|
||||
|
||||
@ -135,6 +135,8 @@
|
||||
"Clipperz/PM/PIN.js",
|
||||
"-- Clipperz/PM/BookmarkletProcessor.js",
|
||||
|
||||
"Clipperz/PM/DefaultCards.js",
|
||||
|
||||
"Clipperz/PM/DataModel/EncryptedRemoteObject.js",
|
||||
"Clipperz/PM/DataModel/User.js",
|
||||
"Clipperz/PM/DataModel/User.Header.Legacy.js",
|
||||
|
@ -40,6 +40,7 @@ input[type=text] {
|
||||
|
||||
.mainPage {
|
||||
// background-color: yellow;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mainPage > #selectionPanel {
|
||||
@ -93,6 +94,22 @@ input[type=text] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Firefox considers 100% respect to height of the whole window, this is rule is necessary to eliminate the card toolbar offset. */
|
||||
@-moz-document url-prefix() {
|
||||
|
||||
#mainPanel {
|
||||
&.extra-wide {
|
||||
.subpanel {
|
||||
&.cardContent {
|
||||
height: calc(100% - 50px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#mainPanel {
|
||||
// background-color: $yellow;
|
||||
left: 0px;
|
||||
@ -101,7 +118,7 @@ input[type=text] {
|
||||
@include sliding-panel-container();
|
||||
|
||||
.container {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
}
|
||||
|
||||
.subpanel {
|
||||
@ -114,7 +131,7 @@ input[type=text] {
|
||||
|
||||
&.cardContent {
|
||||
@include flex($cardContentPanelFlexWidth);
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
}
|
||||
}
|
||||
@ -128,6 +145,7 @@ input[type=text] {
|
||||
|
||||
div.addCardButton {
|
||||
margin-left: 20%;
|
||||
z-index: 5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -150,6 +168,7 @@ input[type=text] {
|
||||
|
||||
div.addCardButton {
|
||||
margin-left: 75%;
|
||||
z-index: 5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -268,7 +287,7 @@ input[type=text] {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
|
||||
.cardToolbar {
|
||||
@ -284,7 +303,7 @@ div.cardToolbar {
|
||||
// background-color: $orange;
|
||||
|
||||
header {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
height: $mainCardToolbarHeight;
|
||||
line-height: $mainCardToolbarHeight;
|
||||
|
||||
@ -365,7 +384,7 @@ div.cardContent {
|
||||
|
||||
div.cardListColumn.column {
|
||||
@include flex($cardListWidth, 0);
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
// overflow-y: scroll;
|
||||
// overflow:auto;
|
||||
// @include overflow-auto;
|
||||
@ -393,7 +412,7 @@ div.cardContent {
|
||||
div.addCardButton {
|
||||
@include icon-font();
|
||||
@include border-radius($addButtonSize / 2);
|
||||
z-index: 1;
|
||||
z-index: 5;
|
||||
// @include radial-gradient (white, rgba(0, 0, 0, 0));
|
||||
|
||||
position: relative;
|
||||
@ -432,10 +451,10 @@ div.cardContent {
|
||||
@include flex(auto);
|
||||
@include mask();
|
||||
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
& > div.edit {
|
||||
@include flex(auto);
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
|
||||
box-shadow: 0px 0px 10px 2px rgba(0,0,0,0.75);
|
||||
@ -446,6 +465,7 @@ div.cardContent {
|
||||
.content {
|
||||
// background-color: yellow;
|
||||
background-color: white;
|
||||
@include chromeFix();
|
||||
}
|
||||
}
|
||||
|
||||
@ -459,7 +479,7 @@ div.cardContent {
|
||||
& > div.view /*, & > div.editWrapper > div.edit */ {
|
||||
@include flex(auto);
|
||||
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
}
|
||||
|
||||
@ -492,6 +512,8 @@ div.cardContent {
|
||||
line-height: $mainCardToolbarHeight;
|
||||
|
||||
&.edit {
|
||||
@include chromeFix();
|
||||
|
||||
li.save {
|
||||
cursor: default;
|
||||
}
|
||||
|
@ -182,6 +182,10 @@ refer to http://www.clipperz.com.
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
@mixin chromeFix () {
|
||||
-webkit-transform: translate3d(0,0,0);
|
||||
}
|
||||
|
||||
@mixin placeholder {
|
||||
&::-webkit-input-placeholder {@content}
|
||||
&:-moz-placeholder {@content}
|
||||
|
@ -245,7 +245,15 @@ $cardViewBasePadding: 10px;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cardField {
|
||||
textarea.fieldValue {
|
||||
line-height: 1em;
|
||||
height: 1.3em;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.edit {
|
||||
@ -260,7 +268,7 @@ $cardViewBasePadding: 10px;
|
||||
|
||||
.cardField {
|
||||
border-top: 1px solid #eee;
|
||||
|
||||
|
||||
&:last-child {
|
||||
border-bottom: 1px solid #eee;
|
||||
};
|
||||
@ -386,7 +394,7 @@ $cardViewBasePadding: 10px;
|
||||
}
|
||||
|
||||
.cardField {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(row);
|
||||
// @include user-select(none);
|
||||
// background-color: rgba(255, 255, 255, 0.75);
|
||||
@ -405,7 +413,7 @@ $cardViewBasePadding: 10px;
|
||||
width: 32px;
|
||||
// background-color: pink;
|
||||
|
||||
// @include flexbox;
|
||||
// @include flexbox();
|
||||
// @include flex-direction(column);
|
||||
|
||||
.removeField {
|
||||
@ -478,10 +486,12 @@ $cardViewBasePadding: 10px;
|
||||
|
||||
.fieldValue {
|
||||
font-size: 18pt;
|
||||
// line-height: 28px;
|
||||
line-height: 1.2em;
|
||||
// line-height: 1em;
|
||||
// height: 1.3em;
|
||||
// outline: none;
|
||||
@include user-select(text);
|
||||
|
||||
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
|
||||
|
@ -25,7 +25,7 @@ refer to http://www.clipperz.com.
|
||||
@include overflow-auto;
|
||||
|
||||
div.loginForm {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
@include align-items(stretch);
|
||||
|
||||
@ -144,7 +144,7 @@ refer to http://www.clipperz.com.
|
||||
footer {
|
||||
@include flex(1);
|
||||
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
@include align-items(stretch);
|
||||
|
||||
@ -192,7 +192,7 @@ refer to http://www.clipperz.com.
|
||||
}
|
||||
|
||||
footer {
|
||||
max-height: 25px;
|
||||
/* max-height: 25px; */
|
||||
line-height: 20pt;
|
||||
}
|
||||
}
|
||||
@ -235,6 +235,9 @@ refer to http://www.clipperz.com.
|
||||
|
||||
.links {
|
||||
ul {
|
||||
|
||||
margin-bottom: 1em;
|
||||
|
||||
li {
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
|
@ -26,7 +26,7 @@ refer to http://www.clipperz.com.
|
||||
color: $main-alternate-text-color;
|
||||
|
||||
.registrationForm {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
@include align-items(stretch);
|
||||
|
||||
|
@ -248,7 +248,7 @@ refer to http://www.clipperz.com.
|
||||
}
|
||||
|
||||
p {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(row);
|
||||
padding-top: 8px;
|
||||
|
||||
@ -408,7 +408,7 @@ refer to http://www.clipperz.com.
|
||||
$detailMargin: 4px;
|
||||
$labelPadding: 5px;
|
||||
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(row);
|
||||
|
||||
border: 1px solid #222;
|
||||
@ -442,7 +442,7 @@ refer to http://www.clipperz.com.
|
||||
}
|
||||
|
||||
.otpLabel {
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(row);
|
||||
margin-right: 5px;
|
||||
|
||||
@ -541,7 +541,7 @@ refer to http://www.clipperz.com.
|
||||
.content {
|
||||
display: block;
|
||||
height: 100%;
|
||||
@include flexbox;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
|
||||
ul.stepNavbar {
|
||||
@ -628,76 +628,142 @@ refer to http://www.clipperz.com.
|
||||
}
|
||||
|
||||
&.Preview {
|
||||
li.card {
|
||||
@include flexbox;
|
||||
@include flex-direction(row);
|
||||
padding-top: 15px;
|
||||
padding-bottom: 0px;
|
||||
border-bottom: 1px solid #333;
|
||||
// overflow: hidden;
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
|
||||
&.archived {
|
||||
background-color: #333;
|
||||
}
|
||||
div.preview {
|
||||
@include flex(auto);
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
|
||||
input {
|
||||
width: 30px;
|
||||
margin-top: 6px;
|
||||
div.selectButtons {
|
||||
@include flex(none);
|
||||
}
|
||||
|
||||
div.cardContent {
|
||||
@include flex(auto);
|
||||
@include flexbox;
|
||||
@include flex-direction(column);
|
||||
height: auto;
|
||||
|
||||
h3 {
|
||||
font-size: 24pt;
|
||||
padding-bottom: 6px;
|
||||
color: gray;
|
||||
|
||||
span {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
ul.tagList {
|
||||
li {
|
||||
display: inline-block;
|
||||
padding-right: 10px;
|
||||
padding-bottom: 5px;
|
||||
|
||||
&:before {
|
||||
content: 'tag';
|
||||
@include icon-font();
|
||||
font-size: 10pt;
|
||||
padding-right: 5px;
|
||||
line-height: 28px;
|
||||
color: #ccc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dl {
|
||||
dt {
|
||||
font-size: 12pt;
|
||||
color: gray;
|
||||
line-height: 16pt;
|
||||
}
|
||||
a {
|
||||
cursor: pointer;
|
||||
// padding-right: 4px;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
|
||||
dd {
|
||||
font-size: 16pt;
|
||||
color: white;
|
||||
line-height: 24pt;
|
||||
padding-bottom: 6pt;
|
||||
&:after {
|
||||
font-weight: normal;
|
||||
color: gray;
|
||||
content: " - ";
|
||||
};
|
||||
|
||||
&:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.tagButtons {
|
||||
@include flex(none);
|
||||
color: gray;
|
||||
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px solid #333;
|
||||
|
||||
label {
|
||||
cursor: pointer;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
input {
|
||||
font-family: "clipperz-font";
|
||||
font-size: 12pt;
|
||||
color: white;
|
||||
background-color: black;
|
||||
border: 0px;
|
||||
border-bottom: 1px solid #333;
|
||||
outline: none;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
@include flex(auto);
|
||||
@include overflow-auto();
|
||||
|
||||
li.card {
|
||||
@include flexbox();
|
||||
@include flex-direction(row);
|
||||
padding-top: 15px;
|
||||
padding-bottom: 0px;
|
||||
border-bottom: 1px solid #333;
|
||||
|
||||
&.archived {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
input {
|
||||
width: 30px;
|
||||
margin-top: 6px;
|
||||
@include flex(none);
|
||||
}
|
||||
|
||||
div.cardContent {
|
||||
@include flex(auto);
|
||||
@include flexbox();
|
||||
@include flex-direction(column);
|
||||
height: auto;
|
||||
|
||||
h3 {
|
||||
font-size: 24pt;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
ul.tagList {
|
||||
li {
|
||||
display: inline-block;
|
||||
padding-right: 10px;
|
||||
padding-bottom: 5px;
|
||||
|
||||
&:before {
|
||||
content: 'tag';
|
||||
@include icon-font();
|
||||
font-size: 10pt;
|
||||
padding-right: 5px;
|
||||
line-height: 28px;
|
||||
color: #ccc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dl {
|
||||
dt {
|
||||
font-size: 12pt;
|
||||
color: gray;
|
||||
line-height: 16pt;
|
||||
}
|
||||
|
||||
dd {
|
||||
font-size: 16pt;
|
||||
color: white;
|
||||
line-height: 24pt;
|
||||
padding-bottom: 6pt;
|
||||
|
||||
&.PASSWORD {
|
||||
font-family: clipperz-password;
|
||||
// color: red;
|
||||
&.PASSWORD {
|
||||
font-family: clipperz-password;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 10pt;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 10pt;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user