wangyujuan 9 lat temu
rodzic
commit
00d1b331b7

+ 23 - 0
display-client/assets/display-client/biz/js/plugin/voice.js

@ -0,0 +1,23 @@
1
require(['jcl','wadeMobile'], function($,WadeMobile) {
2
	$('#voiceRecognize').on('touchstart', function() {
3
		WadeMobile.startListen();
4
	});
5

6
	$('#voiceRecognize').on('touchend', function() {
7
		WadeMobile.endListen(function(val){
8
			$('#voiceText').text(val);
9
		});
10
	});
11
	
12
	$('#voiceRecognize').on('touchcancel', function() {
13
		WadeMobile.endListen(function(val){
14
			$('#voiceText').text(val);
15
		});
16
	});
17
	
18

19
	$('#vocicSynthesize').on('touchend', function() {
20
		WadeMobile.voiceSpeak($('#synthesize-content').val());
21
	});
22

23
});

+ 41 - 0
display-client/assets/display-client/biz/js/ui/gesture.js

@ -0,0 +1,41 @@
1
require([ "jcl", "gesture" ], function($) {
2
	var sendMsg = function(val) {
3
		var value = $("#msg").html();
4
		value = value + val;
5
		$("#msg").html(value);
6
	}
7
	var clearMsg = function() {
8
		$("#msg").html("");
9
	}
10
	
11
	$("#gestureBlock").bind("swipe", function(e) {
12
		clearMsg();
13
		sendMsg("你刚才滑动了一下;");
14
	});
15
	
16
	$("#gestureBlock").bind("swipeLeft", function(e) {
17
		sendMsg("你刚才向左滑动了;");
18
	});
19
	$("#gestureBlock").bind("swipeRight", function(e) {
20
		sendMsg("你刚才向右滑动了;");
21
	});
22
	$("#gestureBlock").bind("swipeUp", function(e) {
23
		sendMsg("你刚才向上滑动了;");
24
	});
25
	$("#gestureBlock").bind("swipeDown", function(e) {
26
		sendMsg("你刚才向下滑动了;");
27
	});
28
	
29
	$("#gestureBlock").bind("tap", function(e) {
30
		clearMsg();
31
		sendMsg("你刚才单击了;");
32
	});
33
	$("#gestureBlock").bind("doubleTap", function(e) {
34
		clearMsg();
35
		sendMsg("你刚才双击了;");
36
	});
37
	$("#gestureBlock").bind("longTap", function(e) {
38
		clearMsg();
39
		sendMsg("你刚才长按了;");
40
	});
41
});

+ 111 - 0
display-client/assets/display-client/biz/js/ui/hammer.js

@ -0,0 +1,111 @@
1
require([ "domReady!", "mobile", "hammer", "jquery", "util" ], function(doc, Mobile, Hammer, jQuery) {
2
	new iScroll("content");
3
	
4
	// rotate
5
	var rotateHam = new Hammer($(".rotate")[0], {
6
		domEvents : true
7
	});
8
	var liveScale = 1;
9
	var currentRotation = 0;
10
	rotateHam.get('rotate').set({
11
		enable : true
12
	});
13
	jQuery(".rotate").on("rotate",function(e) {
14
		var rotation = currentRotation + Math.round(liveScale* e.originalEvent.gesture.rotation);
15
		jQuery(this).find("img").css("transform", "rotate( " + rotation + "deg)");
16
	});
17
	jQuery(".rotate").on("rotateend", function(e) {
18
		currentRotation += Math.round(e.originalEvent.gesture.rotation);
19
	});
20

21
	// pinch
22
    var pinchHam = new Hammer($(".pinch")[0], {
23
    	domEvents : true
24
	});
25
	var width = 1900;
26
	var height = 400;
27
	var left = 950;
28
	var top = 220;
29
	pinchHam.get('pinch').set({
30
		enable : true
31
	});
32
	jQuery(".pinch").on("pinch", function(e) {
33
		if (width * e.originalEvent.gesture.scale >= 300) {
34
			jQuery(this).find("img").css({
35
				width : width * e.originalEvent.gesture.scale,
36
				"margin-left" : -left * e.originalEvent.gesture.scale,
37
				height : height * e.originalEvent.gesture.scale,
38
				"margin-top" : -top * e.originalEvent.gesture.scale
39
			});
40
		}
41
		console.log(e.originalEvent.gesture.scale);
42
	});
43
	jQuery(".pinch").on("pinchend", function(e) {
44
		width = width * e.originalEvent.gesture.scale;
45
		height = height * e.originalEvent.gesture.scale;
46
		left = left * e.originalEvent.gesture.scale;
47
		top = top * e.originalEvent.gesture.scale;
48
		console.log(width);
49
	});
50
	
51
	// press
52
	new Hammer($( ".press")[0], {
53
      domEvents: true
54
    });
55
    $(".press").on("press", function(e) {
56
       $(".demo-overlay").toggle();
57
    });
58
    
59
    // pan
60
	var panImg, panMargin;
61
	new Hammer($(".pan")[0], {
62
		domEvents : true
63
	});
64
	jQuery(".pan").on("panstart", function(e) {
65
		panImg = $(".pan img");
66
		panMargin = parseInt(panImg.css("margin-left"), 10);
67
	});
68
	jQuery(".pan").on("pan", function(e) {
69
		console.log("pan");
70
		var delta = panMargin + e.originalEvent.gesture.deltaX;
71
		console.log(delta);
72
		if (delta >= -1750 && delta <= -150) {
73
			panImg.css({"margin-left" : panMargin + e.originalEvent.gesture.deltaX});
74
		}
75
	});
76
    
77
    // tap
78
	new Hammer($(".tap")[0], {
79
		domEvents : true
80
	});
81
	var tapCurrent = 0;
82
	var tapImgs = $(".demo-box.tap img");
83
	$(".tap").on("tap", function(e) {
84
		if (tapImgs[tapCurrent + 1]) {
85
			tapCurrent++;
86
		} else {
87
			tapCurrent = 0;
88
		}
89
		tapImgs.removeClass("active");
90
		tapImgs.eq(tapCurrent).addClass("active");
91
	});
92
	
93
	// swipe
94
	new Hammer($(".swipe")[0], {
95
		domEvents : true
96
	});
97
	var swipeCurrent = 0;
98
	var swipeImgs = $(".demo-box.swipe img");
99
	$(".swipe").on("swipeleft", function(e) {
100
		if (swipeImgs[swipeCurrent + 1]) {
101
			swipeImgs.removeClass("active");
102
			swipeImgs.eq(++swipeCurrent).addClass("active");
103
		}
104
	});
105
	$(".swipe").on("swiperight", function(e) {
106
		if (swipeImgs[swipeCurrent - 1]) {
107
			swipeImgs.removeClass("active");
108
			swipeImgs.eq(--swipeCurrent).addClass("active");
109
		}
110
	});
111
});

