collapse_box.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. ///<reference path="../../headers/common.d.ts" />
  2. import coreModule from 'app/core/core_module';
  3. const template = `
  4. <div class="collapse-box">
  5. <div class="collapse-box__header">
  6. <a class="collapse-box__header-title pointer" ng-click="ctrl.toggle()">
  7. <span class="fa fa-fw fa-caret-right" ng-hide="ctrl.isOpen"></span>
  8. <span class="fa fa-fw fa-caret-down" ng-hide="!ctrl.isOpen"></span>
  9. {{ctrl.title}}
  10. </a>
  11. <div class="collapse-box__header-actions" ng-transclude="actions" ng-if="ctrl.isOpen"></div>
  12. </div>
  13. <div class="collapse-box__body" ng-transclude="body" ng-if="ctrl.isOpen">
  14. </div>
  15. </div>
  16. `;
  17. export class CollapseBoxCtrl {
  18. isOpen: boolean;
  19. stateChanged: () => void;
  20. /** @ngInject **/
  21. constructor(private $timeout) {
  22. this.isOpen = false;
  23. }
  24. toggle() {
  25. this.isOpen = !this.isOpen;
  26. this.$timeout(() => {
  27. this.stateChanged();
  28. });
  29. }
  30. }
  31. export function collapseBox() {
  32. return {
  33. restrict: 'E',
  34. template: template,
  35. controller: CollapseBoxCtrl,
  36. bindToController: true,
  37. controllerAs: 'ctrl',
  38. scope: {
  39. "title": "@",
  40. "isOpen": "=?",
  41. "stateChanged": "&"
  42. },
  43. transclude: {
  44. 'actions': '?collapseBoxActions',
  45. 'body': 'collapseBoxBody',
  46. },
  47. link: function(scope, elem, attrs) {
  48. }
  49. };
  50. }
  51. coreModule.directive('collapseBox', collapseBox);