1
0
-1

WBS ガントチャートを使用しているのですが、
Jira のトップバー > WBS ガントチャート を選択したときに表示される
メニューが遅くなってきました。

クリックしてから 2, 3 秒かかるのですが、
改善できないでしょうか。

    Commentコメントを追加...

    1 回答

    1.  
      2
      1
      0

      WBS ガントチャートではユーザの履歴情報を取得してメニューが作成されているので、
      作成されたガントやユーザ等が多くなってくると
      取得までに時間がかかってしまうようです...

      ページ読み込み時に一度だけ情報を取得し、それを使用すれば
      表示速度の改善はできるのではないかと思いました。

      <script>
      (function() {
        var contextPath = AJS.contextPath(),
            isLoaded = false,
            isClicked = false,
            isHovered = false,
            ganttMenu,
            clone;
        
        AJS.$.ajax({
          url: contextPath + '/rest/api/1.0/menus/wbsgantt_link?inAdminMode=false',
          type: 'GET',
          dataType: 'json'
        }).done(function(data) {
          var sections = data.sections,
              dropdownMenu = AJS.$('<aui-dropdown-menu>');
          dropdownMenu.attr('id', 'wbsgantt_link-content-clone');
              
          for (var i = 0, len = sections.length; i < len; i++) {
            (function(section) {
              var items = section.items,
                  label = section.label,
                  section = AJS.$('<aui-section>');
              section.attr('label', label);
      
              for (var j = 0, len2 = items.length; j < len2; j++) {
                (function(item) {
                  var url = item.url,
                      title = item.label,
                      itemLink = AJS.$('<aui-item-link resolved=""><a role="menuitem" tabindex="-1"></a></aui-item-link>'),
                      a = itemLink.find('a');
                  itemLink.attr('href', url);
                  
                  if (item.iconUrl) {
                    var img = AJS.$('<img>');
                    img.attr({ class: 'icon', src: item.iconUrl });
                    a.addClass('aui-icon-container');
                    a.append(img);
                  }
                  
                  a.append(title);
                  section.append(itemLink);
                  
                })(items[j]);
              }
              
              dropdownMenu.append(section);
            })(sections[i]);
          }
          
          AJS.$('body').append(dropdownMenu);
          
          isLoaded = true;
          if (isClicked || isHovered) {
            setTimeout(function() {
              clone.click();
            }, 0);
          }
        }).error(function() {
          console.error()
        });
        
        AJS.toInit(function() {
          ganttMenu = document.getElementById('wbsgantt_link') || document.querySelector('[for="wbsgantt_link-content"]').firstElementChild;
          clone = ganttMenu.cloneNode(true);
          
          clone.setAttribute('aria-controls', 'wbsgantt_link-content-clone');
          ganttMenu.style.display = 'none';
          ganttMenu.parentElement.insertBefore(clone, ganttMenu.nextElementSibling);
      
          if (clone.id) {
            clone.addEventListener('click', function() {
              if (!isClicked) isClicked = true;
              else isClicked = false;
            }, false);
          } else {
            clone.addEventListener('mouseover', function() {
              isHovered = true;
            }, false);
            clone.addEventListener('mouseout', function() {
              isHovered = false;
            }, false);
          }
        });
      })();
      </script>

      お知らせバナーに上記を挿入すれば
      上手くいったように思えます。

      ただし、一度だけ取得する 2, 3 秒は同じなので、
      ページ読み込み後すぐにメニューを表示させようとすると
      少し時間はかかってしまいます...

        Commentコメントを追加...