-
Notifications
You must be signed in to change notification settings - Fork 28
/
sm-tab.js
117 lines (93 loc) · 2.46 KB
/
sm-tab.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
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
(function(app)
{
app
.factory('SemanticTabMenuLink', ['SemanticUI', '$timeout', SemanticTabMenuLink])
.directive('smTabBind', ['SemanticUI', SemanticTabBind])
.directive('smTabMenu', ['SemanticTabMenuLink', SemanticTabMenu])
.directive('smTab', ['SemanticUI', SemanticTab])
;
var BEHAVIORS = {
smTabSet: 'change tab'
};
angular.forEach( BEHAVIORS, function(method, directive)
{
app.directive( directive, ['SemanticUI', function(SemanticUI)
{
return SemanticUI.createBehavior( directive, 'tab', method );
}]);
});
function SemanticTabBind(SemanticUI)
{
return SemanticUI.createBind( 'smTabBind', 'tab' );
}
function SemanticTabMenu(SemanticTabMenuLink)
{
return {
restrict: 'E',
replace: true,
scope: {
/* Required */
tabs: '=',
/* Optional */
active: '=?',
settings: '='
},
template: [
'<div class="ui menu">',
' <a class="item" ng-repeat="(name, title) in tabs" ng-class="{active: name === active}" data-tab="{{ name }}" sm-html="title"></a>',
'</div>'
].join('\n'),
link: SemanticTabMenuLink
}
}
function SemanticTabMenuLink(SemanticUI, $timeout)
{
return function(scope, element, attributes)
{
var setActiveTab = function( tab )
{
if ( tab )
{
element.tab( 'change tab', tab );
}
};
$timeout(function()
{
var settings = scope.settings || {};
var elements = element.children('.item');
var hasActive = !!attributes.active;
SemanticUI.linkSettings( scope, elements, attributes, 'tab', true );
if ( hasActive )
{
var activeWatcher = SemanticUI.watcher( scope, 'active',
function( tab ) {
setActiveTab( tab );
}
);
SemanticUI.onEvent( settings, 'onVisible',
function(tab) {
activeWatcher.set( tab );
}
);
}
elements.tab( settings );
if ( hasActive )
{
setActiveTab( scope.active );
}
});
};
}
function SemanticTab(SemanticUI)
{
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {
name: '@'
},
template: '<div class="ui tab" data-tab="{{ name }}" ng-transclude></div>'
};
}
})( angular.module('semantic-ui-tab', ['semantic-ui-core']) );