+ 342 - 0
display-client/assets/display-client/res/js/frame/gesture.js

@ -0,0 +1,342 @@
1
/*!
2
 * touch events handler
3
 * http://www.wadecn.com/
4
 * auth:xiedx@asiainfo.com
5
 * Copyright 2015, WADE
6
 */
7
define(["jcl"],function($) {
8
	"use strict";
9
	
10
	$.tapPressedClassName = "active";
11
	
12
	var toString = Object.prototype.toString,
13
		push = Array.prototype.push,
14
		splice = Array.prototype.slice,//TODO splice方法存在异议
15
		indexOf = Array.prototype.indexOf;
16
	var expando = "touchevents" + (new Date()).valueOf(), uuid = 0;
17

18
	//event
19
	var hasTouch     = "ontouchstart" in window;
20
	var START_EVENT  = hasTouch ? 'touchstart': 'mousedown',
21
		MOVE_EVENT   = hasTouch ? 'touchmove' : 'mousemove', 
22
		END_EVENT    = hasTouch ? 'touchend' : 'mouseup',
23
		CANCEL_EVENT = hasTouch ? 'touchcancel' : 'mouseup';
24

25
	var handleCache = {};
26

27
	function addHandle(type, elem, callback){
28
		if(!type || !elem)
29
			return;
30
			
31
		var id = elem[expando];
32
		if(!id){
33
			id = ++ uuid;
34
			elem[expando] = id;
35
		}
36
		var handles = handleCache[type][id];
37
		if(!handles){
38
			handles = handleCache[type][id] = [];
39
		}
40
		push.call(handles, callback);
41
	}
42
	
43
	function removeHandle(type, elem, callback){
44
		if(!type || !elem)
45
			return;
46
			
47
		var id = elem[expando];
48
		if(!id){
49
			id = ++ uuid;
50
			elem[expando] = id;
51
		}
52
		
53
		var handles = handleCache[type][id];
54
		if(handles){
55
			var idx = indexOf.call(handles, callback);
56
			//TODO splice方法存在异议
57
			if(idx > -1) splice.call(handles, callback);
58
		}
59
	}
60

61
	function getHandle(type, elem){
62
		if(!type || !elem)
63
			return;
64
			
65
		var id = elem[expando];
66
		if(id && handleCache[type][id]){
67
			return handleCache[type][id];
68
		}
69
		return [];
70
	}
71
	
72
	function triggerHandle(type, elem, e){
73
		if(!type || !elem)
74
			return;
75
			
76
		var handles = getHandle(type, elem);
77
		if(!handles) return;
78
		for(var i = 0; i < handles.length; i++){
79
			handles[i].call(elem, e);
80
		}
81
	}
82
	
83
	function parentIfText(node) {
84
        return "tagName" in node ? node : node.parentNode;
85
    }
86

87
	function parentByEventType(type, node){
88
		if(!type || !node || !node.nodeType) return;
89
		var i = 0;
90
		while((!("tagName" in node) || (!("tap" == type && "ontap" in node.attributes) && !getHandle(type, node).length)) && i < 10){
91
			if(!node.parentNode || 1 != node.parentNode.nodeType)
92
				break;
93
			node = node.parentNode;
94
			i ++;
95
		}
96
		
97
		if(("tap" == type && "ontap" in node.attributes) || getHandle(type, node).length)
98
			return node;
99
	}
100

101
    function preventAll(e) {
102
        e.preventDefault();
103
        e.stopPropagation();
104
    }
105
    
106
    function getTarget(e){
107
    	return hasTouch ? e.touches[0].target : e.target;
108
    }
109

110
	function getXY(e){
111
		var x = hasTouch ? e.touches[0].pageX : e.clientX;
112
		var y = hasTouch ? e.touches[0].pageY : e.clientY;
113
		return [x,y];
114
	}
115
	
116
	function formNode(el){
117
		return $.nodeName(el, "input") || $.nodeName(el, "textarea") || $.nodeName("select");
118
	}
119
	
120
	var isMoved = false;
121
	var touch = {};
122
	var pressMaxDist = 10; //触发pressed事件的最大距离
123
	var swipeMinDist = 30; //触发swipe事件最小距离
124
	var longTapDelay = 500; //长点击时间值
125
	var tapEl;
126
	var pressTimer, longTapTimer, touchTimer;
127
	
128
	function swipeDirection(x1, x2, y1, y2) {
129
        var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2);
130
        if (xDelta >= yDelta) {
131
            return (x1 - x2 > 0 ? "Left" : "Right");
132
        } else {
133
            return (y1 - y2 > 0 ? "Up" : "Down");
134
        }
135
    }
136
    
137
	function longTap() {
138
        if (touch.last && (Date.now() - touch.last >= longTapDelay)) {
139
        	triggerHandle("longTap", touch.el);
140
            //touch = {};
141
        }
142
    }
143
    
144
	function docMoveEvent(e){
145
		if (e.originalEvent)
146
		   e = e.originalEvent;
147
		
148
		var xy = getXY(e);
149
		touch.x2 = xy[0];
150
		touch.y2 = xy[1];
151

152
		if(tapEl && touch.x1 && touch.y1 && 
153
			xy && xy.length && xy[0] && (Math.abs(xy[0] - touch.x1) > pressMaxDist 
154
			|| Math.abs(xy[1] - touch.y1) > pressMaxDist)){
155
			
156
			isMoved = true;
157
			clearTimeout(longTapTimer);
158
			clearTimeout(pressTimer);
159
			
160
			if(tapEl){
161
				$(tapEl).removeClass($.tapPressedClassName);
162
				tapEl = null;
163
			}
164
		}
165
	}
166

167
	function tapEndEvent(e){
168
		if(isMoved) return;
169
		
170
		e.touch = touch;
171
				
172
		touchTimer = setTimeout((function(event){
173
			return function(){
174
				touchTimer = null;
175
				if(tapEl){
176
					$(tapEl).removeClass($.tapPressedClassName);
177
					var strFn = $(tapEl).attr("ontap");
178
					if(strFn){
179
						(new Function(strFn)).call(tapEl, event);
180
					}
181
					triggerHandle("tap", tapEl);
182
				}
183
				clearTimeout(pressTimer);
184
				tapEl = null;
185
			};
186
		})(e), 120);
187
	}
188

189
	$(document).ready(function(){
190
		
191
		$(document.body).bind(START_EVENT, function(e){
192
			if (e.originalEvent)
193
           		e = e.originalEvent;
194

195
			var target = getTarget(e);
196
			if(!target) return;
197

198
			$(document.body).bind(MOVE_EVENT, docMoveEvent);
199

200
			if(formNode(target)){
201
				preventAll(e);
202
				return;
203
			}
204
					
205
			var now = Date.now(), delta = now - (touch.last || now);
206
			var xy = getXY(e);
207
			if(xy && xy.length && xy[0]){
208
				
209
				pressTimer && clearTimeout(pressTimer);
210
				touchTimer && clearTimeout(touchTimer);
211
				
212
				touch.el = parentIfText(target);
213
				touch.x1 = xy[0];
214
				touch.y1 = xy[1];
215
				touch.x2 = touch.y2 = 0;
216
				touch.last = now;
217

218
				if (delta > 0 && delta <= 300)
219
                	touch.isDoubleTap = true;
220
                	
221
            	longTapTimer = setTimeout(longTap, longTapDelay);
222
            
223
				var findTapEl = parentByEventType("tap", target);
224
				if(findTapEl){
225
					pressTimer = setTimeout(function(){
226
						$(tapEl).addClass($.tapPressedClassName);
227
					}, 100);
228
					if(tapEl && findTapEl != tapEl){
229
						$(tapEl).removeClass($.tapPressedClassName);
230
					}
231
				}
232
				tapEl = findTapEl;
233

234
				//排除双击时触发单击
235
				if(tapEl && !touch.isDoubleTap){
236
					$(tapEl).bind(END_EVENT, tapEndEvent);
237
				}
238
			}
239
		});
240

241
		$(document.body).bind(END_EVENT, function(e){
242
			if (e.originalEvent)
243
                e = e.originalEvent;
244

245
			setTimeout(function(){
246
				isMoved = false;
247
			}, 100);
248

249
			$(document.body).unbind(MOVE_EVENT, docMoveEvent);
250

251
			if(!touch.el || !touch.el.nodeType)
252
				return;
253
			
254
			touch.originalEvent = e;
255

256
			if (touch.isDoubleTap) {
257
				triggerHandle("doubleTap", touch.el, e);
258
				touch = {};
259
			}else if( (touch.x2 > 0 || touch.y2 > 0)
260
					&& (Math.abs(touch.x1 - touch.x2) > swipeMinDist || Math.abs(touch.y1 - touch.y2) > swipeMinDist)){
261
				
262
				var direct = swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2);
263
				e.touch = touch;
264
				
265
				triggerHandle("swipe", parentByEventType("swipe", touch.el), e);
266
				triggerHandle("swipe" + direct,  parentByEventType("swipe" + direct, touch.el), e);	
267

268
				touch = {};
269
                //touch.x1 = touch.x2 = touch.y1 = touch.y2 = touch.last = 0;
270
			}else if(tapEl && "last" in touch){
271
				//清除timer
272
				(Date.now() - touch.last >= longTapDelay) ? clearTimeout(touchTimer) : clearTimeout(longTapTimer);
273
				
274
				if(tapEl){
275
					$(tapEl).unbind(END_EVENT, tapEndEvent);
276
				}
277
			}
278
		});
279
		
280
		if(hasTouch){
281
			$(document.body).bind("touchcancel", function(e){
282
				touch = {};
283
				clearTimeout(longTapTimer);
284
			});
285
		}
286
	});
