Restore Page Footer after migration to new scrollbar #9652

This commit is contained in:
Marcus Efraimsson 2017-11-28 14:16:29 +01:00
parent a335150ad1
commit 6c5748203d
7 changed files with 362 additions and 395 deletions

View File

@ -1,33 +1,32 @@
<div class="scroll-canvas" grafana-scrollbar> <navbar model="ctrl.navModel"></navbar>
<navbar model="ctrl.navModel"></navbar> <div class="page-container">
<div class="page-container"> <div class="page-header">
<div class="page-header"> <page-h1 model="ctrl.navModel"></page-h1>
<page-h1 model="ctrl.navModel"></page-h1>
</div>
<section class="card-section card-list-layout-grid">
<ol class="card-list" >
<li class="card-item-wrapper" ng-repeat="navItem in ctrl.navModel.node.children">
<a class="card-item" ng-href="{{::navItem.url}}">
<div class="card-item-header">
<div class="card-item-type">
</div>
</div>
<div class="card-item-body">
<figure class="card-item-figure">
<i class="{{navItem.icon}}"></i>
</figure>
<div class="card-item-details">
<div class="card-item-name">
{{navItem.text}}
</div>
<div class="card-item-sub-name">
{{navItem.description}}
</div>
</div>
</div>
</a>
</li>
</ol>
</section>
</div> </div>
<section class="card-section card-list-layout-grid">
<ol class="card-list">
<li class="card-item-wrapper" ng-repeat="navItem in ctrl.navModel.node.children">
<a class="card-item" ng-href="{{::navItem.url}}">
<div class="card-item-header">
<div class="card-item-type">
</div>
</div>
<div class="card-item-body">
<figure class="card-item-figure">
<i class="{{navItem.icon}}"></i>
</figure>
<div class="card-item-details">
<div class="card-item-name">
{{navItem.text}}
</div>
<div class="card-item-sub-name">
{{navItem.description}}
</div>
</div>
</div>
</a>
</li>
</ol>
</section>
</div>

View File

