svgomg-ui/index.html

853 líneas
40 KiB
HTML

<!doctype html>
<html dropzone>
<head>
<title>SVGOMG - SVGO's Missing GUI</title>
<meta name="theme-color" content="#303F9F">
<meta name="viewport" content="width=device-width,minimum-scale=1">
<link rel="preload" as="script" href="js/page.js">
<link rel="preload" as="style" href="css/all.css">
<style>
html,body{
height:100%;
margin:0;
padding:0;
overflow:hidden
}
html{
font-family:roboto, sans-serif;
-webkit-tap-highlight-color:rgba(0,0,0,0);
background:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%202%202%22%3E%3Cpath%20d%3D%22M1%202V0h1v1H0v1z%22%20fill-opacity%3D%22.05%22%2F%3E%3C%2Fsvg%3E");
background-size:16px 16px;
background-color:#f2f2f2;
transition:background-color 0.2s ease-in-out
}
pre,code,kbd,samp,tt{
font-family:monospace,monospace;
font-size:1em
}
button::-moz-focus-inner,textarea::-moz-focus-inner{
border:0;
padding:0
}
.main-menu{
position:absolute;
top:0;
left:0;
bottom:0;
right:0;
z-index:3;
font-family:sans-serif
}
.main-menu.hide-font{
color:transparent
}
.main-menu.hide-font .menu-footer-notes{
color:transparent
}
.main-menu.use-font{
font-family:inherit
}
.main-menu.hidden{
pointer-events:none
}
.main-menu .menu{
position:absolute;
top:0;
left:0;
bottom:0;
min-width:264px;
width:40%;
max-width:340px;
background:#fff;
box-shadow:3px 0 16px rgba(0,0,0,0.4);
will-change:transform;
overflow-x:hidden;
overflow-y:auto;
display:-webkit-flex;
display:flex;
-webkit-flex-flow:column;
flex-flow:column
}
.main-menu .menu.transition{
-webkit-transition:-webkit-transform 0.2s ease-out;
transition:transform 0.2s ease-out
}
.main-menu .menu.hidden{
-webkit-transform:translateX(-110%);
transform:translateX(-110%)
}
.main-menu .menu>*{
min-height:-webkit-min-content;
min-height:-moz-min-content;
min-height:min-content
}
.main-menu .overlay{
position:absolute;
top:0;
left:0;
bottom:0;
right:0;
background:rgba(0,0,0,0.4);
will-change:opacity
}
.main-menu .overlay.transition{
-webkit-transition:opacity 0.2s ease-in-out;
transition:opacity 0.2s ease-in-out
}
.main-menu .overlay.hidden{
opacity:0
}
.main-menu ul{
margin:0;
padding:0
}
.main-menu li{
display:block;
margin:0;
padding:0
}
.main-menu .menu-item{
padding:0 16px;
width:100%;
height:48px;
box-sizing:border-box;
display:-webkit-flex;
display:flex;
-webkit-align-items:center;
align-items:center
}
.main-menu .menu-item:link,.main-menu .menu-item:visited{
color:inherit;
text-decoration:none
}
.main-menu .menu-item:focus,.main-menu .menu-item:hover{
outline:none;
background:rgba(0,0,0,0.1)
}
.main-menu .menu-item .icon{
width:24px;
height:24px;
opacity:0.54;
margin-right:32px;
-webkit-flex:none;
flex:none
}
.main-menu .menu-item .spinner{
-webkit-flex:none;
flex:none;
margin:0 0 0 auto
}
.main-menu .menu-item .menu-item-text{
margin-right:28px;
overflow:hidden;
text-overflow:ellipsis
}
.main-menu .menu-input{
cursor:pointer
}
.main-menu .menu-input .input-area{
position:relative;
white-space:nowrap
}
.main-menu .menu-input .label-txt{
position:absolute;
left:0;
top:0
}
.main-menu .menu-input textarea,.main-menu .menu-input input{
display:block;
font:inherit;
border:none;
background:none;
padding:0;
margin:0;
opacity:0;
cursor:inherit;
resize:none;
width:100%;
height:1.3em;
overflow:hidden
}
.main-menu .menu-input textarea:focus,.main-menu .menu-input input:focus{
outline:none;
opacity:1
}
.main-menu .menu-input textarea:focus+.label-txt,.main-menu .menu-input input:focus+.label-txt{
opacity:0;
pointer-events:none
}
.main-menu .load-file-input{
display:none
}
.menu-footer-notes{
padding:0 16px;
margin-top:auto;
text-align:center;
font-size:0.9rem;
color:#8E8E8E
}
.menu-footer-notes a:link,.menu-footer-notes a:visited{
color:inherit;
text-decoration:underline
}
.menu-footer-notes a:hover,.menu-footer-notes a:active{
color:#000
}
.preloader{
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
background:rgba(0,0,0,0.7);
z-index:3;
color:#fff;
opacity:0;
font-family:sans-serif;
display:-webkit-flex;
display:flex;
-webkit-flex-flow:column;
flex-flow:column;
-webkit-align-items:center;
align-items:center;
-webkit-justify-content:center;
justify-content:center;
-webkit-transition:opacity 0.2s ease-out;
transition:opacity 0.2s ease-out
}
.preloader.active{
opacity:1
}
.preloader.active .spinner{
display:block
}
.preloader .spinner{
display:none;
border-color:#fff
}
.unbutton{
display:inline-block;
background:none;
border:none;
padding:0;
margin:0;
font:inherit;
cursor:pointer;
white-space:nowrap
}
.toolbar,.main,.drop-overlay{
display:none
}
</style>
<link rel="manifest" href="manifest.json">
<link rel="apple-touch-icon-precomposed" href="imgs/icon.png">
<link rel="icon" href="imgs/icon.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="application-name" content="SVGOMG">
</head>
<body>
<div class=app-output>
<div class=main-menu>
<div class=overlay></div>
<nav class=menu>
<ul>
<li>
<div tabindex=0 role=button class="load-file unbutton menu-item needsclick">
<svg viewBox="0 0 24 24" class=icon>
<path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z"/>
</svg>
<span class=menu-item-text>Open SVG</span>
</div>
<input type=file class=load-file-input accept=.svg>
</li>
<li>
<label class="menu-input menu-item">
<svg viewBox="0 0 24 24" class=icon>
<path d="M19 2h-4.2C14.4.8 13.3 0 12 0c-1.3 0-2.4.8-2.8 2H5C4 2 3 3 3 4v16c0 1 1 2 2 2h14c1 0 2-1 2-2V4c0-1-1-2-2-2zm-7 0c.6 0 1 .5 1 1s-.5 1-1 1-1-.5-1-1 .5-1 1-1zm7 18H5V4h2v3h10V4h2v16z"/>
</svg>
<div class=input-area>
<textarea class=paste-input></textarea>
<span class=label-txt>Paste markup</span>
</div>
</label>
</li>
<li>
<div tabindex=0 role=button class="load-demo unbutton menu-item">
<svg viewBox="0 0 24 24" class=icon>
<path d="M18.92 6c-.2-.58-.76-1-1.42-1h-11c-.66 0-1.2.42-1.42 1L3 12v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-6zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5.67 1.5 1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z"/>
</svg>
<span class=menu-item-text>Demo</span>
</div>
</li>
<li>
<a href=https://github.com/jakearchibald/svgomg class=menu-item>
<svg viewBox="0 0 512 512" class=icon>
<path d="M7 266.8c22.6-5.7 53.3-13.4 107-14.8-1.4-3-2.8-6-4-9.2-21-.2-85.4 2.8-107.5 8.2H2c-.6 0-1.3-.4-1.5-1.2-.2-1 .4-1.8 1.3-2 21.8-5.4 84.8-8.4 107-8.3-5-14.8-7.2-31.7-7.2-50.6 0-33.6 10.5-46.2 24.5-64-10.6-38.3 4-64.4 4-64.4s22.5-4.7 65 25.8c23.2-9.8 84.7-10.7 113.8-2.2 18-11.8 50.6-28.5 63.8-23.8 3.6 5.7 11.3 22.5 4.7 59.3 4.5 8 27.7 25.3 27.8 74-.2 18-2 33-5.6 45.8 55.6-.4 88.2 4 110.8 8.3.8.2 1.4 1 1.3 2-.2.7-1 1.3-1.6 1.3h-.5c-22.4-4-55.2-8.7-111-8.2-1 3.3-2 6.4-3.3 9.3 19 .7 71.2 2.8 113.8 15.8 1 .3 1.4 1.2 1 2 0 .8-.7 1.2-1.4 1.2h-.5c-43-13.2-96.5-15-114.2-15.6-15.4 34-47 46.6-98.3 51.8 16.6 10.5 21.3 23.6 21.3 59 0 35.5-.5 40.2-.3 48.4 0 13.4 19.7 19.8 19 24-.7 4.4-16.4 3.7-23.7 1-20.8-7-18.7-24.4-18.7-24.4l-.6-47.4s1.4-25.5-8-25.5V420c0 16.8 11.8 22 11.8 28 0 10.8-21.6-1-28.2-7.6-10-10-9-31.7-8.7-48.8.2-16.4-.2-52.5-.2-52.5l-6.8.3s3 78.7-3.6 93c-8.3 18.4-33.5 24.8-33.5 16.4 0-5.7 6.3-4 9.8-16.5 3-10.8 2-91 2-91s-8.2 4.8-8.2 19.8l-.2 57.8c0 14.8-20.8 23-31 23-5 0-11.3 0-11.3-2.8 0-6.8 19.2-10.8 19.2-25l-.3-43.8s-9.7 1.7-23.4 1.7c-34.6 0-45.6-22.2-50.8-34.6-6.8-16-15.6-23.7-25-29.7-5.7-3.7-7-8-.4-9.4 30.7-5.7 38.5 34.8 59 41.3 14.6 4.6 33.4 2.6 42.7-3.5 1.4-12.3 10.3-23 17.7-28.6-52-5-83-23-99-52-54.4 1.2-85.3 9-108 14.6L3 271.2h-.4c-.8 0-1.5-.5-1.6-1.2-.3-1 .3-1.8 1.2-2l4.8-1.2z"/>
</svg>
<span class=menu-item-text>Contribute</span>
</a>
</li>
<li>
<a href=https://github.com/jakearchibald/svgomg/blob/master/README.md class=menu-item>
<svg viewBox="0 0 24 24" class=icon>
<path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
</svg>
<span class=menu-item-text>About</span>
</a>
</li>
</ul>
<div class=menu-extra></div>
<div class=menu-footer-notes>
<p>
Powered by the incredible
<a href=https://github.com/svg/svgo>SVGO</a>
</p>
</div>
</nav>
</div>
<div class=toolbar>
<div class=menu-toolbar-item>
<button class="unbutton menu-btn">
<svg viewBox="0 0 24 24">
<title>Menu</title>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</button>
</div>
<form class="material-tabs view-toggler">
<label class=material-tab>
<input type=radio name=output value=image checked>
<span class=selected></span>
Image
</label>
<label class=material-tab>
<input type=radio name=output value=code>
<span class=selected></span>
Markup
</label>
</form>
</div>
<div class=main>
<div class=output>
<div class=action-button-container>
<div class=minor-action-container></div>
<div class=results-container></div>
</div>
</div>
<div class=settings>
<div class=results-container-mobile></div>
<div class=settings-scroller>
<section class=global>
<h1 class=settings-sub-heading>Global settings</h1>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=original>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Show original
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=gzip checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Compare gzipped
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=pretty>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Prettify markup
</label>
</div>
<div>
<label class=setting-item-range>
<div class=label-text>Precision</div>
<input type=range min=0 max=8 step=1 value=3 name=floatPrecision>
</label>
</div>
</section>
<section class=plugins>
<h1 class=settings-sub-heading>Features</h1>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeDoctype checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove doctype
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeXMLProcInst checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove XML instructions
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeComments checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove comments
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeMetadata checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove &lt;metadata>
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeXMLNS>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove xmlns
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeEditorsNSData checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove editor data
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=cleanupAttrs checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Cleanup attribute whitespace
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=inlineStyles checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Inline styles
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=minifyStyles checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Minify styles
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=convertStyleToAttrs checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Style to attributes
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=cleanupIDs checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Clean IDs
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeRasterImages>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove raster images
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeUselessDefs checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove unused defs
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=cleanupNumericValues checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Round/rewrite numbers
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=cleanupListOfValues>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Round/rewrite number lists
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=convertColors checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Minify colours
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeUnknownsAndDefaults checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove unknowns & defaults
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeNonInheritableGroupAttrs checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove unneeded group attrs
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeUselessStrokeAndFill checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove useless stroke & fill
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeViewBox checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove viewBox
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=cleanupEnableBackground checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove/tidy enable-background
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeHiddenElems checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove hidden elements
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeEmptyText checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove empty text
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=convertShapeToPath checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Shapes to (smaller) paths
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=moveElemsAttrsToGroup checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Move attrs to parent group
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=moveGroupAttrsToElems checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Move group attrs to elements
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=collapseGroups checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Collapse useless groups
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=convertPathData checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Round/rewrite paths
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=convertTransform checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Round/rewrite transforms
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeEmptyAttrs checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove empty attrs
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeEmptyContainers checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove empty containers
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=mergePaths checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Merge paths
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeUnusedNS checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove unused namespaces
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=sortAttrs>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Sort attrs
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeTitle checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove &lt;title>
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeDesc checked>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove &lt;desc>
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeDimensions>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Prefer viewBox to width/height
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeStyleElement>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove style elements
</label>
</div>
<div>
<label class=setting-item-toggle>
<input type=checkbox name=removeScriptElement>
<span class=material-switch>
<span class=track></span>
<span class=handle></span>
</span>
Remove script elements
</label>
</div>
</section>
<div class=setting-reset-row>
<button class="unbutton setting-reset">Reset all</button>
</div>
</div>
</div>
</div>
<div class=preloader>
<div class=spinner>
<div class=spinner-container>
<div class=spinner-layer>
<div class="circle-clipper left">
<div class=circle></div>
</div>
<div class=gap-patch>
<div class=circle></div>
</div>
<div class="circle-clipper right">
<div class=circle></div>
</div>
</div>
</div>
</div>
<p>Sorry, wasn't ready…</p>
</div>
<script>
requestAnimationFrame(function() {
requestAnimationFrame(function() {
var l = document.createElement("link");
l.rel = "stylesheet"
l.crossorigin = !0;
l.href = "css/all.css";
document.head.appendChild(l);
var s = document.createElement("script");
s.src = "js/page.js";
document.head.appendChild(s);
})
})
</script>
</div>
</body>
</html>