123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- // Copyright 2007 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed 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.
- /**
- * @fileoverview Twothumbslider is a slider that allows to select a subrange
- * within a range by dragging two thumbs. The selected sub-range is exposed
- * through getValue() and getExtent().
- *
- * To decorate, the twothumbslider should be bound to an element with the class
- * name 'goog-twothumbslider-[vertical / horizontal]' containing children with
- * the classname 'goog-twothumbslider-value-thumb' and
- * 'goog-twothumbslider-extent-thumb', respectively.
- *
- * Decorate Example:
- * <div id="twothumbslider" class="goog-twothumbslider-horizontal">
- * <div class="goog-twothumbslider-value-thumb">
- * <div class="goog-twothumbslider-extent-thumb">
- * </div>
- * <script>
- *
- * var slider = new goog.ui.TwoThumbSlider;
- * slider.decorate(document.getElementById('twothumbslider'));
- *
- * TODO(user): add a11y once we know what this element is
- *
- * @see ../demos/twothumbslider.html
- */
- goog.provide('goog.ui.TwoThumbSlider');
- goog.require('goog.a11y.aria');
- goog.require('goog.a11y.aria.Role');
- goog.require('goog.dom');
- goog.require('goog.dom.TagName');
- goog.require('goog.ui.SliderBase');
- /**
- * This creates a TwoThumbSlider object.
- * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
- * @constructor
- * @extends {goog.ui.SliderBase}
- */
- goog.ui.TwoThumbSlider = function(opt_domHelper) {
- goog.ui.SliderBase.call(this, opt_domHelper);
- this.rangeModel.setValue(this.getMinimum());
- this.rangeModel.setExtent(this.getMaximum() - this.getMinimum());
- };
- goog.inherits(goog.ui.TwoThumbSlider, goog.ui.SliderBase);
- goog.tagUnsealableClass(goog.ui.TwoThumbSlider);
- /**
- * The prefix we use for the CSS class names for the slider and its elements.
- * @type {string}
- */
- goog.ui.TwoThumbSlider.CSS_CLASS_PREFIX =
- goog.getCssName('goog-twothumbslider');
- /**
- * CSS class name for the value thumb element.
- * @type {string}
- */
- goog.ui.TwoThumbSlider.VALUE_THUMB_CSS_CLASS =
- goog.getCssName(goog.ui.TwoThumbSlider.CSS_CLASS_PREFIX, 'value-thumb');
- /**
- * CSS class name for the extent thumb element.
- * @type {string}
- */
- goog.ui.TwoThumbSlider.EXTENT_THUMB_CSS_CLASS =
- goog.getCssName(goog.ui.TwoThumbSlider.CSS_CLASS_PREFIX, 'extent-thumb');
- /**
- * CSS class name for the range highlight element.
- * @type {string}
- */
- goog.ui.TwoThumbSlider.RANGE_HIGHLIGHT_CSS_CLASS =
- goog.getCssName(goog.ui.TwoThumbSlider.CSS_CLASS_PREFIX, 'rangehighlight');
- /**
- * @param {goog.ui.SliderBase.Orientation} orient orientation of the slider.
- * @return {string} The CSS class applied to the twothumbslider element.
- * @protected
- * @override
- */
- goog.ui.TwoThumbSlider.prototype.getCssClass = function(orient) {
- return orient == goog.ui.SliderBase.Orientation.VERTICAL ?
- goog.getCssName(goog.ui.TwoThumbSlider.CSS_CLASS_PREFIX, 'vertical') :
- goog.getCssName(goog.ui.TwoThumbSlider.CSS_CLASS_PREFIX, 'horizontal');
- };
- /**
- * This creates a thumb element with the specified CSS class name.
- * @param {string} cs CSS class name of the thumb to be created.
- * @return {!HTMLDivElement} The created thumb element.
- * @private
- */
- goog.ui.TwoThumbSlider.prototype.createThumb_ = function(cs) {
- var thumb = this.getDomHelper().createDom(goog.dom.TagName.DIV, cs);
- goog.a11y.aria.setRole(thumb, goog.a11y.aria.Role.BUTTON);
- return /** @type {!HTMLDivElement} */ (thumb);
- };
- /**
- * Creates the thumb members for a twothumbslider. If the
- * element contains a child with a class name 'goog-twothumbslider-value-thumb'
- * (or 'goog-twothumbslider-extent-thumb', respectively), then that will be used
- * as the valueThumb (or as the extentThumb, respectively). If the element
- * contains a child with a class name 'goog-twothumbslider-rangehighlight',
- * then that will be used as the range highlight.
- * @override
- */
- goog.ui.TwoThumbSlider.prototype.createThumbs = function() {
- // find range highlight and thumbs
- var valueThumb = goog.dom.getElementsByTagNameAndClass(
- null, goog.ui.TwoThumbSlider.VALUE_THUMB_CSS_CLASS, this.getElement())[0];
- var extentThumb = goog.dom.getElementsByTagNameAndClass(
- null, goog.ui.TwoThumbSlider.EXTENT_THUMB_CSS_CLASS,
- this.getElement())[0];
- var rangeHighlight = goog.dom.getElementsByTagNameAndClass(
- null, goog.ui.TwoThumbSlider.RANGE_HIGHLIGHT_CSS_CLASS,
- this.getElement())[0];
- if (!valueThumb) {
- valueThumb =
- this.createThumb_(goog.ui.TwoThumbSlider.VALUE_THUMB_CSS_CLASS);
- this.getElement().appendChild(valueThumb);
- }
- if (!extentThumb) {
- extentThumb =
- this.createThumb_(goog.ui.TwoThumbSlider.EXTENT_THUMB_CSS_CLASS);
- this.getElement().appendChild(extentThumb);
- }
- if (!rangeHighlight) {
- rangeHighlight = this.getDomHelper().createDom(
- goog.dom.TagName.DIV, goog.ui.TwoThumbSlider.RANGE_HIGHLIGHT_CSS_CLASS);
- // Insert highlight before value thumb so that it renders under the thumbs.
- this.getDomHelper().insertSiblingBefore(rangeHighlight, valueThumb);
- }
- this.valueThumb = /** @type {!HTMLDivElement} */ (valueThumb);
- this.extentThumb = /** @type {!HTMLDivElement} */ (extentThumb);
- this.rangeHighlight = /** @type {!HTMLDivElement} */ (rangeHighlight);
- };
|