Browse Source

7.0.3 release

Gaudenz Alder 8 years ago
parent
commit
85b3981832

+ 8 - 0
ChangeLog

@@ -1,3 +1,11 @@
+07-AUG-2017: 7.0.3
+
+- Adds cropping for data URIs in edit image dialog
+- Uses mxGraph 3.7.5 beta 6
+- Adds filled edge shape in basic sidebar
+- Fixes possible NPE, undefined function in Lucidchart Import
+- Fixes error handling in PlantUML add-on
+
 06-AUG-2017: 7.0.2
 
 - Improvements to Gliffy import

+ 1 - 1
VERSION

@@ -1 +1 @@
-7.0.2
+7.0.3

File diff suppressed because it is too large
+ 14 - 14
etc/mxgraph/mxClient.js


+ 1 - 1
war/cache.manifest

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 08/06/2017 10:55 PM
+# 08/07/2017 04:41 PM
 
 app.html
 index.html?offline=1

File diff suppressed because it is too large
+ 99 - 90
war/js/app.min.js


File diff suppressed because it is too large
+ 28 - 27
war/js/atlas-viewer.min.js


File diff suppressed because it is too large
+ 304 - 289
war/js/atlas.min.js


+ 190 - 0
war/js/diagramly/Dialogs.js

@@ -3688,6 +3688,23 @@ var ImageDialog = function(editorUi, title, initialValue, fn, ignoreExisting, co
 		}
 	}
 
