[KiRi] Now we generate a self contained page

- Only the real data (and the blank.svg) are outside.
- Failed to also include the blank.svg
This commit is contained in:
Salvador E. Tropea 2023-12-28 13:59:17 -03:00
parent 1ca7c9d94c
commit c95d6a47c4
6 changed files with 69 additions and 72 deletions

View File

@ -22,7 +22,7 @@ Dependencies:
import datetime
import pwd
import os
from shutil import copy2, rmtree, copytree
from shutil import copy2, rmtree
from subprocess import CalledProcessError
from tempfile import mkdtemp, NamedTemporaryFile
from .error import KiPlotConfigurationError
@ -179,6 +179,45 @@ class KiRiOptions(VariantOptions):
logger.debug(f'Commits with changes in the PCB: {self.commits_with_changed_pcb}')
logger.debug(f'Commits with changes in the Schematics: {self.commits_with_changed_sch}')
def copy_index(self, src_dir, src_index, dst_index):
with open(src_index, 'rt') as src:
with open(dst_index, 'wt') as dst:
for ln in src:
ln_stripped = ln.strip()
if ln_stripped.startswith('<script src="'):
fn = ln_stripped[13:].split('"')[0]
with open(os.path.join(src_dir, fn), 'rt') as f:
script = f.read()
dst.write('<script>\n')
dst.write(script)
dst.write('\n</script>\n')
elif ln_stripped.startswith('<link rel="stylesheet" href="'):
fn = ln_stripped[29:].split('"')[0]
if fn == 'layer_colors.css':
script = ''
for id, color in self._color_theme.layer_id2color.items():
script += f'.layer_color_{id} {{ color: {color[:7]}; }}\n'
elif fn == 'kiri.css':
# Replace the SVGs using its source
script = ''
with open(os.path.join(src_dir, fn), 'rt') as f:
for lns in f:
if lns.startswith("\t--svg: url('"):
fns = lns[13:].split("'")[0]
with open(os.path.join(src_dir, fns), 'rt') as f:
svg = f.read().strip()
script += "\t--svg: url('data:image/svg+xml;utf8,"+svg+"');\n"
else:
script += lns
else:
with open(os.path.join(src_dir, fn), 'rt') as f:
script = f.read()
dst.write('<style>\n')
dst.write(script)
dst.write('\n</style>\n')
else:
dst.write(ln)
def create_kiri_files(self):
src_dir = GS.get_resource_path('kiri')
copy2(os.path.join(src_dir, 'redirect.html'), os.path.join(self.cache_dir, 'index.html'))
@ -186,16 +225,18 @@ class KiRiOptions(VariantOptions):
web_dir = os.path.join(self.cache_dir, 'web')
os.makedirs(web_dir, exist_ok=True)
copy2(os.path.join(src_dir, 'favicon.ico'), os.path.join(web_dir, 'favicon.ico'))
copy2(os.path.join(src_dir, 'kiri.css'), os.path.join(web_dir, 'kiri.css'))
copy2(os.path.join(src_dir, 'kiri.js'), os.path.join(web_dir, 'kiri.js'))
copy2(os.path.join(src_dir, 'index.html'), os.path.join(web_dir, 'index.html'))
copytree(os.path.join(src_dir, 'images'), os.path.join(web_dir, 'images'), dirs_exist_ok=True)
copytree(os.path.join(src_dir, 'utils'), os.path.join(web_dir, 'utils'), dirs_exist_ok=True)
copy2(os.path.join(src_dir, 'blank.svg'), os.path.join(web_dir, 'blank.svg'))
self.copy_index(src_dir, os.path.join(src_dir, 'index.html'), os.path.join(web_dir, 'index.html'))
# copytree(os.path.join(src_dir, 'images'), os.path.join(web_dir, 'images'), dirs_exist_ok=True)
# copy2(os.path.join(src_dir, 'kiri.css'), os.path.join(web_dir, 'kiri.css'))
# copy2(os.path.join(src_dir, 'kiri.js'), os.path.join(web_dir, 'kiri.js'))
# copy2(os.path.join(src_dir, 'index.html'), os.path.join(web_dir, 'index.html'))
# copytree(os.path.join(src_dir, 'utils'), os.path.join(web_dir, 'utils'), dirs_exist_ok=True)
# Colors for the layers
with open(os.path.join(web_dir, 'layer_colors.css'), 'wt') as f:
f.write(LAYER_COLORS_HEAD)
for id, color in self._color_theme.layer_id2color.items():
f.write(f'.layer_color_{id} {{ color: {color[:7]}; }}\n')
# with open(os.path.join(web_dir, 'layer_colors.css'), 'wt') as f:
# f.write(LAYER_COLORS_HEAD)
# for id, color in self._color_theme.layer_id2color.items():
# f.write(f'.layer_color_{id} {{ color: {color[:7]}; }}\n')
def run(self, name):
self.cache_dir = self._parent.output_dir

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="210mm" height="297mm" version="1.1" viewBox="0 0 210 297" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 486 B

