kibanaPanel.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. define([
  2. 'angular'
  3. ],
  4. function (angular) {
  5. 'use strict';
  6. angular
  7. .module('kibana.directives')
  8. .directive('kibanaPanel', function($compile) {
  9. var container = '<div class="panelCont"></div>';
  10. var editorTemplate =
  11. '<div class="row-fluid panel-extra"><div class="panel-extra-container">' +
  12. '<span class="extra row-button" ng-show="panel.editable != false">' +
  13. '<span ng-click="remove_panel_from_row(row,panel)" class="pointer">'+
  14. '<i class="icon-remove pointer" bs-tooltip="\'Remove\'"></i></span>'+
  15. '</span>' +
  16. '<span class="extra row-button" ng-hide="panel.draggable == false">' +
  17. '<span class="pointer" bs-tooltip="\'Drag here to move\'"' +
  18. 'data-drag=true data-jqyoui-options="{revert: \'invalid\',helper:\'clone\'}"'+
  19. ' jqyoui-draggable="'+
  20. '{'+
  21. 'animate:false,'+
  22. 'mutate:false,'+
  23. 'index:{{$index}},'+
  24. 'onStart:\'panelMoveStart\','+
  25. 'onStop:\'panelMoveStop\''+
  26. '}" ng-model="row.panels"><i class="icon-move"></i></span>'+
  27. '</span>' +
  28. '<span class="row-button extra" ng-show="panel.editable != false">' +
  29. '<span config-modal class="pointer">'+
  30. '<i class="icon-cog pointer" bs-tooltip="\'Configure\'"></i></span>'+
  31. '</span>' +
  32. '<span ng-repeat="task in panelMeta.modals" class="row-button extra" ng-show="task.show">' +
  33. '<span bs-modal="task.partial" class="pointer"><i ' +
  34. 'bs-tooltip="task.description" ng-class="task.icon" class="pointer"></i></span>'+
  35. '</span>' +
  36. '<span class="row-button extra" ng-show="panelMeta.loading == true">' +
  37. '<span>'+
  38. '<i class="icon-spinner icon-spin icon-large"></i>' +
  39. '</span>'+
  40. '</span>' +
  41. '<span ng-if="panelMeta.menuItems" class="dropdown" ng-show="panel.title">' +
  42. '<span class="panel-text panel-title pointer" bs-dropdown="panelMeta.menuItems" tabindex="1">' +
  43. '{{panel.title}}' +
  44. '</span>' +
  45. '</span>'+
  46. '<span ng-if="!panelMeta.menuItems" class="panel-text panel-title" ng-show="panel.title">' +
  47. '{{panel.title}}' +
  48. '</span>'+
  49. '</div></div>';
  50. return {
  51. restrict: 'E',
  52. link: function($scope, elem, attr) {
  53. // once we have the template, scan it for controllers and
  54. // load the module.js if we have any
  55. var newScope = $scope.$new();
  56. // compile the module and uncloack. We're done
  57. function loadModule($module) {
  58. $module.appendTo(elem);
  59. elem.wrap(container);
  60. /* jshint indent:false */
  61. $compile(elem.contents())(newScope);
  62. elem.removeClass("ng-cloak");
  63. }
  64. newScope.$on('$destroy',function(){
  65. elem.unbind();
  66. elem.remove();
  67. });
  68. $scope.$watch(attr.type, function (name) {
  69. elem.addClass("ng-cloak");
  70. // load the panels module file, then render it in the dom.
  71. var nameAsPath = name.replace(".", "/");
  72. $scope.require([
  73. 'jquery',
  74. 'text!panels/'+nameAsPath+'/module.html',
  75. 'text!panels/'+nameAsPath+'/editor.html'
  76. ], function ($, moduleTemplate) {
  77. var $module = $(moduleTemplate);
  78. // top level controllers
  79. var $controllers = $module.filter('ngcontroller, [ng-controller], .ng-controller');
  80. // add child controllers
  81. $controllers = $controllers.add($module.find('ngcontroller, [ng-controller], .ng-controller'));
  82. if ($controllers.length) {
  83. $controllers.first().prepend(editorTemplate);
  84. $scope.require([
  85. 'panels/'+nameAsPath+'/module'
  86. ], function() {
  87. loadModule($module);
  88. });
  89. } else {
  90. loadModule($module);
  91. }
  92. });
  93. });
  94. }
  95. };
  96. });
  97. });