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
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/omniauth/strategies/mailru_api/view_helper.rb', line 25
def mailru_login_button(control = nil, use_jquery_form = false)
unless control.present?
control = "<a class='mrc__connectButton'></a>"
init_control = "mailru.connect.initButton();"
end
<<-BUTTON
<div id="mailru_api_transport" style="display:inline;"></div>
<script type="text/javascript">
mailruLogin = {
initialized: false,
initMailRuApi: function() {
mailru.connect.init('#{OmniAuth.config.mailru_app_id}', '#{OmniAuth.config.mailru_private_key}');
#{init_control}
mailru.events.listen(mailru.connect.events.login, function(session){
mailru.common.users.getInfo(function(result){
mailruLogin.redirectWithPost('#{OmniAuth.config.path_prefix}/mailru/callback', result[0]);
});
});
mailruLogin.initialized = true;
},
onLoad: function() {
mailru.loader.require('api', function() {
mailruLogin.initMailRuApi();
});
},
login: function(){
if(!mailruLogin.initialized) mailruLogin.initMailRuApi();
mailru.connect.login();
},
redirectWithPost: function(url, data) {
data = data || {};
#{ respond_to?(:request_forgery_protection_token) && respond_to?(:form_authenticity_token) ?
"data['#{request_forgery_protection_token}'] = '#{form_authenticity_token}'; var method = 'POST';" :
"var method = 'GET';" }
var form = document.createElement("form"),
input;
form.setAttribute("action", url);
form.setAttribute("method", method);
for (var property in data) {
if (data.hasOwnProperty(property)) {
var value = data[property];
if(property == 'location') {
input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", 'county');
input.setAttribute("value", value['country']['name']);
form.appendChild(input);
input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", 'city');
input.setAttribute("value", value['city']['name']);
form.appendChild(input);
}
else if (value instanceof Array) {
for (var i = 0, l = value.length; i < l; i++) {
input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", property);
input.setAttribute("value", value[i]);
form.appendChild(input);
}
}
else {
input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", property);
input.setAttribute("value", value);
form.appendChild(input);
}
}
}
document.body.appendChild(form);
#{ use_jquery_form ? "$(form).ajaxSubmit({ dataType: 'script' });" : "form.submit();" }
document.body.removeChild(form);
}
};
(function() {
var el = document.createElement("script");
el.type = "text/javascript";
el.charset = "windows-1251";
el.src = "http://cdn.connect.mail.ru/js/loader.js";
el.async = true;
el.onreadystatechange= function () {
if (this.readyState == 'complete') mailruLogin.onLoad();
}
el.onload= mailruLogin.onLoad;
document.getElementById("mailru_api_transport").appendChild(el);
}());
</script>
#{control}
BUTTON
end
|