dash_import.html 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <div class="modal-header">
  2. <h2 class="modal-header-title">
  3. <i class="gicon gicon-dashboard-import"></i>
  4. <span class="p-l-1">Import Dashboard</span>
  5. </h2>
  6. <a class="modal-header-close" ng-click="dismiss();">
  7. <i class="fa fa-remove"></i>
  8. </a>
  9. </div>
  10. <div class="modal-content" ng-cloak>
  11. <div ng-if="ctrl.step === 1">
  12. <form class="gf-form-group">
  13. <dash-upload on-upload="ctrl.onUpload(dash)"></dash-upload>
  14. </form>
  15. <h5 class="section-heading">Grafana.com Dashboard</h5>
  16. <div class="gf-form-group">
  17. <div class="gf-form">
  18. <input type="text" class="gf-form-input" ng-model="ctrl.gnetUrl" placeholder="Paste Grafana.com dashboard url or id" ng-blur="ctrl.checkGnetDashboard()"></textarea>
  19. </div>
  20. <div class="gf-form" ng-if="ctrl.gnetError">
  21. <label class="gf-form-label text-warning">
  22. <i class="fa fa-warning"></i>
  23. {{ctrl.gnetError}}
  24. </label>
  25. </div>
  26. </div>
  27. <h5 class="section-heading">Or paste JSON</h5>
  28. <div class="gf-form-group">
  29. <div class="gf-form">
  30. <textarea rows="7" data-share-panel-url="" class="gf-form-input" ng-model="ctrl.jsonText"></textarea>
  31. </div>
  32. <button type="button" class="btn btn-secondary" ng-click="ctrl.loadJsonText()">
  33. <i class="fa fa-paste"></i>
  34. Load
  35. </button>
  36. <span ng-if="ctrl.parseError" class="text-error p-l-1">
  37. <i class="fa fa-warning"></i>
  38. {{ctrl.parseError}}
  39. </span>
  40. </div>
  41. </div>
  42. <div ng-if="ctrl.step === 2">
  43. <div class="gf-form-group" ng-if="ctrl.dash.gnetId">
  44. <h3 class="section-heading">
  45. Importing Dashboard from
  46. <a href="https://grafana.com/dashboards/{{ctrl.dash.gnetId}}" class="external-link" target="_blank">Grafana.com</a>
  47. </h3>
  48. <div class="gf-form">
  49. <label class="gf-form-label width-15">Published by</label>
  50. <label class="gf-form-label width-15">{{ctrl.gnetInfo.orgName}}</label>
  51. </div>
  52. <div class="gf-form">
  53. <label class="gf-form-label width-15">Updated on</label>
  54. <label class="gf-form-label width-15">{{ctrl.gnetInfo.updatedAt | date : 'yyyy-MM-dd HH:mm:ss'}}</label>
  55. </div>
  56. </div>
  57. <h3 class="section-heading">
  58. Options
  59. </h3>
  60. <div class="gf-form-group">
  61. <div class="gf-form-inline">
  62. <div class="gf-form gf-form--grow">
  63. <label class="gf-form-label width-15">Name</label>
  64. <input type="text" class="gf-form-input" ng-model="ctrl.dash.title" give-focus="true" ng-change="ctrl.titleChanged()" ng-class="{'validation-error': ctrl.nameExists || !ctrl.dash.title}">
  65. <label class="gf-form-label text-success" ng-if="!ctrl.nameExists && ctrl.dash.title">
  66. <i class="fa fa-check"></i>
  67. </label>
  68. </div>
  69. </div>
  70. <div class="gf-form-inline" ng-if="ctrl.nameExists">
  71. <div class="gf-form offset-width-15 gf-form--grow">
  72. <label class="gf-form-label text-warning gf-form-label--grow">
  73. <i class="fa fa-warning"></i>
  74. A Dashboard with the same name already exists
  75. </label>
  76. </div>
  77. </div>
  78. <div class="gf-form-inline" ng-if="!ctrl.dash.title">
  79. <div class="gf-form offset-width-15 gf-form--grow">
  80. <label class="gf-form-label text-warning gf-form-label--grow">
  81. <i class="fa fa-warning"></i>
  82. A Dashboard should have a name
  83. </label>
  84. </div>
  85. </div>
  86. <div ng-repeat="input in ctrl.inputs">
  87. <div class="gf-form">
  88. <label class="gf-form-label width-15">
  89. {{input.label}}
  90. <info-popover mode="right-normal">
  91. {{input.info}}
  92. </info-popover>
  93. </label>
  94. <!-- Data source input -->
  95. <div class="gf-form-select-wrapper" style="width: 100%" ng-if="input.type === 'datasource'">
  96. <select class="gf-form-input" ng-model="input.value" ng-options="v.value as v.text for v in input.options" ng-change="ctrl.inputValueChanged()">
  97. <option value="" ng-hide="input.value">{{input.info}}</option>
  98. </select>
  99. </div>
  100. <!-- Constant input -->
  101. <input ng-if="input.type === 'constant'" type="text" class="gf-form-input" ng-model="input.value" placeholder="{{input.default}}" ng-change="ctrl.inputValueChanged()">
  102. <label class="gf-form-label text-success" ng-show="input.value">
  103. <i class="fa fa-check"></i>
  104. </label>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="gf-form-button-row">
  109. <button type="button" class="btn gf-form-btn btn-success width-12" ng-click="ctrl.saveDashboard()" ng-hide="ctrl.nameExists" ng-disabled="!ctrl.inputsValid">
  110. <i class="fa fa-save"></i> Import
  111. </button>
  112. <button type="button" class="btn gf-form-btn btn-danger width-12" ng-click="ctrl.saveDashboard()" ng-show="ctrl.nameExists" ng-disabled="!ctrl.inputsValid">
  113. <i class="fa fa-save"></i> Import (Overwrite)
  114. </button>
  115. <a class="btn btn-link" ng-click="dismiss()">Cancel</a>
  116. <a class="btn btn-link" ng-click="ctrl.back()">Back</a>
  117. </div>
  118. </div>
  119. </div>
  120. </div>