forked from Botanical/BotanJS
Reduced some image 301 round trips
This commit is contained in:
parent
ec55e174db
commit
16f112485a
@ -10,16 +10,15 @@ RUN chown www-data:www-data . -R
|
||||
|
||||
RUN pip3 install Flask redis compressinja Celery
|
||||
|
||||
COPY . /app/
|
||||
|
||||
ADD [ "https://github.com/tgckpg/BotanJS/releases/download/compressors/closure.jar" \
|
||||
, "https://github.com/tgckpg/BotanJS/releases/download/compressors/yuicompressor.jar" \
|
||||
, "/opt/utils/" ]
|
||||
|
||||
RUN chmod 644 /opt/utils/*.jar
|
||||
|
||||
COPY . /app/
|
||||
|
||||
USER www-data
|
||||
|
||||
EXPOSE 5000
|
||||
ENTRYPOINT ["setup/docker.start"]
|
||||
|
||||
|
@ -1,7 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
import configparser
|
||||
import configparser, os
|
||||
|
||||
Config = configparser.ConfigParser( interpolation = configparser.ExtendedInterpolation() )
|
||||
Config.read( "settings.ini" )
|
||||
|
||||
DEBUG = Config[ "Env" ][ "Debug" ]
|
||||
DEBUG = os.getenv( "DEBUG" )
|
||||
if DEBUG is None:
|
||||
DEBUG = Config[ "Env" ][ "Debug" ]
|
||||
else:
|
||||
Config[ "Env" ][ "Debug" ] = DEBUG
|
||||
|
||||
REDIS_CONN = os.getenv( "REDIS_CONN" )
|
||||
if not REDIS_CONN is None:
|
||||
Config[ "Redis" ][ "ConnStr" ] = REDIS_CONN
|
||||
|
@ -285,7 +285,8 @@ class BotanClassResolver:
|
||||
if cacheFile != None:
|
||||
return cacheFile;
|
||||
|
||||
outputCss = ""
|
||||
# The root file
|
||||
outputCss = self.BotanFile( "_this.css" )
|
||||
|
||||
for f in self.cleanList( cList ):
|
||||
outputCss += self.BotanFile( f )
|
||||
|
@ -49,7 +49,7 @@
|
||||
}
|
||||
|
||||
textarea.v_snippet_input {
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
.site_file[data-type="album"] {
|
||||
.site-file[data-type="album"] {
|
||||
column-width: 225px;
|
||||
column-gap: 0.75em;
|
||||
}
|
||||
|
||||
.site_file[data-type="album"] > div {
|
||||
.site-file[data-type="album"] > div {
|
||||
display: inline-block;
|
||||
margin-bottom: 0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.site_file[data-type="album"] > div img {
|
||||
.site-file[data-type="album"] > div img {
|
||||
width: 100%;
|
||||
}
|
||||
|
@ -64,11 +64,9 @@
|
||||
|
||||
Cycle.next( function()
|
||||
{
|
||||
new SiteFile( this.id, this.hash );
|
||||
}.bind({ id: uuid, hash: file.hash }) );
|
||||
new SiteFile( this.id, this.info.hash, this.info );
|
||||
}.bind({ id: uuid, info: file }) );
|
||||
}
|
||||
|
||||
console.log( finfo );
|
||||
};
|
||||
|
||||
var loadFailed = function( obj )
|
||||
|
@ -4,7 +4,7 @@
|
||||
}
|
||||
|
||||
.inline-code {
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
font-size: 1.12em;
|
||||
|
||||
color: black;
|
||||
|
@ -20,7 +20,7 @@
|
||||
/** @type {_AstConf_.SiteFile} */
|
||||
var config = null;
|
||||
|
||||
var SiteFile = function ( id, hash )
|
||||
var SiteFile = function ( id, hash, nObj )
|
||||
{
|
||||
if( !config ) throw new Error( "config is not defined" );
|
||||
// TODO: Make a trigger for downloading from server
|
||||
@ -38,9 +38,14 @@
|
||||
if( stage.getAttribute( "noauto" ) != null ) return this;
|
||||
|
||||
var applyStructure = function( obj )
|
||||
{
|
||||
return _applyStructure( JSON.parse( obj ).file );
|
||||
};
|
||||
|
||||
var _applyStructure = function( obj )
|
||||
{
|
||||
/** @type {_AstJson_.SiteFile} */
|
||||
var finfo = JSON.parse( obj ).file;
|
||||
var finfo = obj;
|
||||
|
||||
switch( finfo.type )
|
||||
{
|
||||
@ -50,16 +55,16 @@
|
||||
switch( IDOMElement(stage).getDAttribute('size') )
|
||||
{
|
||||
case "small":
|
||||
node.src = config.path.image.small + hash + '.jpg';
|
||||
node.src = finfo.thumbs.small || ( config.path.image.small + hash + '.jpg' );
|
||||
break;
|
||||
case "medium":
|
||||
node.src = config.path.image.medium + hash + '.jpg';
|
||||
node.src = finfo.thumbs.medium || ( config.path.image.medium + hash + '.jpg' );
|
||||
break;
|
||||
case "original":
|
||||
node.src = config.path.image.original + hash + '.jpg';
|
||||
break;
|
||||
default: // large
|
||||
node.src = config.path.image.large + hash + '.jpg';
|
||||
node.src = finfo.thumbs.large || ( config.path.image.large + hash + '.jpg' );
|
||||
}
|
||||
|
||||
stage.appendChild(Dand.wrapne(
|
||||
@ -134,7 +139,14 @@
|
||||
stage.appendChild( Dand.wrapc( "sf_failed", Dand.textNode( "Error: Failed to get resources info" ) ) );
|
||||
};
|
||||
|
||||
this.loadInfo( applyStructure, loadFailed );
|
||||
if( nObj )
|
||||
{
|
||||
_applyStructure( nObj );
|
||||
}
|
||||
else
|
||||
{
|
||||
this.loadInfo( applyStructure, loadFailed );
|
||||
}
|
||||
};
|
||||
|
||||
SiteFile.prototype.loadInfo = function( success, failed )
|
||||
|
@ -40,7 +40,7 @@
|
||||
|
||||
/*{{{ Global Element Styles */
|
||||
pre {
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
}
|
||||
|
||||
textarea, input, div[contentEditable="true"], select {
|
||||
|
@ -1,5 +1,5 @@
|
||||
.build-list > a {
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
|
||||
display: block;
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
.build-status > * .failed { color: darkred; }
|
||||
|
||||
.build-commit-message {
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
padding: 0.2em 0;
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
.site-news { font-family: monospace; }
|
||||
.site-news { font-family: site-mono; }
|
||||
.site-news > span { display: block; }
|
||||
|
||||
.rbuilds > a {
|
||||
display: block;
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
}
|
||||
.rbuilds > a > span {
|
||||
padding: 0 0.5em;
|
||||
|
@ -7,7 +7,7 @@ body {
|
||||
font-family: custom-sans,Helvetica,Arial,STHeiti,"Microsoft JhengHei","微軟正黑體";
|
||||
}
|
||||
|
||||
pre { font-family: monospace; }
|
||||
pre { font-family: site-mono; }
|
||||
|
||||
::selection {
|
||||
color: white;
|
||||
@ -32,7 +32,7 @@ a {
|
||||
}
|
||||
|
||||
textarea {
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
}
|
||||
|
||||
sup { vertical-align: super; }
|
||||
|
@ -1,5 +1,5 @@
|
||||
h4 { font-family: custom-sans; }
|
||||
h5, h6 { font-family: monospace; }
|
||||
h5, h6 { font-family: site-mono; }
|
||||
h4 { font-size: 1.5em; }
|
||||
h5 { font-size: 1.3em; }
|
||||
h6 { font-size: 1.1em; }
|
||||
|
@ -7,7 +7,7 @@ body {
|
||||
font-family: custom-sans,Helvetica,Arial,STHeiti,"Microsoft JhengHei","微軟正黑體";
|
||||
}
|
||||
|
||||
pre { font-family: monospace; }
|
||||
pre { font-family: site-mono; }
|
||||
|
||||
::selection {
|
||||
color: white;
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
.dbg_lastMsg {
|
||||
float: left;
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
color: #AAA;
|
||||
font-size: 1em;
|
||||
|
||||
@ -67,5 +67,5 @@
|
||||
outline: none;
|
||||
border: none;
|
||||
|
||||
font-family: monospace;
|
||||
font-family: site-mono;
|
||||
}
|
||||
|
8
botanjs/src/_this.css
Normal file
8
botanjs/src/_this.css
Normal file
@ -0,0 +1,8 @@
|
||||
@font-face{
|
||||
font-family: site-mono;
|
||||
src: local("Consolas"),
|
||||
local("Bitstream Vera Sans Mono"),
|
||||
local("Courier New"),
|
||||
local("Courier"),
|
||||
local("monospace");
|
||||
}
|
@ -19,3 +19,11 @@ _AstJson_.SiteFile.file;
|
||||
_AstJson_.SiteFile.file.type;
|
||||
/** @type {String} */
|
||||
_AstJson_.SiteFile.file.src_location;
|
||||
/** @type {Object} */
|
||||
_AstConf_.SiteFile.thumbes;
|
||||
/** @type {String} */
|
||||
_AstConf_.SiteFile.thumbs.small;
|
||||
/** @type {String} */
|
||||
_AstConf_.SiteFile.thumbs.medium;
|
||||
/** @type {String} */
|
||||
_AstConf_.SiteFile.thumbs.large;
|
||||
|
@ -26,7 +26,7 @@ spec:
|
||||
mountPath: "/app/cache"
|
||||
containers:
|
||||
- name: web
|
||||
image: registry.k8s.astropenguin.net/astrojs:2022.04.05
|
||||
image: registry.k8s.astropenguin.net/astrojs:2022.04.05.03
|
||||
securityContext:
|
||||
runAsGroup: 1001
|
||||
runAsNonRoot: true
|
||||
@ -50,7 +50,7 @@ spec:
|
||||
- name: redis
|
||||
image: redis:6.0.8-alpine
|
||||
- name: compiler
|
||||
image: registry.k8s.astropenguin.net/astrojs:2022.04.05
|
||||
image: registry.k8s.astropenguin.net/astrojs:2022.04.05.03
|
||||
securityContext:
|
||||
runAsGroup: 1001
|
||||
runAsNonRoot: true
|
||||
|
@ -5,6 +5,9 @@ Port = 5000
|
||||
[Env]
|
||||
Debug = False
|
||||
|
||||
[Redis]
|
||||
ConnStr = redis://:@localhost:6379/9
|
||||
|
||||
[Paths]
|
||||
Runtime = ${SiteRoot}
|
||||
Log = ${SiteRoot}/logs
|
||||
@ -13,7 +16,7 @@ Cache = ${SiteRoot}/cache
|
||||
[BotanJS]
|
||||
SrcDir = ${Paths:Runtime}/botanjs/src
|
||||
|
||||
CeleryBroker = redis://:@localhost:6379/9
|
||||
CeleryBroker = ${Redis:ConnStr}
|
||||
|
||||
ClosureCompiler = /opt/utils/closure.jar
|
||||
YuiCompressor = /opt/utils/yuicompressor.jar
|
||||
|
@ -2,11 +2,13 @@ FROM astrojs/jre-nanoserver-20h2:latest
|
||||
|
||||
RUN pip3 install Flask redis compressinja celery
|
||||
|
||||
RUN New-Item -ItemType "Directory" -Path /opt/utils; \
|
||||
New-Item -ItemType "Directory" -Path /app; \
|
||||
RUN New-Item -ItemType Directory -Path /opt/utils; \
|
||||
New-Item -ItemType Directory -Path /app/cache -Force; \
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12; \
|
||||
Invoke-WebRequest -UseBasicParsing -Uri 'https://github.com/tgckpg/BotanJS/releases/download/compressors/closure.jar' -OutFile '/opt/utils/closure.jar' ; \
|
||||
Invoke-WebRequest -UseBasicParsing -Uri 'https://github.com/tgckpg/BotanJS/releases/download/compressors/yuicompressor.jar' -OutFile '/opt/utils/yuicompressor.jar' ;
|
||||
|
||||
EXPOSE 5000
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
|
||||
EXPOSE 5000
|
||||
|
9
windows/base-compose.yml
Normal file
9
windows/base-compose.yml
Normal file
@ -0,0 +1,9 @@
|
||||
version: '3.9'
|
||||
|
||||
services:
|
||||
python:
|
||||
build: pyrt
|
||||
image: astrojs/pyrt-nanoserver-20h2
|
||||
jre:
|
||||
build: jre
|
||||
image: astrojs/jre-nanoserver-20h2
|
@ -1,12 +1,6 @@
|
||||
version: '3.9'
|
||||
|
||||
services:
|
||||
python:
|
||||
build: pyrt
|
||||
image: astrojs/pyrt-nanoserver-20h2
|
||||
jre:
|
||||
build: jre
|
||||
image: astrojs/jre-nanoserver-20h2
|
||||
redis:
|
||||
container_name: astrojsdev_redis
|
||||
build: redis
|
||||
@ -17,23 +11,25 @@ services:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: windows/app/Dockerfile
|
||||
environment:
|
||||
REDIS_CONN: redis://:@redis:6379/9
|
||||
command: [ "python", "main.py" ] # [ "ping", "127.0.0.1", "-n", "9999" ]
|
||||
depends_on:
|
||||
- redis
|
||||
ports:
|
||||
- 5000:5000
|
||||
volumes:
|
||||
- ../:C:/app
|
||||
- cache:C:/app/cache
|
||||
tasks:
|
||||
container_name: astrojsdev_compiler
|
||||
image: astrojs/app
|
||||
environment:
|
||||
REDIS_CONN: redis://:@redis:6379/9
|
||||
command: [ "celery", "-A", "botanjs.service.jwork", "worker", "-l", "info", "--pool=solo" ]
|
||||
depends_on:
|
||||
- redis
|
||||
- web
|
||||
volumes:
|
||||
- ../:C:/app
|
||||
|
||||
- cache:C:/app/cache
|
||||
volumes:
|
||||
cache:
|
||||
temp:
|
||||
|
Loading…
Reference in New Issue
Block a user