REFACTOR: Refactor WebUI

This commit is contained in:
Dominique Barton 2020-02-09 01:12:22 +01:00
parent f0e82de2eb
commit cf8f539f02
6 changed files with 48 additions and 51 deletions

View file

@ -7,7 +7,7 @@ import os
import mopidy
from .frontend import PummeluffFrontend
from .web import LatestHandler, RegistryHandler, RegisterHandler, TypesHandler
from .web import LatestHandler, RegistryHandler, RegisterHandler, TagClassesHandler
def app_factory(config, core): # pylint: disable=unused-argument
@ -24,7 +24,7 @@ def app_factory(config, core): # pylint: disable=unused-argument
('/latest/', LatestHandler, {'core': core}),
('/registry/', RegistryHandler, {'core': core}),
('/register/', RegisterHandler, {'core': core}),
('/types/', TypesHandler, {'core': core}),
('/tag-classes/', TagClassesHandler, {'core': core}),
]

View file

@ -15,3 +15,7 @@ from .volume import Volume
from .play_pause import PlayPause
from .stop import Stop
from .shutdown import Shutdown
TAGS = {}
for tag in __all__:
TAGS[tag] = globals()[tag].__doc__.strip()

View file

@ -6,6 +6,7 @@ __all__ = (
'LatestHandler',
'RegistryHandler',
'RegisterHandler',
'TagClassesHandler',
)
from json import dumps
@ -13,8 +14,9 @@ from logging import getLogger
from tornado.web import RequestHandler
from . import tags
from .threads import TagReader
from mopidy_pummeluff.registry import REGISTRY
from mopidy_pummeluff.tags import TAGS
from mopidy_pummeluff.threads import TagReader
LOGGER = getLogger(__name__)
@ -77,7 +79,7 @@ class RegistryHandler(RequestHandler): # pylint: disable=abstract-method
'''
tags_list = []
for tag in tags.Tag.all().values():
for tag in REGISTRY.values():
tags_list.append(tag.dict)
data = {
@ -108,11 +110,11 @@ class RegisterHandler(RequestHandler): # pylint: disable=abstract-method
Handle POST request.
'''
try:
tag = tags.Tag.register(
tag = REGISTRY.register(
tag_class=self.get_argument('tag-class'),
uid=self.get_argument('uid'),
alias=self.get_argument('alias', None),
parameter=self.get_argument('parameter'),
tag_type=self.get_argument('type')
parameter=self.get_argument('parameter', None),
)
data = {
@ -139,9 +141,9 @@ class RegisterHandler(RequestHandler): # pylint: disable=abstract-method
self.post()
class TypesHandler(RequestHandler): # pylint: disable=abstract-method
class TagClassesHandler(RequestHandler): # pylint: disable=abstract-method
'''
Request handler which returns all tag types.
Request handler which returns all tag classes.
'''
def initialize(self, core): # pylint: disable=arguments-differ
@ -156,19 +158,10 @@ class TypesHandler(RequestHandler): # pylint: disable=abstract-method
'''
Handle GET request.
'''
types = {}
for cls_name in tags.__all__:
tag_cls = getattr(tags, cls_name)
if tag_cls is not tags.Tag:
tag_type = tags.Tag.get_type(tag_cls)
tag_doc = tag_cls.__doc__.strip().split('.')[0]
types[tag_type] = tag_doc
data = {
'success': True,
'message': 'Types successfully retreived',
'types': types
'message': 'Tag classes successfully retreived',
'tag_classes': TAGS
}
self.set_header('Content-type', 'application/json')

View file

@ -21,8 +21,8 @@
<a id="read-rfid-tag" href="#">Read UID from RFID tag…</a>
<label for="alias">Alias</label>
<input id="alias" name="alias" type="text" placeholder="Your personal alias / identifier">
<label for="type">Type</label>
<select id="type" name="type">
<label for="tag-class">Class</label>
<select id="tag-class" name="tag-class">
</select>
<label for="parameter">Parameter</label>
<input id="parameter" name="parameter" type="text" placeholder="A type-specific parameter">

View file

@ -40,12 +40,12 @@ class API {
let tagElement = document.createElement('div')
tagElement.setAttribute('class', 'tag')
let args = new Array('alias', 'uid', 'type', 'parameter')
let args = new Array('alias', 'uid', 'tag_class', 'parameter')
for(let arg of args)
{
let spanElement = document.createElement('span')
let value = tag[arg] ? tag[arg] : '-'
spanElement.setAttribute('class', arg)
spanElement.setAttribute('class', arg.replace('_', '-'))
spanElement.innerHTML = value
tagElement.appendChild(spanElement)
}
@ -58,27 +58,27 @@ class API {
}
/*
* Refresh the tag types.
* Refresh the tags.
*/
refreshTypes()
refreshTagClasses()
{
let callback = function(response)
{
let select = document.getElementById('type');
let select = document.getElementById('tag-class');
while(select.firstChild)
select.removeChild(select.firstChild)
for(let type in response.types)
for(let tag_class in response.tag_classes)
{
let option = document.createElement('option')
option.setAttribute('value', type)
option.innerHTML = type + ' (' + response.types[type] + ')'
option.setAttribute('value', tag_class)
option.innerHTML = tag_class + ' (' + response.tag_classes[tag_class] + ')'
select.appendChild(option)
}
}
this.request('/pummeluff/types/', false, callback)
this.request('/pummeluff/tag-classes/', false, callback)
}
/*
@ -95,10 +95,10 @@ class API {
if(response.success)
{
api.refreshRegistry()
document.getElementById('uid').value = ''
document.getElementById('alias').value = ''
document.getElementById('parameter').value = ''
document.getElementById('type').selectIndex = 0
document.getElementById('uid').value = ''
document.getElementById('alias').value = ''
document.getElementById('parameter').value = ''
document.getElementById('tag-class').selectIndex = 0
}
else
{
@ -117,15 +117,15 @@ class API {
{
let latest_tag = undefined
let uid_field = document.getElementById('uid')
let alias_field = document.getElementById('alias')
let parameter_field = document.getElementById('parameter')
let type_select = document.getElementById('type')
let uid_field = document.getElementById('uid')
let alias_field = document.getElementById('alias')
let parameter_field = document.getElementById('parameter')
let tag_class_select = document.getElementById('tag-class')
uid_field.value = ''
alias_field.value = ''
parameter_field.value = ''
type_select.selectIndex = 0
uid_field.value = ''
alias_field.value = ''
parameter_field.value = ''
tag_class_select.selectIndex = 0
let link = document.getElementById('read-rfid-tag')
link.classList.add('reading')
@ -144,8 +144,8 @@ class API {
if(response.parameter)
parameter_field.value = response.parameter
if(response.type)
type_select.value = response.type
if(response.tag_class)
tag_class_select.value = response.tag_class
link.classList.remove('reading')
}
@ -168,7 +168,7 @@ class API {
api = new API()
api.refreshRegistry();
api.refreshTypes();
api.refreshTagClasses();
document.getElementById('register-form').onsubmit = function()
{

View file

@ -117,8 +117,8 @@ button
#read-rfid-tag
{
text-decoration: none;
color: #fa0;
font-size: 11px;
color : #fa0;
font-size : 11px;
}
#read-rfid-tag.reading {
@ -144,13 +144,13 @@ div.tag
}
div.tag span.uid,
div.tag span.type,
div.tag span.tag-class,
div.tag span.parameter
{
font-family: Courier New, monospace;
}
div.tag span.type
div.tag span.tag-class
{
display : inline-block;
background-color: #888;