@ -1,163 +1,135 @@
<div class="scroll-canvas" grafana-scrollbar> <navbar model="ctrl.navModel"></navbar>
<navbar model="ctrl.navModel"></navbar> <div class="page-container" style="height: 95%">
<div class="page-container" style="height: 95%"> <div class="page-header">
<div class="page-header"> <h1>Dashboards</h1>
<h1>Dashboards</h1>
<a class="btn btn-inverse" href="/dashboard/new"> <a class="btn btn-inverse" href="/dashboard/new">
<i class="gicon gicon-dashboard-new"></i> <i class="gicon gicon-dashboard-new"></i>
Dashboard Dashboard
</a> </a>
<a class="btn btn-inverse" href="/dashboard/new/?editview=new-folder"> <a class="btn btn-inverse" href="/dashboard/new/?editview=new-folder">
<i class="gicon gicon-folder-new"></i> <i class="gicon gicon-folder-new"></i>
Folder Folder
</a> </a>
</div> </div>
<div class="gf-form-group"> <div class="gf-form-group">
<div class="gf-form width-15"> <div class="gf-form width-15">
<span style="position: relative;"> <span style="position: relative;">
<input type="text" class="gf-form-input" placeholder="Find Dashboard by name" tabindex="1" give-focus="true" <input type="text" class="gf-form-input" placeholder="Find Dashboard by name" tabindex="1" give-focus="true"
ng-model="ctrl.query.query" ng-model-options="{ debounce: 500 }" spellcheck='false' ng-change="ctrl.onQueryChange()" /> ng-model="ctrl.query.query" ng-model-options="{ debounce: 500 }" spellcheck='false' ng-change="ctrl.onQueryChange()" />
</span>
</div>
</div>
<div class="gf-form" ng-if="ctrl.query.tag.length">
Filters:
<span ng-repeat="tagName in ctrl.query.tag">
<a ng-click="ctrl.removeTag(tagName, $event)" tag-color-from-name="tagName" class="label label-tag">
<i class="fa fa-remove"></i>
{{tagName}}
</a>
</span> </span>
</div> </div>
</div>
<div class="gf-form"> <div class="gf-form" ng-if="ctrl.query.tag.length">
<div class="gf-form-button-row" Filters:
ng-show="ctrl.hasFilters"> <span ng-repeat="tagName in ctrl.query.tag">
<button <a ng-click="ctrl.removeTag(tagName, $event)" tag-color-from-name="tagName" class="label label-tag">
type="button" <i class="fa fa-remove"></i>
class="btn gf-form-button btn-inverse btn-small" {{tagName}}
ng-click="ctrl.clearFilters()"> </a>
<i class="fa fa-close"></i> Clear current search query and filters </span>
</button> </div>
</div>
<div class="gf-form">
<div class="gf-form-button-row"
ng-show="ctrl.hasFilters">
<button
type="button"
class="btn gf-form-button btn-inverse btn-small"
ng-click="ctrl.clearFilters()">
<i class="fa fa-close"></i> Clear current search query and filters
</button>
</div>
</div>
<div class="gf-form-group">
<div class="gf-form-button-row">
<button type="button"
class="btn gf-form-button btn-secondary"
ng-disabled="!ctrl.canMove"
ng-click="ctrl.moveTo()"
bs-tooltip="ctrl.canMove ? '' : 'Select a dashboard to move (cannot move folders)'" data-placement="bottom">
<i class="fa fa-exchange"></i>&nbsp;&nbsp;Move to...
</button>
<button type="button"
class="btn gf-form-button btn-inverse"
ng-click="ctrl.delete()"
ng-disabled="!ctrl.canDelete">
<i class="fa fa-trash"></i>&nbsp;&nbsp;Delete
</button>
</div> </div>
</div>
<div class="gf-form-group"> <div class="dashboard-list">
<div class="gf-form-button-row"> <div class="search-results-filter-row">
<button type="button" <gf-form-switch
class="btn gf-form-button btn-secondary" on-change="ctrl.onSelectAllChanged()"
ng-disabled="!ctrl.canMove" checked="ctrl.selectAllChecked"
ng-click="ctrl.moveTo()" />
bs-tooltip="ctrl.canMove ? '' : 'Select a dashboard to move (cannot move folders)'" data-placement="bottom"> <div class="search-results-filter-row__filters">
<i class="fa fa-exchange"></i>&nbsp;&nbsp;Move to... <select
</button> class="search-results-filter-row__filters-item gf-form-input"
<button type="button" ng-model="ctrl.selectedStarredFilter"
class="btn gf-form-button btn-inverse" ng-options="t.text disable when t.disabled for t in ctrl.starredFilterOptions"
ng-click="ctrl.delete()" ng-change="ctrl.onStarredFilterChange()"
ng-disabled="!ctrl.canDelete"> />
<i class="fa fa-trash"></i>&nbsp;&nbsp;Delete <select
</button> class="search-results-filter-row__filters-item gf-form-input"
ng-model="ctrl.selectedTagFilter"
ng-options="t.term disable when t.disabled for t in ctrl.tagFilterOptions"
ng-change="ctrl.onTagFilterChange()"
/>
</div> </div>
</div> </div>
<div class="search-results-container" ng-show="ctrl.sections.length > 0" grafana-scrollbar>
<div ng-repeat="section in ctrl.sections" class="search-section">
<div class="dashboard-list"> <div class="search-section__header__with-checkbox" ng-hide="section.hideHeader">
<div class="search-results-filter-row"> <gf-form-switch
on-change="ctrl.selectionChanged()"
checked="section.checked">
</gf-form-switch>
<a class="search-section__header pointer" ng-click="ctrl.toggleFolder(section)" ng-hide="section.hideHeader">
<i class="search-section__header__icon" ng-class="section.icon"></i>
<span class="search-section__header__text">{{::section.title}}</span>
<i class="fa fa-minus search-section__header__toggle" ng-show="section.expanded"></i>
<i class="fa fa-plus search-section__header__toggle" ng-hide="section.expanded"></i>
</a>
</div>
<div ng-if="section.expanded">
<div ng-repeat="item in section.items" class="search-item__with-checkbox" ng-class="{'selected': item.selected}">
<gf-form-switch <gf-form-switch
on-change="ctrl.onSelectAllChanged()" on-change="ctrl.selectionChanged()"
checked="ctrl.selectAllChecked" checked="item.checked" />
/> <a ng-href="{{::item.url}}" class="search-item">
<div class="search-results-filter-row__filters"> <span class="search-item__icon">
<select <i class="fa fa-th-large"></i>
class="search-results-filter-row__filters-item gf-form-input" </span>
ng-model="ctrl.selectedStarredFilter" <span class="search-item__body">
ng-options="t.text disable when t.disabled for t in ctrl.starredFilterOptions" <div class="search-item__body-title">{{::item.title}}</div>
ng-change="ctrl.onStarredFilterChange()" <div class="search-item__body-sub-title" ng-show="item.folderTitle && section.hideHeader">
/> <i class="fa fa-folder-o"></i>
<select {{::item.folderTitle}}
class="search-results-filter-row__filters-item gf-form-input" </div>
ng-model="ctrl.selectedTagFilter" </span>
ng-options="t.term disable when t.disabled for t in ctrl.tagFilterOptions" <span class="search-item__tags">
ng-change="ctrl.onTagFilterChange()" <span ng-click="ctrl.filterByTag(tag, $event)" ng-repeat="tag in item.tags" tag-color-from-name="tag" class="label label-tag">
/> {{tag}}
</div> </span>
</div> </span>
<div class="search-results-container" ng-show="ctrl.sections.length > 0" grafana-scrollbar> <span class="search-item__actions">
<div ng-repeat="section in ctrl.sections" class="search-section"> <i class="fa" ng-class="{'fa-star': item.isStarred, 'fa-star-o': !item.isStarred}"></i>
</span>
<div class="search-section__header__with-checkbox" ng-hide="section.hideHeader"> </a>
<gf-form-switch
on-change="ctrl.selectionChanged()"
checked="section.checked">
</gf-form-switch>
<a class="search-section__header pointer" ng-click="ctrl.toggleFolder(section)" ng-hide="section.hideHeader">
<i class="search-section__header__icon" ng-class="section.icon"></i>
<span class="search-section__header__text">{{::section.title}}</span>
<i class="fa fa-minus search-section__header__toggle" ng-show="section.expanded"></i>
<i class="fa fa-plus search-section__header__toggle" ng-hide="section.expanded"></i>
</a>
</div>
<div ng-if="section.expanded">
<div ng-repeat="item in section.items" class="search-item__with-checkbox" ng-class="{'selected': item.selected}">
<gf-form-switch
on-change="ctrl.selectionChanged()"
checked="item.checked" />
<a ng-href="{{::item.url}}" class="search-item">
<span class="search-item__icon">
<i class="fa fa-th-large"></i>
</span>
<span class="search-item__body">
<div class="search-item__body-title">{{::item.title}}</div>
<div class="search-item__body-sub-title" ng-show="item.folderTitle && section.hideHeader">
<i class="fa fa-folder-o"></i>
{{::item.folderTitle}}
</div>
</span>
<span class="search-item__tags">
<span ng-click="ctrl.filterByTag(tag, $event)" ng-repeat="tag in item.tags" tag-color-from-name="tag" class="label label-tag">
{{tag}}
</span>
</span>
<span class="search-item__actions">
<i class="fa" ng-class="{'fa-star': item.isStarred, 'fa-star-o': !item.isStarred}"></i>
</span>
</a>
</div>
</div>
</div>
<!-- <div bindonce class="search-section" ng-repeat="dashboard in ctrl.dashboards">
<gf-form-switch
switch-class="gf-form-switch--table-cell"
on-change="ctrl.selectionChanged()"
checked="dashboard.checked">
</gf-form-switch>
<a class="search-item pointer "
bo-href-i="{{dashboard.url}}">
<span class="search-item__icon">
<i class="fa fa-th-large"></i>
</span>
<span class="search-result-tags">
<span ng-click="ctrl.filterByTag(tag, $event)" bindonce ng-repeat="tag in dashboard.tags" tag-color-from-name="tag" class="label label-tag">
{{tag}}
</span>
<i class="fa" bo-class="{'fa-star': dashboard.isStarred, 'fa-star-o': !dashboard.isStarred}"></i>
</span>
<span class="search-result-link">
<i class="fa search-result-icon"></i>
<span bo-text="dashboard.title" />
</span>
</a>
</div> -->
</div> </div>
</div> </div>
</div> </div>
</div>
<em class="muted" ng-hide="ctrl.sections.length > 0">
No Dashboards or Folders found.
</em>
</div> </div>
</div> </div>
<em class="muted" ng-hide="ctrl.sections.length > 0">
No Dashboards or Folders found.
</em>

