Skip to content

Commit 34503de

Browse files
committed
Merge branch 'develop'
2 parents 5b7486b + 1aea7e7 commit 34503de

File tree

8 files changed

+150
-70
lines changed

8 files changed

+150
-70
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<!-- originally created for cyber.fund project-->
22
<template name="followUsOnTwitter">
3-
<iframe style="position: static; visibility: visible; width: 174px; height: 28px;" data-twttr-rendered="true" title="Twitter Follow Button" class="twitter-follow-button twitter-follow-button" src="http://platform.twitter.com/widgets/follow_button.36a0bf81ff285eb6cad31df608651a2f.en.html#_=1437139750136&amp;dnt=true&amp;id=twitter-widget-0&amp;lang=en&amp;screen_name=cyberfundio&amp;show_count=false&amp;show_screen_name=true&amp;size=l" allowtransparency="true" scrolling="no" id="twitter-widget-0" frameborder="0"></iframe>
4-
</template>
3+
<iframe style="position: static; visibility: visible; width: 174px; height: 28px;" data-twttr-rendered="true" title="Twitter Follow Button" class="twitter-follow-button twitter-follow-button" src="https://platform.twitter.com/widgets/follow_button.36a0bf81ff285eb6cad31df608651a2f.en.html#_=1437139750136&amp;dnt=true&amp;id=twitter-widget-0&amp;lang=en&amp;screen_name=cyberfundio&amp;show_count=false&amp;show_screen_name=true&amp;size=l" allowtransparency="true" scrolling="no" id="twitter-widget-0" frameborder="0"></iframe>
4+
</template>

client/views/pages/profile.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ CF.Profile.currentTwid = new CF.Utils.SessionVariable('cfAssetsCurrentTwid');
22
CF.Profile.currentUid = new CF.Utils.SessionVariable('cfAssetsCurrentUid');
33

44
Template['profile'].rendered = function () {
5+
var options = CF.Profile.currentUid.get() == Meteor.userId() ? {privateAssets: true} : {};
56
this.subscribe('friendlyUsers', CF.Profile.currentUid.get());
67
this.subscribe('profilesSystems', CF.Profile.currentUid.get());
7-
this.subscribe('portfolioSystems', CF.Profile.currentUid.get());
8+
this.subscribe('portfolioSystems', CF.Profile.currentUid.get(), options);
89
};
910

