diff --git a/bin/web_kbn.py b/bin/web_kbn.py index b66e2a5..e160fde 100644 --- a/bin/web_kbn.py +++ b/bin/web_kbn.py @@ -5,11 +5,13 @@ import aiohttp_jinja2 import os import __py_include +from io import StringIO from typing import Optional from homekit.config import config, AppConfigUnit from homekit.util import homekit_path from aiohttp import web from homekit import http +from homekit.modem import ModemsConfig class WebKbnConfig(AppConfigUnit): @@ -18,10 +20,50 @@ class WebKbnConfig(AppConfigUnit): @classmethod def schema(cls) -> Optional[dict]: return { - 'listen_addr': cls._addr_schema(required=True) + 'listen_addr': cls._addr_schema(required=True), + 'assets_public_path': {'type': 'string'} } +STATIC_FILES = [ + 'bootstrap.min.css', + 'bootstrap.min.js', + 'polyfills.js', + 'app.js', + 'app.css' +] + + +def get_js_link(file, version) -> str: + if version: + file += f'?version={version}' + return f'' + + +def get_css_link(file, version) -> str: + if version: + file += f'?version={version}' + return f'' + + +def get_head_static() -> str: + buf = StringIO() + for file in STATIC_FILES: + v = 1 + try: + q_ind = file.index('?') + v = file[q_ind+1:] + file = file[:file.index('?')] + except ValueError: + pass + + if file.endswith('.js'): + buf.write(get_js_link(file, v)) + else: + buf.write(get_css_link(file, v)) + return buf.getvalue() + + class WebSite(http.HTTPServer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -31,20 +73,29 @@ class WebSite(http.HTTPServer): loader=jinja2.FileSystemLoader(homekit_path('web', 'kbn_templates')) ) + self.app.router.add_static('/assets/', path=homekit_path('web', 'kbn_assets')) + self.get('/', self.get_index) + self.get('/modems', self.get_modems) - @staticmethod - async def get_index(req: http.Request): - # context = { - # 'username': request.match_info.get("username", ""), - # 'current_date': 'January 27, 2017' - # } - # response = aiohttp_jinja2.render_template("example.html", request, - # context=context) - # return response + async def render_page(self, + req: http.Request, + context: Optional[dict] = None): + if context is None: + context = {} + context = { + **context, + 'head_static': get_head_static(), + 'title': 'this is title' + } + response = aiohttp_jinja2.render_template('index.html', req, context=context) + return response - message = "nothing here, keep lurking" - return http.Response(text=message, content_type='text/plain') + async def get_index(self, req: http.Request): + return await self.render_page(req) + + async def get_modems(self, req: http.Request): + pass if __name__ == '__main__': diff --git a/include/py/homekit/modem/__init__.py b/include/py/homekit/modem/__init__.py new file mode 100644 index 0000000..20e75b7 --- /dev/null +++ b/include/py/homekit/modem/__init__.py @@ -0,0 +1 @@ +from .config import ModemsConfig \ No newline at end of file diff --git a/include/py/homekit/modem/config.py b/include/py/homekit/modem/config.py new file mode 100644 index 0000000..039d759 --- /dev/null +++ b/include/py/homekit/modem/config.py @@ -0,0 +1,5 @@ +from ..config import ConfigUnit + + +class ModemsConfig(ConfigUnit): + pass diff --git a/localwebsite/handlers/ModemHandler.php b/localwebsite/handlers/ModemHandler.php index b54b82c..fb91084 100644 --- a/localwebsite/handlers/ModemHandler.php +++ b/localwebsite/handlers/ModemHandler.php @@ -7,12 +7,6 @@ use libphonenumber\PhoneNumberUtil; class ModemHandler extends RequestHandler { - public function __construct() - { - parent::__construct(); - $this->tpl->add_static('modem.js'); - } - public function GET_status_page() { global $config; diff --git a/localwebsite/htdocs/assets/modem.js b/localwebsite/htdocs/assets/modem.js deleted file mode 100644 index 9fdb91d..0000000 --- a/localwebsite/htdocs/assets/modem.js +++ /dev/null @@ -1,29 +0,0 @@ -var ModemStatus = { - _modems: [], - - init: function(modems) { - for (var i = 0; i < modems.length; i++) { - var modem = modems[i]; - this._modems.push(new ModemStatusUpdater(modem)); - } - } -}; - - -function ModemStatusUpdater(id) { - this.id = id; - this.elem = ge('modem_data_'+id); - this.fetch(); -} -extend(ModemStatusUpdater.prototype, { - fetch: function() { - ajax.get('/modem/get.ajax', { - id: this.id - }).then(({response}) => { - var {html} = response; - this.elem.innerHTML = html; - - // TODO enqueue rerender - }); - }, -}); \ No newline at end of file diff --git a/localwebsite/htdocs/assets/app.css b/web/kbn_assets/app.css similarity index 100% rename from localwebsite/htdocs/assets/app.css rename to web/kbn_assets/app.css diff --git a/localwebsite/htdocs/assets/app.js b/web/kbn_assets/app.js similarity index 94% rename from localwebsite/htdocs/assets/app.js rename to web/kbn_assets/app.js index 37f1307..c187f89 100644 --- a/localwebsite/htdocs/assets/app.js +++ b/web/kbn_assets/app.js @@ -316,4 +316,34 @@ window.Cameras = { return video.canPlayType('application/vnd.apple.mpegurl'); }, }; -})(); \ No newline at end of file +})(); + + +var ModemStatus = { + _modems: [], + + init: function(modems) { + for (var i = 0; i < modems.length; i++) { + var modem = modems[i]; + this._modems.push(new ModemStatusUpdater(modem)); + } + } +}; + +function ModemStatusUpdater(id) { + this.id = id; + this.elem = ge('modem_data_'+id); + this.fetch(); +} +extend(ModemStatusUpdater.prototype, { + fetch: function() { + ajax.get('/modem/get.ajax', { + id: this.id + }).then(({response}) => { + var {html} = response; + this.elem.innerHTML = html; + + // TODO enqueue rerender + }); + }, +}); \ No newline at end of file diff --git a/localwebsite/htdocs/assets/bootstrap.min.css b/web/kbn_assets/bootstrap.min.css similarity index 100% rename from localwebsite/htdocs/assets/bootstrap.min.css rename to web/kbn_assets/bootstrap.min.css diff --git a/localwebsite/htdocs/assets/bootstrap.min.js b/web/kbn_assets/bootstrap.min.js similarity index 100% rename from localwebsite/htdocs/assets/bootstrap.min.js rename to web/kbn_assets/bootstrap.min.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/h265webjs-v20221106-reminified.js b/web/kbn_assets/h265webjs-dist/h265webjs-v20221106-reminified.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/h265webjs-v20221106-reminified.js rename to web/kbn_assets/h265webjs-dist/h265webjs-v20221106-reminified.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/h265webjs-v20221106.js b/web/kbn_assets/h265webjs-dist/h265webjs-v20221106.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/h265webjs-v20221106.js rename to web/kbn_assets/h265webjs-dist/h265webjs-v20221106.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-120func-v20221120.js b/web/kbn_assets/h265webjs-dist/missile-120func-v20221120.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-120func-v20221120.js rename to web/kbn_assets/h265webjs-dist/missile-120func-v20221120.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-120func-v20221120.wasm b/web/kbn_assets/h265webjs-dist/missile-120func-v20221120.wasm similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-120func-v20221120.wasm rename to web/kbn_assets/h265webjs-dist/missile-120func-v20221120.wasm diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-120func.js b/web/kbn_assets/h265webjs-dist/missile-120func.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-120func.js rename to web/kbn_assets/h265webjs-dist/missile-120func.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-256mb-v20221120.js b/web/kbn_assets/h265webjs-dist/missile-256mb-v20221120.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-256mb-v20221120.js rename to web/kbn_assets/h265webjs-dist/missile-256mb-v20221120.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-256mb-v20221120.wasm b/web/kbn_assets/h265webjs-dist/missile-256mb-v20221120.wasm similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-256mb-v20221120.wasm rename to web/kbn_assets/h265webjs-dist/missile-256mb-v20221120.wasm diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-256mb.js b/web/kbn_assets/h265webjs-dist/missile-256mb.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-256mb.js rename to web/kbn_assets/h265webjs-dist/missile-256mb.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-512mb-v20221120.js b/web/kbn_assets/h265webjs-dist/missile-512mb-v20221120.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-512mb-v20221120.js rename to web/kbn_assets/h265webjs-dist/missile-512mb-v20221120.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-512mb-v20221120.wasm b/web/kbn_assets/h265webjs-dist/missile-512mb-v20221120.wasm similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-512mb-v20221120.wasm rename to web/kbn_assets/h265webjs-dist/missile-512mb-v20221120.wasm diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-512mb.js b/web/kbn_assets/h265webjs-dist/missile-512mb.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-512mb.js rename to web/kbn_assets/h265webjs-dist/missile-512mb.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-format.js b/web/kbn_assets/h265webjs-dist/missile-format.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-format.js rename to web/kbn_assets/h265webjs-dist/missile-format.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-v20221120.js b/web/kbn_assets/h265webjs-dist/missile-v20221120.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-v20221120.js rename to web/kbn_assets/h265webjs-dist/missile-v20221120.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile-v20221120.wasm b/web/kbn_assets/h265webjs-dist/missile-v20221120.wasm similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile-v20221120.wasm rename to web/kbn_assets/h265webjs-dist/missile-v20221120.wasm diff --git a/localwebsite/htdocs/assets/h265webjs-dist/missile.js b/web/kbn_assets/h265webjs-dist/missile.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/missile.js rename to web/kbn_assets/h265webjs-dist/missile.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/raw-parser.js b/web/kbn_assets/h265webjs-dist/raw-parser.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/raw-parser.js rename to web/kbn_assets/h265webjs-dist/raw-parser.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/worker-fetch-dist.js b/web/kbn_assets/h265webjs-dist/worker-fetch-dist.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/worker-fetch-dist.js rename to web/kbn_assets/h265webjs-dist/worker-fetch-dist.js diff --git a/localwebsite/htdocs/assets/h265webjs-dist/worker-parse-dist.js b/web/kbn_assets/h265webjs-dist/worker-parse-dist.js similarity index 100% rename from localwebsite/htdocs/assets/h265webjs-dist/worker-parse-dist.js rename to web/kbn_assets/h265webjs-dist/worker-parse-dist.js diff --git a/localwebsite/htdocs/assets/hls.js b/web/kbn_assets/hls.js similarity index 100% rename from localwebsite/htdocs/assets/hls.js rename to web/kbn_assets/hls.js diff --git a/localwebsite/htdocs/assets/inverter.js b/web/kbn_assets/inverter.js similarity index 100% rename from localwebsite/htdocs/assets/inverter.js rename to web/kbn_assets/inverter.js diff --git a/localwebsite/htdocs/assets/polyfills.js b/web/kbn_assets/polyfills.js similarity index 100% rename from localwebsite/htdocs/assets/polyfills.js rename to web/kbn_assets/polyfills.js diff --git a/web/kbn_templates/base.html b/web/kbn_templates/base.html index e567a90..43f7d2a 100644 --- a/web/kbn_templates/base.html +++ b/web/kbn_templates/base.html @@ -9,11 +9,13 @@ window.console && console.error(error); } - {{ head_static }} + {{ head_static | safe }}
+{% block content %} {% endblock %} + {% if js %} {% endif %} diff --git a/web/kbn_templates/index.html b/web/kbn_templates/index.html new file mode 100644 index 0000000..1921b87 --- /dev/null +++ b/web/kbn_templates/index.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} + +{% block content %} +
+ + + + + + + + +
Интернет
+ + +
Другое
+ + +
Все камеры (HQ)
+ +
+{% endblock %} \ No newline at end of file