287
	
288
	var bindFn = $.fn["bind"];
289
	var unbindFn = $.fn["unbind"];
290
	var events = ["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "tap", "doubleTap", "longTap"];
291
	
292
	$.fn["bind"] = function(type, data, fn){
293
		if(arguments.length === 2 || data === false){
294
			fn = data;
295
			data = undefined;
296
		}
297
		
298
		if(indexOf.call(events, type) > -1){
299
			if("tap" == type && typeof(fn) == "string"){
300
				this.attr("ontap", callback);
301
			}else if(toString.call(fn) === "[object Function]"){
302
				this.each(function(){
303
					addHandle(type, this, fn);
304
				});
305
			}
306
			return this;
307
		}
308
		
309
		return bindFn.call(this, type, data, fn);
310
	};
311

312
	$.fn["unbind"] = function(type, fn){
313
		if(indexOf.call(events, type) > -1){
314
			if("tap" == type && typeof(fn) == "string"){
315
				this.attr("ontap", null);
316
			}else if(toString.call(fn) === "[object Function]"){
317
				this.each(function(){
318
					removeHandle(type, this, fn);
319
				});
320
			}
321
			return this;
322
		}
323
		
324
		return unbindFn.call(this, type, fn);
325
	};
326

327
    $.each(events, function(i, m) {
328
    	handleCache[m] = {};
329
        $.fn[m] = function(callback) {
330
            return this.bind(m, callback);
331
        };
332
    });
333
    
334
	$(document).bind("drag", preventAll);
335
	$(document).bind("dragstart", preventAll);
336
	$(document).bind("dragenter", preventAll);
337
	$(document).bind("dragover", preventAll);
338
	$(document).bind("dragleave", preventAll);
339
	$(document).bind("dragend", preventAll);
340
	$(document).bind("drop", preventAll);
341
	
342
});

