PageSourceSearch

https://www.3dinfinity.be/wp-content/plugins/3dprint/includes/ext/mb.extruder/mbExtruder.js?ver=4.2.7.2

js 3dinfinity.be collected 2026-10-08 02:03:30 UTC 20,689 bytes, 488 lines download raw bytes

1/*
2 * ******************************************************************************
3 *  jquery.mb.components
4 *  file: mbExtruder.js
5 *
6 *  Copyright (c) 2001-2014. Matteo Bicocchi (Pupunzi);
7 *  Open lab srl, Firenze - Italy
8 *  email: [email protected]
9 *  site: 	http://pupunzi.com
10 *  blog:	http://pupunzi.open-lab.com
11 * 	http://open-lab.com
12 *
13 *  Licences: MIT, GPL
14 *  http://www.opensource.org/licenses/mit-license.php
15 *  http://www.gnu.org/licenses/gpl.html
16 *
17 *  last modified: 08/05/14 20.00
18 *  *****************************************************************************
19 */
20
21/*Browser detection patch*/
22var nAgt=navigator.userAgent;if(!jQuery.browser){jQuery.browser={},jQuery.browser.mozilla=!1,jQuery.browser.webkit=!1,jQuery.browser.opera=!1,jQuery.browser.safari=!1,jQuery.browser.chrome=!1,jQuery.browser.androidStock=!1,jQuery.browser.msie=!1,jQuery.browser.ua=nAgt,jQuery.browser.name=navigator.appName,jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion),jQuery.browser.majorVersion=parseInt(navigator.appVersion,10);var nameOffset,verOffset,ix;if(-1!=(verOffset=nAgt.indexOf("Opera")))jQuery.browser.opera=!0,jQuery.browser.name="Opera",jQuery.browser.fullVersion=nAgt.substring(verOffset+6),-1!=(verOffset=nAgt.indexOf("Version"))&&(jQuery.browser.fullVersion=nAgt.substring(verOffset+8));else if(-1!=(verOffset=nAgt.indexOf("OPR")))jQuery.browser.opera=!0,jQuery.browser.name="Opera",jQuery.browser.fullVersion=nAgt.substring(verOffset+4);else if(-1!=(verOffset=nAgt.indexOf("MSIE")))jQuery.browser.msie=!0,jQuery.browser.name="Microsoft Internet Explorer",jQuery.browser.fullVersion=nAgt.substring(verOffset+5);else if(-1!=nAgt.indexOf("Trident")||-1!=nAgt.indexOf("Edge")){jQuery.browser.msie=!0,jQuery.browser.name="Microsoft Internet Explorer";var start=nAgt.indexOf("rv:")+3,end=start+4;jQuery.browser.fullVersion=nAgt.substring(start,end)}else-1!=(verOffset=nAgt.indexOf("Chrome"))?(jQuery.browser.webkit=!0,jQuery.browser.chrome=!0,jQuery.browser.name="Chrome",jQuery.browser.fullVersion=nAgt.substring(verOffset+7)):nAgt.indexOf("mozilla/5.0")>-1&&nAgt.indexOf("android ")>-1&&nAgt.indexOf("applewebkit")>-1&&!(nAgt.indexOf("chrome")>-1)?(verOffset=nAgt.indexOf("Chrome"),jQuery.browser.webkit=!0,jQuery.browser.androidStock=!0,jQuery.browser.name="androidStock",jQuery.browser.fullVersion=nAgt.substring(verOffset+7)):-1!=(verOffset=nAgt.indexOf("Safari"))?(jQuery.browser.webkit=!0,jQuery.browser.safari=!0,jQuery.browser.name="Safari",jQuery.browser.fullVersion=nAgt.substring(verOffset+7),-1!=(verOffset=nAgt.indexOf("Version"))&&(jQuery.browser.fullVersion=nAgt.substring(verOffset+8))):-1!=(verOffset=nAgt.indexOf("AppleWebkit"))?(jQuery.browser.webkit=!0,jQuery.browser.safari=!0,jQuery.browser.name="Safari",jQuery.browser.fullVersion=nAgt.substring(verOffset+7),-1!=(verOffset=nAgt.indexOf("Version"))&&(jQuery.browser.fullVersion=nAgt.substring(verOffset+8))):-1!=(verOffset=nAgt.indexOf("Firefox"))?(jQuery.browser.mozilla=!0,jQuery.browser.name="Firefox",jQuery.browser.fullVersion=nAgt.substring(verOffset+8)):(nameOffset=nAgt.lastIndexOf(" ")+1)<(verOffset=nAgt.lastIndexOf("/"))&&(jQuery.browser.name=nAgt.substring(nameOffset,verOffset),jQuery.browser.fullVersion=nAgt.substring(verOffset+1),jQuery.browser.name.toLowerCase()==jQuery.browser.name.toUpperCase()&&(jQuery.browser.name=navigator.appName));-1!=(ix=jQuery.browser.fullVersion.indexOf(";"))&&(jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0,ix)),-1!=(ix=jQuery.browser.fullVersion.indexOf(" "))&&(jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0,ix)),jQuery.browser.majorVersion=parseInt(""+jQuery.browser.fullVersion,10),isNaN(jQuery.browser.majorVersion)&&(jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion),jQuery.browser.majorVersion=parseInt(navigator.appVersion,10)),jQuery.browser.version=jQuery.browser.majorVersion}jQuery.browser.android=/Android/i.test(nAgt),jQuery.browser.blackberry=/BlackBerry|BB|PlayBook/i.test(nAgt),jQuery.browser.ios=/iPhone|iPad|iPod|webOS/i.test(nAgt),jQuery.browser.operaMobile=/Opera Mini/i.test(nAgt),jQuery.browser.windowsMobile=/IEMobile|Windows Phone/i.test(nAgt),jQuery.browser.kindle=/Kindle|Silk/i.test(nAgt),jQuery.browser.mobile=jQuery.browser.android||jQuery.browser.blackberry||jQuery.browser.ios||jQuery.browser.windowsMobile||jQuery.browser.operaMobile||jQuery.browser.kindle,jQuery.isMobile=jQuery.browser.mobile,jQuery.isTablet=jQuery.browser.mobile&&jQuery(window).width()>765,jQuery.isAndroidDefault=jQuery.browser.android&&!/chrome/i.test(nAgt);
23/*
24 * Metadata - jQuery plugin for parsing metadata from elements
25 * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan
26 * Dual licensed under the MIT and GPL licenses:
27 *   http://www.opensource.org/licenses/mit-license.php
28 *   http://www.gnu.org/licenses/gpl.html
29 */
30
31(function(c){c.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(b,c){this.defaults.type=b;this.defaults.name=c},get:function(b,f){var d=c.extend({},this.defaults,f);d.single.length||(d.single="metadata");var a=c.data(b,d.single);if(a)return a;a="{}";if("class"==d.type){var e=d.cre.exec(b.className);e&&(a=e[1])}else if("elem"==d.type){if(!b.getElementsByTagName)return;e=b.getElementsByTagName(d.name);e.length&&(a=c.trim(e[0].innerHTML))}else void 0!= b.getAttribute&&(e=b.getAttribute(d.name))&&(a=e);0>a.indexOf("{")&&(a="{"+a+"}");a=eval("("+a+")");c.data(b,d.single,a);return a}}});c.fn.metadata=function(b){return c.metadata.get(this[0],b)}})(jQuery);
32
33/***************************************************************************************/
34
35
36(function($) {
37	document.extruder=new Object();
38	document.extruder.left = 0;
39	document.extruder.top = 0;
40	document.extruder.bottom = 0;
41	document.extruder.right = 0;
42	document.extruder.idx=0;
43	var isIE=$.browser.msie;
44
45	$.mbExtruder= {
46		author:"Matteo Bicocchi",
47		version:"2.5.5",
48		defaults:{
49			width:350,
50			positionFixed:true,
51			sensibility:800,
52			position:"top",
53			accordionPanels:true,
54			top:"auto",
55			extruderOpacity:1,
56			flapMargin:35,
57			textOrientation:"bt", // or "tb" (top-bottom or bottom-top)
58			onExtOpen:function(){},
59			onExtContentLoad:function(){},
60			onExtClose:function(){},
61			hidePanelsOnClose:true,
62			closeOnClick:true,
63			closeOnExternalClick:true,
64			autoCloseTime:0,
65			autoOpenTime:0,
66			slideTimer:300
67		},
68
69		buildMbExtruder: function(options){
70			return this.each (function (){
71				this.options = {};
72				$.extend (this.options, $.mbExtruder.defaults);
73				$.extend (this.options, options);
74
75				this.idx=document.extruder.idx;
76				document.extruder.idx++;
77				var extruder,extruderContent,wrapper,extruderStyle,wrapperStyle,txt,closeTimer,openTimer;
78				extruder= $(this);
79				extruderContent=extruder.html();
80
81				extruder.css("zIndex",100);
82				var isVertical = this.options.position=="left" || this.options.position=="right";
83				var extW= isVertical?1: this.options.width;
84				var c= $("<div/>").addClass("extruder-content").css({overflow:"hidden", width:extW});
85				c.append(extruderContent);
86				extruder.html(c);
87
88				var position=this.options.positionFixed?"fixed":"absolute";
89				extruder.addClass("extruder");
90				extruder.addClass(this.options.position);
91				var isHorizontal = this.options.position=="top" || this.options.position=="bottom";
92				extruderStyle =
93								this.options.position=="top" ?
94				{position:position,top:0,left:"50%",marginLeft:-this.options.width/2,width:this.options.width}:
95								this.options.position=="bottom" ?
96				{position:position,bottom:0,left:"50%",marginLeft:-this.options.width/2,width:this.options.width}:
97								this.options.position=="left" ?
98				{position:position,top:0,left:0,width:1}:
99				{position:position,top:0,right:0,width:1};
100				extruder.css(extruderStyle);
101				if(!isIE) extruder.css({opacity:this.options.extruderOpacity});
102				extruder.wrapInner("<div class='ext_wrapper'></div>");
103				wrapper= extruder.find(".ext_wrapper");
104
105				wrapperStyle={position:"absolute", width:isVertical?1:this.options.width};
106				wrapper.css(wrapperStyle);
107
108				if (isHorizontal){
109					this.options.position=="top"? document.extruder.top++ : document.extruder.bottom++;
110					if (document.extruder.top >1 || document.extruder.bottom>1){
111						alert("more than 1 mb.extruder on top or bottom is not supported jet... hope soon!");
112						return;
113					}
114				}
115
116				if ($.metadata){
117					$.metadata.setType("class");
118					if (extruder.metadata().title) extruder.attr("extTitle",extruder.metadata().title);
119					if (extruder.metadata().url) extruder.attr("extUrl",extruder.metadata().url);
120					if (extruder.metadata().data) extruder.attr("extData",extruder.metadata().data);
121				}
122
123				var flapFooter=$("<div class='footer'/>");
124				var flap=$("<div class='flap'><span class='flapLabel'/></div>");
125				if (document.extruder.bottom){
126					wrapper.prepend(flapFooter);
127					wrapper.prepend(flap);
128				}else{
129					wrapper.append(flapFooter);
130					wrapper.append(flap);
131				}
132
133				txt=extruder.attr("extTitle")?extruder.attr("extTitle"): "";
134				var flapLabel = extruder.find(".flapLabel");
135				flapLabel.text(txt);
136				if(isVertical){
137					flapLabel.html(txt).css({whiteSpace:"noWrap"});
138					var orientation= this.options.textOrientation == "tb";
139					var labelH=extruder.find('.flapLabel').getFlipTextDim()[1];
140					extruder.find('.flapLabel').mbFlipText(orientation);
141				}else{
142					flapLabel.html(txt).css({whiteSpace:"noWrap"});
143				}
144
145				if (extruder.attr("extUrl")){
146					extruder.setMbExtruderContent({
147						url:extruder.attr("extUrl"),
148						data:extruder.attr("extData"),
149						callback: function(){
150							if (extruder.get(0).options.onExtContentLoad) extruder.get(0).options.onExtContentLoad();
151						}
152					})
153				}else{
154					var container=$("<div>").addClass("text").css({width:extruder.get(0).options.width-20, overflowY:"auto"});
155					c.wrapInner(container);
156					extruder.setExtruderVoicesAction();
157				}
158
159				flap.on("click",function(){
160					if (!extruder.attr("isOpened")){
161						extruder.openMbExtruder();
162					}else{
163						extruder.closeMbExtruder();
164						extruder.removeAttr("isOpened");
165					}
166				}).on("mouseenter",function(){
167					if(extruder.get(0).options.autoOpenTime>0){
168						openTimer=setTimeout(function(){
169							extruder.openMbExtruder();
170							$(document).one("click.extruder"+extruder.get(0).idx,function(){extruder.closeMbExtruder();});
171						},extruder.get(0).options.autoOpenTime);
172					}
173				}).on("mouseleave",function(){
174					clearTimeout(openTimer);
175				});
176
177				c.on("mouseleave", function(e){
178					if(extruder.get(0).options.closeOnExternalClick){
179
180						//Chrome bug: FORMELEMENT fire mouseleave event.
181						if(!$(e.target).parents().is(".text") && !$(e.target).is("select"))
182							$(document).one("click.extruder"+extruder.get(0).idx,function(){extruder.closeMbExtruder();});
183					}
184					closeTimer=setTimeout(function(){
185
186						if(extruder.get(0).options.autoCloseTime > 0){
187							extruder.closeMbExtruder();
188						}
189					},extruder.get(0).options.autoCloseTime);
190				}).on("mouseenter", function(){
191					clearTimeout(closeTimer);
192					$(document).off("click.extruder"+extruder.get(0).idx);
193				});
194
195				if (isVertical){
196					c.css({ height:"100%"});
197					if(this.options.top=="auto") {
198						flap.css({top:100+(this.options.position=="left"?document.extruder.left:document.extruder.right)});
199						this.options.position=="left"?document.extruder.left+=labelH+this.options.flapMargin:document.extruder.right+= labelH+this.options.flapMargin;
200					}else{
201						flap.css({top:this.options.top});
202					}
203					var clicDiv=$("<div/>").css({position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"transparent"});
204					flap.append(clicDiv);
205				}
206
207				this.originalWidth = this.options.width;
208
209				$(window).on("resize",function(){
210					extruder.adjustSize();
211				})
212			});
213		},
214
215		adjustSize:function(){
216
217			var $extruder = this;
218			var extruder = $extruder.get(0);
219
220			var isHorizontal = extruder.options.position=="top" || extruder.options.position=="bottom";
221
222			if(isHorizontal){
223
224				if( $(window).width() < extruder.options.width){
225					$extruder.css({width:$(window).width(), marginLeft:0, left:0});
226					$extruder.find(".ext_wrapper, .extruder-content, .extruder-container").css({width:"100%"});
227				}else{
228					$extruder.css({width:extruder.options.width, left:"50%",marginLeft:-extruder.options.width/2});
229					$extruder.find(".ext_wrapper, .extruder-content, .extruder-container").css({width:"100%"});
230				}
231
232			} else{
233
234				if( ($(window).width()-80) < extruder.originalWidth){
235					extruder.options.width = $(window).width()-80;
236				}else{
237					extruder.options.width = extruder.originalWidth;
238				}
239
240				if($extruder.attr("isOpened")){
241					$extruder.find('.extruder-content').css({width: extruder.options.width});
242					$extruder.find(".ext_wrapper, .extruder-content, .extruder-container").css({width:extruder.options.width});
243				}
244			}
245
246		},
247
248		setMbExtruderContent: function(options){
249			this.options = {
250				url:false,
251				data:"",
252				callback:function(){}
253			};
254			$.extend (this.options, options);
255			if (!this.options.url || this.options.url.length==0){
256				alert("internal error: no URL to call");
257				return;
258			}
259			var url=this.options.url;
260			var data=this.options.data;
261			var where=$(this), voice;
262			var cb= this.options.callback;
263			var container=$("<div>").addClass("extruder-container");
264			if (!($.browser.msie && $.browser.version<=7))
265				container.css({width:$(this).get(0).options.width});
266			where.find(".extruder-content").wrapInner(container);
267			$.ajax({
268				type: "GET",
269				url: url,
270				data: data,
271				async:true,
272				dataType:"html",
273				success: function(html){
274					where.find(".extruder-container").html(html);
275					voice=where.find(".voice");
276					voice.hover(function(){$(this).addClass("hover");},function(){$(this).removeClass("hover");});
277					where.setExtruderVoicesAction();
278					if (cb) {
279						setTimeout(function(){cb();},100);
280					}
281				}
282			});
283		},
284
285		openMbExtruder:function(c){
286			var extruder= $(this);
287			extruder.adjustSize();
288
289			extruder.attr("isOpened",true);
290			$(document).off("click.extruder"+extruder.get(0).idx);
291			var opt= extruder.get(0).options;
292			extruder.addClass("isOpened");
293			if(!isIE) extruder.css("opacity",1);
294			var position = opt.position;
295			extruder.mb_bringToFront();
296			if (position=="top" || position=="bottom"){
297				extruder.find('.extruder-content').slideDown( opt.slideTimer);
298				if(opt.onExtOpen) opt.onExtOpen();
299			}else{
300				if(!isIE) $(this).css("opacity",1);
301				extruder.find('.ext_wrapper').css({width:""});
302				extruder.find('.extruder-content').css({overflowX:"hidden", display:"block"});
303				extruder.find('.extruder-content').animate({ width: opt.width}, opt.slideTimer,function(){
304					extruder.find(".extruder-container").css({width: opt.width});
305				});
306				if(opt.onExtOpen) opt.onExtOpen();
307			}
308
309			if (c) {
310				setTimeout(function(){
311					$(document).one("click.extruder"+extruder.get(0).idx,function(){extruder.closeMbExtruder();});
312				},100);
313			}
314
315		},
316
317		closeMbExtruder:function(){
318			var extruder= $(this);
319			extruder.removeAttr("isOpened");
320			var opt= extruder.get(0).options;
321			extruder.removeClass("isOpened");
322			$(document).off("click.extruder"+extruder.get(0).idx);
323			if(!isIE) extruder.css("opacity",opt.extruderOpacity);
324			if(opt.hidePanelsOnClose) extruder.hidePanelsOnClose();
325			if (opt.position=="top" || opt.position=="bottom"){
326				extruder.find('.extruder-content').slideUp(opt.slideTimer);
327				if(opt.onExtClose) opt.onExtClose();
328			}else if (opt.position=="left" || opt.position=="right"){
329				extruder.find('.extruder-content').css({overflow:"hidden"});
330				extruder.find('.extruder-content').animate({ width: 1 }, opt.slideTimer,function(){
331					extruder.find('.ext_wrapper').css({width:1});
332					extruder.find('.extruder-content').css({overflow:"hidden",display:"none"});
333					if(opt.onExtClose) opt.onExtClose();
334				});
335			}
336		}
337	};
338
339	jQuery.fn.mb_bringToFront= function(){
340		var zi=10;
341		$('*').each(function() {
342			if($(this).css("position")=="absolute" ||$(this).css("position")=="fixed"){
343				var cur = parseInt($(this).css('zIndex'));
344				zi = cur > zi ? parseInt($(this).css('zIndex')) : zi;
345			}
346		});
347		$(this).css('zIndex',zi+=1);
348		return zi;
349	};
350
351	/*
352	 * EXTRUDER CONTENT
353	 */
354
355	$.fn.setExtruderVoicesAction=function(){
356		var extruder=$(this);
357		var opt=extruder.get(0).options;
358		var voices= $(this).find(".voice");
359		voices.each(function(){
360			var voice=$(this);
361			if ($.metadata){
362				$.metadata.setType("class");
363				if (voice.metadata().panel) voice.attr("panel",voice.metadata().panel);
364				if (voice.metadata().data) voice.attr("data",voice.metadata().data);
365				if (voice.metadata().disabled) voice.attr("setDisabled", voice.metadata().disabled);
366			}
367
368			if (voice.attr("setDisabled"))
369				voice.disableExtruderVoice();
370
371			if (voice.attr("panel") && voice.attr("panel")!="false"){
372				voice.append("<span class='settingsBtn'/>");
373				voice.find(".settingsBtn").css({opacity:.5});
374				voice.find(".settingsBtn").hover(
375						function(){
376							$(this).css({opacity:1});
377						},
378						function(){
379							$(this).not(".sel").css({opacity:.5});
380						}).click(function(){
381							if ($(this).parents().hasClass("sel")){
382								if(opt.accordionPanels)
383									extruder.hidePanelsOnClose();
384								else
385									$(this).closePanel();
386								return;
387							}
388
389							if(opt.accordionPanels){
390								extruder.find(".optionsPanel").slideUp(400,function(){$(this).remove();});
391								voices.removeClass("sel");
392								voices.find(".settingsBtn").removeClass("sel").css({opacity:.5});
393							}
394							var content=$("<div class='optionsPanel'></div>");
395							voice.after(content);
396							$.ajax({
397								type: "GET",
398								url: voice.attr("panel"),
399								data: voice.attr("data"),
400								async:true,
401								dataType:"html",
402								success: function(html){
403									var c= $(html);
404									content.html(c);
405									content.children().not(".text")
406											.addClass("panelVoice")
407											.click(function(){
408												if(opt.closeOnClick)
409													extruder.closeMbExtruder();
410											});
411									content.slideDown(400);
412								}
413							});
414							voice.addClass("sel");
415							voice.find(".settingsBtn").addClass("sel").css({opacity:1});
416						});
417			}
418
419			if (voice.find("a").length==0 && voice.attr("panel")){
420				voice.find(".label").not(".disabled").css("cursor","pointer").click(function(){
421					voice.find(".settingsBtn").click();
422				});
423			}
424
425			if ((!voice.attr("panel") || voice.attr("panel")=="false" ) && (!voice.attr("setDisabled") || voice.attr("setDisabled")!="true")){
426				voice.find(".label").click(function(){
427					extruder.hidePanelsOnClose();
428					if(opt.closeOnClick)
429						extruder.closeMbExtruder();
430				});
431			}
432		});
433	};
434
435	$.fn.disableExtruderVoice=function(){
436		var voice=$(this);
437		var label = voice.find(".label");
438		voice.removeClass("sel");
439		voice.next(".optionsPanel").slideUp(400,function(){$(this).remove();});
440		voice.attr("setDisabled",true);
441		label.css("opacity",.4);
442		voice.hover(function(){$(this).removeClass("hover");},function(){$(this).removeClass("hover");});
443		label.addClass("disabled").css("cursor","default");
444		voice.find(".settingsBtn").hide();
445		voice.on("click",function(event){
446			event.stopPropagation();
447			return false;
448		});
449	};
450
451	$.fn.enableExtruderVoice=function(){
452		var voice=$(this);
453		voice.attr("setDisabled",false);
454		voice.find(".label").css("opacity",1);
455		voice.find(".label").removeClass("disabled").css("cursor","pointer");
456		voice.off("click");
457		voice.find(".settingsBtn").show();
458	};
459
460	$.fn.hidePanelsOnClose=function(){
461		var voices= $(this).find(".voice");
462		$(this).find(".optionsPanel").slideUp(400,function(){$(this).remove();});
463		voices.removeClass("sel");
464		voices.find(".settingsBtn").removeClass("sel").css("opacity",.5);
465	};
466
467	$.fn.openPanel=function(){
468		var voice=$(this).hasClass("voice") ? $(this) : $(this).find(".voice");
469		voice.each(function(){
470			if($(this).hasClass("sel")) return;
471			$(this).find(".settingsBtn").click();
472		})
473	};
474
475	$.fn.closePanel=function(){
476		var voice=$(this).hasClass("voice") ? $(this) : $(this).parent(".voice");
477		voice.next(".optionsPanel").slideUp(400,function(){$(this).remove();});
478		voice.removeClass("sel");
479		$(this).removeClass("sel").css("opacity",.5);
480	};
481
482	$.fn.buildMbExtruder=$.mbExtruder.buildMbExtruder;
483	$.fn.setMbExtruderContent=$.mbExtruder.setMbExtruderContent;
484	$.fn.closeMbExtruder=$.mbExtruder.closeMbExtruder;
485	$.fn.openMbExtruder=$.mbExtruder.openMbExtruder;
486	$.fn.adjustSize=$.mbExtruder.adjustSize;
487
488})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.