Skip to content

Commit 5e0d242

Browse files
committed
drop extra wrapping map and make $ shortcut more general
1 parent 511b7ae commit 5e0d242

File tree

6 files changed

+59
-30
lines changed

6 files changed

+59
-30
lines changed

src/file_data.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ impl Raw {
3232
Image(parser.process_input(&self.0, width))
3333
}
3434

35-
pub fn previews(&self, parser: ParserType) -> Vec<Image> {
36-
// if let Some(width) = width {
37-
// }else {
38-
self.widths(parser.image_type())
35+
pub fn width_previews(&self, parser: ParserType) -> Vec<Image> {
36+
let mut previews = self
37+
.widths(parser.image_type())
3938
.iter()
40-
.map(|w| Image(parser.process_input(&self.0, *w as usize)))
41-
.collect()
42-
// }
39+
.map(|w| self.parse(parser, *w as usize))
40+
.collect::<Vec<Image>>();
41+
previews.push(self.parse(parser, 320));
42+
previews
4343
}
4444
}

src/image.rs

+7
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ impl Image {
5757
"".to_string()
5858
}
5959
}
60+
61+
pub fn sprites(&self, height: usize) -> Vec<Image> {
62+
self.data()
63+
.chunks(height)
64+
.map(|chunk| Image(chunk.to_vec()))
65+
.collect()
66+
}
6067
}
6168

6269
pub fn tile<T: std::clone::Clone>(data: Vec<Vec<T>>, tile_height: usize) -> Vec<Vec<T>> {

src/terminal/main.rs

-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
2222
let file_data = file_data::Raw::new(&std::fs::read(Path::new(&args.image))?);
2323
let parser = ParserType::type_str(&args.image_parser);
2424
let image = file_data.parse(parser, args.width);
25-
26-
let _ = file_data.previews(ParserType::EGARowPlanar);
27-
2825
let image_data = if args.tile_height.is_some() {
2926
image::tile(image.data(), args.tile_height.unwrap())
3027
} else {

src/wasm/file-byte-reader.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ class FileByteReader extends HTMLInputElement {
1414
}
1515

1616
onFileLoad(event) {
17-
this.emit('loaded', new Int8Array(event.target.result));
17+
this.data = new Int8Array(event.target.result);
18+
this.emit('loaded', this.data);
1819
}
1920

2021
onChange() {

src/wasm/index.html

+42-18
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,76 @@
33
<head>
44
<link data-trunk rel="css" href="./styles.css" />
55
<link
6-
data-trunk
7-
rel="rust" href="../../Cargo.toml"
8-
data-bin="cega-wasm"
9-
data-cargo-no-default-features
10-
data-cargo-features="wasm"
6+
data-trunk
7+
rel="rust" href="../../Cargo.toml"
8+
data-bin="cega-wasm"
9+
data-cargo-no-default-features
10+
data-cargo-features="wasm"
1111
/>
1212
<script data-trunk src="./file-byte-reader.js"></script>
1313
<script>
14-
let $ = (query) => document.querySelector(query);
14+
const D = document;
15+
const $ = (q, e = D) => e.querySelector(q);
1516

1617
function fileLoaded(array) {
17-
let hash = new Map(Object.entries(window.wasmBindings.previews(array)));
18-
hash.forEach((images, key) => {
19-
const container = document.createElement("preview-area");
18+
let wrapper = $('preview-wrapper');
19+
wrapper.textContent = "";
20+
let parser_images = window.wasmBindings.previews(array);
21+
for (const [key, images] of Object.entries(parser_images)) {
22+
const container = D.createElement("preview-area");
23+
container.innerHTML = `<h3>${key}</h3>`
2024
images.forEach(src => container.appendChild(new PreviewItem(src)));
21-
$('preview-wrapper').appendChild(container);
22-
})
25+
wrapper.appendChild(container);
26+
}
2327
}
2428

25-
document.addEventListener("DOMContentLoaded", () => {
29+
D.addEventListener("DOMContentLoaded", () => {
2630
$('#file-input').addEventListener("file-byte-reader:loaded",
27-
e => fileLoaded(e.detail)
31+
e => {
32+
if (file = e.target.files[0]) {
33+
$('form').style.display = "block";
34+
$('#file-name').value = file.name;
35+
fileLoaded(e.detail)
36+
}
37+
}
2838
);
2939
});
3040

3141
class PreviewItem extends HTMLElement {
3242
constructor(src) {
3343
super();
3444
const shadow = this.attachShadow({mode: "open"});
35-
const fragment = document.createRange().createContextualFragment('<h3></h3><img/>');
36-
const h3 = fragment.querySelector('h3');
37-
this.img = fragment.querySelector("img");
45+
const fragment = D.createRange().createContextualFragment('<h3></h3><img/>');
46+
const h3 = $('h3', fragment);
47+
this.img = $('img', fragment);
3848

3949
this.img.onload = function () {
4050
h3.innerText = this.width;
4151
}
42-
this.img.src = src
52+
this.img.src = src;
53+
this.addEventListener('click', this.onClick);
4354
shadow.appendChild(fragment);
4455
}
56+
onClick() {
57+
$('#width').value = this.img.width;
58+
}
4559
}
4660
customElements.define("preview-item", PreviewItem);
4761
</script>
4862
</head>
4963
<body>
5064
<h1>Process your CGA/EGAs</h1>
51-
<input is="file-byte-reader" id="file-input" multiple="true" accept=".bin,.cga,.ega,.cega" />
65+
<input is="file-byte-reader" id="file-input" multiple="false" accept=".bin,.cga,.ega,.cega" />
66+
<form style="display:none;">
67+
<label for="file-name">File name: </label><input name="file-name" id="file-name" />
68+
<label for="parser">Parser: </label>
69+
<select name="parser" id="parser">
70+
<option disabled selected value></option>
71+
<option value="CGA">CGA</option>
72+
<option value="EGARowPlanar">EGARowPlanar</option>
73+
</select>
74+
<label for="width">Width: </label><input name="width" id="width" />
75+
</form>
5276
<preview-wrapper></preview-wrapper>
5377
</body>
5478
</html>

src/wasm/main.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub fn previews(data: &[u8]) -> JsValue {
3636

3737
pub fn preview(data: &Raw, parser: ParserType) -> Vec<String> {
3838
let palette = parser.image_type().default_color_palette();
39-
data.previews(parser)
39+
data.width_previews(parser)
4040
.iter()
4141
.map(|p| {
4242
format!(

0 commit comments

Comments
 (0)