+ 1 - 0
display-client/assets/display-client/template/webapp/plugin/Voice.html

@ -0,0 +1 @@
1
z0yhP3FuRXBwicwDNSv4TYRo7UL+86lhnmOp0tWXZwmLjxOamPvm633wgIhFf1KRSE2zNzLcz43qbpscmHilYmk7wTVxbwr7UHu3xCI3QdoBs6QDvX25ox+APjgqyZROXOAerPyeaQvdoXN4U9qoYHEDuseJ2tiTJBcqOAI7sml/IpLM6l3erQqJNUFDy/KL4+xfa2hSz3QqHbcckXinNrGhap+iAa+XstXlpdxCK1x15m4TbvLfDNCDngomRYEJJ3g1cKdrJf6xvG5x0xcKNgTMXcMtai9OktRAPxgDC/Ifg/g77+pgdYkUWx1KBvOLIzdN5rcCjc+jNjNVqL4FFMHll/3GC4xSC7lngEhcp+80Q1otpjXlttcW6um4RLp/pXx7CTYaeSO76932mFclTTMdKUwOqq6roYEAHcrny+s/NrpUIEE4vc38g5MjH/VsUjqWqv4LDwJJp1iGK7FVr6aRJ8cUSCgD86bX6W3V/yrIE0u8xsYRnAQvUIeQc40NRz/kmT+zmuCKg0M6dRECOKpRPWOi/5VuP8p+d9zuvxp+n7zj+R9aOP31q2mvVdUOyCqLRltH4GEoacsvAju+mkKykkfYc6WaREWtS8351RShUbupTFVgArq9XVEvOe/cJa4jHrRykrX0SEcKOqiPLvjpwxZFMWO0uW/KJNbhUvhoSNS1ZKkyrmXQXXt4y2wFWS1r/Zst041OldYlHbCgioqDQzp1EQI4o9DhE08lM37+mXkd+LdHcv796gxJSMaoP3ptvCFnyNOmtQl2zTiNqzc5MDBkTT3YjefXEoyW9gYLQ3bEwwuEmS1YYjtlvqlNgNNSpx41RiZuGd/XCwUICY3n1xKMlvYGC0N2xMMLhJmlWWW0GIwdR9Xh88SSPCj6RXfxsSyKn8zIKotGW0fgYTTrzGOGrow3ULBzoXu8hzjGHljmwVdDB0WIXkY9fkjatZabIW+WKZPGHljmwVdDB1emH8a1vQOMSQT7OoUbicMV9RJuYXTCFeMwvKUvfwx8OHaXQecEaHmKg0M6dRECOFDese/5gLoiKrhw+jet5sMV9RJuYXTCFVMyLFU9qRryKOKR6ctI/DLtriaX5HdYS18S/EHoCswfPS+b2xVkBESFMDVCu75OSX6fvOP5H1o4SYcqqntiB5uxElN7P6ujVJOrcYIP4dK2XbcFiphUAUQV9RJuYXTCFeMwvKUvfwx8XyOZ+qZS6dxxTtpTrDPtnjxk5yBiCKRzm+GCSD5xSf3Tynp8/0dSRbJ85gC2BaG6ra887JuCOqdtLoZUkHsswsgqi0ZbR+BhWsF5ClwrSik8fRLNMDuMjg9kRX0rRS4b4Qpg8lpsOhlfneN90W4p/j0vm9sVZARERNZtO1bgTybiiCE/tHsjp6e911XFF0kKsnzmALYFobrJwyvWRGKvfa5Jiw808ZjXGSWqhZdUNpqnvddVxRdJCrJ85gC2BaG6ZMBhBA2eX1tLBc+93RqtorKsvu81qoxhz/WeUvH3eXgLQ3bEwwuEmXrOZ8060NqzLKPHCyJ2+TqKg0M6dRECOABF29LV7hkJAoOMBB/rOhNGE4h1BgFWU0gZTdb/iJxAvJh2Gfl8TQXNNAKVxzSWUeW8VkEKUa2oznZqFnecgbBdefjiL88vEKbKptsVg+87KlpKgoBXUaaXEXwLrvDwIm0iTxxjJitxqTq7bmkUcOFfI5n6plLp3CHvL2D2621/snzmALYFobr278RZDAWcFNgQc4OnLMje4YAr8xV6i2GrpO8UfJl1IAFUgPwKAkpBC57GHZv+TRRLKfVdySNz7F8S/EHoCswfwTkWIYHfipHDsboGcPEWam3+e8o2vfLLOQ5zb1OImDnnVgP0NYlhN4KlAC5/tIaI

