How to use zoom method in Appium

Best JavaScript code snippet using appium

zoom-test.js

Source:zoom-test.js Github

copy

Full Screen

...32    this.zoomDestroy();33};34ZoomTest.prototype.zoomDestroy = function() {35    if(this.zoomElement.data('zoom')) {36        this.zoomElement.zoom('destroy');37    }38};39ZoomTest.prototype.zoomCreate = function(options, element) {40    return (element || this.zoomElement).zoom(options || {} ).data('zoom');41};42ZoomTest.prototype.testInit = function() {43    this.zoomElement.zoom();44    assertTrue(this.zoomElement.is(':mage-zoom'));45};46ZoomTest.prototype.testCreate = function() {47    var zoomInstance = this.zoomCreate(),48        _setZoomData = jsunit.stub(zoomInstance, '_setZoomData'),49        _render = jsunit.stub(zoomInstance, '_render'),50        _bind = jsunit.stub(zoomInstance, '_bind'),51        _hide = jsunit.stub(zoomInstance, '_hide'),52        _largeImageLoaded = jsunit.stub(zoomInstance, '_largeImageLoaded');53    zoomInstance.largeImage = [{54        complete: false55    }];56    zoomInstance._create();57    assertTrue(_setZoomData.callCount === 1);...

Full Screen

Full Screen

mui.zoom.js

Source:mui.zoom.js Github

copy

Full Screen

1(function($, window) {2	var CLASS_ZOOM = $.className('zoom');3	var CLASS_ZOOM_SCROLLER = $.className('zoom-scroller');4	var SELECTOR_ZOOM = '.' + CLASS_ZOOM;5	var SELECTOR_ZOOM_SCROLLER = '.' + CLASS_ZOOM_SCROLLER;6	var EVENT_PINCH_START = 'pinchstart';7	var EVENT_PINCH = 'pinch';8	var EVENT_PINCH_END = 'pinchend';9	if ('ongesturestart' in window) {10		EVENT_PINCH_START = 'gesturestart';11		EVENT_PINCH = 'gesturechange';12		EVENT_PINCH_END = 'gestureend';13	}14	$.Zoom = function(element, options) {15		var zoom = this;16		zoom.options = $.extend($.Zoom.defaults, options);17		zoom.wrapper = zoom.element = element;18		zoom.scroller = element.querySelector(SELECTOR_ZOOM_SCROLLER);19		zoom.scrollerStyle = zoom.scroller && zoom.scroller.style;20		zoom.zoomer = element.querySelector(SELECTOR_ZOOM);21		zoom.zoomerStyle = zoom.zoomer && zoom.zoomer.style;22		zoom.init = function() {23			//自动启用24			$.options.gestureConfig.pinch = true;25			$.options.gestureConfig.doubletap = true;26			zoom.initEvents();27		};28		zoom.initEvents = function(detach) {29			var action = detach ? 'removeEventListener' : 'addEventListener';30			var target = zoom.scroller;31			target[action](EVENT_PINCH_START, zoom.onPinchstart);32			target[action](EVENT_PINCH, zoom.onPinch);33			target[action](EVENT_PINCH_END, zoom.onPinchend);34			target[action]($.EVENT_START, zoom.onTouchstart);35			target[action]($.EVENT_MOVE, zoom.onTouchMove);36			target[action]($.EVENT_CANCEL, zoom.onTouchEnd);37			target[action]($.EVENT_END, zoom.onTouchEnd);38			target[action]('drag', zoom.dragEvent);39			target[action]('doubletap', zoom.doubleTapEvent);40		};41		zoom.dragEvent = function(e) {42			if (imageIsMoved || isGesturing) {43				e.stopPropagation();44			}45		};46		zoom.doubleTapEvent = function(e) {47			zoom.toggleZoom(e.detail.center);48		};49		zoom.transition = function(style, time) {50			time = time || 0;51			style['webkitTransitionDuration'] = time + 'ms';52			return zoom;53		};54		zoom.translate = function(style, x, y) {55			x = x || 0;56			y = y || 0;57			style['webkitTransform'] = 'translate3d(' + x + 'px,' + y + 'px,0px)';58			return zoom;59		};60		zoom.scale = function(style, scale) {61			scale = scale || 1;62			style['webkitTransform'] = 'translate3d(0,0,0) scale(' + scale + ')';63			return zoom;64		};65		zoom.scrollerTransition = function(time) {66			return zoom.transition(zoom.scrollerStyle, time);67		};68		zoom.scrollerTransform = function(x, y) {69			return zoom.translate(zoom.scrollerStyle, x, y);70		};71		zoom.zoomerTransition = function(time) {72			return zoom.transition(zoom.zoomerStyle, time);73		};74		zoom.zoomerTransform = function(scale) {75			return zoom.scale(zoom.zoomerStyle, scale);76		};77		// Gestures78		var scale = 1,79			currentScale = 1,80			isScaling = false,81			isGesturing = false;82		zoom.onPinchstart = function(e) {83			isGesturing = true;84		};85		zoom.onPinch = function(e) {86			if (!isScaling) {87				zoom.zoomerTransition(0);88				isScaling = true;89			}90			scale = (e.detail ? e.detail.scale : e.scale) * currentScale;91			if (scale > zoom.options.maxZoom) {92				scale = zoom.options.maxZoom - 1 + Math.pow((scale - zoom.options.maxZoom + 1), 0.5);93			}94			if (scale < zoom.options.minZoom) {95				scale = zoom.options.minZoom + 1 - Math.pow((zoom.options.minZoom - scale + 1), 0.5);96			}97			zoom.zoomerTransform(scale);98		};99		zoom.onPinchend = function(e) {100			scale = Math.max(Math.min(scale, zoom.options.maxZoom), zoom.options.minZoom);101			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);102			currentScale = scale;103			isScaling = false;104		};105		zoom.setZoom = function(newScale) {106			scale = currentScale = newScale;107			zoom.scrollerTransition(zoom.options.speed).scrollerTransform(0, 0);108			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);109		};110		zoom.toggleZoom = function(position, speed) {111			if (typeof position === 'number') {112				speed = position;113				position = undefined;114			}115			speed = typeof speed === 'undefined' ? zoom.options.speed : speed;116			if (scale && scale !== 1) {117				scale = currentScale = 1;118				zoom.scrollerTransition(speed).scrollerTransform(0, 0);119			} else {120				scale = currentScale = zoom.options.maxZoom;121				if (position) {122					var offset = $.offset(zoom.zoomer);123					var top = offset.top;124					var left = offset.left;125					var offsetX = (position.x - left) * scale;126					var offsetY = (position.y - top) * scale;127					this._cal();128					if (offsetX >= imageMaxX && offsetX <= (imageMaxX + wrapperWidth)) { //center129						offsetX = imageMaxX - offsetX + wrapperWidth / 2;130					} else if (offsetX < imageMaxX) { //left131						offsetX = imageMaxX - offsetX + wrapperWidth / 2;132					} else if (offsetX > (imageMaxX + wrapperWidth)) { //right133						offsetX = imageMaxX + wrapperWidth - offsetX - wrapperWidth / 2;134					}135					if (offsetY >= imageMaxY && offsetY <= (imageMaxY + wrapperHeight)) { //middle136						offsetY = imageMaxY - offsetY + wrapperHeight / 2;137					} else if (offsetY < imageMaxY) { //top138						offsetY = imageMaxY - offsetY + wrapperHeight / 2;139					} else if (offsetY > (imageMaxY + wrapperHeight)) { //bottom140						offsetY = imageMaxY + wrapperHeight - offsetY - wrapperHeight / 2;141					}142					offsetX = Math.min(Math.max(offsetX, imageMinX), imageMaxX);143					offsetY = Math.min(Math.max(offsetY, imageMinY), imageMaxY);144					zoom.scrollerTransition(speed).scrollerTransform(offsetX, offsetY);145				} else {146					zoom.scrollerTransition(speed).scrollerTransform(0, 0);147				}148			}149			zoom.zoomerTransition(speed).zoomerTransform(scale);150		};151		zoom._cal = function() {152			wrapperWidth = zoom.wrapper.offsetWidth;153			wrapperHeight = zoom.wrapper.offsetHeight;154			imageWidth = zoom.zoomer.offsetWidth;155			imageHeight = zoom.zoomer.offsetHeight;156			var scaledWidth = imageWidth * scale;157			var scaledHeight = imageHeight * scale;158			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);159			imageMaxX = -imageMinX;160			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);161			imageMaxY = -imageMinY;162		};163		var wrapperWidth, wrapperHeight, imageIsTouched, imageIsMoved, imageCurrentX, imageCurrentY, imageMinX, imageMinY, imageMaxX, imageMaxY, imageWidth, imageHeight, imageTouchesStart = {},164			imageTouchesCurrent = {},165			imageStartX, imageStartY, velocityPrevPositionX, velocityPrevTime, velocityX, velocityPrevPositionY, velocityY;166		zoom.onTouchstart = function(e) {167			e.preventDefault();168			imageIsTouched = true;169			imageTouchesStart.x = e.type === $.EVENT_START ? e.targetTouches[0].pageX : e.pageX;170			imageTouchesStart.y = e.type === $.EVENT_START ? e.targetTouches[0].pageY : e.pageY;171		};172		zoom.onTouchMove = function(e) {173			e.preventDefault();174			if (!imageIsTouched) return;175			if (!imageIsMoved) {176				wrapperWidth = zoom.wrapper.offsetWidth;177				wrapperHeight = zoom.wrapper.offsetHeight;178				imageWidth = zoom.zoomer.offsetWidth;179				imageHeight = zoom.zoomer.offsetHeight;180				var translate = $.parseTranslateMatrix($.getStyles(zoom.scroller, 'webkitTransform'));181				imageStartX = translate.x || 0;182				imageStartY = translate.y || 0;183				zoom.scrollerTransition(0);184			}185			var scaledWidth = imageWidth * scale;186			var scaledHeight = imageHeight * scale;187			if (scaledWidth < wrapperWidth && scaledHeight < wrapperHeight) return;188			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);189			imageMaxX = -imageMinX;190			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);191			imageMaxY = -imageMinY;192			imageTouchesCurrent.x = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageX : e.pageX;193			imageTouchesCurrent.y = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageY : e.pageY;194			if (!imageIsMoved && !isScaling) {195				//				if (Math.abs(imageTouchesCurrent.y - imageTouchesStart.y) < Math.abs(imageTouchesCurrent.x - imageTouchesStart.x)) {196				//TODO 此处需要优化,当遇到长图,需要上下滚动时,下列判断会导致滚动不流畅197				if (198					(Math.floor(imageMinX) === Math.floor(imageStartX) && imageTouchesCurrent.x < imageTouchesStart.x) ||199					(Math.floor(imageMaxX) === Math.floor(imageStartX) && imageTouchesCurrent.x > imageTouchesStart.x)200				) {201					imageIsTouched = false;202					return;203				}204				//				}205			}206			imageIsMoved = true;207			imageCurrentX = imageTouchesCurrent.x - imageTouchesStart.x + imageStartX;208			imageCurrentY = imageTouchesCurrent.y - imageTouchesStart.y + imageStartY;209			if (imageCurrentX < imageMinX) {210				imageCurrentX = imageMinX + 1 - Math.pow((imageMinX - imageCurrentX + 1), 0.8);211			}212			if (imageCurrentX > imageMaxX) {213				imageCurrentX = imageMaxX - 1 + Math.pow((imageCurrentX - imageMaxX + 1), 0.8);214			}215			if (imageCurrentY < imageMinY) {216				imageCurrentY = imageMinY + 1 - Math.pow((imageMinY - imageCurrentY + 1), 0.8);217			}218			if (imageCurrentY > imageMaxY) {219				imageCurrentY = imageMaxY - 1 + Math.pow((imageCurrentY - imageMaxY + 1), 0.8);220			}221			//Velocity222			if (!velocityPrevPositionX) velocityPrevPositionX = imageTouchesCurrent.x;223			if (!velocityPrevPositionY) velocityPrevPositionY = imageTouchesCurrent.y;224			if (!velocityPrevTime) velocityPrevTime = $.now();225			velocityX = (imageTouchesCurrent.x - velocityPrevPositionX) / ($.now() - velocityPrevTime) / 2;226			velocityY = (imageTouchesCurrent.y - velocityPrevPositionY) / ($.now() - velocityPrevTime) / 2;227			if (Math.abs(imageTouchesCurrent.x - velocityPrevPositionX) < 2) velocityX = 0;228			if (Math.abs(imageTouchesCurrent.y - velocityPrevPositionY) < 2) velocityY = 0;229			velocityPrevPositionX = imageTouchesCurrent.x;230			velocityPrevPositionY = imageTouchesCurrent.y;231			velocityPrevTime = $.now();232			zoom.scrollerTransform(imageCurrentX, imageCurrentY);233		};234		zoom.onTouchEnd = function(e) {235			if (!e.touches.length) {236				isGesturing = false;237			}238			if (!imageIsTouched || !imageIsMoved) {239				imageIsTouched = false;240				imageIsMoved = false;241				return;242			}243			imageIsTouched = false;244			imageIsMoved = false;245			var momentumDurationX = 300;246			var momentumDurationY = 300;247			var momentumDistanceX = velocityX * momentumDurationX;248			var newPositionX = imageCurrentX + momentumDistanceX;249			var momentumDistanceY = velocityY * momentumDurationY;250			var newPositionY = imageCurrentY + momentumDistanceY;251			if (velocityX !== 0) momentumDurationX = Math.abs((newPositionX - imageCurrentX) / velocityX);252			if (velocityY !== 0) momentumDurationY = Math.abs((newPositionY - imageCurrentY) / velocityY);253			var momentumDuration = Math.max(momentumDurationX, momentumDurationY);254			imageCurrentX = newPositionX;255			imageCurrentY = newPositionY;256			var scaledWidth = imageWidth * scale;257			var scaledHeight = imageHeight * scale;258			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);259			imageMaxX = -imageMinX;260			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);261			imageMaxY = -imageMinY;262			imageCurrentX = Math.max(Math.min(imageCurrentX, imageMaxX), imageMinX);263			imageCurrentY = Math.max(Math.min(imageCurrentY, imageMaxY), imageMinY);264			zoom.scrollerTransition(momentumDuration).scrollerTransform(imageCurrentX, imageCurrentY);265		};266		zoom.destroy = function() {267			zoom.initEvents(true); //detach268			delete $.data[zoom.wrapper.getAttribute('data-zoomer')];269			zoom.wrapper.setAttribute('data-zoomer', '');270		}271		zoom.init();272		return zoom;273	};274	$.Zoom.defaults = {275		speed: 300,276		maxZoom: 3,277		minZoom: 1,278	};279	$.fn.zoom = function(options) {280		var zoomApis = [];281		this.each(function() {282			var zoomApi = null;283			var self = this;284			var id = self.getAttribute('data-zoomer');285			if (!id) {286				id = ++$.uuid;287				$.data[id] = zoomApi = new $.Zoom(self, options);288				self.setAttribute('data-zoomer', id);289			} else {290				zoomApi = $.data[id];291			}292			zoomApis.push(zoomApi);293		});294		return zoomApis.length === 1 ? zoomApis[0] : zoomApis;295	};...

Full Screen

Full Screen

c3ext.js

Source:c3ext.js Github

copy

Full Screen

1var c3ext = {};2c3ext.generate = function (options) {3    if (options.zoom2 != null) {4        zoom2_reducers = options.zoom2.reducers || {};5        zoom2_enabled = options.zoom2.enabled;6        _zoom2_factor = options.zoom2.factor || 1;7        _zoom2_maxItems = options.zoom2.maxItems;8    }9    if (!zoom2_enabled) {10        return c3.generate(options);11    }12    var originalData = Q.copy(options.data);13    var zoom2_reducers;14    var zoom2_enabled;15    var _zoom2_maxItems;16    if (_zoom2_maxItems == null) {17        var el = d3.select(options.bindto)[0][0];18        if (el != null) {19            var availWidth = el.clientWidth;20            var pointSize = 20;21            _zoom2_maxItems = Math.ceil(availWidth / pointSize);22        }23        if (_zoom2_maxItems == null || _zoom2_maxItems < 10) {24            _zoom2_maxItems = 10;25        }26    }27    function onZoomChanged(e) {28        refresh();29    }30    var zoom2 = c3ext.ZoomBehavior({ changed: onZoomChanged, bindto: options.bindto });31    zoom2.enhance = function () {32        _zoom2_maxItems *= 2;33        var totalItems = zoom2.getZoom().totalItems;34        if (_zoom2_maxItems > totalItems)35            _zoom2_maxItems = totalItems;36        refresh();37    }38    zoom2.dehance = function () {39        _zoom2_maxItems = Math.ceil(_zoom2_maxItems / 2) + 1;40        refresh();41    }42    zoom2.maxItems = function () { return _zoom2_maxItems; };43    function zoomAndReduceData(list, zoomRange, func, maxItems) {44        //var maxItems = 10;//Math.ceil(10 * zoomFactor);45        var list2 = list.slice(zoomRange[0], zoomRange[1]);46        var chunkSize = 1;47        var list3 = list2;48        if (list3.length > maxItems) {49            var chunkSize = Math.ceil(list2.length / maxItems);50            list3 = list3.splitIntoChunksOf(chunkSize).map(func);51        }52        //console.log("x" + getCurrentZoomLevel() + ", maxItems=" + maxItems + " chunkSize=" + chunkSize + " totalBefore=" + list2.length + ", totalAfter=" + list3.length);53        return list3;54    }55    function first(t) { return t[0]; }56    var getDataForZoom = function (data) {57        if (data.columns == null || data.columns.length == 0)58            return;59        var zoomInfo = zoom2.getZoom();60        if (zoomInfo.totalItems != data.columns[0].length - 1) {61            zoom2.setOptions({ totalItems: data.columns[0].length - 1 });62            zoomInfo = zoom2.getZoom();63        }64        data.columns = originalData.columns.map(function (column) {65            var name = column[0];66            var reducer = zoom2_reducers[name] || first; //by default take the first67            var values = column.slice(1);68            var newValues = zoomAndReduceData(values, zoomInfo.currentZoom, reducer, _zoom2_maxItems);69            return [name].concat(newValues);70        });71        return data;72    };73    getDataForZoom(options.data);74    var chart = c3.generate(options);75    var _chart_load_org = chart.load.bind(chart);76    chart.zoom2 = zoom2;77    chart.load = function (data) {78        if (data.unload) {79            unload(data.unload);80            delete data.unload;81        }82        Q.copy(data, originalData);83        refresh();84    }85    chart.unload = function (names) {86        unload(names);87        refresh();88    }89    function unload(names) {90        originalData.columns.removeAll(function (t) { names.contains(t); });91    }92    function refresh() {93        var data = Q.copy(originalData)94        getDataForZoom(data);95        _chart_load_org(data);96    };97    return chart;98}99c3ext.ZoomBehavior = function (options) {100    var zoom = { __type: "ZoomBehavior" };101    var _zoom2_factor;102    var _left;103    var totalItems;104    var currentZoom;105    var bindto = options.bindto;106    var _zoomChanged = options.changed || function () { };107    var element;108    var mousewheelTimer;109    var deltaY = 0;110    var leftRatio = 0;111    zoom.setOptions = function (options) {112        if (options == null)113            options = {};114        _zoom2_factor = options.factor || 1;115        _left = 0;116        totalItems = options.totalItems || 0;117        currentZoom = [0, totalItems];118        _zoomChanged = options.changed || _zoomChanged;119    }120    zoom.setOptions(options);121    function verifyZoom(newZoom) {122        //newZoom.sort();123        if (newZoom[1] > totalItems) {124            var diff = newZoom[1] - totalItems;125            newZoom[0] -= diff;126            newZoom[1] -= diff;127        }128        if (newZoom[0] < 0) {129            var diff = newZoom[0] * -1;130            newZoom[0] += diff;131            newZoom[1] += diff;132        }133        if (newZoom[1] > totalItems)134            newZoom[1] = totalItems;135        if (newZoom[0] < 0)136            newZoom[0] = 0;137    }138    function zoomAndPan(zoomFactor, left) {139        var itemsToShow = Math.ceil(totalItems / zoomFactor);140        var newZoom = [left, left + itemsToShow];141        verifyZoom(newZoom);142        currentZoom = newZoom;143        onZoomChanged();144    }145    function onZoomChanged() {146        if (_zoomChanged != null)147            _zoomChanged(zoom.getZoom());148    }149    function applyZoomAndPan() {150        zoomAndPan(_zoom2_factor, _left);151    }152    function getItemsToShow() {153        var itemsToShow = Math.ceil(totalItems / _zoom2_factor);154        return itemsToShow;155    }156    zoom.getZoom = function () {157        return { totalItems: totalItems, currentZoom: currentZoom.slice() };158    }159    zoom.factor = function (factor, skipDraw) {160        if (arguments.length == 0)161            return _zoom2_factor;162        _zoom2_factor = factor;163        if (_zoom2_factor < 1)164            _zoom2_factor = 1;165        if (skipDraw)166            return;167        applyZoomAndPan();168    }169    zoom.left = function (left, skipDraw) {170        if (arguments.length == 0)171            return _left;172        _left = left;173        if (_left < 0)174            _left = 0;175        var pageSize = getItemsToShow();176        //_left += pageSize;177        if (_left + pageSize > totalItems)178            _left = totalItems - pageSize;179        console.log({ left: _left, pageSize: pageSize });180        if (skipDraw)181            return;182        applyZoomAndPan();183    }184    zoom.zoomAndPanByRatio = function (zoomRatio, panRatio) {185        var pageSize = getItemsToShow();186        var leftOffset = Math.round(pageSize * panRatio);187        var mouseLeft = _left + leftOffset;188        zoom.factor(zoom.factor() * zoomRatio, true);189        var finalLeft = mouseLeft;190        if (zoomRatio != 1) {191            var pageSize2 = getItemsToShow();192            var leftOffset2 = Math.round(pageSize2 * panRatio);193            finalLeft = mouseLeft - leftOffset2;194        }195        zoom.left(finalLeft, true);196        applyZoomAndPan();197    }198    zoom.zoomIn = function () {199        zoom.zoomAndPanByRatio(2, 0);200    }201    zoom.zoomOut = function () {202        zoom.zoomAndPanByRatio(0.5, 0);203    }204    zoom.panLeft = function () {205        zoom.zoomAndPanByRatio(1, -1);206    }207    zoom.panRight = function () {208        zoom.zoomAndPanByRatio(1, 1);209    }210    zoom.reset = function () {211        _left = 0;212        _zoom2_factor = 1;213        applyZoomAndPan();214    }215    function doZoom() {216        if (deltaY != 0) {217            var maxDelta = 10;218            var multiply = (maxDelta + deltaY) / maxDelta;219            //var factor = chart.zoom2.factor()*multiply;220            //factor= Math.ceil(factor*100) / 100;221            console.log({ deltaY: deltaY, multiply: multiply });222            zoom.zoomAndPanByRatio(multiply, leftRatio);//0.5);//leftRatio);223            deltaY = 0;224        }225    }226    function element_mousewheel(e) {227        deltaY += e.deltaY;228        leftRatio = (e.offsetX - 70) / (e.currentTarget.offsetWidth - 70);229        //console.log({ "e.offsetX": e.offsetX, "e.currentTarget.offsetWidth": e.currentTarget.offsetWidth, leftRatio: leftRatio });230        mousewheelTimer.set(150);231        e.preventDefault();232    }233    if (bindto != null) {234        element = $(options.bindto);235        if (element.mousewheel) {236            mousewheelTimer = new Timer(doZoom);237            element.mousewheel(element_mousewheel);238        }239    }240    return zoom;241}242if (typeof (Q) == "undefined") {243    var Q = function () {244    };245    Q.copy = function (src, target, options, depth) {246        ///<summary>Copies an object into a target object, recursively cloning any object or array in the way, overwrite=true will overwrite a primitive field value even if exists</summary>247        ///<param name="src" />248        ///<param name="target" />249        ///<param name="options" type="Object">{ overwrite:false }</param>250        ///<returns type="Object">The copied object</returns>251        if (depth == null)252            depth = 0;253        if (depth == 100) {254            console.warn("Q.copy is in depth of 100 - possible circular reference")255        }256        options = options || { overwrite: false };257        if (src == target || src == null)258            return target;259        if (typeof (src) != "object") {260            if (options.overwrite || target == null)261                return src;262            return target;263        }264        if (typeof (src.clone) == "function") {265            if (options.overwrite || target == null)266                return src.clone();267            return target;268        }269        if (target == null) {270            if (src instanceof Array)271                target = [];272            else273                target = {};274        }275        if (src instanceof Array) {276            for (var i = 0; i < src.length; i++) {277                var item = src[i];278                var item2 = target[i];279                item2 = Q.copy(item, item2, options, depth + 1);280                target[i] = item2;281            }282            target.splice(src.length, target.length - src.length);283            return target;284        }285        for (var p in src) {286            var value = src[p];287            var value2 = target[p];288            value2 = Q.copy(value, value2, options, depth + 1);289            target[p] = value2;290        }291        return target;292    }293}294if (typeof (Timer) == "undefined") {295    var Timer = function (action, ms) {296        this.action = action;297        if (ms != null)298            this.set(ms);299    }300    Timer.prototype.set = function (ms) {301        if (ms == null)302            ms = this._ms;303        else304            this._ms = ms;305        this.clear();306        if (ms == null)307            return;308        this.timeout = window.setTimeout(this.onTick.bind(this), ms);309    }310    Timer.prototype.onTick = function () {311        this.clear();312        this.action();313    }314    Timer.prototype.clear = function (ms) {315        if (this.timeout == null)316            return;317        window.clearTimeout(this.timeout);318        this.timeout = null;319    }320}321if (typeof(Array.prototype.splitIntoChunksOf)=="undefined") {322    Array.prototype.splitIntoChunksOf = function (countInEachChunk) {323        var chunks = Math.ceil(this.length / countInEachChunk);324        var list = [];325        for (var i = 0; i < this.length; i += countInEachChunk) {326            list.push(this.slice(i, i + countInEachChunk));327        }328        return list;329    }...

Full Screen

Full Screen

zoom_manager.js

Source:zoom_manager.js Github

copy

Full Screen

1// Copyright 2015 The Chromium Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.m.js';5import {BrowserApi} from './browser_api.js';6// Abstract parent of classes that manage updating the browser with zoom changes7// and/or updating the viewer's zoom when the browser zoom changes.8export class ZoomManager {9  /**10   * @param {function():number} getViewportZoom Callback to get the viewport's11   *     current zoom level.12   * @param {number} initialZoom The initial browser zoom level.13   */14  constructor(getViewportZoom, initialZoom) {15    if (this.constructor === ZoomManager) {16      throw new TypeError('Instantiated abstract class: ZoomManager');17    }18    /** @private {number} */19    this.browserZoom_ = initialZoom;20    /** @private {function():number} */21    this.getViewportZoom_ = getViewportZoom;22    /** @private {!EventTarget} */23    this.eventTarget_ = new EventTarget();24  }25  /** @return {!EventTarget} */26  getEventTarget() {27    return this.eventTarget_;28  }29  /**30   * Creates the appropriate kind of zoom manager given the zoom behavior.31   * @param {BrowserApi.ZoomBehavior} zoomBehavior How to manage zoom.32   * @param {function():number} getViewportZoom A function that gets the current33   *     viewport zoom.34   * @param {function(number):Promise} setBrowserZoomFunction A function that35   *     sets the browser zoom to the provided value.36   * @param {number} initialZoom The initial browser zoom level.37   */38  static create(39      zoomBehavior, getViewportZoom, setBrowserZoomFunction, initialZoom) {40    switch (zoomBehavior) {41      case BrowserApi.ZoomBehavior.MANAGE:42        return new ActiveZoomManager(43            getViewportZoom, setBrowserZoomFunction, initialZoom);44      case BrowserApi.ZoomBehavior.PROPAGATE_PARENT:45        return new EmbeddedZoomManager(getViewportZoom, initialZoom);46      default:47        return new InactiveZoomManager(getViewportZoom, initialZoom);48    }49  }50  /**51   * Invoked when a browser-initiated zoom-level change occurs.52   * @param {number} newZoom the zoom level to zoom to.53   */54  onBrowserZoomChange(newZoom) {}55  /** Invoked when an extension-initiated zoom-level change occurs. */56  onPdfZoomChange() {}57  /**58   * Combines the internal pdf zoom and the browser zoom to59   * produce the total zoom level for the viewer.60   * @param {number} internalZoom the zoom level internal to the viewer.61   * @return {number} the total zoom level.62   */63  applyBrowserZoom(internalZoom) {64    return this.browserZoom_ * internalZoom;65  }66  /**67   * Given a zoom level, return the internal zoom level needed to68   * produce that zoom level.69   * @param {number} totalZoom the total zoom level.70   * @return {number} the zoom level internal to the viewer.71   */72  internalZoomComponent(totalZoom) {73    return totalZoom / this.browserZoom_;74  }75  /**76   * Returns whether two numbers are approximately equal.77   * @param {number} a The first number.78   * @param {number} b The second number.79   */80  floatingPointEquals(a, b) {81    const MIN_ZOOM_DELTA = 0.01;82    // If the zoom level is close enough to the current zoom level, don't83    // change it. This avoids us getting into an infinite loop of zoom changes84    // due to floating point error.85    return Math.abs(a - b) <= MIN_ZOOM_DELTA;86  }87}88// Has no control over the browser's zoom and does not respond to browser zoom89// changes.90export class InactiveZoomManager extends ZoomManager {}91// ActiveZoomManager controls the browser's zoom.92class ActiveZoomManager extends ZoomManager {93  /**94   * Constructs a ActiveZoomManager.95   * @param {function():number} getViewportZoom A function that gets the current96   *     viewport zoom level97   * @param {function(number):Promise} setBrowserZoomFunction A function that98   *     sets the browser zoom to the provided value.99   * @param {number} initialZoom The initial browser zoom level.100   */101  constructor(getViewportZoom, setBrowserZoomFunction, initialZoom) {102    super(getViewportZoom, initialZoom);103    /** @private {function(number):Promise} */104    this.setBrowserZoomFunction_ = setBrowserZoomFunction;105    /** @private {?Promise} */106    this.changingBrowserZoom_ = null;107  }108  /**109   * Invoked when a browser-initiated zoom-level change occurs.110   * @param {number} newZoom the zoom level to zoom to.111   */112  onBrowserZoomChange(newZoom) {113    // If we are changing the browser zoom level, ignore any browser zoom level114    // change events. Either, the change occurred before our update and will be115    // overwritten, or the change being reported is the change we are making,116    // which we have already handled.117    if (this.changingBrowserZoom_) {118      return;119    }120    if (this.floatingPointEquals(this.browserZoom_, newZoom)) {121      return;122    }123    this.browserZoom_ = newZoom;124    this.eventTarget_.dispatchEvent(125        new CustomEvent('set-zoom', {detail: newZoom}));126  }127  /**128   * Invoked when an extension-initiated zoom-level change occurs.129   * @override130   */131  onPdfZoomChange() {132    // If we are already changing the browser zoom level in response to a133    // previous extension-initiated zoom-level change, ignore this zoom change.134    // Once the browser zoom level is changed, we check whether the extension's135    // zoom level matches the most recently sent zoom level.136    if (this.changingBrowserZoom_) {137      return;138    }139    const viewportZoom = this.getViewportZoom_();140    if (this.floatingPointEquals(this.browserZoom_, viewportZoom)) {141      return;142    }143    this.changingBrowserZoom_ =144        this.setBrowserZoomFunction_(viewportZoom).then(() => {145          this.browserZoom_ = viewportZoom;146          this.changingBrowserZoom_ = null;147          // The extension's zoom level may have changed while the browser zoom148          // change was in progress. We call back into onPdfZoomChange to ensure149          // the browser zoom is up to date.150          this.onPdfZoomChange();151        });152  }153  /**154   * Combines the internal pdf zoom and the browser zoom to155   * produce the total zoom level for the viewer.156   * @param {number} internalZoom the zoom level internal to the viewer.157   * @return {number} the total zoom level.158   */159  applyBrowserZoom(internalZoom) {160    // The internal zoom and browser zoom are changed together, so the161    // browser zoom is already applied.162    return internalZoom;163  }164  /**165   * Given a zoom level, return the internal zoom level needed to166   * produce that zoom level.167   * @param {number} totalZoom the total zoom level.168   * @return {number} the zoom level internal to the viewer.169   */170  internalZoomComponent(totalZoom) {171    // The internal zoom and browser zoom are changed together, so the172    // internal zoom is the total zoom.173    return totalZoom;174  }175}176// Responds to changes in the browser zoom, but does not control the browser177// zoom.178class EmbeddedZoomManager extends ZoomManager {179  /**180   * Invoked when a browser-initiated zoom-level change occurs.181   * @param {number} newZoom the new browser zoom level.182   */183  onBrowserZoomChange(newZoom) {184    const oldZoom = this.browserZoom_;185    this.browserZoom_ = newZoom;186    this.eventTarget_.dispatchEvent(187        new CustomEvent('update-zoom-from-browser', {detail: oldZoom}));188  }...

Full Screen

Full Screen

browser_api.js

Source:browser_api.js Github

copy

Full Screen

1// Copyright 2015 The Chromium Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4import {assert} from 'chrome://resources/js/assert.m.js';5/**6 * @param {!Object} streamInfo The stream object pointing to the data contained7 *     in the PDF.8 * @return {Promise<number>} A promise that will resolve to the default zoom9 *     factor.10 */11function lookupDefaultZoom(streamInfo) {12  // Webviews don't run in tabs so |streamInfo.tabId| is -1 when running within13  // a webview.14  if (!chrome.tabs || streamInfo.tabId < 0) {15    return Promise.resolve(1);16  }17  return new Promise(function(resolve, reject) {18    chrome.tabs.getZoomSettings(streamInfo.tabId, function(zoomSettings) {19      resolve(zoomSettings.defaultZoomFactor);20    });21  });22}23/**24 * Returns a promise that will resolve to the initial zoom factor25 * upon starting the plugin. This may differ from the default zoom26 * if, for example, the page is zoomed before the plugin is run.27 * @param {!Object} streamInfo The stream object pointing to the data contained28 *     in the PDF.29 * @return {Promise<number>} A promise that will resolve to the initial zoom30 *     factor.31 */32function lookupInitialZoom(streamInfo) {33  // Webviews don't run in tabs so |streamInfo.tabId| is -1 when running within34  // a webview.35  if (!chrome.tabs || streamInfo.tabId < 0) {36    return Promise.resolve(1);37  }38  return new Promise(function(resolve, reject) {39    chrome.tabs.getZoom(streamInfo.tabId, resolve);40  });41}42// A class providing an interface to the browser.43export class BrowserApi {44  /**45   * @param {!Object} streamInfo The stream object which points to the data46   *     contained in the PDF.47   * @param {number} defaultZoom The default browser zoom.48   * @param {number} initialZoom The initial browser zoom49   *     upon starting the plugin.50   * @param {BrowserApi.ZoomBehavior} zoomBehavior How to manage zoom.51   */52  constructor(streamInfo, defaultZoom, initialZoom, zoomBehavior) {53    this.streamInfo_ = streamInfo;54    this.defaultZoom_ = defaultZoom;55    this.initialZoom_ = initialZoom;56    this.zoomBehavior_ = zoomBehavior;57  }58  /**59   * @param {!Object} streamInfo The stream object pointing to the data60   *     contained in the PDF.61   * @param {BrowserApi.ZoomBehavior} zoomBehavior How to manage zoom.62   * @return {Promise<BrowserApi>} A promise to a BrowserApi.63   */64  static create(streamInfo, zoomBehavior) {65    return Promise66        .all([lookupDefaultZoom(streamInfo), lookupInitialZoom(streamInfo)])67        .then(function(zoomFactors) {68          return new BrowserApi(69              streamInfo, zoomFactors[0], zoomFactors[1], zoomBehavior);70        });71  }72  /**73   * @return {Object} The stream info object pointing to the data contained in74   *     the PDF.75   */76  getStreamInfo() {77    return this.streamInfo_;78  }79  /**80   * Sets the browser zoom.81   * @param {number} zoom The zoom factor to send to the browser.82   * @return {Promise} A promise that will be resolved when the browser zoom83   *     has been updated.84   */85  setZoom(zoom) {86    assert(87        this.zoomBehavior_ === BrowserApi.ZoomBehavior.MANAGE,88        'Viewer does not manage browser zoom.');89    return new Promise((resolve, reject) => {90      chrome.tabs.setZoom(this.streamInfo_.tabId, zoom, resolve);91    });92  }93  /** @return {number} The default browser zoom factor. */94  getDefaultZoom() {95    return this.defaultZoom_;96  }97  /** @return {number} The initial browser zoom factor. */98  getInitialZoom() {99    return this.initialZoom_;100  }101  /** @return {BrowserApi.ZoomBehavior} How to manage zoom. */102  getZoomBehavior() {103    return this.zoomBehavior_;104  }105  /**106   * Adds an event listener to be notified when the browser zoom changes.107   *108   * @param {!Function} listener The listener to be called with the new zoom109   *     factor.110   */111  addZoomEventListener(listener) {112    if (!(this.zoomBehavior_ === BrowserApi.ZoomBehavior.MANAGE ||113          this.zoomBehavior_ === BrowserApi.ZoomBehavior.PROPAGATE_PARENT)) {114      return;115    }116    chrome.tabs.onZoomChange.addListener(info => {117      const zoomChangeInfo =118          /** @type {{tabId: number, newZoomFactor: number}} */ (info);119      if (zoomChangeInfo.tabId !== this.streamInfo_.tabId) {120        return;121      }122      listener(zoomChangeInfo.newZoomFactor);123    });124  }125}126/**127 * Enumeration of ways to manage zoom changes.128 * @enum {number}129 */130BrowserApi.ZoomBehavior = {131  NONE: 0,132  MANAGE: 1,133  PROPAGATE_PARENT: 2134};135/**136 * Creates a BrowserApi for an extension running as a mime handler.137 * @return {!Promise<!BrowserApi>} A promise to a BrowserApi instance138 *     constructed using the mimeHandlerPrivate API.139 */140function createBrowserApiForMimeHandlerView() {141  return new Promise(function(resolve, reject) {142           chrome.mimeHandlerPrivate.getStreamInfo(resolve);143         })144      .then(function(streamInfo) {145        const promises = [];146        let zoomBehavior = BrowserApi.ZoomBehavior.NONE;147        if (streamInfo.tabId !== -1) {148          zoomBehavior = streamInfo.embedded ?149              BrowserApi.ZoomBehavior.PROPAGATE_PARENT :150              BrowserApi.ZoomBehavior.MANAGE;151          promises.push(new Promise(function(resolve) {152                          chrome.tabs.get(streamInfo.tabId, resolve);153                        }).then(function(tab) {154            if (tab) {155              streamInfo.tabUrl = tab.url;156            }157          }));158        }159        if (zoomBehavior === BrowserApi.ZoomBehavior.MANAGE) {160          promises.push(new Promise(function(resolve) {161            chrome.tabs.setZoomSettings(162                streamInfo.tabId, {mode: 'manual', scope: 'per-tab'}, resolve);163          }));164        }165        return Promise.all(promises).then(function() {166          return BrowserApi.create(streamInfo, zoomBehavior);167        });168      });169}170/**171 * Creates a BrowserApi instance for an extension not running as a mime handler.172 * @return {!Promise<!BrowserApi>} A promise to a BrowserApi instance173 *     constructed from the URL.174 */175function createBrowserApiForPrintPreview() {176  const url = window.location.search.substring(1);177  const streamInfo = {178    streamUrl: url,179    originalUrl: url,180    responseHeaders: {},181    embedded: window.parent !== window,182    tabId: -1,183  };184  return new Promise(function(resolve, reject) {185           if (!chrome.tabs) {186             resolve();187             return;188           }189           chrome.tabs.getCurrent(function(tab) {190             streamInfo.tabId = tab.id;191             streamInfo.tabUrl = tab.url;192             resolve();193           });194         })195      .then(function() {196        return BrowserApi.create(streamInfo, BrowserApi.ZoomBehavior.NONE);197      });198}199/**200 * @return {!Promise<!BrowserApi>} A promise to a BrowserApi instance for the201 *     current environment.202 */203export function createBrowserApi() {204  if (location.origin === 'chrome://print') {205    return createBrowserApiForPrintPreview();206  }207  return createBrowserApiForMimeHandlerView();...

Full Screen

Full Screen

Zoom.js

Source:Zoom.js Github

copy

Full Screen

1/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for2 * full list of contributors). Published under the 2-clause BSD license.3 * See license.txt in the OpenLayers distribution or repository for the4 * full text of the license. */5/**6 * @requires OpenLayers/Control.js7 * @requires OpenLayers/Events/buttonclick.js8 */9/**10 * Class: OpenLayers.Control.Zoom11 * The Zoom control is a pair of +/- links for zooming in and out.12 *13 * Inherits from:14 *  - <OpenLayers.Control>15 */16OpenLayers.Control.Zoom = OpenLayers.Class(OpenLayers.Control, {17    18    /**19     * APIProperty: zoomInText20     * {String}21     * Text for zoom-in link.  Default is "+".22     */23    zoomInText: "+",24    /**25     * APIProperty: zoomInId26     * {String}27     * Instead of having the control create a zoom in link, you can provide 28     *     the identifier for an anchor element already added to the document.29     *     By default, an element with id "olZoomInLink" will be searched for30     *     and used if it exists.31     */32    zoomInId: "olZoomInLink",33    /**34     * APIProperty: zoomOutText35     * {String}36     * Text for zoom-out link.  Default is "\u2212".37     */38    zoomOutText: "\u2212",39    /**40     * APIProperty: zoomOutId41     * {String}42     * Instead of having the control create a zoom out link, you can provide 43     *     the identifier for an anchor element already added to the document.44     *     By default, an element with id "olZoomOutLink" will be searched for45     *     and used if it exists.46     */47    zoomOutId: "olZoomOutLink",48    /**49     * Method: draw50     *51     * Returns:52     * {DOMElement} A reference to the DOMElement containing the zoom links.53     */54    draw: function() {55        var div = OpenLayers.Control.prototype.draw.apply(this),56            links = this.getOrCreateLinks(div),57            zoomIn = links.zoomIn,58            zoomOut = links.zoomOut,59            eventsInstance = this.map.events;60        61        if (zoomOut.parentNode !== div) {62            eventsInstance = this.events;63            eventsInstance.attachToElement(zoomOut.parentNode);64        }65        eventsInstance.register("buttonclick", this, this.onZoomClick);66        67        this.zoomInLink = zoomIn;68        this.zoomOutLink = zoomOut;69        return div;70    },71    72    /**73     * Method: getOrCreateLinks74     * 75     * Parameters:76     * el - {DOMElement}77     *78     * Return: 79     * {Object} Object with zoomIn and zoomOut properties referencing links.80     */81    getOrCreateLinks: function(el) {82        var zoomIn = document.getElementById(this.zoomInId),83            zoomOut = document.getElementById(this.zoomOutId);84        if (!zoomIn) {85            zoomIn = document.createElement("a");86            zoomIn.href = "#zoomIn";87            zoomIn.appendChild(document.createTextNode(this.zoomInText));88            zoomIn.className = "olControlZoomIn";89            el.appendChild(zoomIn);90        }91        OpenLayers.Element.addClass(zoomIn, "olButton");92        if (!zoomOut) {93            zoomOut = document.createElement("a");94            zoomOut.href = "#zoomOut";95            zoomOut.appendChild(document.createTextNode(this.zoomOutText));96            zoomOut.className = "olControlZoomOut";97            el.appendChild(zoomOut);98        }99        OpenLayers.Element.addClass(zoomOut, "olButton");100        return {101            zoomIn: zoomIn, zoomOut: zoomOut102        };103    },104    105    /**106     * Method: onZoomClick107     * Called when zoomin/out link is clicked.108     */109    onZoomClick: function(evt) {110        var button = evt.buttonElement;111        if (button === this.zoomInLink) {112            this.map.zoomIn();113        } else if (button === this.zoomOutLink) {114            this.map.zoomOut();115        }116    },117    /** 118     * Method: destroy119     * Clean up.120     */121    destroy: function() {122        if (this.map) {123            this.map.events.unregister("buttonclick", this, this.onZoomClick);124        }125        delete this.zoomInLink;126        delete this.zoomOutLink;127        OpenLayers.Control.prototype.destroy.apply(this);128    },129    CLASS_NAME: "OpenLayers.Control.Zoom"...

Full Screen

Full Screen

Control.Zoom.js

Source:Control.Zoom.js Github

copy

Full Screen

...101		this.addControl(this.zoomControl);102	}103});104// @namespace Control.Zoom105// @factory L.control.zoom(options: Control.Zoom options)106// Creates a zoom control107L.control.zoom = function (options) {108	return new L.Control.Zoom(options);...

Full Screen

Full Screen

Zoom.js.uncompressed.js

Source:Zoom.js.uncompressed.js Github

copy

Full Screen

1define("dojox/drawing/plugins/tools/Zoom", ["dojo/_base/lang", "../../util/oo", "../_Plugin", "../../manager/_registry"],2function(lang, oo, Plugin, registry){3	// zoomInc: Float4	//		The amount of zoom that will occur upon each click.5	var zoomInc = Math.pow(2.0,0.25),6	// maxZoom: Number7	//		The maximum the canvas can be zoomed in. 10 = 1000%8	maxZoom = 10,9	// minZoom: Float10	//		The most the canvas can be zoomed out. .1 = 10%11	minZoom = 0.1,12	// zoomFactor: [readonly] Float13	//		The current zoom amount14	zoomFactor = 1, 15	dt;16	17	if(!lang.getObject('dojox.drawing.plugins.tools')){18		lang.setObject('dojox.drawing.plugins.tools', {});19	}20	dt = dojox.drawing.plugins.tools;21	22	dt.ZoomIn = oo.declare(23		// summary:24		Plugin,25		function(options){26			27		},28		{29			type:"dojox.drawing.plugins.tools.ZoomIn",30			onZoomIn: function(){31				// summary:32				//		Handles zoom in.33				zoomFactor *= zoomInc;34				zoomFactor = Math.min(zoomFactor, maxZoom);35				this.canvas.setZoom(zoomFactor);36				this.mouse.setZoom(zoomFactor);37			},38			onClick: function(){39				this.onZoomIn();40			}41		}42	);43	44	dt.Zoom100 = oo.declare(45		// summary:46		Plugin,47		function(options){48			49		},50		{51			type:"dojox.drawing.plugins.tools.Zoom100",52			onZoom100: function(){53				// summary:54				//		Zooms to 100%55				zoomFactor = 1;56				this.canvas.setZoom(zoomFactor);57				this.mouse.setZoom(zoomFactor);58			},59			onClick: function(){60				this.onZoom100();61			}62		}63	);64	65	dt.ZoomOut = oo.declare(66		// summary:67		Plugin,68		function(options){69			70		},71		{72			type:"dojox.drawing.plugins.tools.ZoomOut",73			onZoomOut: function(){74				// summary:75				//		Handles zoom out.76				zoomFactor /= zoomInc;77				zoomFactor = Math.max(zoomFactor, minZoom);78				this.canvas.setZoom(zoomFactor);79				this.mouse.setZoom(zoomFactor);80			},81			onClick: function(){82				this.onZoomOut();83			}84		}85	);86	87	dt.ZoomIn.setup = {88		name:"dojox.drawing.plugins.tools.ZoomIn",89		tooltip:"Zoom In"90	};91	registry.register(dt.ZoomIn.setup, "plugin");92	93	dt.Zoom100.setup = {94		name:"dojox.drawing.plugins.tools.Zoom100",95		tooltip:"Zoom to 100%"96	};97	registry.register(dt.Zoom100.setup, "plugin");98	99	dt.ZoomOut.setup = {100		name:"dojox.drawing.plugins.tools.ZoomOut",101		tooltip:"Zoom In"102	};103	registry.register(dt.ZoomOut.setup, "plugin");104	return dt;...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2var assert = require('assert');3var desired = {4};5var browser = wd.promiseChainRemote("localhost", 4723);6  .init(desired)7  .sleep(10000)8  .execute("mobile: pinchOpen", [{ scale: 2, velocity: 1 }])9  .sleep(10000)10  .execute("mobile: pinchClose", [{ scale: 2, velocity: 1 }])11  .sleep(10000)12  .quit();13Your name to display (optional):14Your name to display (optional):15var wd = require('wd');16var assert = require('assert');17var desired = {18};19var browser = wd.promiseChainRemote("localhost", 4723);20  .init(desired)21  .sleep(10000)22  .execute("mobile: pinchOpen", [{ scale: 2, velocity: 1 }])23  .sleep(10000)24  .execute("mobile: pinchClose", [{ scale: 2, velocity: 1 }])25  .sleep(10000)26  .quit();27Your name to display (optional):

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd'),2    assert = require('assert'),3    serverConfigs = require('./helpers/appium-servers');4var desired = {5};6var driver = wd.promiseChainRemote(serverConfigs.local);7  .init(desired)8  .then(function() { return driver.setImplicitWaitTimeout(5000); })9  .then(function() { return driver.elementById("com.example.myapp:id/myButton"); })10  .then(function(el) { return el.click(); })11  .then(function() { return driver.elementById("com.example.myapp:id/myEditText"); })12  .then(function(el) { return el.sendKeys("Hello World"); })13  .then(function() { return driver.elementById("com.example.myapp:id/myButton"); })14  .then(function(el) { return el.click(); })15  .then(function() { return driver.elementById("com.example.myapp:id/myTextView"); })16  .then(function(el) { return el.text(); })17  .then(function(txt) { assert.equal(txt, "Hello World"); })18  .fin(function() { return driver.quit(); })19  .done();20var wd = require('wd'),21    assert = require('assert'),22    serverConfigs = require('./helpers/appium-servers');23var desired = {24};25var driver = wd.promiseChainRemote(serverConfigs.local);26  .init(desired)27  .then(function() { return driver.setImplicitWaitTimeout(5000); })28  .then(function() { return driver.elementById("com.example.myapp:id/myButton"); })29  .then(function(el) { return el

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2var assert = require('assert');3var desired = {4};5var browser = wd.promiseChainRemote("localhost", 4723);6  .init(desired)7  .sleep(10000)8  .elementByClassName("android.widget.EditText").sendKeys("Appium")9  .elementByClassName("android.widget.ImageButton").click()10  .sleep(10000)11  .elementById("com.android.chrome:id/url_bar").text().then(function(text) {12    assert.ok(text.indexOf("Appium") !== -1);13  })14  .elementById("com.android.chrome:id/url_bar").sendKeys(wd.SPECIAL_KEYS["Enter"])15  .sleep(10000)16  .elementById("com.android.chrome:id/url_bar").text().then(function(text) {17    assert.ok(text.indexOf("Appium") !== -1);18  })19  .sleep(10000)20  .zoom({element: null, x: 0, y: 0, scale: 2, velocity: 1})21  .sleep(10000)22  .quit();23info: --> POST /wd/hub/session/8c0b9f9c-5b5f-4bfb-9c0b-9c5b5f2bfb8b/touch/perform {"actions":[{"action":"press","options":{"x":0,"y":0}},{"action":"moveTo","options":{"x":0,"y":0}},{"action":"release","options":{}}]}

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.zoom({x: 200, y: 200, duration: 5000});2driver.pinch({x: 200, y: 200, duration: 5000});3driver.swipe({startX: 200, startY: 200, endX: 400, endY: 400, duration: 5000});4driver.dragAndDrop({startX: 200, startY: 200, endX: 400, endY: 400});5driver.dragAndDropBy({startX: 200, startY: 200, endX: 400, endY: 400});6driver.rotate({x: 200, y: 200, duration: 5000, radius: 100, rotation: 90, touchCount: 2});7driver.touchAction({action: 'press', x: 200, y: 200, duration: 5000});8driver.performTouch({action: 'press', x: 200, y: 200, duration: 5000});9driver.performMultiAction({action: 'press', x: 200, y: 200, duration: 5000});10driver.performGesture({action: 'press', x: 200, y: 200, duration: 5000});11driver.updateSettings({action: 'press', x: 200, y: 200, duration: 5000});12driver.logEvent({action: 'press', x: 200, y: 200, duration:

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Appium automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful