From 55624bcff98eb36dce6d6634a0cd27532179dfdd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 29 Jul 2016 00:49:58 -0700 Subject: [PATCH] Add custom panel example using React (#2651) --- .gitignore | 1 + .../custom_components/react_panel/__init__.py | 30 ++ .../custom_components/react_panel/panel.html | 415 ++++++++++++++++++ homeassistant/components/frontend/__init__.py | 30 +- homeassistant/components/frontend/version.py | 2 +- .../frontend/www_static/frontend.html | 2 +- .../frontend/www_static/frontend.html.gz | Bin 136431 -> 136434 bytes .../www_static/home-assistant-polymer | 2 +- .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2172 -> 2175 bytes 10 files changed, 471 insertions(+), 13 deletions(-) create mode 100644 config/custom_components/react_panel/__init__.py create mode 100644 config/custom_components/react_panel/panel.html diff --git a/.gitignore b/.gitignore index 2edbd42b839..64ab38f2da8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ config/custom_components/* !config/custom_components/example.py !config/custom_components/hello_world.py !config/custom_components/mqtt_example.py +!config/custom_components/react_panel tests/testing_config/deps tests/testing_config/home-assistant.log diff --git a/config/custom_components/react_panel/__init__.py b/config/custom_components/react_panel/__init__.py new file mode 100644 index 00000000000..57073b8cddc --- /dev/null +++ b/config/custom_components/react_panel/__init__.py @@ -0,0 +1,30 @@ +""" +Custom panel example showing TodoMVC using React. + +Will add a panel to control lights and switches using React. Allows configuring +the title via configuration.yaml: + +react_panel: + title: 'home' + +""" +import os + +from homeassistant.components.frontend import register_panel + +DOMAIN = 'react_panel' +DEPENDENCIES = ['frontend'] + +PANEL_PATH = os.path.join(os.path.dirname(__file__), 'panel.html') + + +def setup(hass, config): + """Initialize custom panel.""" + title = config.get(DOMAIN, {}).get('title') + + config = None if title is None else {'title': title} + + register_panel(hass, 'react', PANEL_PATH, + title='TodoMVC', icon='mdi:checkbox-marked-outline', + config=config) + return True diff --git a/config/custom_components/react_panel/panel.html b/config/custom_components/react_panel/panel.html new file mode 100644 index 00000000000..12b473cc466 --- /dev/null +++ b/config/custom_components/react_panel/panel.html @@ -0,0 +1,415 @@ + + + + + + + + + + + + + + diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index 021f209a56f..3925170694e 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -1,4 +1,5 @@ """Handle the frontend for Home Assistant.""" +import hashlib import logging import os @@ -25,20 +26,27 @@ def register_built_in_panel(hass, component_name, title=None, icon=None, # pylint: disable=too-many-arguments path = 'panels/ha-panel-{}.html'.format(component_name) + if hass.wsgi.development: + url = ('/static/home-assistant-polymer/panels/' + '{0}/ha-panel-{0}.html'.format(component_name)) + else: + url = None # use default url generate mechanism + register_panel(hass, component_name, os.path.join(STATIC_PATH, path), - FINGERPRINTS[path], title, icon, url_name, config) + FINGERPRINTS[path], title, icon, url_name, url, config) -def register_panel(hass, component_name, path, md5, title=None, icon=None, - url_name=None, config=None): +def register_panel(hass, component_name, path, md5=None, title=None, icon=None, + url_name=None, url=None, config=None): """Register a panel for the frontend. component_name: name of the web component path: path to the HTML of the web component - md5: the md5 hash of the web component (for versioning) + md5: the md5 hash of the web component (for versioning, optional) title: title to show in the sidebar (optional) icon: icon to show next to title in sidebar (optional) url_name: name to use in the url (defaults to component_name) + url: for the web component (for dev environment, optional) config: config to be passed into the web component Warning: this API will probably change. Use at own risk. @@ -50,8 +58,13 @@ def register_panel(hass, component_name, path, md5, title=None, icon=None, if url_name in PANELS: _LOGGER.warning('Overwriting component %s', url_name) if not os.path.isfile(path): - _LOGGER.warning('Panel %s component does not exist: %s', - component_name, path) + _LOGGER.error('Panel %s component does not exist: %s', + component_name, path) + return + + if md5 is None: + with open(path) as fil: + md5 = hashlib.md5(fil.read().encode('utf-8')).hexdigest() data = { 'url_name': url_name, @@ -65,9 +78,8 @@ def register_panel(hass, component_name, path, md5, title=None, icon=None, if config is not None: data['config'] = config - if hass.wsgi.development: - data['url'] = ('/static/home-assistant-polymer/panels/' - '{0}/ha-panel-{0}.html'.format(component_name)) + if url is not None: + data['url'] = url else: url = URL_PANEL_COMPONENT.format(component_name) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index a1225558535..74e84e8c06d 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -2,7 +2,7 @@ FINGERPRINTS = { "core.js": "bc78f21f5280217aa2c78dfc5848134f", - "frontend.html": "6fdf8282937005d3e4395f456199b118", + "frontend.html": "6c52e8cb797bafa3124d936af5ce1fcc", "mdi.html": "f6c6cc64c2ec38a80e91f801b41119b3", "panels/ha-panel-dev-event.html": "20327fbd4fb0370aec9be4db26fd723f", "panels/ha-panel-dev-info.html": "28e0a19ceb95aa714fd53228d9983a49", diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index 77bd761fe78..9dafede2a71 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -3,4 +3,4 @@ e._bubble()}function Bn(e,t){return $n(this,e,t,1)}function Jn(e,t){return $n(th },_distributeDirtyRoots:function(){for(var e,t=this.shadyRoot._dirtyRoots,o=0,i=t.length;o0?~setTimeout(e,t):(this._twiddle.textContent=this._twiddleContent++,this._callbacks.push(e),this._currVal++)},cancel:function(e){if(e<0)clearTimeout(~e);else{var t=e-this._lastVal;if(t>=0){if(!this._callbacks[t])throw"invalid async handle: "+e;this._callbacks[t]=null}}},_atEndOfMicrotask:function(){for(var e=this._callbacks.length,t=0;t \ No newline at end of file +}var r=window.requestAnimationFrame;window.requestAnimationFrame=function(t){return r(function(e){window.document.timeline._updateAnimationsPromises(),t(e),window.document.timeline._updateAnimationsPromises()})},e.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},e.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){e.animationsWithPromises=e.animationsWithPromises.filter(function(t){return t._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(t){return"finished"!=t.playState&&"idle"!=t.playState})},_play:function(t){var i=new e.Animation(t,this);return this._animations.push(i),e.restartWebAnimationsNextTick(),i._updatePromises(),i._animation.play(),i._updatePromises(),i},play:function(t){return t&&t.remove(),this._play(t)}};var o=!1;e.restartWebAnimationsNextTick=function(){o||(o=!0,requestAnimationFrame(n))};var a=new e.AnimationTimeline;e.timeline=a;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return a}})}catch(t){}try{window.document.timeline=a}catch(t){}}(c,e,f),function(t,e,i){e.animationsWithPromises=[],e.Animation=function(e,i){if(this.id="",e&&e._id&&(this.id=e._id),this.effect=e,e&&(e._animation=this),!i)throw new Error("Animation with null timeline is not supported");this._timeline=i,this._sequenceNumber=t.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},e.Animation.prototype={_updatePromises:function(){var t=this._oldPlayState,e=this.playState;return this._readyPromise&&e!==t&&("idle"==e?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==t?this._resolveReadyPromise():"pending"==e&&(this._readyPromise=void 0)),this._finishedPromise&&e!==t&&("idle"==e?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==e?this._resolveFinishedPromise():"finished"==t&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var t,i,n,r,o=!!this._animation;o&&(t=this.playbackRate,i=this._paused,n=this.startTime,r=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=e.newUnderlyingAnimationForKeyframeEffect(this.effect),e.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=e.newUnderlyingAnimationForGroup(this.effect),e.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&e.bindAnimationForCustomEffect(this),o&&(1!=t&&(this.playbackRate=t),null!==n?this.startTime=n:null!==r?this.currentTime=r:null!==this._holdTime&&(this.currentTime=this._holdTime),i&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var t=this.effect._timing.delay;this._childAnimations.forEach(function(i){this._arrangeChildren(i,t),this.effect instanceof window.SequenceEffect&&(t+=e.groupChildDuration(i.effect))}.bind(this))}},_setExternalAnimation:function(t){if(this.effect&&this._isGroup)for(var e=0;e \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz index 54153e3662ff05a2ed772ab7152cdd391845facd..bbc4f6c09f9d08b01492106c6d4a391486936796 100644 GIT binary patch delta 15213 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 Ykp1q}g7=Q{zyI4mObu7Ax8Yy_0O<>Y{Qv*} delta 15210 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 HFarYsSAHRl literal 2172 zcmb2|=HL)DoE6T*T%1}|mYJLyU!Gr-om!-qRm`w7B0K-KmC#@9RU1l|_O6*w6~x)H zX#4hvm<4ym?uz}LaF+Ln#I3BCM#^3@p+0{ z)X_u%gQ=-HPXf1$-%wIWNHt~95yY1SxZ&U87+$Vvtzc{tlLh9W*p6ka?w## zS>)3(Lw(B9!Wkb`I8sksn|H|KNVU--N6wWB!iKDeDo#}_o04!+cpi_r0bkNlrKw$0 znEfyNbO`KU;-%8N`%ixUl2jdyWS0*dzUmVaqa+PFDn(YRRNv`uyt(I1jOL`Ym=`Tx zYd5PX&tml{(wV_!G|_2S*;EG~W;qVO1>D{rbo^BMH9IAiv>eI|=Qy(Ql7sRo=d*^@ zf}E^J3YRzpFXc$fE0**X;+nM4Vqt{P++{jXTUd0ulax3kRo8k4D4tKfdm!S(l$Q;! zEDjW1n(~=JUgHdBw*;^9+xmR#l8Nt>1OgA4u&>%25Y(jj(IaE(l8^K5eq}wzaZyjy zvF(8B#zR$Yk!zHB^iH!ZogI{IBEK;7n9`jSha(b#Hc6b8W9ba4IseN?GvlP5nPLRlOXntWCE$<-Oee;xr60>mkQ@@G(9K(00xalm-)Dj7Mar1!P;grBn zX{o)Z1C~d&@rcGG3kscO?X~O@-@qZ7dOb?<^(x!zf3`*UWQzScl3yR^d%>?o)oq56 zk09HT;1>^7SyEWMw=kX2w6^X>m=q`LOsvv(J=){Hz;^nc zKyzas-u;eI_neEB)mCRzNU-*3X=!o`wsXu>;WC)QbJcL+ocB??nH68(+_NsA_I6>U zL=LN~=>><9j7M5iGNn?Dl(4@# z@}fh2#s8ikI+J&9z3sXy?^%Btl@|YZU-}?@-`j+Fh4Q=1j(+BPw`TqP`^leo$;^^6 zTV->8r~UJ^sD-8bbpuzkPXGNw$9&!K+Tj1(()p%^cb1wnUcUc*yKA;XVg);& zZ(iNsU$Ul`*1xhozPCn&q5HS)2RFa-Md^EMa{J#r{AJB~=B;tDfYZggLqGQUZVX7h z=vpY?v{1HbJM;dQtfXb{9(-iA>^Qn(cJ;dELpE28ElgPo=I|N(toHy!(=8b-yP@)_-A| zDi(El`C9FZ!u$4JcimcMy2fw|bH~GnmU_4UT=cU3efa)Djtbkor=z}IDcftVo;`W} z-yh4fpYN^RRCN2XfB270{A^1f#hNGVdv6h(*z|Uh6RXa~+;`77|5(S(SU*+ME4|$A zpT@q$XLy9aUQXP3-sjSaqPv%ySKfIO^7F}!bLMBBWv8uwvGw423Bxu~=XEAOCkEIG ze-(|Xj#$yyIRBx2H=keccZG?96{{YkRwr(+$cZsOx@5(hr)+v*!9h2%ct2k^5uW7-y3D?_tJ4?_qx*BE9V%y zH%RX-FnD#UimlN5dwq4a^}acKp z#oZklXWJE%o-b_w@48jv^uDxB`3HA*6`sm#|2y?9w{-P2<7;P&ws#zV`TFGE`8HD& zf6Kq$$J3e3miOz1-tw(dDkq=xe+y2pPP#b7-?#F{zf^0dr<*2AOEKe5X9 zYOR@lvR}>Vc*(ABEo&1!vWsN6^gm|JU72Qb>zF0$Is?7>Q@8o%2|YVj=AY|u@@}4k z-|3=-0({#V=Re!iFWfKdn}2TV-{p_@)IH>R{6pVPzi#cn(t_e}bNdAc17)6``1|{Q zLDqfm`PCMtrtG!fKV8f|J-4oY?~}u&R=T10xtf#qU0(I$u@?LC)C+HNB%ZllKC5~> z&EW2Xb=%`+Wd`4me9w0Fe^Zfd$F|yI=W|wPto1whzV@~(%P$t$YqPc|9hJ@3dVckG zRp6>u_t*DaO%>gyyZE)*x6{|QefU~y_G8zExVoCH^B?y)Iyc|8dB@rO_Wgd&(~}NN I5oTZj01ap?p#T5?