View File

@ -1,55 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="blank.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="1.4285714"
inkscape:cy="548.57143"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2048"
inkscape:window-height="1088"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1" />
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

View File

@ -3,11 +3,9 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<script src="./utils/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="./utils/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> -->
<link rel="icon" href="./favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAD1BMVEUAAACbAAAGANJpli7///8s69hEAAAAAXRSTlMAQObYZgAAAAFiS0dEBI9o2VEAAAAHdElNRQfnDBwQNhSXSmLEAAABzElEQVRo3u3ZbZKDIAwG4AgXwBs4ewJmuP/dtlb5CKIkwWLZ2fyTwafyqmAV5rMyEEr9nBf8AzcCa8cWYOs5iQHfVQrEznXgtX0E1l7a4UFwgLWve5VND4ED7Pu/BQlg1uPfCopFANxdgBUBcQRp2a6AK9UfAGxPQH8EcGSgcCUWgOV4hV7cCxqNgQDoJgDNByLAQDYjZSFUgcOcaArAxVk4zspsIKwLkwdQCAQgX5n4QLY24hRJQL40Pw+kIQiA+QuANAQJYNoB3QagEB4CkhBEgDkDsvokEEMQAXM7AI1AEsJjQAhhXCCEMDDgQ3gO8GMYGdhDGBnYQ2gGQA7sY3geUGKgnmInAORANUUioMQA3AK4dgDkQC3FboASA7UUOwD6+jQQAdsOKDFQCaEfAHLgOsWOgBIDxxSXJBE6kOyTPv5SgCwEQH/l+EBoVlxA+fH7IgMoxXh/bg0SILxyYgJoRO9tMoDfa7nw1kuJgP0A/PMjCTh749kMgAfSvmtNtwO6KAwFFEPgZFADqqfx7PtBG8C5EouWFJDcTMVDAMbtnC4JECcU+oyUAssmWODMiWhRylr5wOJb6etCtiziRslH2yX+/ld9Nh4X+AUBg9CLMlCEqAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0xMi0yOFQxNjo0ODo1OCswMDowMGbztFMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMTItMjZUMTE6MjY6MDUrMDA6MDCVFGlIAAAAAElFTkSuQmCC" type="image/x-icon">
<link rel="stylesheet" href="kiri.css" integrity="">
<link rel="stylesheet" href="layer_colors.css" integrity="">
<title>[PROJECT_TITLE]</title>
@ -319,6 +317,7 @@
</div>
</div>
<script src="./utils/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="./utils/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
<script src="./utils/svg-pan-zoom.min.js" integrity=""></script>
<script src="./kiri.js" integrity="" crossorigin="anonymous"></script>

View File

@ -548,13 +548,13 @@ function update_selected_page()
if (sheet_pages_commit1.has(page_filename)) {
image_path_1 = "../" + commit1.value + "/_KIRI_/sch/" + page_filename + ".svg";
} else {
image_path_1 = "images/blank.svg";
image_path_1 = "blank.svg";
}
if (sheet_pages_commit2.has(page_filename)) {
image_path_2 = "../" + commit2.value + "/_KIRI_/sch/" + page_filename + ".svg";
} else {
image_path_2 = "images/blank.svg";
image_path_2 = "blank.svg";
}
console.log("[SCH] page_filename =", page_filename);
@ -907,12 +907,12 @@ function update_selected_layer() {
if (layers_commit1.has(layer_id)) {
image_path_1 = "../" + commit1.value + "/_KIRI_/pcb/layer" + "-" + layer_id + ".svg";
} else {
image_path_1 = "images/blank.svg";
image_path_1 = "blank.svg";
}
if (layers_commit2.has(layer_id)) {
image_path_2 = "../" + commit2.value + "/_KIRI_/pcb/layer" + "-" + layer_id + ".svg";
} else {
image_path_2 = "images/blank.svg";
image_path_2 = "blank.svg";
}
console.log("[PCB] layer_id =", layer_id);