ymdp 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/ymdp/javascripts/ab_testing.js +130 -0
- data/lib/ymdp/javascripts/ajax.js +165 -0
- data/lib/ymdp/javascripts/application.js +139 -0
- data/lib/ymdp/javascripts/browser.js +36 -0
- data/lib/ymdp/javascripts/data.js +67 -0
- data/lib/ymdp/javascripts/debug.js +109 -0
- data/lib/ymdp/javascripts/education.js +166 -0
- data/lib/ymdp/javascripts/flash.js +100 -0
- data/lib/ymdp/javascripts/help.js +79 -0
- data/lib/ymdp/javascripts/i18n.js +242 -0
- data/lib/ymdp/javascripts/init.js +159 -0
- data/lib/ymdp/javascripts/launcher.js +131 -0
- data/lib/ymdp/javascripts/logger.js +64 -0
- data/lib/ymdp/javascripts/params.js +35 -0
- data/lib/ymdp/javascripts/reporter.js +47 -0
- data/lib/ymdp/javascripts/tag_helper.js +182 -0
- data/lib/ymdp/javascripts/user.js +207 -0
- data/lib/ymdp/view/application_view.rb +34 -4
- data/ymdp.gemspec +19 -2
- metadata +22 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -0,0 +1,130 @@
|
|
1
|
+
|
2
|
+
// DO NOT USE the @view instance variable in any files in /app/javascripts/base.
|
3
|
+
// The way they are cached makes it not safe to do so.
|
4
|
+
|
5
|
+
var ABTesting;
|
6
|
+
|
7
|
+
ABTesting = {
|
8
|
+
on: true,
|
9
|
+
languages: <%= english_languages.to_json %>,
|
10
|
+
|
11
|
+
enable: function() {
|
12
|
+
ABTesting.on = true;
|
13
|
+
},
|
14
|
+
|
15
|
+
disable: function() {
|
16
|
+
ABTesting.on = false;
|
17
|
+
},
|
18
|
+
|
19
|
+
randomAB: function() {
|
20
|
+
return Math.floor(Math.random()*2) ? "a" : "b";
|
21
|
+
},
|
22
|
+
|
23
|
+
get: function(content_id) {
|
24
|
+
var url, host;
|
25
|
+
|
26
|
+
url = "ymdp/experiment";
|
27
|
+
|
28
|
+
OIB.get(url, {
|
29
|
+
"domain": View.domain
|
30
|
+
}, function(response) {
|
31
|
+
ABTesting.success(content_id, response);
|
32
|
+
}, function(response) {
|
33
|
+
ABTesting.error(response);
|
34
|
+
});
|
35
|
+
},
|
36
|
+
|
37
|
+
post: function(params) {
|
38
|
+
params = params || {};
|
39
|
+
OIB.post("ymdp/view", params, function(response) {
|
40
|
+
Debug.log("ABTesting.post success", response);
|
41
|
+
}, function(response) {
|
42
|
+
Debug.error("ABTesting.post error", response);
|
43
|
+
});
|
44
|
+
},
|
45
|
+
|
46
|
+
postView: function(experimentId) {
|
47
|
+
var params;
|
48
|
+
|
49
|
+
params = {
|
50
|
+
"var": ABTesting.variable
|
51
|
+
};
|
52
|
+
if (experimentId) {
|
53
|
+
params["experiment_id"] = experimentId;
|
54
|
+
}
|
55
|
+
Debug.log("ABTesting.postView: ", params);
|
56
|
+
ABTesting.post(params);
|
57
|
+
},
|
58
|
+
|
59
|
+
setVariable: function(value) {
|
60
|
+
ABTesting.variable = value;
|
61
|
+
},
|
62
|
+
|
63
|
+
apply: function(content_id, language) {
|
64
|
+
try {
|
65
|
+
Debug.log("ABTesting.apply", $A(arguments));
|
66
|
+
if (ABTesting.on && ABTesting.languages.include(language)) {
|
67
|
+
var index;
|
68
|
+
|
69
|
+
index = ABTesting.randomAB();
|
70
|
+
ABTesting.setVariable(index);
|
71
|
+
|
72
|
+
ABTesting.get(content_id);
|
73
|
+
} else {
|
74
|
+
YAHOO.init.showAndFinish();
|
75
|
+
}
|
76
|
+
}
|
77
|
+
catch(e) {
|
78
|
+
Debug.log(e);
|
79
|
+
YAHOO.init.showAndFinish();
|
80
|
+
}
|
81
|
+
},
|
82
|
+
|
83
|
+
error: function(data) {
|
84
|
+
Debug.log("applyError", data);
|
85
|
+
if (data.error !== 3002) {
|
86
|
+
YAHOO.logger.error("Received body contents fetch error on page " + View.name + ": " + data.error + ' - ' + data.errorMsg);
|
87
|
+
}
|
88
|
+
YAHOO.init.showAndFinish();
|
89
|
+
},
|
90
|
+
|
91
|
+
success: function(content_id, response) {
|
92
|
+
try {
|
93
|
+
var content, experiment, experimentId;
|
94
|
+
Debug.log("ABTesting.success", response);
|
95
|
+
|
96
|
+
experiment = response.experiment;
|
97
|
+
|
98
|
+
if (experiment) {
|
99
|
+
content = ABTesting.content(experiment);
|
100
|
+
experimentId = response.experiment.id;
|
101
|
+
|
102
|
+
ABTesting.postView(experimentId);
|
103
|
+
ABTesting.replaceContents(content_id, content);
|
104
|
+
} else {
|
105
|
+
Debug.log("No experiment running");
|
106
|
+
}
|
107
|
+
|
108
|
+
YAHOO.init.showAndFinish();
|
109
|
+
} catch(e) {
|
110
|
+
Debug.log("ABTesting.success error" + e);
|
111
|
+
}
|
112
|
+
},
|
113
|
+
|
114
|
+
replaceContents: function(content_id, content) {
|
115
|
+
openmail.Application.filterHTML({html: content}, function(response) {
|
116
|
+
if (response.html && response.html !== '') {
|
117
|
+
try {
|
118
|
+
$(content_id).update(response.html);
|
119
|
+
} catch(omg) {
|
120
|
+
YAHOO.logger.error(omg);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
});
|
124
|
+
},
|
125
|
+
|
126
|
+
content: function(experiment) {
|
127
|
+
return experiment["content_" + ABTesting.variable];
|
128
|
+
}
|
129
|
+
};
|
130
|
+
|
@@ -0,0 +1,165 @@
|
|
1
|
+
/*
|
2
|
+
CALL OIB
|
3
|
+
|
4
|
+
global to every view. sends Ajax call to OtherInbox.
|
5
|
+
*/
|
6
|
+
|
7
|
+
// send an Ajax call to OtherInbox.
|
8
|
+
// takes as parameters:
|
9
|
+
// - the path to call
|
10
|
+
// - any additional query string params
|
11
|
+
// - a callback function to run when the Ajax call is a success
|
12
|
+
// - an optional error function
|
13
|
+
// - a base URL to use, if you don't want this call going to YAHOO.constants.base_url
|
14
|
+
// TODO refactor this function to take a second params hash where we could stick success_function, error_function, and base_url
|
15
|
+
|
16
|
+
OIB = {
|
17
|
+
get: function(oib_path, params, success_function, error_function, base_url) {
|
18
|
+
params.method = "GET";
|
19
|
+
OIB.call(oib_path, params, success_function, error_function, base_url);
|
20
|
+
},
|
21
|
+
|
22
|
+
post: function(oib_path, params, success_function, error_function, base_url) {
|
23
|
+
params.method = "POST";
|
24
|
+
OIB.call(oib_path, params, success_function, error_function, base_url);
|
25
|
+
},
|
26
|
+
|
27
|
+
call: function(oib_path, params, success_function, error_function, base_url) {
|
28
|
+
var success;
|
29
|
+
|
30
|
+
success = function(response) {
|
31
|
+
response = YAHOO.lang.JSON.parse(response.data);
|
32
|
+
if (response.error) {
|
33
|
+
if (error_function) {
|
34
|
+
error_function(response);
|
35
|
+
} else {
|
36
|
+
Debug.error("No error_function", response);
|
37
|
+
YAHOO.oib.showError(
|
38
|
+
{
|
39
|
+
"method": "OIB.call",
|
40
|
+
"description": "error callback"
|
41
|
+
}
|
42
|
+
); // OIB.call response: error
|
43
|
+
}
|
44
|
+
} else {
|
45
|
+
if (success_function) {
|
46
|
+
success_function(response);
|
47
|
+
} else {
|
48
|
+
Debug.error("no success function", response);
|
49
|
+
YAHOO.oib.showError(
|
50
|
+
{
|
51
|
+
"method": "OIB.call",
|
52
|
+
"description": "success callback error"
|
53
|
+
}
|
54
|
+
); // OIB.call response: success error
|
55
|
+
}
|
56
|
+
}
|
57
|
+
};
|
58
|
+
OIB.request(oib_path, params, success, error_function, base_url);
|
59
|
+
},
|
60
|
+
|
61
|
+
ajax_response: false,
|
62
|
+
|
63
|
+
ajax: function(url, method, params, success_function, error_function) {
|
64
|
+
params = params || {};
|
65
|
+
params["application"] = View.application;
|
66
|
+
|
67
|
+
Debug.log("OIB.ajax: About to call openmail.Application.callWebService: ", {
|
68
|
+
"method": method,
|
69
|
+
"url": url + "?" + Object.toQueryString(params)
|
70
|
+
});
|
71
|
+
|
72
|
+
openmail.Application.callWebService(
|
73
|
+
{
|
74
|
+
url: url,
|
75
|
+
method: method,
|
76
|
+
parameters: params
|
77
|
+
},
|
78
|
+
function(response) {
|
79
|
+
// response from Ajax call was a 200 response
|
80
|
+
//
|
81
|
+
Debug.log("inside response from openMail.Application.callWebService", response);
|
82
|
+
if (response.error) {
|
83
|
+
// response has a parameter called "error"
|
84
|
+
//
|
85
|
+
if (error_function) {
|
86
|
+
error_function(response);
|
87
|
+
} else {
|
88
|
+
OIB.error(url, params, response);
|
89
|
+
}
|
90
|
+
} else {
|
91
|
+
// SUCCESSFUL RESPONSE
|
92
|
+
//
|
93
|
+
// response doesn't have a parameter called "error"
|
94
|
+
//
|
95
|
+
Debug.log("success response inside openMail.Application.callWebService", response);
|
96
|
+
try {
|
97
|
+
success_function(response);
|
98
|
+
} catch(e) {
|
99
|
+
Debug.log("Error in OIB.request success function", e);
|
100
|
+
YAHOO.oib.showError({
|
101
|
+
"method": "OIB.request",
|
102
|
+
"description": "exception caught in OIB.request success callback",
|
103
|
+
"error": e
|
104
|
+
});
|
105
|
+
}
|
106
|
+
}
|
107
|
+
});
|
108
|
+
},
|
109
|
+
|
110
|
+
request: function(oib_path, params, success_function, error_function, base_url) {
|
111
|
+
Debug.log("inside OIB.request: ", {
|
112
|
+
"oib_path": oib_path,
|
113
|
+
"params": Object.toJSON(params)
|
114
|
+
});
|
115
|
+
var oib_url, method;
|
116
|
+
|
117
|
+
oib_url = base_url ? base_url : YAHOO.constants.base_url;
|
118
|
+
|
119
|
+
if (!(oib_path && typeof(oib_path) === "string")) {
|
120
|
+
throw("OIB.request must define oib_path");
|
121
|
+
}
|
122
|
+
if (!(params && typeof(params) === "object")) {
|
123
|
+
throw("OIB.request must define params");
|
124
|
+
}
|
125
|
+
|
126
|
+
oib_url = oib_url + oib_path;
|
127
|
+
method = "GET";
|
128
|
+
if (!params.format) {
|
129
|
+
params.format = 'json';
|
130
|
+
}
|
131
|
+
if (params.method) {
|
132
|
+
method = params.method;
|
133
|
+
delete params.method;
|
134
|
+
}
|
135
|
+
params.version = params.version || <%= @version %>;
|
136
|
+
|
137
|
+
Debug.log("about to call OIB.ajax");
|
138
|
+
|
139
|
+
OIB.ajax(oib_url, method, params, success_function, error_function);
|
140
|
+
},
|
141
|
+
|
142
|
+
// overwrite this function locally if you need to
|
143
|
+
error: function(url, params, response) {
|
144
|
+
var message;
|
145
|
+
|
146
|
+
message = "OIB.error: " + Object.toJSON(response) + " calling url: " + url + "?" + Object.toQueryString(params);
|
147
|
+
Debug.error(message);
|
148
|
+
},
|
149
|
+
|
150
|
+
// advance the user to the next state in the signup process
|
151
|
+
//
|
152
|
+
advance: function(success_function, error_function) {
|
153
|
+
OIB.post("ymdp/state", {}, function(response) {
|
154
|
+
Debug.log("Scanning.next success", response);
|
155
|
+
if (success_function) {
|
156
|
+
success_function(response);
|
157
|
+
}
|
158
|
+
}, function(response) {
|
159
|
+
Debug.error("Scanning.next error", response);
|
160
|
+
if (error_function) {
|
161
|
+
error_function(response);
|
162
|
+
}
|
163
|
+
});
|
164
|
+
}
|
165
|
+
};
|
@@ -0,0 +1,139 @@
|
|
1
|
+
/*
|
2
|
+
APPLICATION
|
3
|
+
|
4
|
+
// DO NOT USE the @view instance variable in any files in /app/javascripts/base.
|
5
|
+
// The way they are cached makes it not safe to do so.
|
6
|
+
|
7
|
+
*/
|
8
|
+
|
9
|
+
var OIB;
|
10
|
+
|
11
|
+
/*
|
12
|
+
GLOBAL CONSTANTS
|
13
|
+
*/
|
14
|
+
|
15
|
+
var View = {
|
16
|
+
application: "<%= @application_name %>",
|
17
|
+
domain: "<%= @domain %>",
|
18
|
+
|
19
|
+
authorized: function(user) {
|
20
|
+
return (user[View.application + "_user"]);
|
21
|
+
}
|
22
|
+
};
|
23
|
+
|
24
|
+
YAHOO.namespace("oib");
|
25
|
+
YAHOO.namespace("constants");
|
26
|
+
YAHOO.namespace("images");
|
27
|
+
YAHOO.namespace("init");
|
28
|
+
|
29
|
+
YAHOO.oib.page_loaded = false;
|
30
|
+
|
31
|
+
function unixTimeToDate(unixtime) {
|
32
|
+
return new Date(unixtime * 1000);
|
33
|
+
}
|
34
|
+
|
35
|
+
function formatUnixDate(unixtime) {
|
36
|
+
var date;
|
37
|
+
date = unixTimeToDate(unixtime);
|
38
|
+
return date.toString("MMMM d, yyyy");
|
39
|
+
}
|
40
|
+
|
41
|
+
// Shows the error view.
|
42
|
+
//
|
43
|
+
// YAHOO.oib.showError({
|
44
|
+
// heading: "optional heading text can overwrite the error view's heading",
|
45
|
+
// message: "optional message can overwrite the view's first paragraph",
|
46
|
+
// retry: "hide"
|
47
|
+
// });
|
48
|
+
//
|
49
|
+
// Set the "retry" option to "hide" to hide the Retry button.
|
50
|
+
//
|
51
|
+
|
52
|
+
YAHOO.oib.showError = function(options) {
|
53
|
+
var params;
|
54
|
+
|
55
|
+
Debug.log("YAHOO.oib.showError", options);
|
56
|
+
|
57
|
+
options = options || {};
|
58
|
+
|
59
|
+
if (options["heading"]) {
|
60
|
+
$("error_1").update(options["heading"]);
|
61
|
+
}
|
62
|
+
if (options["message"]) {
|
63
|
+
$("error_2").update(options["message"]);
|
64
|
+
}
|
65
|
+
if (options["retry"] && options["retry"] === "hide") {
|
66
|
+
$("retry_button_container").hide();
|
67
|
+
}
|
68
|
+
|
69
|
+
params = {};
|
70
|
+
params["description"] = options["description"];
|
71
|
+
params["method_name"] = options["method"];
|
72
|
+
params["error"] = Object.toJSON(options["error"]);
|
73
|
+
params["page"] = View.name;
|
74
|
+
|
75
|
+
Reporter.error(YAHOO.oib.guid, params);
|
76
|
+
$('main').hide();
|
77
|
+
$('utility').show();
|
78
|
+
$('loading').hide();
|
79
|
+
$('error').show();
|
80
|
+
};
|
81
|
+
|
82
|
+
YAHOO.oib.showLoading = function() {
|
83
|
+
$('main').hide();
|
84
|
+
$('utility').show();
|
85
|
+
$('error').hide();
|
86
|
+
$('loading').show();
|
87
|
+
};
|
88
|
+
|
89
|
+
YAHOO.init.upgradeCheck = function(success_callback, failure_callback) {
|
90
|
+
// test for Minty
|
91
|
+
//
|
92
|
+
openmail.Application.getParameters(function(response) {
|
93
|
+
if (response.version === "2") {
|
94
|
+
|
95
|
+
// Minty-only code goes here
|
96
|
+
|
97
|
+
try {
|
98
|
+
Debug.log("Minty found");
|
99
|
+
|
100
|
+
success_callback();
|
101
|
+
} catch(wtf) {
|
102
|
+
Debug.error(wtf);
|
103
|
+
}
|
104
|
+
} else {
|
105
|
+
// non-Minty
|
106
|
+
|
107
|
+
if (failure_callback) {
|
108
|
+
failure_callback();
|
109
|
+
} else {
|
110
|
+
YAHOO.init.upgrade();
|
111
|
+
}
|
112
|
+
}
|
113
|
+
});
|
114
|
+
};
|
115
|
+
|
116
|
+
YAHOO.init.upgrade = function() {
|
117
|
+
YAHOO.oib.showTranslations();
|
118
|
+
|
119
|
+
YAHOO.oib.page_loaded = true;
|
120
|
+
|
121
|
+
$('loading').hide();
|
122
|
+
$('error').hide();
|
123
|
+
$('upgrade').show();
|
124
|
+
};
|
125
|
+
|
126
|
+
YAHOO.oib.setTimeoutInSeconds = function(callback_function, interval) {
|
127
|
+
setTimeout(callback_function, interval * 1000);
|
128
|
+
};
|
129
|
+
|
130
|
+
YAHOO.oib.showTranslations = function() {
|
131
|
+
Debug.log("begin YAHOO.oib.showTranslations");
|
132
|
+
Try.these(I18n.findAndTranslateAll);
|
133
|
+
|
134
|
+
// define I18n.localTranslations in the view template
|
135
|
+
Try.these(I18n.localTranslations);
|
136
|
+
|
137
|
+
Debug.log("end YAHOO.oib.showTranslations");
|
138
|
+
};
|
139
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
var Browser;
|
2
|
+
|
3
|
+
Browser = {
|
4
|
+
version: function(v) {
|
5
|
+
var version, app_version;
|
6
|
+
app_version = navigator.appVersion;
|
7
|
+
Debug.log("Browser app_version: ", app_version);
|
8
|
+
|
9
|
+
if (app_version.match("MSIE 6.0")) {
|
10
|
+
version = 6.0;
|
11
|
+
}
|
12
|
+
|
13
|
+
if (v) {
|
14
|
+
return (version === v);
|
15
|
+
} else {
|
16
|
+
return version;
|
17
|
+
}
|
18
|
+
},
|
19
|
+
|
20
|
+
ie: function() {
|
21
|
+
return navigator.appName.match("Internet Explorer");
|
22
|
+
},
|
23
|
+
|
24
|
+
ie6: function() {
|
25
|
+
return (Browser.ie() && Browser.version(6.0));
|
26
|
+
},
|
27
|
+
|
28
|
+
ie7: function() {
|
29
|
+
return (Browser.ie() && Browser.version(7.0));
|
30
|
+
},
|
31
|
+
|
32
|
+
ie8: function() {
|
33
|
+
return (Browser.ie() && Browser.version(8.0));
|
34
|
+
}
|
35
|
+
};
|
36
|
+
|