-
Notifications
You must be signed in to change notification settings - Fork 8
/
ngshowvariant.js
67 lines (62 loc) · 1.87 KB
/
ngshowvariant.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
'use strict';
angular.module('ngshowvariant',[]);
/*
* angular-markdown-directive v0.1.0
* (c) 2014 Matt Van Veenendaal
* License: MIT
*/
/**
* A directive that shows elements only when the given variation state is in effect
* Requires a window variable to be set using optimizely.
* <code>
* <div ng-show-variant="alphabet">variant alphabet is running</div>
* <div ng-show-variant="cactus">variant cactus is running</div>
* <div ng-show-variant="cactus,alphabet">variant cactus or alphabet is running</div>
* <div ng-show-variant="none">No variant is enabled</div>
* <div ng-show-variant="cactus,none">either variant cactus or no variant is enabled</div>
* </code>
*/
/**
* In optimizely, add this to 'custom javascript'
*
*
* //set which variant you would like
* window.variant= "optmizely1";
*
* //tell angular the variant has changed.
* var scope = angular.element(document.getElementById('main')).injector().get('$rootScope');
*
* scope.$apply( function() {
* scope.$broadcast('$updateVariant');
* });
*/
angular.module('ngshowvariant').directive('ngShowVariant', ['$rootScope', function($rootScope) {
var variant = window.variant;
if (!variant) {
variant = 'none';
}
function inList(needle, list) {
var res = false;
angular.forEach(list, function(x) {
if( x === needle ) {
res = true;
return true;
}
return false;
});
return res;
}
return {
restrict: 'A',
compile: function(el, attr) {
var expectingVariant = (attr.ngShowVariant||'').split(',');
function fn(newVariant) {
variant = newVariant;
var hide = !inList(newVariant, expectingVariant);
el.toggleClass('hide', hide);
}
fn(variant);
$rootScope.$on('$updateVariant', function() { fn(window.variant); });
}
};
}]);