mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
added basic new a/b test funnely framework
This commit is contained in:
parent
f3c04feda7
commit
62f207c368
3 changed files with 49 additions and 2 deletions
|
@ -43,7 +43,7 @@ html(itemscope, itemtype='http://schema.org/Product')
|
|||
|
||||
script(type="text/javascript").
|
||||
window.csrfToken = "#{csrfToken}";
|
||||
|
||||
|
||||
block scripts
|
||||
script(src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js")
|
||||
script(src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min.js")
|
||||
|
@ -54,6 +54,7 @@ html(itemscope, itemtype='http://schema.org/Product')
|
|||
jsPath: '#{jsPath}'
|
||||
};
|
||||
window.systemMessages = !{JSON.stringify(systemMessages).replace(/\//g, '\\/')};
|
||||
window.ab = {}
|
||||
|
||||
- if (typeof(settings.algolia) != "undefined")
|
||||
script.
|
||||
|
@ -125,5 +126,8 @@ html(itemscope, itemtype='http://schema.org/Product')
|
|||
category: "questions"
|
||||
};
|
||||
|
||||
|
||||
span(ng-controller="AbTestController")
|
||||
script.
|
||||
window.ab.plan14 = {step:1}
|
||||
|
||||
|
||||
|
|
42
services/web/public/coffee/analytics/AbTestingManager.coffee
Normal file
42
services/web/public/coffee/analytics/AbTestingManager.coffee
Normal file
|
@ -0,0 +1,42 @@
|
|||
define [
|
||||
"base"
|
||||
"libs/md5"
|
||||
], (App) ->
|
||||
|
||||
App.factory "abTestManager", ($http, ipCookie) ->
|
||||
|
||||
_buildCookieKey = (testName)-> "sl_abt_#{testName}"
|
||||
|
||||
_getTestCookie = (testName)->
|
||||
cookieKey = _buildCookieKey(testName)
|
||||
return ipCookie(cookieKey)
|
||||
|
||||
_persistCookieStep = (testName, newStep)->
|
||||
ipCookie(_buildCookieKey(testName), step:newStep, {expires:10})
|
||||
ga('send', 'event', 'ab_tests', testName, {step:newStep})
|
||||
|
||||
_checkIfStepIsNext = (cookieStep, newStep)->
|
||||
if !cookieStep? and newStep != 0
|
||||
return false
|
||||
else if newStep == 0
|
||||
return true
|
||||
else if (cookieStep+1) == newStep
|
||||
return true
|
||||
else
|
||||
return false
|
||||
|
||||
processTestWithStep: processTestWithStep = (testName, newStep)->
|
||||
currentCookieStep = _getTestCookie(testName)?.step
|
||||
if _checkIfStepIsNext(currentCookieStep, newStep)
|
||||
_persistCookieStep(testName, newStep)
|
||||
|
||||
getABTestBucket: getABTestBucket = (user_id, test_name, buckets) ->
|
||||
hash = CryptoJS.MD5("#{user_id}:#{test_name}")
|
||||
bucketIndex = parseInt(hash.toString().slice(0,2), 16) % (buckets?.length or 2)
|
||||
return buckets[bucketIndex]
|
||||
|
||||
App.controller "AbTestController", ($scope, abTestManager)->
|
||||
testKeys = _.keys(window.ab)
|
||||
|
||||
_.each testKeys, (testName)->
|
||||
abTestManager.processTestWithStep testName, window.ab[testName]?.step
|
|
@ -12,6 +12,7 @@ define [
|
|||
"main/translations"
|
||||
"main/subscription-dashboard"
|
||||
"main/annual-upgrade"
|
||||
"analytics/AbTestingmanager"
|
||||
"directives/asyncForm"
|
||||
"directives/stopPropagation"
|
||||
"directives/focus"
|
||||
|
|
Loading…
Reference in a new issue