View File

@ -1,91 +1,89 @@
<div class="scroll-canvas" grafana-scrollbar> <navbar model="ctrl.navModel"></navbar>
<navbar model="ctrl.navModel"></navbar> <div class="page-container">
<div class="page-container"> <div class="page-header">
<div class="page-header"> <page-h1 model="ctrl.navModel"></page-h1>
<page-h1 model="ctrl.navModel"></page-h1>
<div ng-if="ctrl.current.readOnly" class="grafana-info-box span8">Disclaimer. This datasource was added by config and cannot be modified using the UI. Please contact your server admin to update this datasource.</div> <div ng-if="ctrl.current.readOnly" class="grafana-info-box span8">Disclaimer. This datasource was added by config and cannot be modified using the UI. Please contact your server admin to update this datasource.</div>
<div class="page-header-tabs" ng-show="ctrl.hasDashboards"> <div class="page-header-tabs" ng-show="ctrl.hasDashboards">
<ul class="gf-tabs"> <ul class="gf-tabs">
<li class="gf-tabs-item"> <li class="gf-tabs-item">
<a class="gf-tabs-link" ng-click="ctrl.tabIndex = 0" ng-class="{active: ctrl.tabIndex === 0}"> <a class="gf-tabs-link" ng-click="ctrl.tabIndex = 0" ng-class="{active: ctrl.tabIndex === 0}">
Config Config
</a> </a>
</li> </li>
<li class="gf-tabs-item"> <li class="gf-tabs-item">
<a class="gf-tabs-link" ng-click="ctrl.tabIndex = 1" ng-class="{active: ctrl.tabIndex === 1}"> <a class="gf-tabs-link" ng-click="ctrl.tabIndex = 1" ng-class="{active: ctrl.tabIndex === 1}">
Dashboards Dashboards
</a> </a>
</li> </li>
</ul> </ul>
</div>
</div> </div>
</div>
<div ng-if="ctrl.tabIndex === 0" class="tab-content"> <div ng-if="ctrl.tabIndex === 0" class="tab-content">
<form name="ctrl.editForm" ng-if="ctrl.current"> <form name="ctrl.editForm" ng-if="ctrl.current">
<div class="gf-form-group"> <div class="gf-form-group">
<div class="gf-form-inline"> <div class="gf-form-inline">
<div class="gf-form max-width-30"> <div class="gf-form max-width-30">
<span class="gf-form-label width-7">Name</span> <span class="gf-form-label width-7">Name</span>
<input class="gf-form-input max-width-23" type="text" ng-model="ctrl.current.name" placeholder="name" required> <input class="gf-form-input max-width-23" type="text" ng-model="ctrl.current.name" placeholder="name" required>
<info-popover offset="0px -135px" mode="right-absolute"> <info-popover offset="0px -135px" mode="right-absolute">
The name is used when you select the data source in panels. The name is used when you select the data source in panels.
The <em>Default</em> data source is preselected in new The <em>Default</em> data source is preselected in new
panels. panels.
</info-popover> </info-popover>
</div>
<gf-form-switch class="gf-form" label="Default" checked="ctrl.current.isDefault" switch-class="max-width-6"></gf-form-switch>
</div> </div>
<gf-form-switch class="gf-form" label="Default" checked="ctrl.current.isDefault" switch-class="max-width-6"></gf-form-switch>
</div>
<div class="gf-form"> <div class="gf-form">
<span class="gf-form-label width-7">Type</span> <span class="gf-form-label width-7">Type</span>
<div class="gf-form-select-wrapper max-width-23"> <div class="gf-form-select-wrapper max-width-23">
<select class="gf-form-input" ng-model="ctrl.current.type" ng-options="v.id as v.name for v in ctrl.types" ng-change="ctrl.userChangedType()"></select> <select class="gf-form-input" ng-model="ctrl.current.type" ng-options="v.id as v.name for v in ctrl.types" ng-change="ctrl.userChangedType()"></select>
</div>
</div> </div>
</div> </div>
</div>
<div class="alert alert-info gf-form-group" ng-if="ctrl.datasourceMeta.state === 'alpha'"> <div class="alert alert-info gf-form-group" ng-if="ctrl.datasourceMeta.state === 'alpha'">
This plugin is marked as being in alpha state, which means it is in early development phase and This plugin is marked as being in alpha state, which means it is in early development phase and
updates will include breaking changes. updates will include breaking changes.
</div> </div>
<rebuild-on-change property="ctrl.datasourceMeta.id"> <rebuild-on-change property="ctrl.datasourceMeta.id">
<plugin-component type="datasource-config-ctrl"> <plugin-component type="datasource-config-ctrl">
</plugin-component> </plugin-component>
</rebuild-on-change> </rebuild-on-change>
<div ng-if="ctrl.testing" class="gf-form-group section"> <div ng-if="ctrl.testing" class="gf-form-group section">
<h5 ng-show="!ctrl.testing.done">Testing.... <i class="fa fa-spiner fa-spin"></i></h5> <h5 ng-show="!ctrl.testing.done">Testing.... <i class="fa fa-spiner fa-spin"></i></h5>
<div class="alert-{{ctrl.testing.status}} alert" ng-show="ctrl.testing.done"> <div class="alert-{{ctrl.testing.status}} alert" ng-show="ctrl.testing.done">
<div class="alert-icon"> <div class="alert-icon">
<i class="fa fa-exclamation-triangle" ng-show="ctrl.testing.status === 'error'"></i> <i class="fa fa-exclamation-triangle" ng-show="ctrl.testing.status === 'error'"></i>
<i class="fa fa-check" ng-show="ctrl.testing.status !== 'error'"></i> <i class="fa fa-check" ng-show="ctrl.testing.status !== 'error'"></i>
</div> </div>
<div class="alert-body"> <div class="alert-body">
<div class="alert-title">{{ctrl.testing.message}}</div> <div class="alert-title">{{ctrl.testing.message}}</div>
</div>
</div> </div>
</div> </div>
</div>
<div class="gf-form-button-row"> <div class="gf-form-button-row">
<button type="submit" class="btn btn-success" ng-disabled="ctrl.current.readOnly" ng-click="ctrl.saveChanges()">Save</button> <button type="submit" class="btn btn-success" ng-disabled="ctrl.current.readOnly" ng-click="ctrl.saveChanges()">Save</button>
<button type="submit" class="btn btn-danger" ng-disabled="ctrl.current.readOnly" ng-show="!ctrl.isNew" ng-click="ctrl.delete()"> <button type="submit" class="btn btn-danger" ng-disabled="ctrl.current.readOnly" ng-show="!ctrl.isNew" ng-click="ctrl.delete()">
Delete Delete
</button> </button>
<a class="btn btn-link" href="datasources">Cancel</a> <a class="btn btn-link" href="datasources">Cancel</a>
</div> </div>
<br /> <br />
<br /> <br />
<br /> <br />
</form> </form>
</div> </div>
<div ng-if="ctrl.tabIndex === 1" class="tab-content"> <div ng-if="ctrl.tabIndex === 1" class="tab-content">
<dashboard-import-list plugin="ctrl.datasourceMeta" datasource="ctrl.current"></dashboard-import-list> <dashboard-import-list plugin="ctrl.datasourceMeta" datasource="ctrl.current"></dashboard-import-list>
</div> </div>
</div>
</div> </div>

