angular-timeline
Version:
An Angular.js directive that generates a responsive, data-driven vertical timeline to tell a story, show history or describe a sequence of events.
147 lines (134 loc) • 3.97 kB
JavaScript
;
angular.module('angular-timeline', []);// Source: src/timeline-badge-directive.js
/**
* @ngdoc directive
* @name angular-timeline.directive:timeline-badge
* @restrict AE
*
* @description
* Shown in the centre pane (or left on narrow devices) to indicate the activity.
*/
angular.module('angular-timeline').directive('timelineBadge', function() {
return {
require: '^timelineEvent',
restrict: 'AE',
transclude: true,
template: '<div class="timeline-badge" ng-transclude></div>'
};
});
// Source: src/timeline-directive.js
/**
* @ngdoc directive
* @name angular-timeline
* @restrict AE
*
* @description
* Primary container for displaying a vertical set of timeline events.
*/
angular.module('angular-timeline').directive('timeline', function() {
return {
restrict: 'AE',
transclude: true,
template: '<ul class="timeline" ng-transclude></ul>',
controller: function() {}
};
});
// Source: src/timeline-event-directive.js
/**
* @ngdoc directive
* @name angular-timeline.directive:timeline
* @restrict AE
*
* @description
* Represents an event occuring at a point in time, displayed on the left or the right
* of the timeline line.
*
* You typically embed a `timeline-badge` and `timeline-panel` element within a `timeline-event`.
*
* @param {string=} side Define the side of the element (i.e. side="left", side="right", or use an {{ expression }}).
*/
angular.module('angular-timeline').directive('timelineEvent', function() {
return {
require: '^timeline',
restrict: 'AE',
transclude: true,
template: '<li class="timeline-event" ng-class-odd="oddClass" ng-class-even="evenClass" ng-transclude></li>',
link: function(scope, element, attrs, controller) {
var checkClass = function(side, leftSide) {
var leftClass = '';
var rightClass = 'timeline-inverted';
if (side === 'left' || (!side && leftSide === true)) {
return leftClass;
}
else if ((side === 'alternate' || !side) && leftSide === false) {
return rightClass;
}
else if (side === 'right') {
return rightClass;
}
else {
return leftClass;
}
};
var updateRowClasses = function(value) {
scope.oddClass = checkClass(value, true);
scope.evenClass = checkClass(value, false);
};
attrs.$observe('side', function(newValue) {
updateRowClasses(newValue);
});
updateRowClasses(attrs.side);
}
};
});
// Source: src/timeline-footer-directive.js
/**
* @ngdoc directive
* @name angular-timeline.directive:timeline-footer
* @restrict AE
*
* @description
* Optional element to add a footer section to the `timeline-panel` for links or other actions.
*/
angular.module('angular-timeline').directive('timelineFooter', function() {
return {
require: '^timelinePanel',
restrict: 'AE',
transclude: true,
template: '<div class="timeline-footer" ng-transclude></div>'
};
});
// Source: src/timeline-heading-directive.js
/**
* @ngdoc directive
* @name angular-timeline.directive:timeline-heading
* @restrict AE
*
* @description
* Optional element to show the heading for a `timeline-panel`.
*/
angular.module('angular-timeline').directive('timelineHeading', function() {
return {
require: '^timelinePanel',
restrict: 'AE',
transclude: true,
template: '<div class="timeline-heading" ng-transclude></div>'
};
});
// Source: src/timeline-panel-directive.js
/**
* @ngdoc directive
* @name angular-timeline.directive:timeline-panel
* @restrict AE
*
* @description
* An panel inside the `timeline-event` which shows detailed information about the event.
*/
angular.module('angular-timeline').directive('timelinePanel', function() {
return {
require: '^timeline',
restrict: 'AE',
transclude: true,
template: '<div class="timeline-panel" ng-transclude></div>'
};
});