+ 1 - 0
display-client/assets/display-client/template/webapp/ui/Gesture.html

@ -0,0 +1 @@
1
z0yhP3FuRXBwicwDNSv4TYRo7UL+86lhnmOp0tWXZwmLjxOamPvm6/I9ZpLmnVaCPlKrAsmjXFfD5qNb6rfDmlSg9qadrLAro+IGlp6atw5lzD3a0VD4OHrXurhNkpgAGjnPViT3b92GnAHsMi4LHSHviUxRJ7/FPAqMuBHM/fkqHU6dh30OyfYoRFzL52GcQoZ4jXmQkHew6gJhmVGvvgrN8CNCkAYF9ckNbhhtxl7Q/FhOPx4yCjQ6GRHm2Su6j4sF1DH0hvsa0SeCL7U2WF3sg8aUbihR47gmQoMtBqZEQmLJ5XPVp/M1gEVcBjc4Fdof6ENT9dKCFJQgSlASIIA3Mnu0rEFzOE3U3f3CAPYiAeqUz41tifBpopIew5h+o2fAZNcnzt3Tjz0G85sx22FbKbXq+Um5AW8UvF5cjfu0YuPkJVE/OdtUxDoH+AKVFMhLzQgETV1tuVLOYxQ8IScJMXjaOK4E3lMked3taaS+Bw2cx++Q17eZDpSRjlnUVtr8vNuxaE886Zf5wBy2sQcIorYliYWY+pgk/QX+sFneKVF3XPlN/4qDQzp1EQI4HIE2MODLsJ8C+xpnHKaNxAtDdsTDC4SZO0mk37kR9d9/83IiAKx1usa3gPj8s06LREWtS8351RSFQ3/xqyZgAgmK9rCVadmtYdIRvlZkw7+qS4UnV5gZLW3+e8o2vfLL68mSTZX8jkJSL271jEsm5hsvhm1Lhw+/x9p94ecje5JSMaQ7hnxnKWyLSB6J8NULc6ntAFbx0HSfSSwxy12vlpRMFt2Vl3L1nCoFU68nHrfT36GdPCR0fcfqBUOHxHhxX+Kn4JBTPXptm6idLWGiK5r0Wv836tcEbeJBX/X1bHszwc/pZDkxsAJo3UiIJ1JVp73XVcUXSQq/ng/J9BqhcL7d8y38C0v68EUg9VjPRS3B3gZeyYWeSoybvCrOKGRiZlHn2x9HDTL58g2sOmddaA0fRsgCYXqx9KnaktkFWP/tb3Qxu4549riyvpmvJIi8sZqRnh4+M67/E/SB6mlK/+kbQqEPO01fAIu84RRk4D/4Fpetp++04SaBnFSh/r0M3pSqV9EUSAZ5MK6x/lL6+aLK5GAbpfsed4vpsFPGo7v1YdGWunDWCHIT2N1Kt44c/qzlajJaHKY=