View File

@ -1,48 +1,46 @@
<div class="scroll-canvas" grafana-scrollbar> <navbar model="ctrl.navModel"></navbar>
<navbar model="ctrl.navModel"></navbar> <div class="page-container">
<div class="page-container"> <div class="page-header">
<div class="page-header"> <page-h1 model="ctrl.navModel"></page-h1>
<page-h1 model="ctrl.navModel"></page-h1>
<a class="page-header__cta btn btn-success" href="datasources/new"> <a class="page-header__cta btn btn-success" href="datasources/new">
Add data source Add data source
</a> </a>
</div>
<section class="card-section" layout-mode>
<layout-selector></layout-selector>
<ol class="card-list" >
<li class="card-item-wrapper" ng-repeat="ds in ctrl.datasources">
<a class="card-item" href="datasources/edit/{{ds.id}}/">
<div class="card-item-header">
<div class="card-item-type">
{{ds.type}}
</div>
</div>
<div class="card-item-body">
<figure class="card-item-figure">
<img ng-src="{{ds.typeLogoUrl}}">
</figure>
<div class="card-item-details">
<div class="card-item-name">
{{ds.name}}
<span ng-if="ds.isDefault">
<span class="btn btn-secondary btn-mini">default</span>
</span>
</div>
<div class="card-item-sub-name">
{{ds.url}}
</div>
</div>
</div>
</a>
</li>
</ol>
</section>
<div ng-if="ctrl.datasources.length === 0">
<em>No data sources defined</em>
</div>
</div> </div>
</div>
<section class="card-section" layout-mode>
<layout-selector></layout-selector>
<ol class="card-list">
<li class="card-item-wrapper" ng-repeat="ds in ctrl.datasources">
<a class="card-item" href="datasources/edit/{{ds.id}}/">
<div class="card-item-header">
<div class="card-item-type">
{{ds.type}}
</div>
</div>
<div class="card-item-body">
<figure class="card-item-figure">
<img ng-src="{{ds.typeLogoUrl}}">
</figure>
<div class="card-item-details">
<div class="card-item-name">
{{ds.name}}
<span ng-if="ds.isDefault">
<span class="btn btn-secondary btn-mini">default</span>
</span>
</div>
<div class="card-item-sub-name">
{{ds.url}}
</div>
</div>
</div>
</a>
</li>
</ol>
</section>
<div ng-if="ctrl.datasources.length === 0">
<em>No data sources defined</em>
</div>
</div>