+	// Image cropping (experimental)
+	if (!!document.createElement('canvas').getContext && linkInput.value.substring(0, 11) == 'data:image/')
+	{
+		var cropBtn = mxUtils.button(mxResources.get('crop'), function()
+		{
+		    	var dlg = new CropImageDialog(editorUi, linkInput.value, function(image)
+		    	{
+		    		linkInput.value = image;
+		    	});
+		    	editorUi.showDialog(dlg.container, 200, 160, true, true);
+			dlg.init();
+		});
+		
+		cropBtn.className = 'geBtn';
+		btns.appendChild(cropBtn);
+	}
+	
 	if (typeof(google) != 'undefined' && typeof(google.picker) != 'undefined' && window.self === window.top)
 	{
 		var searchBtn = mxUtils.button(mxResources.get('search'), function()
@@ -6362,6 +6379,179 @@ var PluginsDialog = function(editorUi)
 	this.container = div;
 };
 
+var CropImageDialog = function(editorUi, image, fn) 
+{
+	var div = document.createElement('div');
+	
+	var table = document.createElement('table');
+	var tbody = document.createElement('tbody');
+	var row = document.createElement('tr');
+	var left = document.createElement('td');
+	var right = document.createElement('td');
+	table.style.paddingLeft = '6px';
+	
+	mxUtils.write(left, mxResources.get('left') + ':');
+	
+	var xInput = document.createElement('input');
+	xInput.setAttribute('type', 'text');
+	xInput.style.width = '100px';
+	xInput.value = '0';
+	
+	this.init = function()
+	{
+		xInput.focus();
+		xInput.select();
+	};
+
+	right.appendChild(xInput);
+
+	row.appendChild(left);
+	row.appendChild(right);
+	
+	tbody.appendChild(row);
+	
+	row = document.createElement('tr');
+	left = document.createElement('td');
+	right = document.createElement('td');
+	
+	mxUtils.write(left, mxResources.get('top') + ':');
+	
+	var yInput = document.createElement('input');
+	yInput.setAttribute('type', 'text');
+	yInput.style.width = '100px';
+	yInput.value = '0';
+
+	right.appendChild(yInput);
+
+	row.appendChild(left);
+	row.appendChild(right);
+	
+	tbody.appendChild(row);
+	
+	row = document.createElement('tr');
+	left = document.createElement('td');
+	right = document.createElement('td');
+	
+	mxUtils.write(left, mxResources.get('right') + ':');
+	
+	var wInput = document.createElement('input');
+	wInput.setAttribute('type', 'text');
+	wInput.style.width = '100px';
+	wInput.value = '0';
+
+	right.appendChild(wInput);
+
+	row.appendChild(left);
+	row.appendChild(right);
+	
+	tbody.appendChild(row);
+	
+	row = document.createElement('tr');
+	left = document.createElement('td');
+	right = document.createElement('td');
+	
+	mxUtils.write(left, mxResources.get('bottom') + ':');
+	
+	var hInput = document.createElement('input');
+	hInput.setAttribute('type', 'text');
+	hInput.style.width = '100px';
+	hInput.value = '0';
+
+	right.appendChild(hInput);
+
+	row.appendChild(left);
+	row.appendChild(right);
+	
+	tbody.appendChild(row);
+	
+	row = document.createElement('tr');
+	left = document.createElement('td');
+	right = document.createElement('td');
+	
+	mxUtils.write(left, mxResources.get('circle') + ':');
+	
+	row.appendChild(left);
+	
+	var circleInput = document.createElement('input');
+	circleInput.setAttribute('type', 'checkbox');
+
+	right.appendChild(circleInput);
+	row.appendChild(right);
+	
+	tbody.appendChild(row);
+	
+	table.appendChild(tbody);
+	div.appendChild(table);
+	
+	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	{
+		editorUi.hideDialog();
+	});
+	
+	var applyBtn = mxUtils.button(mxResources.get('apply'), function()
+	{
+		editorUi.hideDialog();
+		
+		var canvas = document.createElement('canvas');
+		var context = canvas.getContext('2d');
+		var imageObj = new Image();
+		
+		imageObj.onload = function()
+		{
+			var w = imageObj.width;
+			var h = imageObj.height;
+			
+			// draw cropped image
+			var sourceX = parseInt(xInput.value);
+			var sourceY = parseInt(yInput.value);
+			var sourceWidth = Math.max(1, w - sourceX - parseInt(wInput.value));
+			var sourceHeight = Math.max(1, h - sourceY - parseInt(hInput.value));
+			canvas.width = sourceWidth;
+			canvas.height = sourceHeight;
+			
+			if (circleInput.checked)
+			{
+				context.fillStyle = '#000000';
+				context.arc(sourceWidth / 2, sourceHeight / 2, Math.min(sourceWidth / 2,
+					sourceHeight / 2), 0, 2 * Math.PI);
+				context.fill();
+				context.globalCompositeOperation = 'source-in';
+			}
+			
+		    context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, sourceWidth, sourceHeight);
+			fn(canvas.toDataURL());
+		};
+		imageObj.src = image;
+	});
+
+	mxEvent.addListener(div, 'keypress', function(e)
+	{
+		if (e.keyCode == 13)
+		{
+			applyBtn.click();
+		}
+	});
+	
+	var buttons = document.createElement('div');
+	buttons.style.marginTop = '20px';
+	buttons.style.textAlign = 'right';
+
+	if (editorUi.editor.cancelFirst)
+	{
+		buttons.appendChild(cancelBtn);
+		buttons.appendChild(applyBtn);
+	}
+	else
+	{
+		buttons.appendChild(applyBtn);
+		buttons.appendChild(cancelBtn);
+	}
+
+	div.appendChild(buttons);
+
+	this.container = div;
+};
+
 var EditGeometryDialog = function(editorUi, vertices) 
 {
 	var graph = editorUi.editor.graph;

+ 15 - 2
war/js/diagramly/EditorUi.js

@@ -2256,8 +2256,8 @@
     EditorUi.prototype.showImageDialog = function(title, value, fn, ignoreExisting, convertDataUri)
 	{
 		// KNOWN: IE+FF don't return keyboard focus after image dialog (calling focus doesn't help)
-    	var dlg = new ImageDialog(this, title, value, fn, ignoreExisting, convertDataUri);
-		this.showDialog(dlg.container, (Graph.fileSupport) ? 420 : 340, (Graph.fileSupport) ? 200 : 90, true, true);
+	    	var dlg = new ImageDialog(this, title, value, fn, ignoreExisting, convertDataUri);
+		this.showDialog(dlg.container, (Graph.fileSupport) ? 440 : 360, (Graph.fileSupport) ? 200 : 90, true, true);
 		dlg.init();
 	};
 
@@ -4971,6 +4971,19 @@
 				try
 				{
 					this.insertLucidChart(data, dx, dy, crop, done);
+					
+					if (this.updateAd != null && !this.lucidchartTweetShown)
+					{
+						this.adsHtml.push('<a title="' + mxResources.get('loveIt', ['draw.io']) +
+							'" target="_blank" href="https://twitter.com/intent/tweet?text=' +
+							encodeURIComponent('I\'ve just copy and pasted my Lucidchart diagram into www.draw.io') +
+							'" onclick="javascript:window.open(this.href, \'\', \'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,' +
+							'left=\'+((screen.width-640)/2)+\',top=\'+((screen.height-280)/3)+\',height=280,width=640\');return false;"\'>' +
+							'<img border="0" align="absmiddle" style="margin-top:-2px;padding-right:8px;" src="' +
+							Editor.tweetImage + '"/>Happy with the Import?</a>');
+						this.updateAd(this.adsHtml.length - 1);
+						this.lucidchartTweetShown = true;
+					}
 				}
 				catch (e)
 				{

+ 46 - 5
war/js/diagramly/Extensions.js

@@ -241,11 +241,12 @@
 //			'DFDExternalEntityBlock' NA
 			'DFDExternalEntityBlock2' : 'shape=rect;rounded=1;',
 			'YDMDFDProcessBlock' : 'shape=ellipse;',
-			'YDMDFDDataStoreBlock' : s + 'bootstrap.horLines;',
+			'YDMDFDDataStoreBlock' : 'shape=partialRectangle;right=0;left=0;',
 			'GSDFDProcessBlock' : 'shape=swimlane;rounded=1;',
 			'GSDFDProcessBlock2' : 'shape=rect;rounded=1;',
 //			'GSDFDDataStoreBlock' NA
-//			'GSDFDDataStoreBlock2' NA
+			'GSDFDDataStoreBlock2' : 'shape=partialRectangle;right=0;',
+			
 //Org Chart
 			'OrgBlock' : 'shape=rect;rounded=1;',
 //Tables
@@ -1220,8 +1221,8 @@
 			'EE_CurrentSource' : s + 'electrical.signal_sources.dc_source_2;direction=north;', //EXT
 			'EE_ControlledCurrentSource' : s + 'electrical.signal_sources.dependent_source_2;direction=west;', //EXT
 			'EE_ControlledVoltageSource' : s + 'electrical.signal_sources.dependent_source_3;', //EXT
-//			'EE_DcSource1' NA
-//			'EE_DcSource2' NA
+			'EE_DcSource1' : s + 'electrical.miscellaneous.monocell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top;',
+			'EE_DcSource2' : s + 'electrical.miscellaneous.multicell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top;',
 			'EE_Vss' : s + 'electrical.signal_sources.vss2;verticalLabelPosition=top;verticalAlign=bottom;fontSize=24;',
 			'EE_Vdd' : s + 'electrical.signal_sources.vdd;verticalLabelPosition=bottom;verticalAlign=top;',
 //Transistors
@@ -1326,6 +1327,46 @@
 			'EISmartProxyBlock' : s + 'eip.smart_proxy;',
 			'EITestMessageBlock' : s + 'eip.test_message;',
 			'EIChannelPurgerBlock' : s + 'eip.channel_purger;',
+//Google Cloud Platform
+			'GCPIconComputeEngineBlock' : ss + 'gcp.compute.compute_engine;',
+			'GCPIconAppEngineBlock' : ss + 'gcp.compute.app_engine;',
+			'GCPIconContainerEngineBlock' : ss + 'gcp.compute.container_engine;',
+			'GCPIconContainerRegistryBlock' : ss + 'gcp.compute.container_registry;',
+			'GCPIconCloudFunctionsBlock' : ss + 'gcp.compute.cloud_functions;',
+			'GCPIconCloudStorageBlock' : ss + 'gcp.storage_databases.cloud_storage;',
+			'GCPIconCloudSQLBlock' : ss + 'gcp.storage_databases.cloud_sql;',
+			'GCPIconCloudBigtableBlock' : ss + 'gcp.storage_databases.cloud_bigtable;',
+			'GCPIconCloudDatastoreBlock' : ss + 'gcp.storage_databases.cloud_datastore;',
+			'GCPIconPersistentDiskBlock' : ss + 'gcp.storage_databases.persistent_disk;',
+			'GCPIconCloudVirtualNetworkBlock' : ss + 'gcp.networking.cloud_virtual_network;',
+			'GCPIconCloudLoadBalancingBlock' : ss + 'gcp.networking.cloud_load_balancing;',
+			'GCPIconCloudCDNBlock' : ss + 'gcp.networking.cloud_cdn;',
+			'GCPIconCloudInterconnectBlock' : ss + 'gcp.networking.cloud_interconnect;',
+			'GCPIconCloudDNSBlock' : ss + 'gcp.networking.cloud_dns;',
+			'GCPIconBigQueryBlock' : ss + 'gcp.big_data.bigquery;',
+			'GCPIconCloudDataflowBlock' : ss + 'gcp.big_data.cloud_dataflow;',
+			'GCPIconCloudDataprocBlock' : ss + 'gcp.big_data.cloud_dataproc;',
+			'GCPIconCloudDatalabBlock' : ss + 'gcp.big_data.cloud_datalab;',
+			'GCPIconCloudPubSubBlock' : ss + 'gcp.big_data.cloud_pubsub;',
+			'GCPIconGenomicsBlock' : ss + 'gcp.big_data.genomics;',
+			'GCPIconCloudMachineLearningServicesBlock' : ss + 'gcp.machine_learning.cloud_machine_learning;',
+			'GCPIconVisionAPIBlock' : ss + 'gcp.machine_learning.vision_api;',
+			'GCPIconSpeechAPIBlock' : ss + 'gcp.machine_learning.speech_api;',
+			'GCPIconNaturalLanguageAPIBlock' : ss + 'gcp.machine_learning.natural_language_api;',
+			'GCPIconTranslateAPIBlock' : ss + 'gcp.machine_learning.translation_api;',
+			'GCPIconStackdriverOverviewBlock' : ss + 'gcp.management_tools.stackdriver;',
+			'GCPIconMonitoringBlock' : ss + 'gcp.management_tools.monitoring;',
+//			'GCPIconLoggingBlock' NA
+			'GCPIconErrorReportingBlock' : ss + 'gcp.management_tools.error_reporting;',
+			'GCPIconTraceBlock' : ss + 'gcp.management_tools.trace;',
+			'GCPIconDebuggerBlock' : ss + 'gcp.management_tools.debugger;',
+			'GCPIconDeploymentManagerBlock' : ss + 'gcp.management_tools.deployment_manager;',
+			'GCPIconCloudEndpointsBlock' : ss + 'gcp.management_tools.cloud_endpoints;',
+			'GCPIconCloudToolsForPowerShellBlock' : ss + 'gcp.developer_tools.cloud_tools_for_powershell;',
+			'GCPIconCloudToolsForVisualStudioBlock' : ss + 'gcp.developer_tools.cloud_tools_for_visual_studio;',
+			'GCPIconCloudIAMBlock' : ss + 'gcp.identity_and_security.cloud_iam;',
+			'GCPIconGCPLogoBlock' : ss + 'gcp.extras.generic_gcp;',
+			'GCPIconBlankBlock' : ss + 'gcp.extras.blue_hexagon;',
 //Equation
 //			'Equation' EXT
 //Walls
@@ -2141,7 +2182,7 @@
 		var p = getAction(obj).Properties;
 		var b = p.BoundingBox;
 
-		if (obj.Class.startsWith("AWS"))
+		if (obj.Class != null && obj.Class.substring(0, 3) === "AWS")
 		{
 			b.h = b.h - 20;
 		}

+ 4 - 0
war/js/diagramly/sidebar/Sidebar-Basic.js

@@ -16,6 +16,10 @@
 			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;bottom=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
 			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;left=0;right=0;top=0;fillColor=none;routingCenterY=0.5;', 120, 60, '', 'Partial Rectangle'),
 			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;right=0;top=0;bottom=0;fillColor=none;routingCenterX=-0.5;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;bottom=0;right=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;left=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;bottom=1;right=1;top=0;bottom=1;fillColor=none;routingCenterX=-0.5;', 120, 60, '', 'Partial Rectangle'),
+		 	this.createEdgeTemplateEntry('shape=filledEdge;fixDash=1;rounded=0;endArrow=none;strokeWidth=10;fillColor=#ffffff;edgeStyle=orthogonalEdgeStyle;', 120, 60, '', 'Filled Edge'),
 			this.createVertexTemplateEntry(s2 + '4_point_star', w, h, '', '4 Point Star', null, null, this.getTagsForStencil(gn, '4_point_star', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + '6_point_star', w, h * 0.9, '', '6 Point Star', null, null, this.getTagsForStencil(gn, '6_point_star', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + '8_point_star', w, h, '', '8 Point Star', null, null, this.getTagsForStencil(gn, '8_point_star', dt).join(' ')),

File diff suppressed because it is too large
+ 12 - 12
war/js/embed-static.min.js


File diff suppressed because it is too large
+ 99 - 93
war/js/extensions.min.js


+ 5 - 4
war/js/mxgraph/Format.js

@@ -208,6 +208,7 @@ Format.prototype.isFillState = function(state)
 {
 	return state.view.graph.model.isVertex(state.cell) ||
 		mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null) == 'arrow' ||
+		mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null) == 'filledEdge' ||
 		mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null) == 'flexArrow';
 };
 
@@ -234,7 +235,7 @@ Format.prototype.isRoundedState = function(state)
 			shape == 'parallelogram' || shape == 'swimlane' || shape == 'triangle' || shape == 'trapezoid' ||
 			shape == 'ext' || shape == 'step' || shape == 'tee' || shape == 'process' || shape == 'link' ||
 			shape == 'rhombus' || shape == 'offPageConnector' || shape == 'loopLimit' || shape == 'hexagon' ||
-			shape == 'manualInput' || shape == 'curlyBracket' || shape == 'singleArrow' ||
+			shape == 'manualInput' || shape == 'curlyBracket' || shape == 'singleArrow' || 
 			shape == 'doubleArrow' || shape == 'flexArrow' || shape == 'card' || shape == 'umlLifeline');
 };
 
