mirror of
https://github.com/overleaf/overleaf.git
synced 2024-09-16 02:52:31 -04:00
42 lines
1.3 KiB
CoffeeScript
42 lines
1.3 KiB
CoffeeScript
|
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
|