1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
AT.prototype.atSocialHelpers = {
disabled: function() {
if (AccountsTemplates.disabled())
return "disabled";
var user = Meteor.user();
if (user){
var numServices = 0;
if (user.services)
numServices = _.keys(user.services).length; // including "resume"
if (numServices === 2 && user.services[this._id])
return "disabled";
}
},
name: function(){
return this._id;
},
iconClass: function() {
var ic = AccountsTemplates.texts.socialIcons[this._id];
if (!ic)
ic = "fa fa-" + this._id;
return ic;
},
buttonText: function() {
var service = this;
var serviceName = this._id;
if (serviceName === "meteor-developer")
serviceName = "meteor";
serviceName = capitalize(serviceName);
if (!service.configured)
return T9n.get(AccountsTemplates.texts.socialConfigure, markIfMissing=false) + " " + serviceName;
var showAddRemove = AccountsTemplates.options.showAddRemoveServices;
var user = Meteor.user();
if (user && showAddRemove){
if (user.services && user.services[this._id]){
var numServices = _.keys(user.services).length; // including "resume"
if (numServices === 2)
return serviceName;
else
return T9n.get(AccountsTemplates.texts.socialRemove, markIfMissing=false) + " " + serviceName;
} else
return T9n.get(AccountsTemplates.texts.socialAdd, markIfMissing=false) + " " + serviceName;
}
var parentData = Template.parentData();
var state = (parentData && parentData.state) || AccountsTemplates.getState();
var prefix = state === "signIn" ?
T9n.get(AccountsTemplates.texts.socialSignIn, markIfMissing=false) :
T9n.get(AccountsTemplates.texts.socialSignUp, markIfMissing=false);
return prefix + " " + T9n.get(AccountsTemplates.texts.socialWith, markIfMissing=false) + " " + serviceName;
},
};
AT.prototype.atSocialEvents = {
"click button": function(event, t) {
event.preventDefault();
event.currentTarget.blur();
if (AccountsTemplates.disabled())
return;
var user = Meteor.user();
if (user && user.services && user.services[this._id]){
var numServices = _.keys(user.services).length; // including "resume"
if (numServices === 2)
return;
else{
AccountsTemplates.setDisabled(true);
Meteor.call("ATRemoveService", this._id, function(error){
AccountsTemplates.setDisabled(false);
});
}
} else {
AccountsTemplates.setDisabled(true);
var parentData = Template.parentData();
var state = (parentData && parentData.state) || AccountsTemplates.getState();
var serviceName = this._id;
var methodName;
if (serviceName === 'meteor-developer')
methodName = "loginWithMeteorDeveloperAccount";
else
methodName = "loginWith" + capitalize(serviceName);
var loginWithService = Meteor[methodName];
options = {
loginStyle: AccountsTemplates.options.socialLoginStyle,
};
if (Accounts.ui) {
if (Accounts.ui._options.requestPermissions[serviceName]) {
options.requestPermissions = Accounts.ui._options.requestPermissions[serviceName];
}
if (Accounts.ui._options.requestOfflineToken[serviceName]) {
options.requestOfflineToken = Accounts.ui._options.requestOfflineToken[serviceName];
}
}
loginWithService(options, function(err) {
AccountsTemplates.setDisabled(false);
if (err && err instanceof Accounts.LoginCancelledError) {
// do nothing
}
else if (err && err instanceof ServiceConfiguration.ConfigError) {
if (Accounts._loginButtonsSession)
return Accounts._loginButtonsSession.configureService(serviceName);
}
else
AccountsTemplates.submitCallback(err, state);
});
}
},
};
|