@@ -248,7 +249,7 @@ Format.prototype.isComicState = function(state)
 	return mxUtils.indexOf(['label', 'rectangle', 'internalStorage', 'corner', 'parallelogram', 'note', 'collate',
 	                        'swimlane', 'triangle', 'trapezoid', 'ext', 'step', 'tee', 'process', 'link', 'rhombus',
 	                        'offPageConnector', 'loopLimit', 'hexagon', 'manualInput', 'singleArrow', 'doubleArrow',
-	                        'flexArrow', 'card', 'umlLifeline', 'connector', 'folder', 'component', 'sortShape',
+	                        'flexArrow', 'filledEdge', 'card', 'umlLifeline', 'connector', 'folder', 'component', 'sortShape',
 	                        'cross', 'umlFrame', 'cube', 'isoCube', 'isoRectangle', 'partialRectangle'], shape) >= 0;
 };
 
@@ -3459,7 +3460,7 @@ StyleFormatPanel.prototype.addFill = function(container)
 		
 		var fillColor = mxUtils.getValue(ss.style, mxConstants.STYLE_FILLCOLOR, null);
 
-		if (!ss.fill || ss.containsImage || fillColor == null || fillColor == mxConstants.NONE)
+		if (!ss.fill || ss.containsImage || fillColor == null || fillColor == mxConstants.NONE || ss.style.shape == 'filledEdge')
 		{
 			gradientPanel.style.display = 'none';
 		}