+ 1 - 0
display-client/assets/display-client/template/webapp/ui/Hammer.html

@ -0,0 +1 @@
1
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

+ 1 - 0
display-client/assets/voice/asr_license

@ -0,0 +1 @@
1
79e4327fac94b13223cb2ac9d4d64acb8e254ce322b643541b3a7585a90bda5722e313b61716f9f0e5eefee625e50a2bdcbd7b028c1f61527e7ee99754eff08ccce70d67199844611dc6f4bdace0405d7c3fd3d52e607ddd56774a83e2a33d1b9959d13c92abfe5b3cfc0cc8fb8491066ac5d779b1d0cc4147656291912e3eac54bafd3c9ebe2edf612bb536f28b9a771db519e0843155b388f69afa91be62472cf1005339868d5e1af244a137707aa588af1ba03d908a69320d449e38329dede1a0770e6a725a04d4190545b120a9902340c1255c73a6ec08ad731c3f601c4e2efbeccd660c53497009522a94566a14da63bdc6fab1e51e25a7fc6f403bbf39

BIN
display-client/assets/voice/bd_etts_speech_female.dat


BIN
display-client/assets/voice/bd_etts_speech_male.dat


BIN
display-client/assets/voice/bd_etts_text.dat


BIN
display-client/assets/voice/s_1


+ 1 - 0
display-client/assets/voice/tts_license

@ -0,0 +1 @@
1
73a61110313f32b2677093c5876bb52bf121ac777617cd4eeac5b0665038e26ef85e0da20ef5bc6be8c6dbaf900b97e0c2d95a78c4f58bcba989d6f2db5f7a8643ae8e4436855cdac36fc2c26298f75287e71f2773dd880b388f6786eaf9be057b1ced69bbb32de97672d65e39776efaf7da4ac5b1ccbde1e0fe6d8a4195ef7554bafd3c9ebe2edf612bb536f28b9a771db519e0843155b388f69afa91be62472cf1005339868d5e1af244a137707aa588af1ba03d908a69320d449e38329dede1a0770e6a725a04d4190545b120a9902340c1255c73a6ec08ad731c3f601c4e2efbeccd660c53497009522a94566a14da63bdc6fab1e51e25a7fc6f403bbf39

+ 23 - 0
display-server/web/biz/js/plugin/voice.js

@ -0,0 +1,23 @@
1
require(['jcl','wadeMobile'], function($,WadeMobile) {
2
	$('#voiceRecognize').on('touchstart', function() {
3
		WadeMobile.startListen();
4
	});
5

6
	$('#voiceRecognize').on('touchend', function() {
7
		WadeMobile.endListen(function(val){
8
			$('#voiceText').text(val);
9
		});
10
	});
11
	
12
	$('#voiceRecognize').on('touchcancel', function() {
13
		WadeMobile.endListen(function(val){
14
			$('#voiceText').text(val);
15
		});
16
	});
17
	
18

19
	$('#vocicSynthesize').on('touchend', function() {
20
		WadeMobile.voiceSpeak($('#synthesize-content').val());
21
	});
22

23
});

+ 111 - 0
display-server/web/biz/js/ui/hammer.js

