/** * Touch component definition * this plugin can handle doubletap singletap and swipe actions * dependency - some lib that creates doubletap, singletap and swipe event like jquery.mobile-events */ Crocodoc.addPlugin('touch', function (scope) { 'use strict'; var $el,api,pluginConfig,$viewport, zoomActive = false; function createEventData(){ return { zoomActive: zoomActive } } function handleDoubletap(event,touch) { api.fire('doubletap',createEventData()); if(zoomActive){ zoomActive = false; api.zoom(Crocodoc.ZOOM_FIT_WIDTH); return } scope.getConfig().currentLayout.setZoom(3,touch.secondTap.offset.y,touch.secondTap.offset.x); zoomActive = true; event.preventDefault(); } /** * Handle single tap events * @param {Event} event The event object * @returns {void} */ function handleSingletap(event) { api.fire('singletap',createEventData()); ( pluginConfig.onsingletap || $.noop )(); event.preventDefault(); } /** * Handle swipe left events * @param {Event} event The event object * @returns {void} */ function handleSwipeLeft(event) { api.fire('swipeleft',createEventData()); if( ! zoomActive ){ presentation.scrollTo(Crocodoc.SCROLL_NEXT); } event.preventDefault(); } /** * Handle swipe right events * @param {Event} event The event object * @returns {void} */ function handleSwipeRight(event) { api.fire('swiperight',createEventData()); if( ! zoomActive ){ presentation.scrollTo(Crocodoc.SCROLL_PREVIOUS); } event.preventDefault(); } /** * Handle zoom events * @param {Object} data The event object * @returns {void} */ function handleZoom(data) { //zoomActive = data.zoomMode !== Crocodoc.ZOOM_FIT_WIDTH; // //if( ! data.canZoomIn || ! data.canZoomOut ){ // zoomActive = false; // api.zoom(Crocodoc.ZOOM_FIT_WIDTH); //} } //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- return { messages: ['zoom','pagefocus'], onmessage: function(name,data){ switch (name) { case 'zoom': handleZoom(data); break; case 'pagefocus': api.zoom(Crocodoc.ZOOM_FIT_WIDTH); break; } }, /** * Initialize the zoom component * @param {Object} config * @returns {void} */ init: function (config) { pluginConfig = config; config = scope.getConfig(); $el = config.$el; api = config.api; $viewport = config.$viewport; $el.on('doubletap', handleDoubletap); $el.on('singletap', handleSingletap); $el.on('swipeleft',handleSwipeLeft); $el.on('swiperight',handleSwipeRight); }, /** * Destroy the scroller component * @returns {void} */ destroy: function () { $el.off('doubletap', handleDoubletap); $el.off('singletap', handleSingletap); } }; });