@@ -3984,7 +3985,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 			altInput.value = (isNaN(tmp)) ? '' : tmp + ' pt';
 		}
 		
-		styleSelect.style.visibility = (ss.style.shape == 'connector') ? '' : 'hidden';
+		styleSelect.style.visibility = (ss.style.shape == 'connector' || ss.style.shape == 'filledEdge') ? '' : 'hidden';
 		
 		if (mxUtils.getValue(ss.style, mxConstants.STYLE_CURVED, null) == '1')
 		{

+ 10 - 4
war/js/mxgraph/Sidebar.js

@@ -962,13 +962,19 @@ Sidebar.prototype.addGeneralPalette = function(expand)
  */
 Sidebar.prototype.addBasicPalette = function(dir)
 {
+	console.log('here');
+	
 	this.addStencilPalette('basic', mxResources.get('basic'), dir + '/basic.xml',
 		';whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=2',
 		null, null, null, null, [
-		this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;left=0;right=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
-		this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;bottom=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
-		this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;left=0;right=0;top=0;fillColor=none;routingCenterY=0.5;', 120, 60, '', 'Partial Rectangle'),
-		this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;right=0;top=0;bottom=0;fillColor=none;routingCenterX=-0.5;', 120, 60, '', 'Partial Rectangle')
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;left=0;right=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;bottom=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;left=0;right=0;top=0;fillColor=none;routingCenterY=0.5;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;right=0;top=0;bottom=0;fillColor=none;routingCenterX=-0.5;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;bottom=0;right=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;left=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
+			this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;bottom=1;right=1;top=0;bottom=1;fillColor=none;routingCenterX=-0.5;', 120, 60, '', 'Partial Rectangle'),
+		 	this.createEdgeTemplateEntry('shape=filledEdge;rounded=0;fixDash=1;endArrow=none;strokeWidth=10;fillColor=#ffffff;edgeStyle=orthogonalEdgeStyle;', 120, 60, '', 'Filled Edge')
 	]);
 };
 

File diff suppressed because it is too large
+ 12 - 12
war/js/reader.min.js


File diff suppressed because it is too large
+ 28 - 27
war/js/viewer.min.js