@ -0,0 +1,111 @@
1
require([ "domReady!", "mobile", "hammer", "jquery", "util" ], function(doc, Mobile, Hammer, jQuery) {
2
	new iScroll("content");
3
	
4
	// rotate
5
	var rotateHam = new Hammer($(".rotate")[0], {
6
		domEvents : true
7
	});
8
	var liveScale = 1;
9
	var currentRotation = 0;
10
	rotateHam.get('rotate').set({
11
		enable : true
12
	});
13
	jQuery(".rotate").on("rotate",function(e) {
14
		var rotation = currentRotation + Math.round(liveScale* e.originalEvent.gesture.rotation);
15
		jQuery(this).find("img").css("transform", "rotate( " + rotation + "deg)");
16
	});
17
	jQuery(".rotate").on("rotateend", function(e) {
18
		currentRotation += Math.round(e.originalEvent.gesture.rotation);
19
	});
20

21
	// pinch
22
    var pinchHam = new Hammer($(".pinch")[0], {
23
    	domEvents : true
24
	});
25
	var width = 1900;
26
	var height = 400;
27
	var left = 950;
28
	var top = 220;
29
	pinchHam.get('pinch').set({
30
		enable : true
31
	});
32
	jQuery(".pinch").on("pinch", function(e) {
33
		if (width * e.originalEvent.gesture.scale >= 300) {
34
			jQuery(this).find("img").css({
35
				width : width * e.originalEvent.gesture.scale,
36
				"margin-left" : -left * e.originalEvent.gesture.scale,
37
				height : height * e.originalEvent.gesture.scale,
38
				"margin-top" : -top * e.originalEvent.gesture.scale
39
			});
40
		}
41
		console.log(e.originalEvent.gesture.scale);
42
	});
43
	jQuery(".pinch").on("pinchend", function(e) {
44
		width = width * e.originalEvent.gesture.scale;
45
		height = height * e.originalEvent.gesture.scale;
46
		left = left * e.originalEvent.gesture.scale;
47
		top = top * e.originalEvent.gesture.scale;
48
		console.log(width);
49
	});
50
	
51
	// press
52
	new Hammer($( ".press")[0], {
53
      domEvents: true
54
    });
55
    $(".press").on("press", function(e) {
56
       $(".demo-overlay").toggle();
57
    });
58
    
59
    // pan
60
	var panImg, panMargin;
61
	new Hammer($(".pan")[0], {
62
		domEvents : true
63
	});
64
	jQuery(".pan").on("panstart", function(e) {
65
		panImg = $(".pan img");
66
		panMargin = parseInt(panImg.css("margin-left"), 10);
67
	});
68
	jQuery(".pan").on("pan", function(e) {
69
		console.log("pan");
70
		var delta = panMargin + e.originalEvent.gesture.deltaX;
71
		console.log(delta);
72
		if (delta >= -1750 && delta <= -150) {
73
			panImg.css({"margin-left" : panMargin + e.originalEvent.gesture.deltaX});
74
		}
75
	});
76
    
77
    // tap
78
	new Hammer($(".tap")[0], {
79
		domEvents : true
80
	});
81
	var tapCurrent = 0;
82
	var tapImgs = $(".demo-box.tap img");
83
	$(".tap").on("tap", function(e) {
84
		if (tapImgs[tapCurrent + 1]) {
85
			tapCurrent++;
86
		} else {
87
			tapCurrent = 0;
88
		}
89
		tapImgs.removeClass("active");
90
		tapImgs.eq(tapCurrent).addClass("active");
91
	});
92
	
93
	// swipe
94
	new Hammer($(".swipe")[0], {
95
		domEvents : true
96
	});
97
	var swipeCurrent = 0;
98
	var swipeImgs = $(".demo-box.swipe img");
99
	$(".swipe").on("swipeleft", function(e) {
100
		if (swipeImgs[swipeCurrent + 1]) {
101
			swipeImgs.removeClass("active");
102
			swipeImgs.eq(++swipeCurrent).addClass("active");
103
		}
104
	});
105
	$(".swipe").on("swiperight", function(e) {
106
		if (swipeImgs[swipeCurrent - 1]) {
107
			swipeImgs.removeClass("active");
108
			swipeImgs.eq(--swipeCurrent).addClass("active");
109
		}
110
	});
111
});

+ 64 - 0
display-server/web/template/webapp/plugin/Voice.html

@ -0,0 +1,64 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>语音</title>
7
	{%>template/common/Head.html%}
8
	<script type="text/javascript" src="biz/js/plugin/voice.js"></script>
9
<style>
10
.no-border {
11
	border: 0;
12
}
13
</style>
14
</head>
15
<body>
16
17
<div class="c_navBar">
18
	<div class="left">
19
		<div class="back">
20
			<span class="e_ico-back"></span>
21
			<span class="text">语音</span>
22
		</div>
23
	</div>
24
</div>
25
26
<div class="m_content m_content-nofooter" id="content" >
27
<div>
28
	<div class="c_title">语音识别</div>
29
	<div class="c_list">
30
		<ul>
31
			<li>
32
				<div class="content">
33
					<div class="main">
34
						<div class="title">语音识别</div>
35
						<div class="info">单击语音识别,录制一段语音</div>
36
					</div>
37
					<div class="fn fn-2" id="voiceRecognize">语音识别</div>
38
				</div>
39
			</li>
40
			<li ontap=";">
41
				<div class="content">
42
					<div class="main" id="voiceText">&nbsp;</div>
43
				</div>
44
			</li>
45
		</ul>
46
	</div>
47
	<div class="c_title">语音合成</div>
48
	<div class="c_list">
49
		<ul>
50
			<li>
51
				<div class="content">
52
					<div class="main">
53
						<input type="text" placeholder="请输入语音内容" id="synthesize-content" class="no-border">
54
					</div>
55
					<div class="fn fn-2" id="vocicSynthesize">语音合成</div>
56
				</div>
57
			</li>
58
		</ul>
59
	</div>
60
</div>
61
</div>
62
63
</body>
64
</html>

+ 191 - 0
display-server/web/template/webapp/ui/Hammer.html

@ -0,0 +1,191 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
<title>Hammer</title>
7
{%>template/common/Head.html%}
8
<script type="text/javascript" src="biz/js/ui/hammer.js"></script>
9
</head>
10
<style type="text/css">
11
.hammer-wrap {
12
	text-align: center;
13
	margin-top: 0.22rem;
14
}
15
.hammer-wrap .hammer-icon {
16
	width: 1rem;
17
}
18
.hammer-wrap h1 {
19
	margin-top: 0.22rem;
20
}
21
.hammer-wrap h2 {
22
	font-weight: normal;
23
    line-height: 1.4;
24
}
25
.demo-box-wrap {
26
  border: 1px solid #333;
27
  /* font-family: sans-serif; */
28
  background: #333;
29
  text-align: center;
30
  color: white;
31
  width: 302px;
32
  margin-left: auto;
33
  margin-right: auto;
34
  margin-bottom: 3em;
35
}
36
.demo-box-wrap .demo-box {
37
  width: 300px;
38
  height: 200px;
39
  overflow: hidden;
40
  position: relative;
41
}
42
.demo-box-wrap .demo-box > img {
43
  height: 400px;
44
  width: 1900px;
45
  position: absolute;
46
  margin-left: -950px;
47
  display: none;
48
  pointer-events: none;
49
  margin-top: -220px;
50
  left: 50%;
51
  top: 50%;
52
  max-width: none;
53
}
54
.demo-box-wrap h2 {
55
  pointer-events: none;
56
  color: white;
57
}
58
.demo-box-wrap .demo-box img.active {
59
  display: block;
60
}
61
.demo-overlay {
62
    position: absolute;
63
    top: 0;
64
    left: 0;
65
    right: 0;
66
    bottom: 0;
67
    background: rgba(70, 70, 70, 0.8);
68
    display: none;
69
}
70
.demo-overlay img {
71
    width: 50px;
72
    height: 50px;
73
    position: absolute;
74
    top: 50%;
75
    left: 50%;
76
    margin-left: -25px;
77
    margin-top: -25px;
78
}
79
</style>
80
<body>
81
<div class="c_navBar">
82
	<div class="left">
