diff --git a/CHANGELOG.md b/CHANGELOG.md index 5010b572c98..6f911729cc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,10 +15,13 @@ * **OpenTSDB**: Support nested template variables in tag_values function, closes [4398](https://github.com/grafana/grafana/issues/4398) * **Datasource**: Pending data source requests are cancelled before new ones are issues (Graphite & Prometheus), closes [5321](https://github.com/grafana/grafana/issues/5321) -## Breaking changes +### Breaking changes * **Logging** : Changed default logging output format (now structured into message, and key value pairs, with logger key acting as component). You can also no change in config to json log ouput. * **Graphite** : The Graph panel no longer have a Graphite PNG option. closes #[5367](https://github.com/grafana/grafana/issues/5367) +### Bug fixes +* **PNG rendering**: Fixed phantomjs rendering and y-axis label rotation. fixes #[5220](https://github.com/grafana/grafana/issues/5220) + # 3.0.4 Patch release (2016-05-25) * **Panel**: Fixed blank dashboard issue when switching to other dashboard while in fullscreen edit mode, fixes [#5163](https://github.com/grafana/grafana/pull/5163) * **Templating**: Fixed issue with nested multi select variables and cascading and updating child variable selection state, fixes [#4861](https://github.com/grafana/grafana/pull/4861) diff --git a/circle.yml b/circle.yml index 02f9f91e103..ee19b50ee46 100644 --- a/circle.yml +++ b/circle.yml @@ -1,6 +1,6 @@ machine: node: - version: 4.0 + version: 5.11.1 environment: GOPATH: "/home/ubuntu/.go_workspace" ORG_PATH: "github.com/grafana" diff --git a/package.json b/package.json index 3e3cd2faeac..9094cdf9172 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "karma-phantomjs-launcher": "1.0.0", "load-grunt-tasks": "3.4.0", "mocha": "2.3.4", - "phantomjs-prebuilt": "^2.1.3", + "phantomjs-prebuilt": "^2.1.7", "reflect-metadata": "0.1.2", "rxjs": "5.0.0-beta.4", "sass-lint": "^1.6.0", diff --git a/pkg/api/api.go b/pkg/api/api.go index 3a62e3aff3d..8e6f4067de4 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -34,6 +34,7 @@ func Register(r *macaron.Macaron) { r.Get("/org/", reqSignedIn, Index) r.Get("/org/new", reqSignedIn, Index) r.Get("/datasources/", reqSignedIn, Index) + r.Get("/datasources/new", reqSignedIn, Index) r.Get("/datasources/edit/*", reqSignedIn, Index) r.Get("/org/users/", reqSignedIn, Index) r.Get("/org/apikeys/", reqSignedIn, Index) diff --git a/pkg/api/dataproxy.go b/pkg/api/dataproxy.go index f2dee2b3479..8c2e134f3af 100644 --- a/pkg/api/dataproxy.go +++ b/pkg/api/dataproxy.go @@ -63,8 +63,6 @@ func NewReverseProxy(ds *m.DataSource, proxyPath string, targetUrl *url.URL) *ht req.Header.Add("Authorization", dsAuth) } - time.Sleep(time.Second * 5) - // clear cookie headers req.Header.Del("Cookie") req.Header.Del("Set-Cookie") diff --git a/pkg/services/search/handlers.go b/pkg/services/search/handlers.go index a8344ba05a5..a4905d6fa58 100644 --- a/pkg/services/search/handlers.go +++ b/pkg/services/search/handlers.go @@ -44,7 +44,6 @@ func searchHandler(query *Query) error { IsStarred: query.IsStarred, OrgId: query.OrgId, DashboardIds: query.DashboardIds, - Limit: query.Limit, } if err := bus.Dispatch(&dashQuery); err != nil { diff --git a/pkg/services/search/models.go b/pkg/services/search/models.go index ada3e1ccdfa..159637013f5 100644 --- a/pkg/services/search/models.go +++ b/pkg/services/search/models.go @@ -42,7 +42,6 @@ type FindPersistedDashboardsQuery struct { UserId int64 IsStarred bool DashboardIds []int - Limit int Result HitList } diff --git a/pkg/services/sqlstore/dashboard.go b/pkg/services/sqlstore/dashboard.go index 3fac1672dff..fbf245a951b 100644 --- a/pkg/services/sqlstore/dashboard.go +++ b/pkg/services/sqlstore/dashboard.go @@ -123,11 +123,6 @@ type DashboardSearchProjection struct { } func SearchDashboards(query *search.FindPersistedDashboardsQuery) error { - limit := query.Limit - if limit == 0 { - limit = 1000 - } - var sql bytes.Buffer params := make([]interface{}, 0) @@ -170,8 +165,7 @@ func SearchDashboards(query *search.FindPersistedDashboardsQuery) error { params = append(params, "%"+query.Title+"%") } - sql.WriteString(fmt.Sprintf(" ORDER BY dashboard.title ASC LIMIT ?")) - params = append(params, limit) + sql.WriteString(fmt.Sprintf(" ORDER BY dashboard.title ASC LIMIT 1000")) var res []DashboardSearchProjection diff --git a/pkg/services/sqlstore/migrations/dashboard_mig.go b/pkg/services/sqlstore/migrations/dashboard_mig.go index 536b153c6c9..38c25a315f2 100644 --- a/pkg/services/sqlstore/migrations/dashboard_mig.go +++ b/pkg/services/sqlstore/migrations/dashboard_mig.go @@ -107,4 +107,8 @@ func addDashboardMigration(mg *Migrator) { mg.AddMigration("Add column gnetId in dashboard", NewAddColumnMigration(dashboardV2, &Column{ Name: "gnet_id", Type: DB_BigInt, Nullable: true, })) + + mg.AddMigration("Add index for gnetId in dashboard", NewAddIndexMigration(dashboardV2, &Index{ + Cols: []string{"gnet_id"}, Type: IndexType, + })) } diff --git a/public/app/core/profiler.ts b/public/app/core/profiler.ts index 08e5ea457ab..6505cd0405f 100644 --- a/public/app/core/profiler.ts +++ b/public/app/core/profiler.ts @@ -99,7 +99,9 @@ export class Profiler { } renderingCompleted(panelId, panelTimings) { - this.panelsRendered++; + // add render counter to root scope + // used by phantomjs render.js to know when panel has rendered + this.$rootScope.panelsRendered = this.panelsRendered++; if (this.enabled) { panelTimings.renderEnd = new Date().getTime(); diff --git a/public/app/features/dashboard/import/dash_import.ts b/public/app/features/dashboard/import/dash_import.ts index 264df3cd5a9..a0856814e94 100644 --- a/public/app/features/dashboard/import/dash_import.ts +++ b/public/app/features/dashboard/import/dash_import.ts @@ -69,9 +69,7 @@ export class DashImportCtrl { if (sources.length === 0) { inputModel.info = "No data sources of type " + input.pluginName + " found"; - } else if (inputModel.description) { - inputModel.info = inputModel.description; - } else { + } else if (!inputModel.info) { inputModel.info = "Select a " + input.pluginName + " data source"; } diff --git a/public/app/features/dashboard/shareModalCtrl.js b/public/app/features/dashboard/shareModalCtrl.js index 462812efa29..36949f51f5b 100644 --- a/public/app/features/dashboard/shareModalCtrl.js +++ b/public/app/features/dashboard/shareModalCtrl.js @@ -75,7 +75,7 @@ function (angular, _, require, config) { var soloUrl = $scope.shareUrl; soloUrl = soloUrl.replace(config.appSubUrl + '/dashboard/', config.appSubUrl + '/dashboard-solo/'); - soloUrl = soloUrl.replace("&fullscreen", ""); + soloUrl = soloUrl.replace("&fullscreen", "").replace("&edit", ""); $scope.iframeHtml = ''; diff --git a/public/app/features/plugins/ds_edit_ctrl.ts b/public/app/features/plugins/ds_edit_ctrl.ts index a3e78c33a15..0f234fb6b90 100644 --- a/public/app/features/plugins/ds_edit_ctrl.ts +++ b/public/app/features/plugins/ds_edit_ctrl.ts @@ -166,7 +166,17 @@ coreModule.controller('DataSourceEditCtrl', DataSourceEditCtrl); coreModule.directive('datasourceHttpSettings', function() { return { - scope: {current: "="}, - templateUrl: 'public/app/features/plugins/partials/ds_http_settings.html' + scope: { + current: "=", + suggestUrl: "@", + }, + templateUrl: 'public/app/features/plugins/partials/ds_http_settings.html', + link: { + pre: function($scope, elem, attrs) { + $scope.getSuggestUrls = function() { + return [$scope.suggestUrl]; + }; + } + } }; }); diff --git a/public/app/features/plugins/partials/ds_http_settings.html b/public/app/features/plugins/partials/ds_http_settings.html index 08d2af5744a..0022f6e6c19 100644 --- a/public/app/features/plugins/partials/ds_http_settings.html +++ b/public/app/features/plugins/partials/ds_http_settings.html @@ -6,7 +6,10 @@
Url - +

Specify a complete HTTP url (for example http://your_server:8080)

@@ -57,7 +60,7 @@
- Passord + Password
diff --git a/public/app/features/styleguide/styleguide.ts b/public/app/features/styleguide/styleguide.ts index 1a195c19ed2..52ccd20ac59 100644 --- a/public/app/features/styleguide/styleguide.ts +++ b/public/app/features/styleguide/styleguide.ts @@ -10,7 +10,7 @@ class StyleGuideCtrl { buttonSizes = ['btn-small', '', 'btn-large']; buttonVariants = ['-', '-outline-']; page: any; - pages = ['colors', 'buttons', 'forms', 'dashboard', 'query-editors']; + pages = ['colors', 'buttons']; /** @ngInject **/ constructor(private $http, $routeParams) { diff --git a/public/app/plugins/datasource/elasticsearch/partials/config.html b/public/app/plugins/datasource/elasticsearch/partials/config.html index 85554b59988..03662a9693b 100644 --- a/public/app/plugins/datasource/elasticsearch/partials/config.html +++ b/public/app/plugins/datasource/elasticsearch/partials/config.html @@ -1,4 +1,4 @@ - +

Elasticsearch details

diff --git a/public/app/plugins/datasource/graphite/partials/config.html b/public/app/plugins/datasource/graphite/partials/config.html index d7a0f739ccb..7356c8948e4 100644 --- a/public/app/plugins/datasource/graphite/partials/config.html +++ b/public/app/plugins/datasource/graphite/partials/config.html @@ -1,3 +1,5 @@ - + diff --git a/public/app/plugins/datasource/influxdb/partials/config.html b/public/app/plugins/datasource/influxdb/partials/config.html index 9a1d326ca64..8c09c637906 100644 --- a/public/app/plugins/datasource/influxdb/partials/config.html +++ b/public/app/plugins/datasource/influxdb/partials/config.html @@ -1,4 +1,4 @@ - +

InfluxDB Details

diff --git a/public/app/plugins/datasource/opentsdb/datasource.js b/public/app/plugins/datasource/opentsdb/datasource.js index e80c811a2a6..dacf4081563 100644 --- a/public/app/plugins/datasource/opentsdb/datasource.js +++ b/public/app/plugins/datasource/opentsdb/datasource.js @@ -128,13 +128,7 @@ function (angular, _, dateMath) { data: reqBody }; - if (this.basicAuth || this.withCredentials) { - options.withCredentials = true; - } - - if (this.basicAuth) { - options.headers = {"Authorization": this.basicAuth}; - } + this._addCredentialOptions(options); // In case the backend is 3rd-party hosted and does not suport OPTIONS, urlencoded requests // go as POST rather than OPTIONS+POST @@ -210,11 +204,24 @@ function (angular, _, dateMath) { }; this._get = function(relativeUrl, params) { - return backendSrv.datasourceRequest({ + var options = { method: 'GET', url: this.url + relativeUrl, params: params, - }); + }; + + this._addCredentialOptions(options); + + return backendSrv.datasourceRequest(options); + }; + + this._addCredentialOptions = function(options) { + if (this.basicAuth || this.withCredentials) { + options.withCredentials = true; + } + if (this.basicAuth) { + options.headers = {"Authorization": this.basicAuth}; + } }; this.metricFindQuery = function(query) { @@ -435,7 +442,6 @@ function (angular, _, dateMath) { date = dateMath.parse(date, roundUp); return date.valueOf(); } - } return { diff --git a/public/app/plugins/datasource/opentsdb/partials/config.html b/public/app/plugins/datasource/opentsdb/partials/config.html index 1006ef97d32..b15f22dcc5b 100644 --- a/public/app/plugins/datasource/opentsdb/partials/config.html +++ b/public/app/plugins/datasource/opentsdb/partials/config.html @@ -1,6 +1,6 @@ - + -
Opentsdb settings
+
OpenTSDB settings
Version diff --git a/public/app/plugins/datasource/prometheus/partials/config.html b/public/app/plugins/datasource/prometheus/partials/config.html index d7a0f739ccb..1b817a2186d 100644 --- a/public/app/plugins/datasource/prometheus/partials/config.html +++ b/public/app/plugins/datasource/prometheus/partials/config.html @@ -1,3 +1,3 @@ - + diff --git a/public/app/plugins/panel/graph/graph.js b/public/app/plugins/panel/graph/graph.js index 109a85f6957..cab64b9906d 100755 --- a/public/app/plugins/panel/graph/graph.js +++ b/public/app/plugins/panel/graph/graph.js @@ -20,7 +20,6 @@ function (angular, $, moment, _, kbn, GraphTooltip, thresholds) { var module = angular.module('grafana.directives'); var labelWidthCache = {}; - var panelWidthCache = {}; // systemjs export var ThresholdControls = thresholds.ThresholdControls; @@ -107,11 +106,6 @@ function (angular, $, moment, _, kbn, GraphTooltip, thresholds) { if (!setElementHeight()) { return true; } - if(_.isString(data)) { - render_panel_as_graphite_png(data); - return true; - } - if (panelWidth === 0) { return true; } @@ -181,10 +175,7 @@ function (angular, $, moment, _, kbn, GraphTooltip, thresholds) { // Function for rendering panel function render_panel() { - panelWidth = panelWidthCache[panel.span]; - if (!panelWidth) { - panelWidth = panelWidthCache[panel.span] = elem.width(); - } + panelWidth = elem.width(); if (shouldAbortRender()) { return; @@ -531,80 +522,6 @@ function (angular, $, moment, _, kbn, GraphTooltip, thresholds) { return "%H:%M"; } - function render_panel_as_graphite_png(url) { - url += '&width=' + panelWidth; - url += '&height=' + elem.css('height').replace('px', ''); - url += '&bgcolor=1f1f1f'; // @grayDarker & @grafanaPanelBackground - url += '&fgcolor=BBBFC2'; // @textColor & @grayLighter - url += panel.stack ? '&areaMode=stacked' : ''; - url += panel.fill !== 0 ? ('&areaAlpha=' + (panel.fill/10).toFixed(1)) : ''; - url += panel.linewidth !== 0 ? '&lineWidth=' + panel.linewidth : ''; - url += panel.legend.show ? '&hideLegend=false' : '&hideLegend=true'; - - if (panel.yaxes && panel.yaxes.length > 0) { - var showYaxis = false; - for(var i = 0; panel.yaxes.length > i; i++) { - if (panel.yaxes[i].show) { - url += (panel.yaxes[i].min !== null && panel.yaxes[i].min !== undefined) ? '&yMin=' + panel.yaxes[i].min : ''; - url += (panel.yaxes[i].max !== null && panel.yaxes[i].max !== undefined) ? '&yMax=' + panel.yaxes[i].max : ''; - showYaxis = true; - break; - } - } - url += showYaxis ? '' : '&hideYAxis=true'; - } - - url += panel.xaxis.show ? '' : '&hideAxes=true'; - - switch(panel.yaxes[0].format) { - case 'bytes': - url += '&yUnitSystem=binary'; - break; - case 'bits': - url += '&yUnitSystem=binary'; - break; - case 'bps': - url += '&yUnitSystem=si'; - break; - case 'pps': - url += '&yUnitSystem=si'; - break; - case 'Bps': - url += '&yUnitSystem=si'; - break; - case 'short': - url += '&yUnitSystem=si'; - break; - case 'joule': - url += '&yUnitSystem=si'; - break; - case 'watt': - url += '&yUnitSystem=si'; - break; - case 'ev': - url += '&yUnitSystem=si'; - break; - case 'none': - url += '&yUnitSystem=none'; - break; - } - - switch(panel.nullPointMode) { - case 'connected': - url += '&lineMode=connected'; - break; - case 'null': - break; // graphite default lineMode - case 'null as zero': - url += "&drawNullAsZero=true"; - break; - } - - url += panel.steppedLine ? '&lineMode=staircase' : ''; - - elem.html(''); - } - new GraphTooltip(elem, dashboard, scope, function() { return sortedSeries; }); @@ -620,5 +537,4 @@ function (angular, $, moment, _, kbn, GraphTooltip, thresholds) { } }; }); - }); diff --git a/public/sass/components/_dropdown.scss b/public/sass/components/_dropdown.scss index 4a08ba80e2f..3934fa69640 100644 --- a/public/sass/components/_dropdown.scss +++ b/public/sass/components/_dropdown.scss @@ -207,7 +207,7 @@ } // Caret to indicate there is a submenu -.dropdown-submenu > a:after { +.dropdown-submenu > a::after { display: block; content: " "; float: right; @@ -220,7 +220,7 @@ margin-top: 5px; margin-right: -10px; } -.dropdown-submenu:hover > a:after { +.dropdown-submenu:hover > a::after { border-left-color: $dropdownLinkColorHover; } diff --git a/public/sass/components/_footer.scss b/public/sass/components/_footer.scss index 8f3b9186d15..79c0e0178df 100644 --- a/public/sass/components/_footer.scss +++ b/public/sass/components/_footer.scss @@ -23,14 +23,14 @@ li { display: inline-block; padding-right: 2px; - &:after { + &::after { content: ' | '; padding-left: 2px; } } li:last-child { - &:after { + &::after { padding-left: 0; content: ''; } diff --git a/public/sass/components/_gf-form.scss b/public/sass/components/_gf-form.scss index 602ea9ef5c1..3f7c11df7e5 100644 --- a/public/sass/components/_gf-form.scss +++ b/public/sass/components/_gf-form.scss @@ -127,7 +127,7 @@ $gf-form-margin: 0.25rem; &--dropdown { padding-right: $input-padding-x*2; - &:after { + &::after { position: absolute; top: 35%; right: $input-padding-x/2; @@ -164,7 +164,7 @@ $gf-form-margin: 0.25rem; } } - &:after { + &::after { position: absolute; top: 35%; right: $input-padding-x/2; @@ -176,7 +176,7 @@ $gf-form-margin: 0.25rem; } &--has-help-icon { - &:after { + &::after { right: $input-padding-x*3; } } @@ -215,7 +215,7 @@ $gf-form-margin: 0.25rem; background-color: $input-bg; padding-right: $input-padding-x; - &:after { + &::after { position: absolute; top: 35%; right: $input-padding-x/2; diff --git a/public/sass/components/_infobox.scss b/public/sass/components/_infobox.scss index a7e5917d939..e6d42597c75 100644 --- a/public/sass/components/_infobox.scss +++ b/public/sass/components/_infobox.scss @@ -1,4 +1,4 @@ -.grafana-info-box:before { +.grafana-info-box::before { content: "\f05a"; font-family:'FontAwesome'; position: absolute; diff --git a/public/sass/components/_panel_graph.scss b/public/sass/components/_panel_graph.scss index ecf1cb6b82c..abca94e4140 100644 --- a/public/sass/components/_panel_graph.scss +++ b/public/sass/components/_panel_graph.scss @@ -47,19 +47,19 @@ white-space: nowrap; font-size: 85%; text-align: left; - &.current:before { + &.current::before { content: "Current: " } - &.max:before { + &.max::before { content: "Max: " } - &.min:before { + &.min::before { content: "Min: " } - &.total:before { + &.total::before { content: "Total: " } - &.avg:before { + &.avg::before { content: "Avg: " } } @@ -95,7 +95,7 @@ &--right-y { float: none; - .graph-legend-alias:after { + .graph-legend-alias::after { content: '(right-y)'; padding: 0 5px; color: $text-color-weak; @@ -137,7 +137,7 @@ .graph-legend-value { &.current, &.max, &.min, &.total, &.avg { - &:before { + &::before { content: ''; } } diff --git a/public/sass/components/_search.scss b/public/sass/components/_search.scss index eb583e224bc..8824c827562 100644 --- a/public/sass/components/_search.scss +++ b/public/sass/components/_search.scss @@ -74,11 +74,11 @@ background-color: $grafanaListBackground; margin-bottom: 4px; - .search-result-icon:before { + .search-result-icon::before { content: "\f009"; } - &.search-item-dash-home .search-result-icon:before { + &.search-item-dash-home .search-result-icon::before { content: "\f015"; } } diff --git a/public/sass/components/_sidemenu.scss b/public/sass/components/_sidemenu.scss index 685406bb098..6893bf39a85 100644 --- a/public/sass/components/_sidemenu.scss +++ b/public/sass/components/_sidemenu.scss @@ -151,7 +151,7 @@ display: inline-block; position: relative; - &:after { + &::after { display: block; position: absolute; top: 50%; diff --git a/public/sass/components/_switch.scss b/public/sass/components/_switch.scss index 4216029bab2..72b980a772f 100644 --- a/public/sass/components/_switch.scss +++ b/public/sass/components/_switch.scss @@ -30,7 +30,7 @@ $switch-height: 1.5rem; background-color: $page-bg; } - input + label:before, input + label:after { + input + label::before, input + label::after { @include buttonBackground($input-bg, $input-bg); display: block; @@ -47,13 +47,13 @@ $switch-height: 1.5rem; } &:hover { - input + label:before { + input + label::before { @include buttonBackground($input-bg, lighten($input-bg, 5%)); color: $text-color; text-shadow: $text-shadow-faint; } - input + label:after { + input + label::after { @include buttonBackground($input-bg, lighten($input-bg, 5%)); color: lighten($orange, 10%); text-shadow: $text-shadow-strong; @@ -61,7 +61,7 @@ $switch-height: 1.5rem; } - input + label:before { + input + label::before { font-family: 'FontAwesome'; content: "\f096"; // square-o color: $text-color-faint; @@ -70,7 +70,7 @@ $switch-height: 1.5rem; text-shadow: $text-shadow-faint; } - input + label:after { + input + label::after { content: "\f046"; // check-square-o color: $orange; text-shadow: $text-shadow-strong; @@ -81,11 +81,11 @@ $switch-height: 1.5rem; backface-visibility: hidden; } - input:checked + label:before { + input:checked + label::before { transform: rotateY(180deg); } - input:checked + label:after { + input:checked + label::after { transform: rotateY(0); } } diff --git a/public/sass/components/_tagsinput.scss b/public/sass/components/_tagsinput.scss index 698302e6f1e..0753f045a61 100644 --- a/public/sass/components/_tagsinput.scss +++ b/public/sass/components/_tagsinput.scss @@ -25,7 +25,7 @@ [data-role="remove"] { margin-left:8px; cursor:pointer; - &:after{ + &::after{ content: "x"; padding:0px 2px; } diff --git a/public/sass/components/_tightform.scss b/public/sass/components/_tightform.scss index 8833e445372..7c43854b06c 100644 --- a/public/sass/components/_tightform.scss +++ b/public/sass/components/_tightform.scss @@ -25,12 +25,11 @@ border: 1px solid $tight-form-border; border-bottom: none; - .tight-form, .tight-form-item, [type=text].tight-form-input, [type=text].tight-form-clear-input { + .tight-form, .tight-form-item, [type="text"].tight-form-input, [type="text"].tight-form-clear-input { border: none; } } - .spaced-form { .tight-form { margin: 7px 0; @@ -122,14 +121,14 @@ } } -input[type=text].tight-form-func-param { +input[type="text"].tight-form-func-param { background: transparent; border: none; margin: 0; padding: 0; } -input[type=text].tight-form-clear-input { +input[type="text"].tight-form-clear-input { padding: 8px 7px; border: none; margin: 0px; @@ -138,10 +137,10 @@ input[type=text].tight-form-clear-input { border-right: 1px solid $tight-form-border; } -[type=text], -[type=email], -[type=number], -[type=password] { +[type="text"], +[type="email"], +[type="number"], +[type="password"] { &.tight-form-input { background-color: $input-bg; border: none; @@ -157,7 +156,7 @@ input[type=text].tight-form-clear-input { } } -input[type=checkbox].tight-form-checkbox { +input[type="checkbox"].tight-form-checkbox { margin: 0; } @@ -200,7 +199,7 @@ select.tight-form-input { } .tight-form-radio { - input[type=radio] { + input[type="radio"] { margin: 0; } label { diff --git a/public/sass/components/_timepicker.scss b/public/sass/components/_timepicker.scss index 8bfbdef4cff..1ecc2c7a166 100644 --- a/public/sass/components/_timepicker.scss +++ b/public/sass/components/_timepicker.scss @@ -99,10 +99,10 @@ -moz-osx-font-smoothing: grayscale; } -.fa-chevron-left:before { +.fa-chevron-left::before { content: "\f053"; } -.fa-chevron-right:before { +.fa-chevron-right::before { content: "\f054"; } diff --git a/tasks/options/postcss.js b/tasks/options/postcss.js index d55abd416e9..5d77096e644 100644 --- a/tasks/options/postcss.js +++ b/tasks/options/postcss.js @@ -11,7 +11,7 @@ module.exports = function(config) { }, processors: [ - require('autoprefixer')({browsers: 'last 2 versions'}), // add vendor prefixes + require('autoprefixer')({browsers: 'last 3 versions'}), // add vendor prefixes ] }, dist: { diff --git a/vendor/phantomjs/render.js b/vendor/phantomjs/render.js index f40a42380ad..92000bb9f12 100644 --- a/vendor/phantomjs/render.js +++ b/vendor/phantomjs/render.js @@ -36,7 +36,7 @@ // console.log('Loading a web page: ' + params.url + ' status: ' + status); function checkIsReady() { - var canvas = page.evaluate(function() { + var panelsRendered = page.evaluate(function() { if (!window.angular) { return false; } var body = window.angular.element(document.body); if (!body.injector) { return false; } @@ -44,12 +44,10 @@ var rootScope = body.injector().get('$rootScope'); if (!rootScope) {return false;} - if (!rootScope.performance) { return false; } - var panelsToLoad = window.angular.element('div.panel').length; - return rootScope.performance.panelsRendered >= panelsToLoad; + return rootScope.panelsRendered; }); - if (canvas || tries === 1000) { + if (panelsRendered || tries === 1000) { var bb = page.evaluate(function () { return document.getElementsByClassName("main-view")[0].getBoundingClientRect(); });