View File

@ -1,65 +1,63 @@
<div class="scroll-canvas" grafana-scrollbar> <navbar model="ctrl.navModel"></navbar>
<navbar model="ctrl.navModel"></navbar>
<div class="page-container"> <div class="page-container">
<div class="page-header"> <div class="page-header">
<h1> <h1>
<i class="icon-gf icon-gf-apps"></i> <i class="icon-gf icon-gf-apps"></i>
Plugins <span class="muted small">(currently installed)</span> Plugins <span class="muted small">(currently installed)</span>
</h1> </h1>
<div class="page-header-tabs"> <div class="page-header-tabs">
<ul class="gf-tabs"> <ul class="gf-tabs">
<li class="gf-tabs-item"> <li class="gf-tabs-item">
<a class="gf-tabs-link" href="plugins?type=panel" ng-class="{active: ctrl.tabIndex === 0}"> <a class="gf-tabs-link" href="plugins?type=panel" ng-class="{active: ctrl.tabIndex === 0}">
Panels Panels
</a>
</li>
<li class="gf-tabs-item">
<a class="gf-tabs-link" href="plugins?type=datasource" ng-class="{active: ctrl.tabIndex === 1}">
Data sources
</a>
</li>
<li class="gf-tabs-item">
<a class="gf-tabs-link" href="plugins?type=app" ng-class="{active: ctrl.tabIndex === 2}">
Apps
</a>
</li>
</ul>
<a class="get-more-plugins-link" href="https://grafana.com/plugins?utm_source=grafana_plugin_list" target="_blank">
Find more <img src="public/img/icn-plugins-tiny.svg" />plugins on Grafana.com
</a>
</div>
</div>
<section class="card-section" layout-mode>
<layout-selector></layout-selector>
<ol class="card-list" >
<li class="card-item-wrapper" ng-repeat="plugin in ctrl.plugins">
<a class="card-item" href="plugins/{{plugin.id}}/edit">
<div class="card-item-header">
<div class="card-item-type">
<i class="icon-gf icon-gf-{{plugin.type}}"></i>
{{plugin.type}}
</div>
<div class="card-item-notice" ng-show="plugin.hasUpdate">
<span bs-tooltip="plugin.latestVersion">Update available!</span>
</div>
</div>
<div class="card-item-body">
<figure class="card-item-figure">
<img ng-src="{{plugin.info.logos.small}}">
</figure>
<div class="card-item-details">
<div class="card-item-name">{{plugin.name}}</div>
<div class="card-item-sub-name">By {{plugin.info.author.name}}</div>
</div>
</div>
</a> </a>
</li> </li>
</ol> <li class="gf-tabs-item">
</section> <a class="gf-tabs-link" href="plugins?type=datasource" ng-class="{active: ctrl.tabIndex === 1}">
Data sources
</a>
</li>
<li class="gf-tabs-item">
<a class="gf-tabs-link" href="plugins?type=app" ng-class="{active: ctrl.tabIndex === 2}">
Apps
</a>
</li>
</ul>
<a class="get-more-plugins-link" href="https://grafana.com/plugins?utm_source=grafana_plugin_list" target="_blank">
Find more <img src="public/img/icn-plugins-tiny.svg" />plugins on Grafana.com
</a>
</div>
</div> </div>
<section class="card-section" layout-mode>
<layout-selector></layout-selector>
<ol class="card-list" >
<li class="card-item-wrapper" ng-repeat="plugin in ctrl.plugins">
<a class="card-item" href="plugins/{{plugin.id}}/edit">
<div class="card-item-header">
<div class="card-item-type">
<i class="icon-gf icon-gf-{{plugin.type}}"></i>
{{plugin.type}}
</div>
<div class="card-item-notice" ng-show="plugin.hasUpdate">
<span bs-tooltip="plugin.latestVersion">Update available!</span>
</div>
</div>
<div class="card-item-body">
<figure class="card-item-figure">
<img ng-src="{{plugin.info.logos.small}}">
</figure>
<div class="card-item-details">
<div class="card-item-name">{{plugin.name}}</div>
<div class="card-item-sub-name">By {{plugin.info.author.name}}</div>
</div>
</div>
</a>
</li>
</ol>
</section>
</div> </div>