83
		<div class="back">
84
			<span class="e_ico-back"></span><span class="text">手势</span>
85
		</div>
86
	</div>
87
</div>
88

89
<div class="m_content" id="content">
90
<div>
91
	<div class="hammer-wrap">
92
		<img src="biz/img/plugin/hammer/tap.png" class="hammer-icon">
93
		<h1>Try it!</h1>
94
		<h2 class="desc">你可以尝试单点图片,实现图片的切换</h2>
95
		<div class="row">
96
			<div class="column large-4 medium-6 small-12">
97
				<div class="demo-box-wrap">
98
					<h2>单点</h2>
99
					<div class="demo-box tap" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
100
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
101
						<img src="biz/img/plugin/hammer/pano_2.jpg">
102
						<img src="biz/img/plugin/hammer/pano_3.jpg">
103
					</div>
104
				</div>
105
			</div>
106
		</div>
107
	</div>
108
	<div class="hammer-wrap">
109
		<img src="biz/img/plugin/hammer/press.png" class="hammer-icon">
110
		<h1>Try it!</h1>
111
		<h2 class="desc">您可以尝试按住图片,选中图片/取消选中</h2>
112
		<div class="row">
113
			<div class="column large-4 medium-6 small-12">
114
				<div class="demo-box-wrap">
115
				  	<h2>按住</h2>
116
					<div class="demo-box press" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
117
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
118
					 	<div class="demo-overlay">
119
							<img src="biz/img/plugin/hammer/circle-check.svg">
120
						</div>
121
					</div>
122
				</div>
123
			</div>
124
		</div>
125
	</div>
126
	<div class="hammer-wrap">
127
		<img src="biz/img/plugin/hammer/pan.png" class="hammer-icon">
128
		<h1>Try it!</h1>
129
		<h2 class="desc">您可以尝试平移图片,查看图片更多</h2>
130
		<div class="row">
131
			<div class="column large-4 medium-6 small-12">
132
				<div class="demo-box-wrap">
133
					<h2>平移</h2>
134
					<div class="demo-box pan" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
135
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
136
					</div>
137
				</div>
138
			</div>
139
		</div>
140
	</div>
141
	<div class="hammer-wrap">
142
		<img src="biz/img/plugin/hammer/swipe.png" class="hammer-icon">
143
		<h1>Try it!</h1>
144
		<h2 class="desc">您可以尝试左右滑动,实现图片的切换</h2>
145
		<div class="row">
146
			<div class="column large-4 medium-6 small-12">
147
				<div class="demo-box-wrap">
148
					<h2>滑动</h2>
149
					<div class="demo-box swipe" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
150
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
151
						<img src="biz/img/plugin/hammer/pano_2.jpg">
152
						<img src="biz/img/plugin/hammer/pano_3.jpg">
153
					</div>
154
				</div>
155
			</div>
156
		</div>
157
	</div>
158
	<div class="hammer-wrap">
159
		<img src="biz/img/plugin/hammer/rotate.png" class="hammer-icon">
160
		<h1>Try it!</h1>
161
		<h2 class="desc">您可以尝试旋转,实现图片的旋转</h2>
162
		<div class="row">
163
			<div class="column large-4 medium-6 small-12">
164
				<div class="demo-box-wrap">
165
					<h2>旋转</h2>
166
					<div class="demo-box rotate" style="touch-action: none; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
167
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg" style="transform: rotate(-2deg);">
168
					</div>
169
				</div>
170
			</div>
171
		</div>
172
	</div>
173
	<div class="hammer-wrap">
174
		<img src="biz/img/plugin/hammer/pinch.png" class="hammer-icon">
175
		<h1>Try it!</h1>
176
		<h2 class="desc">您可以尝试捏放,实现图片的放大/缩小</h2>
177
		<div class="row">
178
			<div class="column large-4 medium-6 small-12">
179
				<div class="demo-box-wrap">
180
					<h2>捏放</h2>
181
					<div class="demo-box pinch" style="touch-action: none; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
182
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg" style="width: 2269.85px; margin-left: -1134.93px; height: 477.864px; margin-top: -262.825px;">
183
					</div>
184
				</div>
185
			</div>
186
		</div>
187
	</div>
188
</div>
189
</div>
190
</body>
191
</html>