123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- var App = require('app');
- /**
- * use: {{view App.TimeRangeWidget controllerBinding="App.router.mainChartsController"}}
- * set controller.preset field with preset value
- * widget assign itself to controller like presetWidget (controller.get('presetWidget'))
- * @type {*}
- */
- App.TimeRangeWidget = Em.View.extend({
- classNames:['time-range-widget'],
- templateName:require('templates/common/time_range'),
- dateFrom: null,
- dateTo: null,
- /**
- * presets
- */
- presets:[
- Em.Object.create({ label:Em.I18n.t('timeRange.presets.1hour'), value:'1h', period: 3600000, step: 300000}),
- Em.Object.create({ label:Em.I18n.t('timeRange.presets.12hour'), value:'12h', period: 43200000, step: 3600000}),
- Em.Object.create({ label:Em.I18n.t('timeRange.presets.1day'), value:'1d', period: 86400000, step: 3600000}),
- Em.Object.create({ label:Em.I18n.t('timeRange.presets.1week'), value:'1wk', period: 604800000, step: 86400000}),
- Em.Object.create({ label:Em.I18n.t('timeRange.presets.1month'), value:'1mo', period: 2592000000, step: 86400000}),
- Em.Object.create({ label:Em.I18n.t('timeRange.presets.1year'), value:'1yr', period: 31536000000, step: 2592000000})
- ],
- /**
- * chosen preset value
- */
- chosenPreset: null,
- /**
- * return array of chosen presets
- */
- chosenPresets:function () {
- return this.get('chosenPreset') ? [this.get('chosenPreset')] : this.get('defaultPresets');
- }.property('chosenPreset'),
- /**
- * preset item view
- */
- presetView:Em.View.extend({
- tagName:'li',
- classNameBindings:['disabled'],
- disabled:function () {
- return this.get('isActive') ? "disabled" : false;
- }.property('isActive'),
- isActive:function () {
- return this.get('preset.value') == this.get('widget.chosenPreset.value');
- }.property('widget.chosenPreset'),
- template:Em.Handlebars.compile('<a {{action activate view.preset target="view.widget" href="true" }}>{{unbound view.preset.label}}</a>')
- }),
- /**
- * return default selected presets (currently - all)
- */
- defaultPresets:function () {
- var values = [];
- $.each(this.get('presets'), function () {
- if (this.value) {
- values.push(this.value);
- }
- });
- return values;
- }.property(),
- bindToController:function () {
- var thisW = this;
- var controller = this.get('controller');
- controller.set('presetWidget', thisW);
- },
- /**
- * assign this widget to controller, prepare items by presetsConfig
- */
- init:function () {
- this._super();
- this.bindToController();
- },
- /**
- * write active preset to widget
- * @param event
- */
- activate:function (event) {
- if (event.context == this.get('chosenPreset')) {
- this.set('chosenPreset', null);
- } else {
- this.set('chosenPreset', event.context);
- }
- },
- dateFromView: Ember.TextField.extend({
- elementId: 'timeRangeFrom',
- classNames: 'timeRangeFrom',
- attributeBindings:['readonly'],
- readonly: true,
- didInsertElement: function() {
- var self = this;
- this.$().datetimepicker({
- dateFormat: 'dd/mm/yy',
- timeFormat: 'hh:mm',
- maxDate: new Date(),
- onClose:function (dateText, inst) {
- var endDateTextBox = $('#timeRangeTo');
- if (endDateTextBox.val() != '') {
- var testStartDate = new Date(dateText);
- var testEndDate = new Date(endDateTextBox.val());
- if (testStartDate > testEndDate)
- endDateTextBox.val(dateText);
- } else {
- endDateTextBox.val(dateText);
- }
- self.set('dateFrom', dateText);
- },
- onSelect:function (selectedDateTime) {
- var start = $(this).datetimepicker('getDate');
- $('#timeRangeTo').datetimepicker('option', 'minDate', new Date(start.getTime()));
- }
- });
- self.set('dateFrom', this.get('value'));
- }
- }),
- dateToView: Ember.TextField.extend({
- elementId: 'timeRangeTo',
- classNames: 'timeRangeTo',
- attributeBindings:['readonly'],
- readonly: true,
- didInsertElement: function() {
- var self = this;
- this.$().datetimepicker({
- dateFormat: 'dd/mm/yy',
- timeFormat: 'hh:mm',
- maxDate: new Date(),
- onClose:function (dateText, inst) {
- var startDateTextBox = $('#timeRangeFrom');
- if (startDateTextBox.val() != '') {
- var testStartDate = new Date(startDateTextBox.val());
- var testEndDate = new Date(dateText);
- if (testStartDate > testEndDate)
- startDateTextBox.val(dateText);
- } else {
- startDateTextBox.val(dateText);
- }
- self.set('dateTo', dateText);
- },
- onSelect:function (selectedDateTime) {
- var end = $(this).datetimepicker('getDate');
- $('#timeRangeFrom').datetimepicker('option', 'maxDate', new Date(end.getTime()));
- }
- });
- self.set('dateTo', this.get('value'));
- }
- }),
- sliderOptions: Ember.Object.extend({
- end: null,
- period: null,
- start: function() {
- return this.get('end') - this.get('period');
- }.property('end', 'period')
- }),
- nowLabel: null,
- rangeLabel: null,
- buildSlider: function() {
- if (this.get('chosenPreset')) {
- var sliderOptions = this.sliderOptions.create({
- end: function() {
- var endDate = new Date();
- return endDate.getTime();
- }.property(),
- period: this.get('chosenPreset.period'),
- step: this.get('chosenPreset.step'),
- countTimeAgo: function(stepValue) {
- var msAgo = this.get('end') - stepValue;
- return msAgo.toDaysHoursMinutes();
- }
- });
- this.set('nowLabel', 'Now');
- this.set('rangeLabel', new Date(sliderOptions.get('start')));
- var self = this;
- $('#slider').slider({
- range: "max",
- min: sliderOptions.get('start'),
- max: sliderOptions.get('end'),
- value: sliderOptions.get('start'),
- step: sliderOptions.get('step'),
- stop: function(event, ui) {
- self.set('rangeLabel', new Date(ui.value));
- // self.set('rangeLabel', sliderOptions.countTimeAgo(ui.value).h);
- },
- slide: function(event, ui){
- self.set('rangeLabel', new Date(ui.value));
- // self.set('rangeLabel', sliderOptions.countTimeAgo(ui.value).h);
- }
- });
- } else {
- console.log(this.get('chosenPreset'));
- $("#slider").slider("destroy");
- }
- }.observes('chosenPreset')
- })
|