View File

@ -299,7 +299,7 @@ $checkboxImageUrl: '../img/checkbox.png';
$info-box-background: linear-gradient(100deg, #1a4552, #00374a); $info-box-background: linear-gradient(100deg, #1a4552, #00374a);
// footer // footer
$footer-link-color: $gray-1; $footer-link-color: $gray-2;
$footer-link-hover: $gray-4; $footer-link-hover: $gray-4;
// collapse box // collapse box

View File

@ -35,44 +35,46 @@
</div> </div>
</div> </div>
<div class="main-view"> <div class="main-view">
<div ng-view></div> <div class="scroll-canvas" grafana-scrollbar>
<div ng-view></div>
<!-- <footer class="footer"> --> <footer class="footer">
<!-- <div class="row text&#45;center"> --> <div class="row text&#45;center">
<!-- <ul> --> <ul>
<!-- <li> --> <li>
<!-- <a href="http://docs.grafana.org" target="_blank"> --> <a href="http://docs.grafana.org" target="_blank">
<!-- <i class="fa fa&#45;file&#45;code&#45;o"></i> --> <i class="fa fa&#45;file&#45;code&#45;o"></i>
<!-- Docs --> Docs
<!-- </a> --> </a>
<!-- </li> --> </li>
<!-- <li> --> <li>
<!-- <a href="https://grafana.com/services/support" target="_blank"> --> <a href="https://grafana.com/services/support" target="_blank">
<!-- <i class="fa fa&#45;support"></i> --> <i class="fa fa&#45;support"></i>
<!-- Support Plans --> Support Plans
<!-- </a> --> </a>
<!-- </li> --> </li>
<!-- <li> --> <li>
<!-- <a href="https://community.grafana.com/" target="_blank"> --> <a href="https://community.grafana.com/" target="_blank">
<!-- <i class="fa fa&#45;comments&#45;o"></i> --> <i class="fa fa&#45;comments&#45;o"></i>
<!-- Community --> Community
<!-- </a> --> </a>
<!-- </li> --> </li>
<!-- <li> --> <li>
<!-- <a href="https://grafana.com" target="_blank">Grafana</a> --> <a href="https://grafana.com" target="_blank">Grafana</a>
<!-- <span>v[[.BuildVersion]] (commit: [[.BuildCommit]])</span> --> <span>v[[.BuildVersion]] (commit: [[.BuildCommit]])</span>
<!-- </li> --> </li>
<!-- [[if .NewGrafanaVersionExists]] --> [[if .NewGrafanaVersionExists]]
<!-- <li> --> <li>
<!-- <a href="https://grafana.com/get" target="_blank" bs&#45;tooltip="'[[.NewGrafanaVersion]]'"> --> <a href="https://grafana.com/get" target="_blank" bs&#45;tooltip="'[[.NewGrafanaVersion]]'">
<!-- New version available! --> New version available!
<!-- </a> --> </a>
<!-- </li> --> </li>
<!-- [[end]] --> [[end]]
<!-- </ul> --> </ul>
<!-- </div> --> </div>
<!-- </footer> --> </footer>
</div>
</div> </div>
</grafana-app> </grafana-app>