1011
Template['profile'].onCreated(function () {

packages/cyberfund-userassets/client/assetsManager.html

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,26 @@ <h4 class="center">Edit asset</h4>
229229
</form>
230230
</div>
231231
</div>
232+
233+
<div id="modal-toggle-private" class="modal">
234+
<div class="modal-content">
235+
<form id="toggle-private-form">
236+
{{#if currentAccountKey}}
237+
<h4 class="center">Make account {{privacyOpposite currentAccountKey}}.</h4>
238+
239+
<div class="row">
240+
<p> Confirm turning account {{currentAccount.name}}
241+
into {{privacyOpposite currentAccountKey}}.</p>
242+
</div>
243+
{{/if}}
244+
<div class="row">
245+
<button type="submit" class="btn waves-effect">Ok</button>
246+
<a class="modal-action modal-close btn waves-effect right grey">Cancel</a>
247+
</div>
248+
</form>
249+
</div>
250+
</div>
251+
232252
{{/if}}
233253
</section>
234254
</template>

packages/cyberfund-userassets/client/assetsManager.js

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
CF.UserAssets.currentAccount = new CF.Utils.SessionVariable('cfAssetsCurrentAccount');
1+
CF.UserAssets.currentAccountKey = new CF.Utils.SessionVariable('cfAssetsCurrentAccount');
22
var isOwnAssets = function () {
3-
return CF.Profile.currentUid.get() == Meteor.userId();
3+
return CF.Profile.currentUid.get() == Meteor.userId();
44
};
55

66
Template['assetsManager'].rendered = function () {
@@ -18,16 +18,21 @@ Template['assetsManager'].helpers({
1818
var user = Meteor.users.findOne({_id: CF.Profile.currentUid.get()}) || {};
1919
var accounts = user.accounts || {};
2020
if (user._id == Meteor.userId()) {
21-
_.extend(accounts, user.accountsPrivate || {});
21+
_.extend(accounts, user.accountsPrivate || {});
2222
}
2323
return accounts;
2424
},
2525
currentAccount: function () {
2626
if (!isOwnAssets()) return null;
27-
var current = CF.UserAssets.currentAccount.get();
27+
var current = CF.UserAssets.currentAccountKey.get();
28+
var key0 = CF.UserAssets.getAccountPrivacyType(Meteor.userId(), current);
29+
if (!key0) return {};
2830
var user = Meteor.user();
29-
if (!current || !user || !user.accounts || !user.accounts[current]) return {};
30-
return user.accounts[current];
31+
return user[key0][current];
32+
},
33+
currentAccountKey: function(){
34+
if (!isOwnAssets()) return null;
35+
return CF.UserAssets.currentAccountKey.get();
3136
},
3237
currentAddress: function () {
3338
if (!isOwnAssets()) return null;
@@ -40,10 +45,15 @@ Template['assetsManager'].helpers({
4045
currentAmount: function () {
4146
if (!isOwnAssets) return '';
4247
var user = Meteor.user();
43-
var amount = user.accounts;
48+
49+
var key = CF.UserAssets.currentAccountKey.get();
50+
51+
var key0 = CF.UserAssets.getAccountPrivacyType(Meteor.userId(), key);
52+
if (!key0) return '';
53+
var amount = user[key0];
4454
if (!amount) return '';
45-
var key = CF.UserAssets.currentAccount.get();
46-
if (!key) return ''
55+
56+
if (!key) return '';
4757
amount = amount[key];
4858
if (!amount) return '';
4959
amount = amount.addresses;
@@ -61,9 +71,15 @@ Template['assetsManager'].helpers({
6171
showAccountsAdvertise: function () {
6272
if (CF.Profile.currentTwid.get() == CF.User.twid()) {
6373
var user = Meteor.users.findOne({_id: CF.Profile.currentUid.get()});
64-
return !( (user.accounts &&_.keys(user.accounts).length) || (user.accountsPrivate && _.keys(user.accountsPrivate).length) )
74+
return !( (user.accounts && _.keys(user.accounts).length) || (user.accountsPrivate && _.keys(user.accountsPrivate).length) )
6575
}
6676
return false;
77+
},
78+
privacyOpposite: function(key){
79+
var key0 = CF.UserAssets.getAccountPrivacyType(Meteor.userId(), key);
80+
if (!key0) return '';
81+
if (key0 == 'accounts') return 'private';
82+
return 'public';
6783
}
6884
});
6985

@@ -75,9 +91,12 @@ Template['assetsManager'].onCreated(function () {
7591
instance.subscribe('profileAssets', CF.Profile.currentTwid.get());
7692
Tracker.autorun(function () {
7793
var user = Meteor.users.findOneByTwid(CF.Profile.currentTwid.get());
78-
var systems = user && user.accounts
79-
&& CF.UserAssets.getSystemsFromAccountsObject(user.accounts);
8094

95+
var systems = user && user.accounts;
96+
if (CF.Profile.currentUid == Meteor.userId()) {
97+
_.extend(systems, user.accountsPrivate);
98+
}
99+
systems = CF.UserAssets.getSystemsFromAccountsObject(systems);
81100
Meteor.subscribe('assetsSystems', systems);
82101
});
83102
});
@@ -89,24 +108,24 @@ Template['assetsManager'].events({
89108
//var address = $assetrow.attr("asset-id");
90109
var $t = t.$(e.currentTarget);
91110
$t.addClass("disabled");
92-
Meteor.call("cfAssetsUpdateBalance", CF.UserAssets.currentAccount.get(), CF.UserAssets.currentAddress.get(),
111+
Meteor.call("cfAssetsUpdateBalance", CF.UserAssets.currentAccountKey.get(), CF.UserAssets.currentAddress.get(),
93112
function (er, re) {
94113
$t.removeClass("disabled");
95114
});
96115
},
97116
'submit #delete-account-form': function (e, t) {
98117
if (!isOwnAssets()) return false;
99-
console.log(CF.UserAssets.currentAccount.get());
118+
console.log(CF.UserAssets.currentAccountKey.get());
100119
analytics.track('Delete Account', {
101-
accountName: CF.UserAssets.currentAccount.get()
120+
accountName: CF.UserAssets.currentAccountKey.get()
102121
});
103-
Meteor.call("cfAssetsRemoveAccount", CF.UserAssets.currentAccount.get());
122+
Meteor.call("cfAssetsRemoveAccount", CF.UserAssets.currentAccountKey.get());
104123
$("#modal-delete-account").closeModal();
105124
return false;
106125
},
107126
'keyup #rename-account-in, change #rename-account-in': function (e, t) {
108127
if (!isOwnAssets()) return;
109-
var accountId = CF.UserAssets.currentAccount.get();
128+
var accountId = CF.UserAssets.currentAccountKey.get();
110129
var user = Meteor.user();
111130
if (!user || !user.accounts || !accountId || !user.accounts[accountId]) return;
112131
var oldName = user.accounts[accountId].name;
@@ -125,12 +144,12 @@ Template['assetsManager'].events({
125144
},
126145
'submit #rename-account-form': function (e, t) {
127146
if (!isOwnAssets()) return false;
128-
//var key = CF.UserAssets.currentAccount.get();
147+
//var key = CF.UserAssets.currentAccountKey.get();
129148
analytics.track('Renamed Account', {
130-
oldName: CF.UserAssets.currentAccount.get(),
149+
oldName: CF.UserAssets.currentAccountKey.get(),
131150
newName: t.$renameAccountInput.val()
132151
});
133-
Meteor.call("cfAssetsRenameAccount", CF.UserAssets.currentAccount.get(), t.$renameAccountInput.val());
152+
Meteor.call("cfAssetsRenameAccount", CF.UserAssets.currentAccountKey.get(), t.$renameAccountInput.val());
134153
$("#modal-rename-account").closeModal();
135154
return false;
136155
},
@@ -151,7 +170,7 @@ Template['assetsManager'].events({
151170
},
152171
'submit #add-address-form': function (e, t) { //TAG: assets
153172
if (!isOwnAssets()) return false;
154-
var account = CF.UserAssets.currentAccount.get();
173+
var account = CF.UserAssets.currentAccountKey.get();
155174
var address = t.$addAssetInput.val().trim();
156175
analytics.track('Added Address', {
157176
accountName: account,
@@ -168,10 +187,10 @@ Template['assetsManager'].events({
168187
'submit #delete-address-form': function (e, t) {
169188
if (!isOwnAssets()) return false;
170189
analytics.track('Delete Address', {
171-
accountName: CF.UserAssets.currentAccount.get(),
190+
accountName: CF.UserAssets.currentAccountKey.get(),
172191
address: CF.UserAssets.currentAddress.get()
173192
});
174-
Meteor.call("cfAssetsRemoveAddress", CF.UserAssets.currentAccount.get(),
193+
Meteor.call("cfAssetsRemoveAddress", CF.UserAssets.currentAccountKey.get(),
175194
CF.UserAssets.currentAddress.get());
176195
$("#modal-delete-address").closeModal();
177196
return false;
@@ -180,7 +199,7 @@ Template['assetsManager'].events({
180199
'click .per-account': function (e, t) {
181200
if (!isOwnAssets()) return;
182201
var accountKey = t.$(e.currentTarget).closest(".account-item").attr("account-key");
183-
CF.UserAssets.currentAccount.set(accountKey.toString());
202+
CF.UserAssets.currentAccountKey.set(accountKey.toString());
184203
},
185204
'submit #add-asset-form': function (e, t) {
186205
if (!isOwnAssets()) return false;
@@ -211,14 +230,14 @@ Template['assetsManager'].events({
211230
amount: qua,
212231
systemName: key,
213232
address: CF.UserAssets.currentAddress.get(),
214-
accountName: CF.UserAssets.currentAccount.get()
233+
accountName: CF.UserAssets.currentAccountKey.get()
215234
});
216235
analytics.track('Followed system', {
217236
systemName: key,
218237
mode: 'auto'
219238
});
220239
Meteor.call("starSysBySys", key);
221-
Meteor.call("cfAssetsAddAsset", CF.UserAssets.currentAccount.get(), CF.UserAssets.currentAddress.get(), key, qua, function () {
240+
Meteor.call("cfAssetsAddAsset", CF.UserAssets.currentAccountKey.get(), CF.UserAssets.currentAddress.get(), key, qua, function () {
222241
$form.closest(".modal").closeModal();
223242
});
224243

@@ -278,9 +297,9 @@ Template['assetsManager'].events({
278297
amount: qua,
279298
systemName: key,
280299
address: CF.UserAssets.currentAddress.get(),
281-
accountName: CF.UserAssets.currentAccount.get()
300+
accountName: CF.UserAssets.currentAccountKey.get()
282301
});
283-
Meteor.call("cfAssetsAddAsset", CF.UserAssets.currentAccount.get(), CF.UserAssets.currentAddress.get(), key, qua, function () {
302+
Meteor.call("cfAssetsAddAsset", CF.UserAssets.currentAccountKey.get(), CF.UserAssets.currentAddress.get(), key, qua, function () {
284303
$form.closest(".modal").closeModal();
285304
});
286305
return false;
@@ -294,15 +313,25 @@ Template['assetsManager'].events({
294313
return false;
295314
}
296315
analytics.track('Delete Asset', {
297-
accountName: CF.UserAssets.currentAccount.get(),
316+
accountName: CF.UserAssets.currentAccountKey.get(),
298317
address: CF.UserAssets.currentAddress.get(),
299318
systemName: sys
300319
});
301-
Meteor.call("cfAssetsDeleteAsset", CF.UserAssets.currentAccount.get(), CF.UserAssets.currentAddress.get(), sys,
320+
Meteor.call("cfAssetsDeleteAsset", CF.UserAssets.currentAccountKey.get(), CF.UserAssets.currentAddress.get(), sys,
302321
function (err, ret) {
303322
CF.UserAssets.currentAsset.set(null);
304323
t.$("#modal-delete-asset").closeModal();
305324
});
306325
return false;
326+
},
327+
'submit #toggle-private-form': function(e, t){
328+
//{{! todo: add check if user is able using this feature}}
329+
if (!isOwnAssets()) return false;
330+
Meteor.call('cfAssetsTogglePrivacy', CF.UserAssets.currentAccountKey.get(),
331+
CF.UserAssets.getAccountPrivacyType(Meteor.userId(), CF.UserAssets.currentAccountKey.get()), function(err, ret){
332+
console.log(ret);
333+
t.$("#modal-toggle-private").closeModal();
334+
} );
335+
return false;
307336
}
308337
});

packages/cyberfund-userassets/client/displayAccount.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
class="material-icons tiny">edit</i></a>
1111
<a class="red-text req-remove-account per-account btn-floating btn-tiny red"><i
1212
class="material-icons tiny">delete</i></a>
13-
<a class="req-toggle-private per-account mock-soon grey {{disabledTogglePrivate}} btn-floating btn-tiny">
13+
<a class="req-toggle-private per-account grey btn-floating btn-tiny">{{! todo: add check if user is able using this feature}}
1414
<i class="material-icons tiny">{{#if isPublic ..}}public{{else}}vpn_lock{{/if}}</i></a>
1515
</div>
1616
{{/if}}

packages/cyberfund-userassets/client/displayAccount.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ CF.UserAssets.currentAddress = new CF.Utils.SessionVariable("cfAssetsCurrentAddr
22
CF.UserAssets.currentAsset = new CF.Utils.SessionVariable("cfAssetsCurrentAsset");
33
var isOwnAssets = function(){
44
return CF.Profile.currentTwid.get() == CF.User.twid();
5-
}
5+
};
66

77
Template['displayAccount'].rendered = function () {
88
var t = this;
@@ -89,7 +89,7 @@ Template['displayAccount'].events({
8989
'click .per-address': function(e, t){
9090
var $asset = $(e.currentTarget).closest(".address-item");
9191
CF.UserAssets.currentAddress.set($asset.attr("address-id"));
92-
CF.UserAssets.currentAccount.set($asset.closest(".account-item")
92+
CF.UserAssets.currentAccountKey.set($asset.closest(".account-item")
9393
.attr("account-key"));
9494
},
9595
'click .req-delete-address': function(e, t) {
@@ -102,19 +102,19 @@ Template['displayAccount'].events({
102102
},
103103
'click .req-update-address': function(e, t){
104104
Meteor.call("cfAssetUpdateBalance",
105-
CF.UserAssets.currentAccount.get(),
105+
CF.UserAssets.currentAccountKey.get(),
106106
CF.UserAssets.currentAddress.get())
107107
},
108108
'click .req-delete-asset': function(e, t){
109-
var $item = t.$(e.currentTarget).closest(".asset-item")
109+
var $item = t.$(e.currentTarget).closest(".asset-item");
110110
CF.UserAssets.currentAsset.set(
111111
CurrentData.findOne(CF.CurrentData.selectors.system( $item.attr("asset-key")),
112112
{fields: {system: 1, token: 1, aliases: 1, icon: 1}}));
113113
if (CF.UserAssets.currentAsset.get()) {
114114
$item = $item.closest(".address-item");
115115
CF.UserAssets.currentAddress.set($item.attr("address-id"));
116116
$item = $item.closest(".account-item");
117-
CF.UserAssets.currentAccount.set($item.attr("account-key"));
117+
CF.UserAssets.currentAccountKey.set($item.attr("account-key"));
118118
$("#modal-delete-asset").openModal();
119119
$("button[type=submit]", "#delete-asset-form").focus();
120120
}
@@ -130,8 +130,16 @@ Template['displayAccount'].events({
130130
$item = $item.closest(".address-item");
131131
CF.UserAssets.currentAddress.set($item.attr("address-id"));
132132
$item = $item.closest(".account-item");
133-
CF.UserAssets.currentAccount.set($item.attr("account-key"));
133+
CF.UserAssets.currentAccountKey.set($item.attr("account-key"));
134134
$("#modal-edit-asset").openModal();
135135
}
136+
},
137+
'click .req-toggle-private': function(e, t){
138+
//{{! todo: add check if user is able using this feature}}
139+
var $item = t.$(e.currentTarget).closest(".account-item");
140+
console.log($item);
141+
console.log($item.attr("account-key"));
142+
CF.UserAssets.currentAccountKey.set($item.attr("account-key"));
143+
$("#modal-toggle-private").openModal();
136144
}
137145
});

packages/cyberfund-userassets/cyberfund-userassets.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,39 @@ CF.UserAssets.getQuantitiesFromAccountsObject = function(accountsObject, key) {
9999
CF.UserAssets.isPrivateAccountsEnabled = function(user) {
100100
return true;
101101
//return !!(user && user.services && user.services.privateAccountsEnabled)
102+
};
103+
104+
105+
CF.UserAssets.accountsFields = {'accounts': 1, 'accountsPrivate': 1};
106+
/**
107+
* returns 'accounts' or 'accountsPrivate' or ''
108+
* @param userId
109+
* @param accountKey - key to check
110+
* @returns {String} that indicates account type (public or private)
111+
*/
112+
113+
CF.UserAssets.getAccountPrivacyType = function(userId, accountKey){
114+
if (Meteor.isClient) {
115+
if (userId != Meteor.userId()) return ''
116+
}
117+
if (!userId || !accountKey) return '';
118+
119+
var user = Meteor.users.findOne({_id: userId}, {fields: CF.UserAssets.accountsFields}),
120+
key = accountKey.toString(),
121+
pri = user.accountsPrivate || {},
122+
pub = user.accounts || {},
123+
isPublic = _.keys(pub).indexOf(key) > -1,
124+
isPrivate = _.keys(pri).indexOf(key) > -1;
125+
126+
if ((isPublic && isPrivate) || (!isPrivate && !isPublic)) { // both cannot happen
127+
var err = "Error with user accounts, userId: " + userId +' \n';
128+
if (!isPublic) {
129+
err += 'no account with key ' + key + ' found.'
130+
} else {
131+
err += 'duplicate accounts with key ' + key + ' found.'
132+
}
133+
console.warn(err);
134+
return ''
135+
}
136+
return isPublic ? 'accounts' : 'accountsPrivate'
102137
};

0 commit comments

Comments
 (0)