Frontend: move hashchange/localstorage code into HA-JS

pull/197/head
Paulus Schoutsen 2015-06-23 23:22:32 -07:00
parent 2f876fb225
commit ad15a14f5d
8 changed files with 249 additions and 374 deletions

View File

@ -20,13 +20,21 @@ INDEX_PATH = os.path.join(os.path.dirname(__file__), 'index.html.template')
_LOGGER = logging.getLogger(__name__)
FRONTEND_URLS = [
URL_ROOT, '/logbook', '/history', '/devService', '/devState', '/devEvent']
STATES_URL = re.compile(r'/states(/([a-zA-Z\._\-0-9/]+)|)')
def setup(hass, config):
""" Setup serving the frontend. """
if 'http' not in hass.config.components:
_LOGGER.error('Dependency http is not loaded')
return False
hass.http.register_path('GET', URL_ROOT, _handle_get_root, False)
for url in FRONTEND_URLS:
hass.http.register_path('GET', url, _handle_get_root, False)
hass.http.register_path('GET', STATES_URL, _handle_get_root, False)
# Static files
hass.http.register_path(

View File

@ -1,2 +1,2 @@
""" DO NOT MODIFY. Auto-generated by build_frontend script """
VERSION = "ebe24a2f60f975cd4fb26156c44f3f3d"
VERSION = "0a0110c72a6db31f3fa069a053363d05"

File diff suppressed because one or more lines are too long

@ -1 +1 @@
Subproject commit 53941ad076fa5d453370cb6922cf6770202dc76e
Subproject commit 8242a36234b4fc55c8baec79f8ca72a86ca22751

View File

@ -39,7 +39,7 @@
var uiActions = window.hass.uiActions;
var authGetters = window.hass.authGetters;
var syncGetters = window.hass.syncGetters;
var uiPreferences = window.hass.uiPreferences;
var preferences = window.hass.localStoragePreferences;
Polymer({
is: 'home-assistant',
@ -67,11 +67,11 @@
// if auth was given, tell the backend
if(this.auth) {
uiActions.validateAuth(this.auth, false);
} else if (uiPreferences.authToken) {
uiActions.validateAuth(uiPreferences.authToken, true);
} else if (preferences.authToken) {
uiActions.validateAuth(preferences.authToken, true);
}
uiPreferences.startSync();
preferences.startSync();
},
});

View File

@ -58,6 +58,7 @@
var uiUtil = window.hass.uiUtil;
var entityDomainFilters = window.hass.util.entityDomainFilters;
var urlSync = window.hass.urlSync;
Polymer({
is: 'home-assistant-main',
@ -69,16 +70,10 @@
type: Boolean,
},
selected: {
activePage: {
type: String,
bindNuclear: [
navigationGetters.activePane,
navigationGetters.activeFilter,
function(pane, filter) {
return filter ? pane + '/' + filter : pane;
},
],
observer: 'selectedChanged',
bindNuclear: navigationGetters.activePage,
observer: 'activePageChanged',
},
isSelectedStates: {
@ -120,34 +115,16 @@
this.$.drawer.openDrawer();
},
closeDrawer: function() {
activePageChanged: function() {
this.$.drawer.closeDrawer();
},
hashChanged: function(ev) {
var parts = ev.newURL.split('#');
if (parts[1]) {
navigationActions.navigate.apply(
null, parts[1].split('/'));
}
},
selectedChanged: function(newVal) {
this.closeDrawer();
window.location.hash = newVal;
},
ready: function() {
this.hashChanged({newURL: window.location.toString()});
},
attached: function() {
this.hashChanged = this.hashChanged.bind(this);
window.addEventListener('hashchange', this.hashChanged);
urlSync.startSync();
},
detached: function() {
window.removeEventListener('hashchange', this.hashChanged);
urlSync.stopSync();
},
});
})();

View File

@ -1,51 +0,0 @@
<script>
(function() {
var reactor = window.hass.reactor;
var authGetters = window.hass.authGetters;
var streamGetters = window.hass.streamGetters;
var storage = 'localStorage' in window ? localStorage : {};
var observe = {
authToken: {
bindNuclear: [
authGetters.currentAuthToken,
authGetters.rememberAuth,
function(authToken, rememberAuth) {
return rememberAuth ? authToken : null;
},
],
defaultValue: null,
},
useStreaming: {
bindNuclear: streamGetters.useStreaming,
defaultValue: true,
},
};
var uiPreferences = {};
Object.keys(observe).forEach(function(prop) {
if (!(prop in storage)) {
storage[prop] = observe[prop].defaultValue;
}
Object.defineProperty(uiPreferences, prop, {
get: function() { return JSON.parse(storage[prop]); }
});
});
uiPreferences.startSync = function startSync() {
Object.keys(observe).forEach(function(prop) {
var getter = observe[prop].bindNuclear;
var valueChanged = function valueChanged(value) {
storage[prop] = JSON.stringify(value);
};
reactor.observe(getter, valueChanged);
valueChanged(reactor.evaluate(getter));
});
};
window.hass.uiPreferences = uiPreferences;
})();
</script>

View File

@ -1,5 +1,4 @@
<script src="../home-assistant-js/dist/homeassistant.min.js"></script>
<link rel="import" href="./ha-preferences.html">
<script>
(function() {
@ -14,13 +13,13 @@
var reactor = window.hass.reactor;
var serviceGetters = window.hass.serviceGetters;
var authActions = window.hass.authActions;
var uiPreferences = window.hass.uiPreferences;
var preferences = window.hass.localStoragePreferences;
window.hass.uiActions = {
validateAuth: function(authToken, rememberAuth) {
authActions.validate(authToken, {
useStreaming: uiPreferences.useStreaming,
rememberAuth: rememberAuth,
rememberAuth,
useStreaming: preferences.useStreaming,
});
},
};