Blame view

build/Tabs/Tabs.js 2.8 KB
3a3ecabe   Imshann   init
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
  import template from "./Tabs.html";
  import style from "antd/lib/tabs/style/index.css";
  angular.module("esNgAntd").directive("esTabs", function (esNgAntd) {
      return {
          controllerAs: "esTabs",
          restrict: "E",
          transclude: true,
          replace: true,
          scope: {
              defaultActiveKey: "@",
              onChange: "&",
          },
          template: template,
          controller: function ($scope, $element) {
              this.getContext = function () {
                  return $scope;
              };
  
              $scope.state = {
                  childrens: [],
                  labels: [],
                  tabWidth: 0,
                  offsetLeft: 0,
                  activeKey: $scope.defaultActiveKey,
              };
  
              $scope.handleClick = function (labelKey, tabKey, event) {
                  let target = event.target;
                  $scope.state.tabWidth = target.clientWidth;
                  let currentMarginLeft = parseFloat(
                      getComputedStyle(target, null).marginLeft
                  );
                  let beforeTarget = Array.prototype.slice
                      .call(target.parentNode.querySelectorAll("div"))
                      .splice(0, tabKey);
  
                  if (beforeTarget.length > 0) {
                      $scope.state.offsetLeft =
                          beforeTarget
                              .map(function (item) {
                                  return (
                                      item.clientWidth +
                                      parseFloat(
                                          getComputedStyle(item, null).marginLeft
                                      )
                                  );
                              })
                              .reduce(function (prev, curr) {
                                  return prev + curr;
                              }) + currentMarginLeft;
                  } else {
                      $scope.state.offsetLeft = 0;
                  }
  
                  $scope.state.activeKey = labelKey;
                  $scope.state.childrens.forEach(function (element) {
                      element.state.activeKey = labelKey;
                  });
                  $scope.onChange({
                      key: labelKey,
                  });
              };
          },
          link: function ($scope, $element, $attrs, $controllers, $transclude) {
              esNgAntd.createStyle("ant-tabs", style);
  
              if ($scope.defaultActiveKey) {
                  setTimeout(() => {
                      if ($element[0].querySelector(".ant-tabs-tab-active")) {
                          $scope.state.tabWidth = $element[0].querySelector(
                              ".ant-tabs-tab-active"
                          ).clientWidth;
                          $scope.$apply();
                      }
                  }, 0);
              }
          },
      };
  });