import { View, Directive, ElementRef, Ancestor, Optional, NgControl, Renderer, Inject, forwardRef } from 'angular2/angular2'; import {Ion} from '../ion'; import {IonInputItem} from '../form/input'; import {IonicConfig} from '../../config/config'; import {IonicComponent, IonicView} from '../../config/annotations'; import * as dom from '../../util/dom'; @Directive({ selector: '.media-switch' }) class MediaSwitch { constructor( @Ancestor() @Inject(forwardRef(() => Switch)) swtch: Switch, elementRef: ElementRef, renderer: Renderer, config: IonicConfig ) { let element = elementRef.nativeElement; let touchEnabled = config.setting('touchEnabled'); let startCoord = null; function pointerDown(ev) { startCoord = dom.pointerCoord(ev); renderer.setElementClass(elementRef, ACTIVATED, true); element.removeEventListener(touchEnabled ? TOUCHMOVE : MOUSEMOVE, pointerMove); element.addEventListener(touchEnabled ? TOUCHMOVE : MOUSEMOVE, pointerMove); } function pointerMove(ev) { let moveCoord = dom.pointerCoord(ev); console.log('pointerMove', moveCoord); } function pointerUp(ev) { let endCoord = dom.pointerCoord(ev); renderer.setElementClass(elementRef, ACTIVATED, false); element.removeEventListener(touchEnabled ? TOUCHMOVE : MOUSEMOVE, pointerMove); swtch.toggle(); } element.addEventListener(touchEnabled ? TOUCHSTART : MOUSEDOWN, pointerDown); element.addEventListener(touchEnabled ? TOUCHEND : MOUSEUP, pointerUp); this.dereg = function() { element.removeEventListener(touchEnabled ? TOUCHSTART : MOUSEDOWN, pointerDown); element.removeEventListener(touchEnabled ? TOUCHEND : MOUSEUP, pointerUp); element.removeEventListener(touchEnabled ? TOUCHMOVE : MOUSEMOVE, pointerMove); } } onDestroy() { this.dereg(); } } @IonicComponent({ selector: 'ion-switch', properties: [ 'value', 'checked', 'disabled', 'id' ], host: { 'class': 'item', 'role': 'checkbox', '[attr.tab-index]': 'tabIndex', '[attr.aria-checked]': 'checked', '[attr.aria-disabled]': 'disabled', '[attr.aria-labelledby]': 'labelId' } }) @IonicView({ template: '