forked from ianmartorell/meteor-accounts-ui-bootstrap-3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
login_buttons_session.js
105 lines (88 loc) · 2.9 KB
/
login_buttons_session.js
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
(function () {
var VALID_KEYS = [
'dropdownVisible',
// XXX consider replacing these with one key that has an enum for values.
'inSignupFlow',
'inForgotPasswordFlow',
'inChangePasswordFlow',
'inMessageOnlyFlow',
'errorMessage',
'infoMessage',
// dialogs with messages (info and error)
'resetPasswordToken',
'enrollAccountToken',
'justVerifiedEmail',
'configureLoginServiceDialogVisible',
'configureLoginServiceDialogServiceName',
'configureLoginServiceDialogSaveDisabled'
];
var validateKey = function (key) {
if (!_.contains(VALID_KEYS, key))
throw new Error("Invalid key in loginButtonsSession: " + key);
};
var KEY_PREFIX = "Meteor.loginButtons.";
// XXX we should have a better pattern for code private to a package like this one
Accounts._loginButtonsSession = {
set: function(key, value) {
validateKey(key);
if (_.contains(['errorMessage', 'infoMessage'], key))
throw new Error("Don't set errorMessage or infoMessage directly. Instead, use errorMessage() or infoMessage().");
this._set(key, value);
},
_set: function(key, value) {
Session.set(KEY_PREFIX + key, value);
},
get: function(key) {
validateKey(key);
return Session.get(KEY_PREFIX + key);
},
closeDropdown: function () {
this.set('inSignupFlow', false);
this.set('inForgotPasswordFlow', false);
this.set('inChangePasswordFlow', false);
this.set('inMessageOnlyFlow', false);
this.set('dropdownVisible', false);
this.resetMessages();
},
infoMessage: function(message) {
this._set("errorMessage", null);
this._set("infoMessage", message);
this.ensureMessageVisible();
},
errorMessage: function(message) {
this._set("errorMessage", message);
this._set("infoMessage", null);
this.ensureMessageVisible();
},
// is there a visible dialog that shows messages (info and error)
isMessageDialogVisible: function () {
return this.get('resetPasswordToken') ||
this.get('enrollAccountToken') ||
this.get('justVerifiedEmail');
},
// ensure that somethings displaying a message (info or error) is
// visible. if a dialog with messages is open, do nothing;
// otherwise open the dropdown.
//
// notably this doesn't matter when only displaying a single login
// button since then we have an explicit message dialog
// (_loginButtonsMessageDialog), and dropdownVisible is ignored in
// this case.
ensureMessageVisible: function () {
if (!this.isMessageDialogVisible())
this.set("dropdownVisible", true);
},
resetMessages: function () {
this._set("errorMessage", null);
this._set("infoMessage", null);
},
configureService: function (name) {
this.set('configureLoginServiceDialogVisible', true);
this.set('configureLoginServiceDialogServiceName', name);
this.set('configureLoginServiceDialogSaveDisabled', true);
setTimeout(function(){
$('#configure-login-service-dialog-modal').modal();
}, 500)
}
};
}) ();