})
// example <div crm-ui-tab crm-title="ts('My Title')">...content...</div>
+ // WISHLIST: use a full Angular component instead of an incomplete jQuery wrapper
.directive('crmUiTab', function($parse) {
return {
+ require: '^crmUiTabSet',
+ restrict: 'EA',
scope: {
- crmTitle: '@'
+ crmTitle: '@',
+ id: '@'
},
- template: '<div><b>(Tab: {{$parent.$eval(crmTitle)}})</b><span ng-transclude/></div>',
+ template: '<div ng-transclude></div>',
transclude: true,
- link: function (scope, element, attrs) {}
+ link: function (scope, element, attrs, crmUiTabSetCtrl) {
+ crmUiTabSetCtrl.add(scope);
+ }
};
})
// example: <div crm-ui-tab-set><div crm-ui-tab crm-title="Tab 1">...</div><div crm-ui-tab crm-title="Tab 2">...</div></div>
.directive('crmUiTabSet', function() {
return {
- template: '<div><span ng-transclude/></div>',
+ restrict: 'EA',
+ scope: {
+ crmUiTabSet: '@'
+ },
+ templateUrl: partialUrl('tabset.html'),
transclude: true,
+ controllerAs: 'crmUiTabSetCtrl',
+ controller: function($scope, $parse) {
+ var tabs = $scope.tabs = []; // array<$scope>
+ this.add = function(tab) {
+ if (!tab.id) throw "Tab is missing 'id'";
+ tabs.push(tab);
+ };
+ },
link: function (scope, element, attrs) {}
};
})
<div crm-ui-accordion crm-title="ts('Summary')">
<div ng-include="partialUrl('summary.html')" />
</div>
- <div crm-ui-tabset>
- <div crm-ui-tab crm-title="ts('Mailing')">
+ <div crm-ui-tab-set>
+ <div crm-ui-tab id="tab-mailing" crm-title="ts('Mailing')">
<div ng-include="partialUrl('mailing.html')" />
</div>
- <div crm-ui-tab crm-title="ts('Attachments')">
+ <div crm-ui-tab id="tab-attachment" crm-title="ts('Attachments')">
<div ng-include="partialUrl('attachments.html')" />
</div>
- <div crm-ui-tab crm-title="ts('Header and Footer')">
+ <div crm-ui-tab id="tab-header" crm-title="ts('Header and Footer')">
<div ng-include="partialUrl('headerFooter.html')" />
</div>
- <div crm-ui-tab crm-title="ts('Publication')">
+ <div crm-ui-tab id="tab-pub" crm-title="ts('Publication')">
<div ng-include="partialUrl('publication.html')" />
</div>
- <div crm-ui-tab crm-title="ts('Responses')">
+ <div crm-ui-tab id="tab-response" crm-title="ts('Responses')">
<div ng-include="partialUrl('responses.html')" />
</div>
- <div crm-ui-tab crm-title="ts('Tracking')">
+ <div crm-ui-tab id="tab-tracking" crm-title="ts('Tracking')">
<div ng-include="partialUrl('tracking.html')" />
</div>
</div>