big update, light switch in top navigation, bug fixes, LOTS of mobie work - almost there

This commit is contained in:
Egor 2016-11-20 13:15:24 -08:00
parent 85cdcf8c32
commit 649162c42f
73 changed files with 538 additions and 344 deletions

BIN
assets/splashscreen.psd Normal file

Binary file not shown.

View file

@ -13,10 +13,10 @@
{{content-for 'head'}}
<link href='//fonts.googleapis.com/css?family=Slabo+27px|Open+Sans' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Slabo+27px|Open+Sans' rel='stylesheet' type='text/css'>
<link rel="stylesheet" integrity="" href="{{rootURL}}assets/vendor.css">
<link rel="stylesheet" integrity="" href="{{rootURL}}assets/huegasm_mobile.css">
<link rel="stylesheet" integrity="" href="assets/vendor.css">
<link rel="stylesheet" integrity="" href="assets/huegasm_mobile.css">
{{content-for 'head-footer'}}
@ -26,7 +26,7 @@
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-69470561-1', 'auto');
ga('send', 'pageview');
@ -35,8 +35,8 @@
<body>
{{content-for 'body'}}
<script src="{{rootURL}}assets/vendor.js"></script>
<script src="{{rootURL}}assets/huegasm_mobile.js"></script>
<script src="assets/vendor.js"></script>
<script src="assets/huegasm_mobile.js"></script>
{{content-for 'body-footer'}}
</body>

View file

@ -0,0 +1,5 @@
import Ember from 'ember';
import SplashscreenMixin from 'ember-cordova/mixins/device/splashscreen';
export default Ember.Route.extend(SplashscreenMixin, {
});

View file

@ -8,16 +8,15 @@
{{else}}
<img src="assets/images/pressButtonBridge.png" id="press-bridge-button-img">
{{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}}
{{#if isAuthenticating}}
<p>
<p class="bridge-finder-bottom">
{{#if isAuthenticating}}
Your bridge IP is <b>{{bridgeIp}}</b>
<br>
Press the button on your bridge to authenticate this application.
</p>
{{else}}
<p>You failed to press the button in time. <a class="no-text-decoration" href="#" {{action 'retry'}}>RETRY</a></p>
{{/if}}
{{else}}
You failed to press the button in time. <a class="no-text-decoration" href="#" {{action 'retry'}}>RETRY</a>
{{/if}}
</p>
{{/if}}
{{else}}
{{#unless bridgeFindStatus}}

View file

@ -16,7 +16,7 @@ export default Component.extend({
lightsData: null,
activeLights: A(),
tabList: ["Lights", "Music"],
selectedTab: 1,
selectedTab: 0,
pauseLightUpdates: false,
lightsTabSelected: computed.equal('selectedTab', 0),
@ -176,32 +176,24 @@ export default Component.extend({
'You may toggle a light\'s state by clicking on it.'
},
{
element: '#settings',
element: $('#navigation .ember-basic-dropdown-trigger')[0],
intro: 'A few miscellaneous settings can be found here.<br><br>' +
'<b>WARNING</b>: clearing application settings will restore the application to its original state. This will even delete your playlist and any saved song beat preferences.',
position: 'bottom'
position: 'left'
},
{
element: '#dimmer',
intro: 'And that\'s it...Hope you enjoy the application. ;)<br><br>' +
'<i><b>TIP</b>: click on the icon to switch to a darker theme.</i>',
position: 'bottom'
'<i><b>TIP</b>: click on the lightswitch to switch to a darker theme.</i>',
}
]
});
// it's VERY ugly but it works... the jQuery massacre :'(
intro.onchange((element) => {
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container'){
$('#music-tab').removeClass('hidden');
$('#lights-tab').addClass('hidden');
$('.navigation-item').eq(0).removeClass('active');
$('.navigation-item').eq(1).addClass('active');
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip'){
$('.navigation-item').eq(1).click();
} else {
$('#lights-tab').removeClass('hidden');
$('#music-tab').addClass('hidden');
$('.navigation-item').eq(1).removeClass('active');
$('.navigation-item').eq(0).addClass('active');
$('.navigation-item').eq(0).click();
}
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area'){
@ -221,27 +213,6 @@ export default Component.extend({
}
});
let onFinish = ()=>{
this.set('activeTab', 1);
$('#music-tab').removeClass('hidden');
$('#lights-tab').addClass('hidden');
$('.navigation-item').eq(0).removeClass('active');
$('.navigation-item').eq(1).addClass('active');
}, onExit = ()=>{
let dimmer = $('#dimmer');
onFinish();
dimmer.popover({
trigger: 'manual',
placement: 'right',
content: 'Click on this icon to toggle the dark theme.'
}).popover('show');
setTimeout(()=>{
dimmer.popover('hide');
}, 5000);
};
// skip hidden/missing elements
intro.onafterchange((element)=>{
let elem = $(element);
@ -252,7 +223,7 @@ export default Component.extend({
run.later(this, function() {
$('.introjs-tooltip').velocity('scroll');
}, 500);
}).onexit(onExit).oncomplete(onFinish).start();
}).start();
},
toggleDimmer(){
this.toggleProperty('dimmerOn');

View file

@ -1,6 +1,8 @@
{{#if ready}}
<div id="navigation">
<div id="dimmer" {{action "toggleDimmer"}} class={{dimmerOnClass}}></div>
<div id="dimmer" class={{dimmerOnClass}} {{action "toggleDimmer"}}>
<div id="dimmer-switch"></div>
</div>
{{#each tabData as |tab|}}
<span class="navigation-item text-uppercase {{if tab.selected "active"}}" {{action "changeTab" tab.name}}>{{tab.name}}</span>
@ -9,7 +11,7 @@
{{#paper-menu as |menu|}}
{{#menu.trigger}}
{{#paper-button iconButton=true}}
{{paper-icon "settings-icon" class=dimmerOnClass size=28}}
{{paper-icon "settings-icon" class=dimmerOnClass size=28}}
{{/paper-button}}
{{/menu.trigger}}
{{#menu.content width=3 as |content|}}
@ -26,11 +28,11 @@
{{/content.menu-item}}
{{/menu.content}}
{{/paper-menu}}
</div>
</div>
{{light-group lightsData=lightsData activeLights=activeLights syncLight=syncLight apiURL=apiURL dimmerOn=dimmerOn storage=storage}}
{{lights-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial active=lightsTabSelected colorLoopOn=colorLoopOn dimmerOn=dimmerOn}}
{{lights-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial active=lightsTabSelected colorLoopOn=colorLoopOn dimmerOn=dimmerOn strobeOn=pauseLightUpdates}}
{{music-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights active=musicTabSelected pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn action="startIntro"}}
{{/if}}

View file

@ -17,7 +17,6 @@ export default Component.extend({
lightsOn: false,
// COLOR LOOP related stuff
colorLoopOn: false,
lightsOnTxt: computed('lightsOn', function(){
@ -192,7 +191,7 @@ export default Component.extend({
}
}
this.set('strobeOnInervalHandle', setInterval(this.strobeStep.bind(this), 200));
this.set('strobeOnInervalHandle', setInterval(this.strobeStep.bind(this), 500));
} else { // revert the light system to pre-strobe
let preStrobeOnLightsDataCache = this.get('preStrobeOnLightsDataCache'), updateLight = (lightIndex)=> {
$.ajax(this.get('apiURL') + '/lights/' + lightIndex + '/state', {

View file

@ -1,15 +1,14 @@
{{#if isShowingModal}}
{{#modal-dialog close="close" alignment="center" translucentOverlay=true attachment="center" targetAttachment="center"}}
<p>Enter a <a href="https://soundcloud.com" target="_blank" rel="noopener noreferrer">SoundCloud</a> track or playlist/set URL</p>
<p>Enter a <a href="https://soundcloud.com" onclick="window.open('https://soundcloud.com', '_system');">SoundCloud</a> track or playlist/set URL</p>
<p>( ex. https://soundcloud.com/mrsuicidesheep/tracks )</p>
{{paper-input label="SoundCloud URL" icon="search" value=url onChange=(action (mut url))}}
<div>
{{paper-button onClick=(action "close") label="Close"}}
{{paper-button onClick=(action "close") label="Close"}}
{{paper-button class="pull-right" onClick=(action "add") disabled=saveDisabled primary=true label="Add Music"}}
</div>
{{/modal-dialog}}
{{/if}}

View file

@ -331,7 +331,7 @@ export default Component.extend(helperMixin, visualizerMixin, {
this.set('usingMicSupported', false);
}
['volume', 'shuffle', 'repeat', 'volumeMuted', 'threshold', 'playerBottomDisplayed', 'audioMode', 'songBeatPreferences', 'firstVisit', 'currentVisName', 'playQueue', 'playQueuePointer', 'micBoost', 'flashingTransitions', 'colorloopMode', 'ambienceMode', 'hueRange'].forEach((item)=>{
['volume', 'shuffle', 'repeat', 'threshold', 'playerBottomDisplayed', 'audioMode', 'songBeatPreferences', 'firstVisit', 'currentVisName', 'playQueue', 'playQueuePointer', 'micBoost', 'flashingTransitions', 'colorloopMode', 'ambienceMode', 'hueRange'].forEach((item)=>{
if (!isNone(storage.get('huegasm.' + item))) {
let itemVal = storage.get('huegasm.' + item);
@ -399,9 +399,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
},
actions: {
clearPlaylist(){
this.get('playQueue').clear();
},
setVisName(name){
this.set('currentVisName', name);
},
@ -618,12 +615,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
} else {
let timeTotal = this.get('timeTotal');
if(this.get('volumeMuted')) {
dancer.setVolume(0);
} else {
dancer.setVolume(this.get('volume')/100);
}
// replay song
if(this.get('timeElapsed') === timeTotal && timeTotal !== 0){
this.send('next', true);
@ -644,10 +635,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
if(this.get('playing')) {
this.get('dancer').setVolume(value/100);
}
if(this.get('volume') > 0 && this.get('volumeMuted')){
this.changePlayerControl('volumeMuted', false);
}
},
next(repeatAll) {
let playQueuePointer = this.get('playQueuePointer'),
@ -736,20 +723,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
dancer.audio.currentTime = Math.floor(this.get('timeTotal') * position / 100);
}
},
volumeMutedChanged(value) {
let dancer = this.get('dancer'),
volumeMuted = isNone(value) ? !this.get('volumeMuted') : value;
this.changePlayerControl('volumeMuted', volumeMuted);
if(this.get('playing')){
if(volumeMuted){
dancer.setVolume(0);
} else {
dancer.setVolume(this.get('volume')/100);
}
}
},
addLocalAudio: function () {
$('#file-input').click();
},

View file

@ -6,7 +6,6 @@ const {
computed,
isNone,
inject,
on,
A
} = Ember;
@ -117,7 +116,6 @@ export default Mixin.create({
// 0 - no repeat, 1 - repeat all, 2 - repeat one
repeat: 0,
shuffle: false,
volumeMuted: false,
volume: 100,
// beat detection related pausing
paused: false,
@ -267,16 +265,6 @@ export default Mixin.create({
return this.get('dimmerOn') ? 'dimmerOn' : null;
}),
volumeMutedClass: computed('volumeMuted', function(){
let classes = 'player-control-icon volumeButton';
if(this.get('volumeMuted')){
classes += ' active';
}
return classes;
}),
usingLocalAudioClass: computed('usingLocalAudio', function(){
return this.get('usingLocalAudio') ? 'player-control-icon active' : 'player-control-icon';
}),
@ -293,20 +281,6 @@ export default Mixin.create({
return this.get('shuffle') ? 'player-control-icon active' : 'player-control-icon';
}),
volumeIcon: computed('volumeMuted', 'volume', function() {
let volume = this.get('volume');
if (this.get('volumeMuted')) {
return "volume-off";
} else if (volume >= 70) {
return "volume-up";
} else if (volume > 10) {
return "volume-down";
} else {
return 'volume-mute';
}
}),
beatDetectionAreaArrowIcon: computed('playerBottomDisplayed', function(){
if(!this.get('playerBottomDisplayed')){
return 'keyboard-arrow-down';
@ -334,22 +308,6 @@ export default Mixin.create({
this.get('storage').set('huegasm.' + option, this.get(option));
}),
onVolumeMutedChange: on('init', observer('volumeMuted', function() {
let volumeMuted = this.get('volumeMuted'),
dancer = this.get('dancer'),
volume=0;
if (volumeMuted) {
volume = 0;
} else {
volume = this.get('volume')/100;
}
if(this.get('playing')){
dancer.setVolume(volume);
}
})),
formatTime(time){
return this.pad(Math.floor(time/60), 2) + ':' + this.pad(time%60, 2);
},

View file

@ -18,9 +18,7 @@
--><span {{action "play"}}>{{paper-icon playingIcon class="player-control-icon"}}</span><!--
-->{{#if playQueueMultiple}}<!--
--><span {{action "next" true}}>{{paper-icon "skip-next" action="" class="player-control-icon"}}</span><!--
-->{{/if}}<!--
--><span {{action "volumeMutedChanged"}}>{{paper-icon icon=volumeIcon class=volumeMutedClass}}</span><!--
-->{{range-slider start=volume min=0 max=100 connect=filledConnect on-slide="volumeChanged" id="volume-bar" class="hidden-xs"}}
-->{{/if}}
<div id="player-time-controls">{{timeElapsedTxt}} / {{timeTotalTxt}}</div>
{{/if}}
@ -82,7 +80,6 @@
{{#if usingLocalAudio}}
<span {{action "shuffleChanged"}}>{{paper-icon "shuffle" class=shuffleClass}}</span>
<span {{action "repeatChanged"}}>{{paper-icon repeatIcon class=repeatClass}}</span>
<span {{action "clearPlaylist"}}>{{paper-icon "clear-all" class="player-control-icon"}}</span>
{{/if}}
</div>
@ -147,14 +144,6 @@
{{/if}}
<div class="row" id="beat-option-row">
<div class="beat-option col-xs-6">
<span class="option-description">
Sensitivity
</span>
{{range-slider start=threshold orientation="vertical" step=beatOptions.threshold.step range=beatOptions.threshold.range on-slide="thresholdChanged" pips=beatOptions.threshold.pips}}
</div>
<div class="beat-option col-xs-6">
<span class="option-description">
Hue Range
@ -163,6 +152,14 @@
{{range-slider start=hueRange orientation="vertical" step=beatOptions.hueRange.step range=beatOptions.hueRange.range connect=hueRangeConnect on-slide="hueRangeChanged" pips=beatOptions.hueRange.pips}}
</div>
<div class="beat-option col-xs-6">
<span class="option-description">
Sensitivity
</span>
{{range-slider start=threshold orientation="vertical" step=beatOptions.threshold.step range=beatOptions.threshold.range on-slide="thresholdChanged" pips=beatOptions.threshold.pips}}
</div>
{{#if usingMicAudio}}
<div class="beat-option col-xs-4">
<span class="option-description">

View file

@ -53,32 +53,8 @@ div.ember-modal-dialog {
}
.title {
margin-bottom: 30px;
margin-bottom: 50px;
img {
width: 200px;
}
}
// fancy webkit scrollbars
::-webkit-scrollbar {
-webkit-appearance: none;
}
::-webkit-scrollbar:vertical {
width: 12px;
}
::-webkit-scrollbar:horizontal {
height: 12px;
}
::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, .5);
border-radius: 10px;
border: 2px solid #ffffff;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
}
::-webkit-scrollbar-track {
background-color: #ffffff;
}

View file

@ -17,10 +17,16 @@
#bridge-finder {
text-align: center;
padding: 10px 15px 0;
padding: 20px 15px 0;
font-size: 16px;
}
#bridge-finder .md-bar {
background-color: $secondaryThemeColor !important;
}
.bridge-finder-bottom {
margin-top: 30px;
width: 100%;
font-size: 18px;
}

View file

@ -59,15 +59,26 @@ body.dimmerOn {
}
.paper-icon.dimmerOn {
color: inherit !important;
text-shadow: $glowingText;
opacity: 0.9 !important;
}
#dimmer {
background: url(images/lightswitch.png) !important;
width: 14px;
height: 34px;
display: inline-block;
float: left;
width: 30px;
height: 30px;
background: url(images/huegasm.png) center center no-repeat !important;
background-size: 30px 30px !important;
margin-left: 15px;
&.dimmerOn #dimmer-switch {
opacity: 0;
}
#dimmer-switch {
background: url(images/lightswitch.png) -14px 0px;
width: 14px;
height: 34px;
transition: opacity 0.4s;
float: left;
opacity: 1;
}
}

View file

@ -1,4 +1,6 @@
#lights-tab {
margin-top: 4vh;
padding: 0;
.paper-icon {
line-height: 0.8 !important;
}
@ -19,12 +21,12 @@
}
#navigation {
padding: 15px 0;
padding: 15px 0 20px;
text-align: center;
}
.navigation-item {
font-size: 18px;
font-size: 20px;
padding: 0 10px 0 10px;
&.active {
font-weight: bold;
@ -64,7 +66,7 @@
position: absolute;
left: 33px;
top: 15px;
font-size: 16px;
font-size: 16px !important;
}
#navigation .ember-basic-dropdown-trigger {
@ -72,4 +74,6 @@
text-align: right;
float: right;
position: relative;
bottom: 10px;
transform: scale(1.1);
}

View file

@ -18,7 +18,7 @@
left: 5px;
font-size: 40px;
color: rgba(255, 0, 0, 0.37);
font-family: cursive;
font-family: Tahoma, Geneva, sans-serif;
}
.horizontal-light-group {

View file

@ -305,7 +305,7 @@
position: absolute;
top: 3px;
z-index: 1000;
right: 5px;
left: 5px;
md-icon {
color: $secondaryThemeColor !important;
font-size: 25px;

View file

@ -10,6 +10,7 @@ md-checkbox.md-default-theme.md-checked .md-icon {
md-checkbox .md-label {
width: 125px;
text-align: left;
}
.md-button {

View file

@ -22,7 +22,7 @@ module.exports = function(environment) {
};
if (environment === 'development') {
ENV.ignoreFailures = true;
// ENV.ignoreFailures = true;
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;

View file

@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.nidratech.huegasm" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>huegasm_mobile</name>
<name>Huegasm</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
Huegasm is a free web application for managing and synchronizing your Philips Hue lights with the beat of your music.
</description>
<author email="philippovegor@gmail.com" href="http://www.egorphilippov.me/">
Egor Philippov
</author>
<content src="index.html"/>
<allow-navigation href="*"/>
<plugin name="cordova-plugin-whitelist" spec="1"/>
<plugin name="cordova-plugin-crosswalk-webview" spec="~2.1.0">
<variable name="XWALK_VERSION" value="21+"/>
@ -17,6 +18,7 @@
<variable name="XWALK_MULTIPLEAPK" value="true"/>
</plugin>
<plugin name="cordova-plugin-splashscreen" spec="~4.0.0"/>
<plugin name="ionic-plugin-keyboard" spec="~2.2.1"/>
<access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
@ -24,36 +26,6 @@
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>
<platform name="ios">
<allow-intent href="itms:*"/>
<allow-intent href="itms-apps:*"/>
<icon src="res/icon/ios/icon-40.png" height="40" width="40"/>
<icon src="res/icon/ios/icon.png" height="57" width="57"/>
<icon src="res/icon/ios/icon-40@2x.png" height="80" width="80"/>
<icon src="res/icon/ios/icon-40@3x.png" height="120" width="120"/>
<icon src="res/icon/ios/icon-60.png" height="60" width="60"/>
<icon src="res/icon/ios/icon-60@2x.png" height="120" width="120"/>
<icon src="res/icon/ios/icon-60@3x.png" height="180" width="180"/>
<icon src="res/icon/ios/icon@2x.png" height="114" width="114"/>
<icon src="res/icon/ios/icon-small.png" height="29" width="29"/>
<icon src="res/icon/ios/icon-small@2x.png" height="58" width="58"/>
<icon src="res/icon/ios/icon-small@3x.png" height="87" width="87"/>
<icon src="res/icon/ios/icon-76@2x.png" height="152" width="152"/>
<icon src="res/icon/ios/icon-76.png" height="76" width="76"/>
<icon src="res/icon/ios/icon-72.png" height="72" width="72"/>
<icon src="res/icon/ios/icon-72@2x.png" height="144" width="144"/>
<icon src="res/icon/ios/icon-50.png" height="50" width="50"/>
<icon src="res/icon/ios/icon-50@2x.png" height="100" width="100"/>
</platform>
<platform name="android">
<allow-intent href="market:*"/>
<icon src="res/icon/android/ldpi.png" density="ldpi"/>
<icon src="res/icon/android/mdpi.png" density="mdpi"/>
<icon src="res/icon/android/hdpi.png" density="hdpi"/>
<icon src="res/icon/android/xhdpi.png" density="xhdpi"/>
<icon src="res/icon/android/xxhdpi.png" density="xxhdpi"/>
<icon src="res/icon/android/xxxhdpi.png" density="xxxhdpi"/>
</platform>
<platform name="windows">
<icon src="res/icon/windows/StoreLogo.png" target="StoreLogo"/>
<icon src="res/icon/windows/smalllogo.png" target="Square30x30Logo"/>
@ -67,5 +39,62 @@
<icon src="res/icon/blackberry/icon-86.png"/>
<icon src="res/icon/blackberry/icon-150.png"/>
</platform>
<platform name="ios">
<allow-intent href="itms:*"/>
<allow-intent href="itms-apps:*"/>
<icon height="40" src="res/icon/ios/icon-40.png" width="40"/>
<icon height="57" src="res/icon/ios/icon.png" width="57"/>
<icon height="80" src="res/icon/ios/icon-40@2x.png" width="80"/>
<icon height="120" src="res/icon/ios/icon-40@3x.png" width="120"/>
<icon height="60" src="res/icon/ios/icon-60.png" width="60"/>
<icon height="120" src="res/icon/ios/icon-60@2x.png" width="120"/>
<icon height="180" src="res/icon/ios/icon-60@3x.png" width="180"/>
<icon height="114" src="res/icon/ios/icon@2x.png" width="114"/>
<icon height="29" src="res/icon/ios/icon-small.png" width="29"/>
<icon height="58" src="res/icon/ios/icon-small@2x.png" width="58"/>
<icon height="87" src="res/icon/ios/icon-small@3x.png" width="87"/>
<icon height="152" src="res/icon/ios/icon-76@2x.png" width="152"/>
<icon height="76" src="res/icon/ios/icon-76.png" width="76"/>
<icon height="72" src="res/icon/ios/icon-72.png" width="72"/>
<icon height="144" src="res/icon/ios/icon-72@2x.png" width="144"/>
<icon height="50" src="res/icon/ios/icon-50.png" width="50"/>
<icon height="100" src="res/icon/ios/icon-50@2x.png" width="100"/>
<splash src="res/screen/ios/640-960.png" width="640" height="960"/>
<splash src="res/screen/ios/960-640.png" width="960" height="640"/>
<splash src="res/screen/ios/640-1136.png" width="640" height="1136"/>
<splash src="res/screen/ios/1136-640.png" width="1136" height="640"/>
<splash src="res/screen/ios/750-1334.png" width="750" height="1334"/>
<splash src="res/screen/ios/1334-750.png" width="1334" height="750"/>
<splash src="res/screen/ios/1242-2208.png" width="1242" height="2208"/>
<splash src="res/screen/ios/2208-1242.png" width="2208" height="1242"/>
<splash src="res/screen/ios/768-1024.png" width="768" height="1024"/>
<splash src="res/screen/ios/1024-768.png" width="1024" height="768"/>
<splash src="res/screen/ios/1536-2048.png" width="1536" height="2048"/>
<splash src="res/screen/ios/2048-1536.png" width="2048" height="1536"/>
<splash src="res/screen/ios/2048-2732.png" width="2048" height="2732"/>
<splash src="res/screen/ios/2732-2048.png" width="2732" height="2048"/>
</platform>
<platform name="android">
<allow-intent href="market:*"/>
<icon density="ldpi" src="res/icon/android/ldpi.png"/>
<icon density="mdpi" src="res/icon/android/mdpi.png"/>
<icon density="hdpi" src="res/icon/android/hdpi.png"/>
<icon density="xhdpi" src="res/icon/android/xhdpi.png"/>
<icon density="xxhdpi" src="res/icon/android/xxhdpi.png"/>
<icon density="xxxhdpi" src="res/icon/android/xxxhdpi.png"/>
<splash src="res/screen/android/port-ldpi.png" density="port-ldpi"/>
<splash src="res/screen/android/land-ldpi.png" density="land-ldpi"/>
<splash src="res/screen/android/port-mdpi.png" density="port-mdpi"/>
<splash src="res/screen/android/land-mdpi.png" density="land-mdpi"/>
<splash src="res/screen/android/port-hdpi.png" density="port-hdpi"/>
<splash src="res/screen/android/land-hdpi.png" density="land-hdpi"/>
<splash src="res/screen/android/port-xhdpi.png" density="port-xhdpi"/>
<splash src="res/screen/android/land-xhdpi.png" density="land-xhdpi"/>
<splash src="res/screen/android/port-xxhdpi.png" density="port-xxhdpi"/>
<splash src="res/screen/android/land-xxhdpi.png" density="land-xxhdpi"/>
<splash src="res/screen/android/port-xxxhdpi.png" density="port-xxxhdpi"/>
<splash src="res/screen/android/land-xxxhdpi.png" density="land-xxxhdpi"/>
</platform>
<engine name="android" spec="~5.2.2"/>
<preference name="ShowSplashScreenSpinner" value="false"/>
</widget>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 17.9 612 759.1" style="enable-background:new 0 17.9 612 759.1;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:#020202;}
</style>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="203.6162" y1="340.0756" x2="419.5191" y2="340.0756" gradientTransform="matrix(1 0 0 1 0 5.8553)">
<stop offset="0" style="stop-color:#EB2227"/>
<stop offset="0.5" style="stop-color:#FCEE21"/>
<stop offset="1" style="stop-color:#29ABE2"/>
</linearGradient>
<path class="st0" d="M410.2,247.2c-3-5.9-6.8-10.9-12.3-14.8c-2.4-1.7-4.9-3.1-7.8-4c-0.1-0.1-0.1-0.1-0.2-0.1
c-0.4-0.1-0.6-0.2-1-0.3c-0.1-0.1-0.2-0.1-0.4-0.1c-1-0.3-1.9-0.6-2.9-0.9c-1.1-0.3-2.3-0.6-3.5-0.9c-0.1-0.1-0.2-0.1-0.3-0.1
c-0.1,0-0.3,0-0.4-0.1c-0.1,0-0.1-0.1-0.1-0.1c-0.1,0-0.4,0-0.5-0.1c-0.1,0-0.1-0.1-0.2-0.1c-0.1,0-0.3,0-0.5-0.1
c0,0-0.1,0-0.1-0.1c-0.2,0-0.4-0.1-0.6-0.1c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.3,0-0.4,0c-0.1-0.1-0.1-0.1-0.3-0.1
c-1.6-0.3-3.2-0.6-4.9-0.8c-1.4-0.2-2.8-0.4-4.2-0.6c-1.3-0.2-2.7-0.4-4-0.6c-1.2-0.1-2.3-0.3-3.5-0.4c-0.1,0-0.1,0-0.2-0.1
c-0.1,0-0.1-0.1-0.2-0.1c-0.6-0.1-1.3-0.1-2-0.2c-0.1,0-0.3-0.1-0.4-0.1c-0.3,0-0.6,0-0.8-0.1c-0.1,0-0.3-0.1-0.4-0.1
c-0.3,0-0.5,0-0.8,0c-0.1,0-0.3-0.1-0.4-0.1c-0.4,0-0.7-0.1-1.1-0.1c-0.1,0-0.1,0-0.2-0.1c-0.2,0-0.4,0-0.6,0
c-1.1-0.1-2.2-0.1-3.2-0.3c-0.2,0-0.5-0.1-0.7-0.1c-0.1,0-0.3,0-0.4-0.1c-0.5,0-1-0.1-1.5-0.1c-0.2,0-0.4,0-0.6-0.1
c-1.1-0.1-2-0.1-3.1-0.1c-0.8-0.1-1.6-0.1-2.5-0.1c-0.3-0.1-0.6-0.1-0.9-0.1c-1.2-0.1-2.3-0.1-3.5-0.1c-0.8-0.1-1.8-0.1-2.6-0.1
c-0.4-0.1-0.8-0.1-1.2-0.1c-2.2-0.1-4.3-0.2-6.5-0.3c-0.4-0.1-0.8-0.1-1.3-0.1c-1.1-0.1-2.3-0.1-3.4-0.2c-0.1,0-0.3-0.1-0.4-0.1
c-2.6,0-5.2,0-7.8,0c-4.1,0-8.1,0-12.2,0c-3.9,0.1-7.8,0.2-11.6,0.3c-1.8,0.1-3.5,0.1-5.3,0.1c-0.2,0-0.5-0.1-0.7,0
c-3.2,0.1-6.4,0.3-9.5,0.4c-1.5,0.1-3,0.2-4.4,0.3c-0.1,0-0.1,0-0.1,0c-0.4,0.1-0.8,0.1-1.3,0.1c-0.6,0.1-1.1,0.1-1.6,0.1
c-0.1,0-0.1,0-0.1,0c-1.5,0.1-3,0.3-4.4,0.4c-1.2,0.1-2.3,0.2-3.5,0.3c-0.1,0-0.2,0-0.3,0.1c-0.3,0-0.6,0.1-0.9,0.1
c-0.1,0-0.2,0.1-0.3,0.1c-0.2,0-0.4,0.1-0.6,0.1c-1.3,0.1-2.7,0.3-4,0.4c-1.1,0.1-2,0.4-3.1,0.5c-0.2,0-0.4,0-0.6,0
c-0.1,0-0.2,0.1-0.3,0.1c-0.2,0-0.4,0-0.6,0.1c-0.1,0.1-0.2,0.1-0.3,0.1c-1.6,0.3-3.1,0.6-4.7,0.9c-0.1,0-0.2,0-0.3,0
c-0.1,0.1-0.2,0.1-0.3,0.1c-1.7,0.4-3.3,0.7-5,1.2c-3,0.8-5.9,1.9-8.7,3.2c-0.1,0-0.2,0.1-0.3,0.1c-3.2,1.6-6.1,3.5-8.7,5.8
c-1,0.9-1.8,1.9-2.8,2.7c-0.5,0.5-1,1-1.4,1.5c-4.5,5.5-6.9,11.8-7.6,18.8c-0.4,3.3-0.1,6.6,0.6,9.9c0.8,3.9,2,7.7,3.8,11.3
c1.4,2.9,3,5.7,4.4,8.6c0.4,0.8,0.7,1.6,1.1,2.4c2.2,4.1,4.4,8.2,6.6,12.3c1.3,2.4,2.7,4.8,4,7.2c0.3,0.6,0.6,1.2,0.9,1.7
c1.8,3.5,3.6,6.9,4.7,10.7c0.8,2.6,1.8,5.1,2.8,7.6c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.1,0.3,0.1,0.4c0.1,0.2,0.1,0.4,0.1,0.6
c1.3,4.5,2.6,8.9,3.9,13.3c0.5,1.7,0.8,3.4,1.3,5c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.3,0.1,0.4c0.1,0.1,0.1,0.2,0.1,0.3
c0,0.1,0,0.1,0,0.1c0.1,0.1,0.1,0.4,0.1,0.5c0,0.1,0,0.1,0,0.2c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.1,0,0.1c0,0.1,0,0.4,0.1,0.5
c0.3,1.6,0.6,3.2,0.9,4.8c0.5,3,1.1,6,1.5,9c0.3,1.9,0.5,4,0.8,5.9c0.1,1.4,0.4,2.9,0.5,4.4c0.1,1.4,0.3,2.8,0.4,4.2
c0.1,2.1,0.3,4.2,0.4,6.3c0.1,2.2,0.4,4.2,0.5,6.4c0.2,2.3,0.6,4.5,1.6,6.6c0.1,0.1,0.1,0.2,0.1,0.3l0,0c0.6,1.8,1.6,3.5,2.8,5
c1.1,1.2,2.3,2.3,3.5,3.5c0.2,0.1,0.4,0.4,0.6,0.5c1.2,0.8,2.3,1.7,3,3.3c-0.1,0.6-0.1,1.4-0.3,2.2c-0.8,2.6-1,5.3-0.6,7.9
c0.1,0.8,0.3,1.6,0.2,2.3c-0.4,2.4-0.5,4.8-0.1,7.3c0.2,1,0.5,2,0.6,3c0.1,1.4,0,2.9,0.2,4.3c0.3,2.2,0.9,4.2,2,6
c0.1,0.3,0.2,0.5,0.4,0.8c2,3.3,5.1,5.6,7.7,8.4c1.7,1.9,3.6,3.6,5.8,5c0.1,0.1,0.3,0.1,0.4,0.3l0,0c0.2,0.1,0.4,0.2,0.6,0.3
c0.6,0.3,1.1,0.6,1.7,0.9c0.4,0.2,0.7,0.4,0.9,0.6c0.7,0.9,1.4,1.7,2.1,2.6c0,0.1,0,0.1,0.1,0.1l0.1,0.1c0.1,0.1,0.1,0.1,0.1,0.1
v0.1c0,0.1,0.1,0.1,0.1,0.1l0,0c0.1,0.1,0.1,0.1,0.1,0.1l0,0c0.1,0.1,0.1,0.1,0.1,0.1l0,0c0.1,0.1,0.1,0.1,0.1,0.1l0,0
c0.1,0.1,0.1,0.1,0.1,0.1l0,0c0.1,0.1,0.1,0.1,0.1,0.1l0,0c0.1,0,0.1,0.1,0.1,0.1l0.1,0.1l0.1,0.1c0,0,0,0.1,0.1,0.1l0.1,0.1
c2.4,2.2,5.2,3.7,8.4,4.3c0.1,0,0.1,0,0.2,0c0.1,0.1,0.2,0.1,0.4,0.1c2.1,0.4,4.2,0.6,6.4,1c0.4,0.1,0.8,0.1,1.3,0.1
c3.7,0.1,7.3,0.1,10.9,0.3c3-0.1,6-0.1,9-0.1c1.3-0.1,2.5-0.2,3.7-0.3c0.2-0.1,0.4-0.1,0.6-0.1c1.5-0.3,3-0.6,4.4-0.9
c1.3-0.4,2.5-0.8,3.8-1.2c0.1,0,0.1-0.1,0.1-0.1l0,0c1.2-0.6,2.5-1.4,3.7-2c1.1-0.9,2.3-1.9,3.3-2.9c0.8-1,1.7-2,2.6-3.1
c0.8-0.4,1.8-0.9,2.8-1.4c1.3-0.9,2.5-1.9,3.8-2.9c0.3-0.3,0.6-0.5,0.8-0.8c1-1.1,2-2.2,3-3.2c1.4-1.4,2.8-3,3.7-4.8
c0.1-0.1,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.3,0.2-0.4c0.1-0.3,0.4-0.6,0.5-0.9c1.5-3.4,2.4-6.9,2.6-10.7c0-0.1,0-0.1,0-0.1
s0-0.2,0-0.3c0-0.1,0-0.3,0-0.4c0-0.1,0-0.3,0-0.4c0.3-0.6,0.6-1.2,0.9-1.8c1.3-2.9,2-5.8,1.8-9c-0.1-1.6-0.2-3.2,0.1-4.8
c0.2-1.6,0.1-3.3-0.1-5c-0.4-2.4-0.4-2.4,1-3.8c3.6-2.2,6.3-5.4,8.1-9.1c0.1-0.1,0.1-0.2,0.2-0.3c1.9-3.7,2.2-7.8,2.5-12
c0.1-1.4,0.2-2.7,0.5-4c0.6-2.6,1.4-5.1,2.1-7.6c0.2-0.6,0.4-1.2,0.6-1.7c0.5-1.8,1-3.6,1.5-5.4c0.1-0.1,0.1-0.1,0.1-0.1
c0-0.1,0-0.2,0-0.3c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0.1-0.1,0.1-0.1c0-0.1,0-0.2,0.1-0.3c0-0.1,0.1-0.1,0.1-0.1
c0.6-2.2,1.3-4.5,2-6.8c1.1-4,2.3-8,3.4-12c4-10.6,7.8-21.1,11.8-31.8c-1.4-0.1-2.7-0.1-4-0.1c-2.8-0.1-5.5-0.1-8.2-0.2
c-2.6,0-5.2,0-7.8,0c-1.8,0-3.5,0-5.3,0c-2.8,0-5.6,0-8.4,0c-1.2,0-2.3,0-3.5,0c-1.1,0-2.2,0-3.2,0c-2.3,0-4.6,0-6.9,0
c-1.7,0-3.3,0-5,0c-1.5,0-3,0-4.4,0c-1.2,0-2.5,0-3.7,0s-2.5,0-3.7,0c-2.3,0-4.5,0-6.8,0c-1.8,0-3.6,0-5.4,0c-1.9,0-3.8,0-5.7,0
c-3.8,0-7.5,0-11.4,0c0.1,0.3,0.1,0.6,0.1,0.8c1.6,8.6,3.3,17.2,4.9,25.9c0.4,2.2,0.8,4.4,1.3,6.6c0.3,0.1,0.6,0.1,0.8,0.1
c13.2,0,26.4,0,39.6,0c0.3,0,0.6,0,0.9,0c-0.4,1.2-0.8,2.2-1.2,3.2c-0.5,1.3-1,2.6-1.5,3.9c-0.1,0.4-0.2,0.8-0.3,1.2
c0,0.1-0.1,0.1-0.1,0.1c0,0.1,0,0.3-0.1,0.4c0,0.1-0.1,0.1-0.1,0.1c0,0.1,0,0.2,0,0.4c-0.1,0.1-0.1,0.1-0.1,0.2
c0,0.1,0,0.2-0.1,0.3c0,0.1-0.1,0.1-0.1,0.1c0,0.1-0.1,0.2-0.1,0.4c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1-0.1,0.1-0.1,0.1s-0.1,0.2-0.1,0.3h-0.1v0.1c0,0.1-0.1,0.2-0.1,0.3h-0.1v0.1c0,0.1-0.1,0.2-0.1,0.4c-0.1,0.1-0.1,0.3-0.1,0.4
c-0.4,1.2-0.8,2.4-1.3,3.7c0,0.1,0,0.1,0,0.1c-0.4,2-0.7,4-1,6c0,0.4,0,0.8-0.1,1.2c0,0.2-0.1,0.5-0.1,0.7c0,0.4,0,0.9-0.1,1.3
c0,0.2-0.1,0.4-0.1,0.6c0,0.4-0.1,0.7-0.1,1.2c0,0.1-0.1,0.3-0.1,0.4c0,0.4-0.1,0.8-0.1,1.2c0,0.1-0.1,0.3-0.1,0.4
c0,0.4-0.1,0.9-0.1,1.3c0,0.1-0.1,0.2-0.1,0.3c0,0.5-0.1,1-0.1,1.4c0,0.1-0.1,0.3-0.1,0.4c0,0.3-0.1,0.6-0.1,0.9
c-1.7,1.2-3.3,2.5-4.5,4.2l-0.1,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.2,0.2-0.4,0.4
c-0.8,0.8-1.6,1.6-2.4,2.3c-1.8,1.9-2.9,4.1-3.5,6.6c-0.1,0.6-0.3,1.3-0.4,1.9c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.1,0,0.3,0,0.4
c-0.1,0.2-0.1,0.4-0.1,0.6c-0.1,0.9-0.1,1.7-0.6,2.4c-0.3,0.5-0.5,1-0.7,1.6c-1.2,3.2-1.6,6.3-1.1,9.7c0.1,0.7,0.1,1.4,0.1,2.2
c0,1.7-0.1,3.4-0.1,5.1c0,0.9,0.1,1.7,0,2.4c-0.1,1.2-0.5,2.4-0.7,3.7c-0.1,0.7-0.3,1.4-0.5,2.1c-1.6,0.6-3.3,1.2-4.8,2.1
c-1.3,0.7-2.3,1.9-3.5,2.8c-0.7,0.9-1.3,1.7-2,2.7c-1.4,0-2.9,0-4.4,0c-0.8,0-1.6,0.1-2.4,0.1c-0.3,0-0.6-0.1-0.8-0.1
c-2.3-0.1-4.7-0.1-6.7-0.1c-1.5-1.5-2.8-2.8-4-4.1c-1.5-1.4-3.2-2.2-5.2-2.9c-0.1,0-0.1-0.1-0.2-0.1c-0.1,0-0.1,0-0.3-0.1
c-0.1,0-0.1-0.1-0.2-0.1s-0.2,0-0.3-0.1c-0.1,0-0.1-0.1-0.1-0.1s-0.1-0.1-0.1-0.1c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.1,0-0.4,0-0.5
c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.2,0-0.3c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.1,0-0.1c0.1-0.1,0.1-0.2,0.1-0.4
c0-0.1,0-0.3,0-0.4c0.1-0.1,0.1-0.3,0.1-0.4c0-0.2,0-0.4,0-0.6c0.1-0.2,0.1-0.5,0.1-0.7c0-1.2,0-2.3,0-3.5
c-0.1-0.2-0.1-0.5-0.1-0.7c0.1-0.4,0.1-0.6,0.1-1c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.3,0-0.4c0.1-0.1,0.1-0.3,0.1-0.4
c0-0.1,0-0.3,0-0.4c0.1-0.2,0.1-0.4,0.1-0.6c0-0.3,0-0.5,0-0.8c0-0.9,0-1.7,0-2.6c0-0.3,0-0.6,0-0.9c-0.1-0.1-0.1-0.3-0.1-0.5
c0-0.1,0-0.4,0-0.5c-0.1-0.1-0.1-0.2-0.1-0.4c-0.2-0.8-0.4-1.5-0.6-2.3c-0.2-0.5-0.4-1.1-0.6-1.6c-0.4-0.8-0.5-1.6-0.4-2.4
c0.2-3.8-0.4-7.6-2.1-11c-1.6-3.2-4.3-5.6-6.8-8.1c-1.1-0.9-2.1-1.9-3.2-3c-0.2-3-0.5-6.2-0.7-9.4c-0.1-0.3-0.1-0.6-0.1-0.9
c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.1c0-0.1,0-0.3,0-0.4c-0.1-0.3-0.1-0.6-0.1-0.9c0-0.1,0-0.1,0-0.2c0.1-0.1,0.1-0.1,0-0.1
c0-0.2,0-0.4,0-0.6c-0.1-0.3-0.1-0.6-0.1-0.8c0-0.1,0-0.1,0-0.2c0,0,0,0,0-0.1v-0.1c0-0.1,0-0.3,0-0.4c0-0.2-0.1-0.4-0.1-0.6
c0-0.2,0-0.5,0-0.7c0-0.1-0.1-0.3-0.1-0.4c0-0.1-0.1-0.2-0.1-0.3c0.1-0.1,0.1-0.1,0-0.1c0-0.1,0-0.2,0-0.3c0-0.1-0.1-0.3-0.1-0.4
c0-0.2,0-0.5-0.1-0.7c0-0.1-0.1-0.2-0.1-0.3c0-0.2,0-0.4,0-0.6c0-0.1-0.1-0.2-0.1-0.3c0-0.2,0-0.4-0.1-0.6
c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.2,0-0.4-0.1-0.6c0-0.1-0.1-0.2-0.1-0.3c0-0.2,0-0.4-0.1-0.6c0-0.1-0.1-0.1-0.1-0.2
c0-0.2-0.1-0.4-0.1-0.6v-0.1l-0.1-0.1l0,0c-0.4-2.3-0.6-4.5-1.1-6.8c-1-5.3-2-10.5-3.1-15.8c-0.6-2.7-1.3-5.3-2-8
c0-0.1,0-0.1,0-0.2c-2-6.1-4-12.2-6.1-18.4c-0.1-0.1-0.1-0.4-0.2-0.5c0-0.1,0-0.1,0-0.2c-0.1-0.1-0.1-0.1-0.1-0.2
c0-0.1,0-0.1,0-0.2v-0.1l-0.1-0.1c0-0.1-0.1-0.2-0.1-0.4l0,0h-0.1c0-0.1-0.1-0.1-0.1-0.2c0-0.1-0.1-0.1-0.1-0.1
c0-0.1-0.1-0.2-0.1-0.3v-0.1h-0.1c-0.1-0.2-0.1-0.4-0.2-0.6c0-0.1-0.1-0.1-0.1-0.1c-0.1-0.1-0.1-0.3-0.2-0.4
c-0.2-0.5-0.5-1-0.7-1.5c-1.5-3-3-5.9-4.4-8.8c-0.4-0.8-0.8-1.6-1.2-2.4c-0.1-0.1-0.1-0.1-0.1-0.2v-0.1h-0.1v-0.1
c-0.1-0.1-0.1-0.1-0.1-0.3c-1.2-2.4-2.4-5-3.6-7.4c-0.7-1.4-1.4-2.7-2.1-4.1c0-0.1,0-0.1-0.1-0.1c-0.1-0.1-0.1-0.1-0.1-0.2
c-0.7-1.4-1.5-3-2.2-4.4c-1.4-2.7-2.9-5.5-4.4-8.2l0,0c-0.1-0.1-0.1-0.2-0.1-0.3l0,0c-0.1-0.1-0.1-0.2-0.1-0.3l0,0
c-0.1-0.1-0.1-0.2-0.1-0.4v-0.1H245c-0.1-0.1-0.1-0.1-0.1-0.2c-0.8-1.6-1.6-3.1-2.4-4.7c-0.6-1.3-3.5-6.8-3.5-6.8l20.7-2.8
c1.6-0.2,3.3-0.4,4.9-0.6c0.5-0.1,1-0.1,1.5-0.1c0.1,0,0.3-0.1,0.5-0.1c0.3,0,0.6-0.1,0.8-0.1c0.1,0,0.3-0.1,0.5-0.1
c0.4,0,0.7,0,1.1-0.1c0.1,0,0.3-0.1,0.4-0.1c0.4,0,0.8-0.1,1.1-0.1c0.2,0,0.4-0.1,0.6-0.1c0.1,0,0.3-0.1,0.4-0.1c0.2,0,0.5,0,0.7,0
c0.3,0,0.6-0.1,0.9-0.1c0.4,0,0.8,0,1.3-0.1c0.4-0.1,0.8-0.1,1.2-0.1c0.4,0,0.8,0,1.1,0c0.4,0,0.8-0.1,1.2-0.1c0.6,0,1.1,0,1.6,0
c0.4-0.1,0.8-0.1,1.2-0.1c0.5,0,1,0,1.5,0c0.5-0.1,1-0.1,1.5-0.1c0.5,0,1,0,1.5,0c0.6-0.1,1.1-0.1,1.6-0.1l0,0c0.6,0,1.1,0,1.6,0
c0.5,0,0.9-0.1,1.4-0.1c0.7,0,1.4,0,2.1-0.1c0.1,0,0.3,0,0.4,0c0.8,0,1.5-0.1,2.3-0.1c2.8,0,5.6,0,8.5-0.1c7,0.1,14,0.1,21,0.1
c1,0,2,0.1,3,0.1c1.5,0.1,3,0.1,4.4,0.2c0.3,0.1,0.6,0.1,0.8,0.1c0.4,0,0.8,0,1.3,0.1c0.3,0,0.6,0.1,0.9,0.1c0.4,0,0.8,0,1.2,0
c0.3,0,0.6,0.1,0.8,0.1c0.4,0,0.8,0,1.2,0c0.3,0,0.6,0.1,0.8,0.1c0.4,0,0.8,0,1.2,0c0.3,0.1,0.6,0.1,0.8,0.1c0.4,0,0.9,0,1.3,0.1
c0.2,0,0.5,0.1,0.7,0.1c0.5,0,1,0,1.5,0.1c0.4,0,0.7,0.1,1,0.1c0.4,0,0.9,0,1.3,0.1c0.2,0,0.4,0.1,0.6,0.1c0.5,0,1,0.1,1.5,0.1
c0.1,0,0.3,0,0.4,0.1c0.4,0,0.9,0.1,1.3,0.1c0.1,0,0.2,0,0.4,0.1c0.3,0,0.5,0,0.8,0c1.2,0.1,2.4,0.3,3.6,0.4
c0.8,0.1,1.7,0.2,2.6,0.3c0.1,0,0.2,0.1,0.4,0.1c1.3,0.1,2.7,0.3,4,0.4c1.2,0.1,2.3,0.4,3.5,0.5c1.4,0.2,2.8,0.4,4.2,0.6
c3,0.6,5.9,1.2,8.8,1.8c0.2,0.1,0.4,0.1,0.6,0.2c2,0.6,3.1,1.9,3.8,3.8c0.8,2.1,1.8,4,2.7,6c0,0.1,0.1,0.1,0.1,0.2v0.1h0.1
c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.1l0,0c0.1,0,0.2,0,0.4,0c1-0.4,2-0.7,3-1c0.1-0.1,0.1-0.1,0.2-0.1h0.1h0.1
c0.4-0.1,0.8-0.3,1.1-0.4c0.1,0,0.1,0,0.2,0c0.3-0.1,0.6-0.2,0.9-0.3c0.1,0,0.2-0.1,0.4-0.1h0.1v-0.1c0.1,0,0.1,0,0.2-0.1
c0.1-0.1,0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0s0.1-0.1,0.1-0.1c2.1-0.7,4.2-1.4,6.4-2.2c4-1.4,8-2.8,12-4.2c0.8-0.3,1.7-0.6,2.6-0.9
c-0.2-1.3-0.4-2.5-0.6-3.7C412.7,253.4,411.7,250.2,410.2,247.2z"/>
<path class="st1" d="M411.5,237.8c-2-2.8-4.2-5.3-6.9-7.6c-2.8-2.3-5.6-4.3-8.8-5.9c-5-2.4-10.4-3.6-15.7-4.6
c-3.5-0.6-7.1-1.2-10.6-1.8c-2.3-0.4-4.7-0.6-6.9-0.9c-2.1-0.3-4.2-0.5-6.3-0.7c-1.8-0.2-3.7-0.4-5.6-0.5c-2.3-0.1-4.7-0.3-7-0.4
c-2.7-0.1-5.4-0.4-8-0.6c-1.6-0.1-3-0.2-4.6-0.3c-3-0.1-6.1-0.4-9.1-0.4c-4.1-0.1-8.2-0.1-12.3,0c-4.7,0-9.3,0.1-14,0.1
c-2.2,0-4.4,0.1-6.6,0.1c-2.1,0.1-4.3,0.1-6.4,0.1c-0.1,0-0.1,0-0.1,0c-3,0.2-5.9,0.4-8.8,0.6c-1.6,0.1-3.2,0.1-4.9,0.3
c-3.1,0.3-6.1,0.6-9.2,0.9c-3.1,0.4-6.2,0.6-9.2,1.2c-3.1,0.5-6.2,1.2-9.2,1.9c-5.4,1.2-10.7,2.8-15.5,5.6
c-4.6,2.7-8.8,5.8-12.2,9.9c-3.5,4.2-6.3,8.9-7.7,14.2c-0.7,2.9-1.5,5.8-1.8,8.7c-0.3,3.4-0.2,6.8,0.5,10.1
c1.1,5.2,2.5,10.2,4.9,14.9c2.3,4.6,4.7,9.1,7.2,13.8c1.7,3.2,3.5,6.5,5.2,9.7c1.2,2.2,2.5,4.5,3.7,6.7c1.3,2.6,2.9,5,3.9,7.8
c2.2,5.8,4.1,11.7,6.1,17.6c2.3,6.7,3.5,13.5,4.8,20.5c0.6,2.9,0.9,5.8,1.3,8.6c0.4,2.4,0.7,4.9,1,7.3c0.3,2.4,0.4,4.8,0.6,7.2
c0.3,3.2,0.6,6.3,0.8,9.5c0.1,2.4,0.5,4.7,1.1,7c1.3,5.6,4.1,10.3,8.5,14.1c0.6,0.6,1.3,1.1,2,1.7c0,0.1,0,0.2-0.1,0.3
c-0.7,2.8-1,5.7-0.6,8.6c0.1,0.8,0.1,1.7,0.1,2.4c-0.3,2.3-0.4,4.5,0,6.8c0.1,0.9,0.6,1.9,0.5,2.8c-0.1,2.7,0.3,5.2,0.8,7.7
c0.8,3.6,2.4,6.8,4.9,9.6c2.8,3,5.7,6,8.7,8.7c1.8,1.6,3.9,2.9,5.8,4.2c0.5,0.4,1.1,0.6,1.5,1c1.3,1.4,2.5,2.9,4,4.1
c2.7,2.4,5.8,4.1,9.3,5c4.4,1.1,8.9,2,13.5,2.1c6.2,0.1,12.5-0.1,18.7-0.1c0.6,0,1.2-0.1,1.8-0.1c2.2-0.4,4.4-0.8,6.6-1.3
c6.5-1.4,11.9-4.7,15.9-10c0.1-0.2,0.4-0.4,0.6-0.5c2.5-1.4,4.9-3,7-5c1.5-1.4,2.8-3,4.2-4.4c2-2,3.7-4.3,4.9-6.8
c1.7-3.5,2.3-7.3,3.1-11c0.2-0.9,0.1-1.9,0.4-2.6c0.8-1.9,1.4-3.8,1.8-5.8c0.5-2.1,0.8-4.2,0.6-6.4c-0.1-0.9-0.3-1.9-0.1-2.7
c0.4-2.3,0.6-4.5,0.2-6.6c1.6-1.7,3.2-3.2,4.7-4.8c1.7-1.9,3.2-4.1,4.2-6.6c1.8-4.4,2.5-9.1,2.9-13.8c0.1-1.2,0.2-2.4,0.5-3.7
c0.6-2.2,1.2-4.2,1.8-6.4c1.9-6.6,3.8-13.3,5.7-19.9c0.8-3,1.7-6,2.7-9c1.2-3.5,2.6-7,3.9-10.4c2.3-6.1,4.6-12.2,6.8-18.4
c0.6-1.7,1.1-3.5,0.4-5.3c-0.6-1.7-1.8-2.9-3.5-3.4c-3-0.9-6-0.9-9-0.9c-28.5-0.1-57-0.1-85.5-0.1c-1.6,0-3.2,0.3-4.5,1.4
c-1.6,1.3-2.2,3-2,4.8c0.3,2.8,1,5.6,1.5,8.5c0.8,4.4,1.6,8.7,2.5,13.1c0.8,4.5,1.8,8.9,2.8,13.4c0.2,0.9,0.8,1.7,1.5,2.3
c1.2,1.2,2.9,1.5,4.5,1.5c10.5,0,21,0,31.5,0c0.3,0,0.6,0,1,0c-0.5,1.5-0.8,3-1.4,4.3c-1.8,4.4-2.6,8.9-3,13.7
c-0.1,2-0.3,4.1-0.4,6.1c-0.1,0.5-0.2,1-0.7,1.4c-0.4,0.3-0.8,0.6-1.1,1c-1.1,1.1-2.1,2.2-3.2,3.4c-0.4,0.4-0.8,0.7-1.2,1.2
c-2.5,3-4.5,6.3-5.3,10.3c-0.3,1.3-0.5,2.6-0.8,3.9c-0.6,1.9-1.3,3.7-1.8,5.6c-0.6,2.4-0.9,4.8-0.6,7.2c0.1,1,0.1,2.1,0.1,3.2
c0,1.6-0.2,3.2-0.1,4.8c0.1,1.4,0.1,2.7-0.3,3.9c-3.2,1.5-6.1,3.5-8.4,6.2c-2.9,0-5.7,0-8.5,0c-2-2.4-4.5-4.2-7.2-5.7
c0-1.6,0-3.1,0-4.6c0-0.4,0-0.8,0.1-1.2c0.4-2,0.8-4,0.4-6c-0.4-2.6-1.2-5.2-1.8-7.7c-0.1-0.2-0.1-0.4-0.1-0.6
c0.1-2.6-0.2-5.1-0.8-7.7c-0.8-3.7-2.2-7.2-4.7-10.1c-2.1-2.4-4.4-4.6-6.6-7c-0.1-0.1-0.4-0.4-0.4-0.6c-0.2-2.6-0.4-5.2-0.6-7.8
c-0.2-2.5-0.4-5-0.7-7.5c-0.6-4.3-1.4-8.6-2.1-13c-1.3-8.2-3-16.3-5.3-24.3c-1.5-5-3.2-10-4.8-15c-1-2.9-2-5.7-3.2-8.5
c-1.1-2.4-2.3-4.8-3.5-7.1c-2.9-5.8-5.7-11.7-8.6-17.5c-2-3.9-4-7.7-6.1-11.5c-1-1.9-1.9-3.7-3-5.7c1.3-0.3,2.6-0.6,3.9-0.8
c4.8-0.6,9.6-1.4,14.4-1.9c3.2-0.4,6.5-0.6,9.7-0.9c2.7-0.2,5.4-0.3,8.1-0.4c2.3-0.1,4.7-0.2,7-0.3c3.1-0.1,6.3-0.1,9.4-0.1
c5.9,0,11.9,0,17.9,0c1.3,0,2.5,0.1,3.7,0.1c3.5,0.1,7,0.3,10.4,0.4c1.6,0.1,3.1,0.2,4.7,0.3c2.6,0.1,5.2,0.4,7.8,0.6
c1.6,0.1,3.2,0.1,4.7,0.3c3.4,0.4,6.7,0.7,10.1,1.2c3.7,0.5,7.5,1,11.3,1.6c2,0.3,4,0.8,5.7,1.2c1.3,2.8,2.3,5.3,3.5,7.6
c0.6,1.3,1.7,2.4,3,3c1.8,0.7,3.5,0.6,5.3,0c3.2-1.1,6.4-2.2,9.5-3.3c5.4-1.9,10.7-3.7,16-5.6c1.1-0.4,2.2-0.7,3.2-1.5
c1.6-1.3,2.2-3.1,2.2-5c0-1.7-0.4-3.4-0.7-5C417.8,248.6,415.1,243,411.5,237.8z M411.1,261.4c-4,1.4-8,2.8-12,4.2
c-2.1,0.7-4.2,1.4-6.4,2.2c-0.1,0-0.1,0.1-0.1,0.1c-0.1,0-0.1,0-0.2,0c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1v0.1h-0.1
c-0.1,0-0.2,0.1-0.4,0.1c-0.3,0.1-0.6,0.2-0.9,0.3c-0.1,0-0.1,0-0.2,0c-0.4,0.1-0.8,0.3-1.1,0.4h-0.1h-0.1
c-0.1,0.1-0.1,0.1-0.2,0.1c-1,0.4-2,0.7-3,1c-0.1,0-0.2,0-0.4,0l0,0c0-0.1-0.1-0.1-0.1-0.1c0-0.1-0.1-0.1-0.1-0.2h-0.1v-0.1
c0-0.1-0.1-0.1-0.1-0.2c-0.9-2-1.9-4-2.7-6c-0.7-1.9-1.8-3.2-3.8-3.8c-0.2-0.1-0.4-0.1-0.6-0.2c-3-0.6-5.9-1.2-8.8-1.8
c-1.4-0.2-2.8-0.4-4.2-0.6c-1.2-0.1-2.3-0.4-3.5-0.5c-1.3-0.1-2.7-0.3-4-0.4c-0.1,0-0.2-0.1-0.4-0.1c-0.8-0.1-1.7-0.2-2.6-0.3
c-1.2-0.1-2.4-0.3-3.6-0.4c-0.3,0-0.5,0-0.8,0c-0.1,0-0.2,0-0.4-0.1c-0.4,0-0.9-0.1-1.3-0.1c-0.1,0-0.3,0-0.4-0.1
c-0.5,0-1-0.1-1.5-0.1c-0.2,0-0.4-0.1-0.6-0.1c-0.4,0-0.9,0-1.3-0.1c-0.4,0-0.7-0.1-1-0.1c-0.5,0-1,0-1.5-0.1
c-0.2,0-0.5-0.1-0.7-0.1c-0.4,0-0.9,0-1.3-0.1c-0.3-0.1-0.6-0.1-0.8-0.1c-0.4,0-0.8,0-1.2,0c-0.3,0-0.6-0.1-0.8-0.1
c-0.4,0-0.8,0-1.2,0c-0.3,0-0.6-0.1-0.8-0.1c-0.4,0-0.8,0-1.2,0c-0.3,0-0.6-0.1-0.9-0.1c-0.4,0-0.8,0-1.3-0.1
c-0.3-0.1-0.6-0.1-0.8-0.1c-1.5-0.1-3-0.1-4.4-0.2c-1,0-2-0.1-3-0.1c-7-0.1-14-0.1-21-0.1c-2.8,0-5.6,0-8.5,0.1
c-0.8,0-1.5,0.1-2.3,0.1c-0.1,0-0.3,0-0.4,0c-0.7,0-1.4,0-2.1,0.1c-0.5,0-0.9,0.1-1.4,0.1c-0.6,0-1.1,0-1.6,0l0,0
c-0.6,0.1-1.1,0.1-1.6,0.1c-0.5,0-1,0-1.5,0c-0.5,0.1-1,0.1-1.5,0.1c-0.5,0-1,0-1.5,0c-0.4,0.1-0.8,0.1-1.2,0.1c-0.6,0-1.1,0-1.6,0
c-0.4,0-0.8,0.1-1.2,0.1c-0.4,0-0.8,0-1.1,0c-0.4,0.1-0.8,0.1-1.2,0.1c-0.4,0-0.8,0-1.3,0.1c-0.3,0-0.6,0.1-0.9,0.1
c-0.2,0-0.5,0-0.7,0c-0.1,0-0.3,0.1-0.4,0.1c-0.2,0-0.4,0.1-0.6,0.1c-0.4,0-0.8,0.1-1.1,0.1c-0.1,0-0.3,0.1-0.4,0.1
c-0.4,0-0.7,0-1.1,0.1c-0.1,0-0.3,0.1-0.5,0.1c-0.3,0-0.6,0.1-0.8,0.1c-0.1,0-0.3,0.1-0.5,0.1c-0.5,0.1-1,0.1-1.5,0.1
c-1.6,0.2-3.3,0.4-4.9,0.6l-20.7,2.8c0,0,2.9,5.5,3.5,6.8c0.7,1.6,1.6,3.2,2.4,4.7c0.1,0.1,0.1,0.1,0.1,0.2h0.1v0.1
c0.1,0.1,0.1,0.2,0.1,0.4l0,0c0.1,0.1,0.1,0.2,0.1,0.3l0,0c0.1,0.1,0.1,0.2,0.1,0.3l0,0c1.5,2.7,2.9,5.5,4.4,8.2
c0.8,1.4,1.5,2.9,2.2,4.4c0.1,0.1,0.1,0.1,0.1,0.2c0.1,0,0.1,0.1,0.1,0.1c0.7,1.4,1.4,2.7,2.1,4.1c1.2,2.4,2.4,5,3.6,7.4
c0.1,0.1,0.1,0.1,0.1,0.3v0.1h0.1v0.1c0.1,0.1,0.1,0.1,0.1,0.2c0.4,0.8,0.8,1.6,1.2,2.4c1.5,3,3,5.9,4.4,8.8c0.2,0.5,0.5,1,0.7,1.5
c0.1,0.1,0.1,0.3,0.2,0.4c0,0.1,0.1,0.1,0.1,0.1c0.1,0.2,0.1,0.4,0.2,0.6h0.1v0.1c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.1,0.1,0.1
c0,0.1,0.1,0.1,0.1,0.2h0.1l0,0c0,0.1,0.1,0.2,0.1,0.4l0.1,0.1v0.1c0,0.1,0,0.1,0,0.2c0.1,0.1,0.1,0.1,0.1,0.2c0,0.1,0,0.1,0,0.2
c0.1,0.1,0.1,0.4,0.2,0.5c2,6.1,4,12.2,6.1,18.4c0,0.1,0,0.1,0,0.2c0.7,2.7,1.4,5.3,2,8c1.1,5.3,2.1,10.5,3.1,15.8
c0.4,2.2,0.7,4.5,1.1,6.8l0,0l0.1,0.1v0.1c0,0.2,0.1,0.4,0.1,0.6c0,0.1,0.1,0.1,0.1,0.2c0,0.2,0,0.4,0.1,0.6c0,0.1,0.1,0.2,0.1,0.3
c0,0.2,0,0.4,0.1,0.6c0.1,0.1,0.1,0.3,0.1,0.4c0,0.2,0,0.4,0.1,0.6c0,0.1,0.1,0.2,0.1,0.3c0,0.2,0,0.4,0,0.6c0,0.1,0.1,0.2,0.1,0.3
c0,0.2,0,0.5,0.1,0.7c0,0.1,0.1,0.3,0.1,0.4c0,0.1,0,0.2,0,0.3c0,0.1,0,0.1,0,0.1s0.1,0.2,0.1,0.3c0,0.1,0.1,0.3,0.1,0.4
c0,0.2,0,0.5,0,0.7c0,0.2,0.1,0.4,0.1,0.6c0,0.1,0,0.3,0,0.4v0.1c0,0,0,0,0,0.1c0,0.1,0,0.1,0,0.2c0.1,0.3,0.1,0.6,0.1,0.8
c0,0.2,0,0.4,0,0.6c0.1,0.1,0.1,0.1,0,0.1c0,0.1,0,0.1,0,0.2c0.1,0.3,0.1,0.6,0.1,0.9c0,0.1,0,0.3,0,0.4c0,0.1,0,0.1,0,0.1
c0,0.1,0,0.1,0,0.2c0.1,0.3,0.1,0.6,0.1,0.9c0.2,3.2,0.5,6.3,0.7,9.4c1.1,1,2.2,2,3.2,3c2.5,2.6,5.2,5,6.8,8.1
c1.8,3.5,2.3,7.2,2.1,11c-0.1,0.9,0.1,1.7,0.4,2.4c0.3,0.5,0.4,1.1,0.6,1.6c0.2,0.8,0.4,1.5,0.6,2.3c0.1,0.1,0.1,0.2,0.1,0.4
c0,0.1,0,0.4,0,0.5c0.1,0.1,0.1,0.3,0.1,0.5c0,0.3,0,0.6,0,0.9c0,0.9,0,1.7,0,2.6c0,0.3,0,0.5,0,0.8c-0.1,0.2-0.1,0.4-0.1,0.6
c0,0.1,0,0.3,0,0.4c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.1,0,0.3,0,0.4c-0.1,0.1-0.1,0.2-0.1,0.4c-0.1,0.4-0.1,0.6-0.1,1
c0.1,0.2,0.1,0.5,0.1,0.7c0,1.2,0,2.3,0,3.5c-0.1,0.2-0.1,0.5-0.1,0.7c0,0.2,0,0.4,0,0.6c-0.1,0.1-0.1,0.3-0.1,0.4
c0,0.1,0,0.3,0,0.4c-0.1,0.1-0.1,0.2-0.1,0.4c0,0.1,0,0.1,0,0.1c0.1,0.1,0.1,0.3,0.1,0.4c0,0.1,0,0.2,0,0.3
c0.1,0.1,0.1,0.3,0.1,0.4c0,0.1,0,0.4,0,0.5c0.1,0.1,0.1,0.3,0.1,0.5c0.1,0,0.1,0,0.1,0.1c0.1,0,0.1,0.1,0.1,0.1
c0.1,0,0.2,0,0.3,0.1c0.1,0,0.1,0.1,0.2,0.1s0.1,0,0.3,0.1c0.1,0,0.1,0.1,0.2,0.1c1.9,0.6,3.7,1.5,5.2,2.9c1.3,1.3,2.5,2.6,4,4.1
c2,0.1,4.3,0.1,6.7,0.1c0.3,0,0.6,0.1,0.8,0.1c0.8-0.1,1.6-0.1,2.4-0.1c1.5,0,3,0,4.4,0c0.7-0.9,1.4-1.8,2-2.7
c1.2-0.9,2.3-2.1,3.5-2.8c1.5-0.9,3.2-1.4,4.8-2.1c0.1-0.7,0.4-1.4,0.5-2.1c0.3-1.2,0.6-2.4,0.7-3.7c0.1-0.8,0-1.7,0-2.4
c0-1.7,0.1-3.4,0.1-5.1c0-0.7,0-1.4-0.1-2.2c-0.6-3.3-0.1-6.6,1.1-9.7c0.2-0.5,0.4-1.1,0.7-1.6c0.4-0.7,0.6-1.6,0.6-2.4
c0.1-0.2,0.1-0.4,0.1-0.6c0-0.1,0-0.3,0-0.4c0.1-0.1,0.1-0.3,0.1-0.4c0.1-0.6,0.3-1.3,0.4-1.9c0.6-2.4,1.8-4.7,3.5-6.6
c0.8-0.8,1.6-1.6,2.4-2.3c0.1-0.1,0.2-0.2,0.4-0.4c0.1-0.1,0.1-0.1,0.2-0.2c0.1-0.1,0.1-0.1,0.1-0.2l0.1-0.1c1.2-1.7,2.8-3,4.5-4.2
c0-0.4,0.1-0.6,0.1-0.9c0-0.1,0.1-0.3,0.1-0.4c0-0.5,0.1-1,0.1-1.4c0-0.1,0.1-0.2,0.1-0.3c0-0.4,0.1-0.9,0.1-1.3
c0-0.1,0.1-0.3,0.1-0.4c0-0.4,0.1-0.8,0.1-1.2c0-0.1,0.1-0.3,0.1-0.4c0-0.4,0.1-0.7,0.1-1.2c0-0.2,0.1-0.4,0.1-0.6
c0-0.4,0-0.9,0.1-1.3c0-0.2,0.1-0.5,0.1-0.7c0-0.4,0-0.8,0.1-1.2c0.4-2,0.7-4,1-6c0-0.1,0-0.1,0-0.1c0.4-1.2,0.8-2.4,1.3-3.7
c0.1-0.1,0.1-0.3,0.1-0.4c0-0.1,0.1-0.2,0.1-0.4v-0.1c0,0,0,0,0.1,0c0-0.1,0.1-0.2,0.1-0.3v-0.1h0.1c0-0.1,0.1-0.2,0.1-0.3
s0.1-0.1,0.1-0.1c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.4c0-0.1,0.1-0.1,0.1-0.1s0-0.2,0.1-0.3
c0.1-0.1,0.1-0.1,0.1-0.2c0-0.1,0-0.2,0-0.4c0-0.1,0.1-0.1,0.1-0.1c0-0.1,0-0.3,0.1-0.4c0-0.1,0.1-0.1,0.1-0.1
c0.1-0.4,0.2-0.8,0.3-1.2c0.5-1.3,1-2.6,1.5-3.9c0.4-1,0.8-2.1,1.2-3.2c-0.4,0-0.6,0-0.9,0c-13.2,0-26.4,0-39.6,0
c-0.3,0-0.6-0.1-0.8-0.1c-0.4-2.2-0.9-4.4-1.3-6.6c-1.6-8.6-3.3-17.2-4.9-25.9c-0.1-0.2-0.1-0.5-0.1-0.8c3.8,0,7.6,0,11.4,0
c1.9,0,3.8,0,5.7,0c1.8,0,3.6,0,5.4,0c2.3,0,4.5,0,6.8,0c1.2,0,2.5,0,3.7,0s2.5,0,3.7,0c1.5,0,3,0,4.4,0c1.7,0,3.3,0,5,0
c2.3,0,4.6,0,6.9,0c1.1,0,2.2,0,3.2,0c1.2,0,2.3,0,3.5,0c2.8,0,5.6,0,8.4,0c1.8,0,3.5,0,5.3,0c2.6,0,5.2,0,7.8,0
c2.8,0.1,5.5,0.1,8.2,0.2c1.3,0.1,2.6,0.1,4,0.1c-4,10.7-7.9,21.2-11.8,31.8c-1.1,4-2.3,8-3.4,12c-0.6,2.2-1.3,4.5-2,6.8
c0,0.1-0.1,0.1-0.1,0.1s0,0.2-0.1,0.3c0,0.1-0.1,0.1-0.1,0.1c0,0.1-0.1,0.2-0.1,0.3c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3
c-0.1,0.1-0.1,0.1-0.1,0.1c-0.5,1.8-1,3.6-1.5,5.4c-0.1,0.6-0.4,1.2-0.6,1.7c-0.7,2.5-1.5,5.1-2.1,7.6c-0.4,1.3-0.4,2.7-0.5,4
c-0.4,4.1-0.6,8.2-2.5,12c-0.1,0.1-0.1,0.2-0.2,0.3c-1.9,3.7-4.5,6.9-8.1,9.1c-1.4,1.5-1.3,1.4-1,3.8c0.2,1.7,0.4,3.3,0.1,5
c-0.2,1.6-0.1,3.2-0.1,4.8c0.2,3.2-0.4,6.1-1.8,9c-0.3,0.6-0.6,1.2-0.9,1.8c0,0.1,0,0.3,0,0.4c0,0.1,0,0.3,0,0.4c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.1,0,0.1c-0.2,3.7-1.1,7.3-2.6,10.7c-0.1,0.3-0.4,0.6-0.5,0.9c-0.1,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.1,0.1-0.1,0.2
c-1,1.8-2.3,3.3-3.7,4.8c-1.1,1.1-2,2.2-3,3.2c-0.3,0.3-0.6,0.5-0.8,0.8c-1.3,0.9-2.5,1.9-3.8,2.9c-0.9,0.5-1.9,1-2.8,1.4
c-0.9,1.1-1.8,2.1-2.6,3.1c-1.1,0.9-2.3,1.9-3.3,2.9c-1.2,0.6-2.5,1.4-3.7,2l0,0c-0.1,0-0.1,0.1-0.1,0.1c-1.3,0.4-2.5,0.8-3.8,1.2
c-1.5,0.3-3,0.6-4.4,0.9c-0.2,0.1-0.4,0.1-0.6,0.1c-1.3,0.1-2.5,0.2-3.7,0.3c-3,0.1-6,0.1-9,0.1c-3.7-0.1-7.3-0.1-10.9-0.3
c-0.4,0-0.8-0.1-1.3-0.1c-2.1-0.4-4.2-0.6-6.4-1c-0.1-0.1-0.2-0.1-0.4-0.1c-0.1,0-0.1,0-0.2,0c-3.2-0.6-5.9-2.2-8.4-4.3l-0.1-0.1
c0,0-0.1,0-0.1-0.1l-0.1-0.1l-0.1-0.1c-0.1,0-0.1-0.1-0.1-0.1l0,0c-0.1-0.1-0.1-0.1-0.1-0.1l0,0c-0.1-0.1-0.1-0.1-0.1-0.1l0,0
c-0.1-0.1-0.1-0.1-0.1-0.1l0,0c-0.1-0.1-0.1-0.1-0.1-0.1l0,0c-0.1-0.1-0.1-0.1-0.1-0.1l0,0c0-0.1-0.1-0.1-0.1-0.1v-0.1
c-0.1-0.1-0.1-0.1-0.1-0.1l-0.1-0.1c-0.1,0-0.1,0-0.1-0.1c-0.7-0.9-1.4-1.8-2.1-2.6c-0.2-0.3-0.6-0.4-0.9-0.6
c-0.6-0.4-1.1-0.6-1.7-0.9c-0.2-0.1-0.4-0.2-0.6-0.3l0,0c-0.1-0.1-0.3-0.1-0.4-0.3c-2.2-1.4-4.1-3-5.8-5c-2.6-2.7-5.7-5-7.7-8.4
c-0.1-0.2-0.3-0.5-0.4-0.8c-1.1-1.9-1.8-3.9-2-6c-0.1-1.4-0.1-2.9-0.2-4.3c-0.1-1-0.4-2-0.6-3c-0.4-2.4-0.3-4.8,0.1-7.3
c0.1-0.7-0.1-1.6-0.2-2.3c-0.4-2.7-0.1-5.3,0.6-7.9c0.2-0.8,0.2-1.7,0.3-2.2c-0.7-1.7-1.8-2.5-3-3.3c-0.2-0.1-0.4-0.3-0.6-0.5
c-1.2-1.2-2.4-2.2-3.5-3.5c-1.3-1.4-2.2-3.2-2.8-5l0,0c-0.1-0.1-0.1-0.2-0.1-0.3c-0.9-2.1-1.4-4.3-1.6-6.6
c-0.1-2.2-0.4-4.2-0.5-6.4c-0.1-2.1-0.3-4.2-0.4-6.3c-0.1-1.4-0.2-2.8-0.4-4.2c-0.1-1.4-0.3-3-0.5-4.4c-0.2-1.9-0.4-4-0.8-5.9
c-0.5-3-1-6-1.5-9c-0.3-1.6-0.6-3.2-0.9-4.8c0-0.1,0-0.4-0.1-0.5c0,0-0.1-0.1,0-0.1c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.1,0-0.1,0-0.2
c-0.1-0.1-0.1-0.4-0.1-0.5c0-0.1,0-0.1,0-0.1c-0.1-0.1-0.1-0.2-0.1-0.3c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.1-0.3-0.1-0.5
c-0.4-1.7-0.8-3.4-1.3-5c-1.3-4.5-2.6-8.9-3.9-13.3c-0.1-0.2-0.1-0.4-0.1-0.6c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.1-0.1-0.2-0.1-0.3
c-0.9-2.5-2-5-2.8-7.6c-1.1-3.8-2.9-7.3-4.7-10.7c-0.3-0.6-0.6-1.2-0.9-1.7c-1.3-2.4-2.7-4.8-4-7.2c-2.2-4.1-4.4-8.2-6.6-12.3
c-0.4-0.8-0.8-1.6-1.1-2.4c-1.5-2.9-3-5.7-4.4-8.6c-1.8-3.6-3-7.4-3.8-11.3c-0.7-3.3-0.9-6.6-0.6-9.9c0.7-7,3.1-13.3,7.6-18.8
c0.4-0.5,1-1,1.4-1.5c0.9-0.9,1.8-1.9,2.8-2.7c2.6-2.3,5.6-4.2,8.7-5.8c0.1-0.1,0.2-0.1,0.3-0.1c2.8-1.4,5.6-2.5,8.7-3.2
c1.7-0.4,3.3-0.7,5-1.2c0.1-0.1,0.2-0.1,0.3-0.1c0.1,0,0.2,0,0.3,0c1.6-0.3,3.1-0.6,4.7-0.9c0.1-0.1,0.2-0.1,0.3-0.1
c0.2,0,0.4,0,0.6-0.1c0.1,0,0.2-0.1,0.3-0.1c0.2,0,0.4,0,0.6,0c1.1-0.1,2-0.4,3.1-0.5c1.3-0.1,2.7-0.3,4-0.4c0.2,0,0.4-0.1,0.6-0.1
c0.1,0,0.2-0.1,0.3-0.1c0.3,0,0.6-0.1,0.9-0.1c0.1,0,0.2,0,0.3-0.1c1.2-0.1,2.3-0.2,3.5-0.3c1.5-0.1,3-0.3,4.4-0.4
c0.1,0,0.1,0,0.1,0c0.6-0.1,1.1-0.1,1.6-0.1c0.4-0.1,0.8-0.1,1.3-0.1c0.1,0,0.1,0,0.1,0c1.5-0.1,3-0.2,4.4-0.3
c3.2-0.1,6.4-0.3,9.5-0.4c0.2,0,0.5,0,0.7,0c1.8-0.1,3.5-0.1,5.3-0.1c3.9-0.1,7.8-0.2,11.6-0.3c4.1,0,8.1,0,12.2,0
c2.6,0,5.2,0,7.8,0c0.1,0,0.3,0.1,0.4,0.1c1.1,0.1,2.3,0.1,3.4,0.2c0.4,0.1,0.8,0.1,1.3,0.1c2.2,0.1,4.3,0.2,6.5,0.3
c0.4,0.1,0.8,0.1,1.2,0.1c0.8,0.1,1.8,0.1,2.6,0.1c1.2,0.1,2.3,0.1,3.5,0.1c0.3,0.1,0.6,0.1,0.9,0.1c0.8,0.1,1.6,0.1,2.5,0.1
c1.1,0.1,2,0.1,3.1,0.1c0.2,0,0.4,0,0.6,0.1c0.5,0,1,0.1,1.5,0.1c0.1,0,0.3,0,0.4,0.1c0.2,0,0.5,0.1,0.7,0.1
c1.1,0.1,2.2,0.1,3.2,0.3c0.2,0,0.4,0,0.6,0c0.1,0,0.1,0,0.2,0.1c0.4,0,0.7,0.1,1.1,0.1c0.1,0,0.3,0.1,0.4,0.1c0.3,0,0.5,0,0.8,0
c0.1,0,0.3,0.1,0.4,0.1c0.3,0,0.6,0,0.8,0.1c0.1,0,0.3,0.1,0.4,0.1c0.6,0.1,1.3,0.1,2,0.2c0.1,0,0.1,0.1,0.2,0.1
c0.1,0,0.1,0,0.2,0.1c1.2,0.1,2.3,0.3,3.5,0.4c1.3,0.2,2.7,0.4,4,0.6c1.4,0.2,2.8,0.4,4.2,0.6c1.6,0.2,3.2,0.5,4.9,0.8
c0.1,0,0.1,0.1,0.3,0.1c0.1,0,0.3,0,0.4,0c0.1,0,0.2,0.1,0.3,0.1c0.2,0,0.4,0.1,0.6,0.1c0,0,0.1,0,0.1,0.1c0.1,0,0.3,0,0.5,0.1
c0.1,0,0.1,0.1,0.2,0.1c0.1,0,0.4,0,0.5,0.1c0.1,0,0.1,0.1,0.1,0.1c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.3,0.1
c1.1,0.3,2.3,0.6,3.5,0.9c1,0.3,2,0.6,2.9,0.9c0.1,0.1,0.2,0.1,0.4,0.1c0.4,0.1,0.6,0.2,1,0.3c0.1,0.1,0.1,0.1,0.2,0.1
c2.8,0.9,5.4,2.4,7.8,4c5.5,3.8,9.4,8.9,12.3,14.8c1.5,3,2.5,6.2,3,9.6c0.1,1.2,0.4,2.4,0.6,3.7C412.8,260.8,412,261.1,411.1,261.4
z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -9,8 +9,9 @@
},
"scripts": {
"start": "ember server",
"build": "ember build",
"build": "ember cordova:build --platform=android --environment=production --release",
"test": "ember test",
"cordova": "ember cdv:serve --platform=android"
},
"engines": {
"node": ">= 0.10.0"
@ -35,6 +36,7 @@
"ember-cli-test-loader": "^1.1.0",
"ember-cli-uglify": "^1.2.0",
"ember-cordova": "^0.3.5",
"ember-cordova-keyboard": "0.0.1",
"ember-export-application-global": "^1.0.4",
"ember-load-initializers": "^0.5.0",
"ember-modal-dialog": "^0.9.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
<!-- Most restrictive policy: -->
<site-control permitted-cross-domain-policies="none"/>
<!-- Least restrictive policy: -->
<!--
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
-->
</cross-domain-policy>

View file

@ -1,14 +0,0 @@
/* TEAM */
Your title: Egor Philippov
Site: https://www.linkedin.com/pub/egor-philippov/7b/220/148
Location: Vancouver, Canada.
/* THANKS */
Edmond Cheung - favicons + huegasm logo
Liviu Antonescu - filming + video editing of the intro
Olamide Omorodion - business consultation
/* SITE */
Last update: 2015
Standards: HTML5, CSS3
Components: ember, jQuery, bootstrap, font-awesome, intro.js, locallyjs, nouislider, dancer.js, ember paper, ember notify, JavaScript-ID3-Reader

View file

@ -1,3 +0,0 @@
# http://www.robotstxt.org
User-agent: *
Disallow:

View file

@ -0,0 +1,11 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('route:application', 'Unit | Route | application', {
// Specify the other units that are required for this test.
// needs: ['controller:foo']
});
test('it exists', function(assert) {
let route = this.subject();
assert.ok(route);
});

View file

@ -114,6 +114,9 @@ export default Component.extend({
storage.remove('huegasm.bridgeIp');
location.reload();
},
toggleDimmer() {
this.sendAction("toggleDimmer");
},
clearAllSettings() {
this.get('storage').clear();
location.reload();
@ -173,32 +176,23 @@ export default Component.extend({
'You may toggle a light\'s state by clicking on it.'
},
{
element: '#settings',
element: $('#navigation .ember-basic-dropdown-trigger')[0],
intro: 'A few miscellaneous settings can be found here.<br><br>' +
'<b>WARNING</b>: clearing application settings will restore the application to its original state. This will even delete your playlist and any saved song beat preferences.',
position: 'bottom'
},
{
element: '#dimmer',
intro: 'And that\'s it...Hope you enjoy the application. ;)<br><br>' +
'<i><b>TIP</b>: click on the icon to switch to a darker theme.</i>',
position: 'top'
'<i><b>TIP</b>: click on the lightswitch to switch to a darker theme.</i>'
}
]
});
// it's VERY ugly but it works... the jQuery massacre :'(
intro.onchange((element) => {
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip'){
$('#music-tab').removeClass('hidden');
$('#lights-tab').addClass('hidden');
$('.navigation-item').eq(0).removeClass('active');
$('.navigation-item').eq(1).addClass('active');
$('.navigation-item').eq(0).click();
} else {
$('#lights-tab').removeClass('hidden');
$('#music-tab').addClass('hidden');
$('.navigation-item').eq(1).removeClass('active');
$('.navigation-item').eq(0).addClass('active');
$('.navigation-item').eq(1).click();
}
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area'){
@ -210,27 +204,6 @@ export default Component.extend({
}
});
let onFinish = ()=>{
this.set('activeTab', 1);
$('#music-tab').removeClass('hidden');
$('#lights-tab').addClass('hidden');
$('.navigation-item').eq(0).removeClass('active');
$('.navigation-item').eq(1).addClass('active');
}, onExit = ()=>{
let dimmer = $('#dimmer');
onFinish();
dimmer.popover({
trigger: 'manual',
placement: 'top',
content: 'Click on this icon to toggle the dark theme.'
}).popover('show');
setTimeout(()=>{
dimmer.popover('hide');
}, 5000);
};
// skip hidden/missing elements
intro.onafterchange((element)=>{
let elem = $(element);
@ -241,7 +214,7 @@ export default Component.extend({
run.later(this, function() {
$('.introjs-tooltip').velocity('scroll');
}, 500);
}).onexit(onExit).oncomplete(onFinish).start();
}).start();
}
}
});

View file

@ -1,5 +1,9 @@
{{#if ready}}
<div id="navigation">
<div id="dimmer" class={{dimmerOnClass}} {{action "toggleDimmer"}}>
<div id="dimmer-switch"></div>
</div>
{{#each tabData as |tab|}}
<span class="navigation-item pointer text-uppercase {{if tab.selected "active"}}" {{action "changeTab" tab.name}}>{{tab.name}}</span>
{{/each}}
@ -28,8 +32,8 @@
{{light-group lightsData=lightsData activeLights=activeLights syncLight=syncLight apiURL=apiURL dimmerOn=dimmerOn storage=storage}}
<div class="row">
{{lights-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial active=lightsTabSelected colorLoopOn=colorLoopOn dimmerOn=dimmerOn}}
{{lights-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial active=lightsTabSelected colorLoopOn=colorLoopOn dimmerOn=dimmerOn strobeOn=pauseLightUpdates toggleDimmer="toggleDimmer"}}
{{music-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights active=musicTabSelected pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn action="startIntro"}}
{{music-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights active=musicTabSelected pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn toggleDimmer="toggleDimmer" action="startIntro"}}
</div>
{{/if}}

View file

@ -2,7 +2,6 @@ import Ember from 'ember';
const {
Component,
computed,
isEmpty,
isNone,
$
@ -12,41 +11,18 @@ export default Component.extend({
bridgeIp: null,
bridgeUsername: null,
trial: false,
storage: null,
dimmerOn: false,
ready: false,
year: computed(function(){
return new Date().getFullYear();
}),
dimmerOnClass: computed('dimmerOn', function(){
let dimmerOn = this.get('dimmerOn'),
storage = this.get('storage'),
dimmerOnClass = null;
if (dimmerOn) {
$('body').addClass('dimmerOn');
$('html').addClass('dimmerOn');
dimmerOnClass = 'active';
} else {
$('body').removeClass('dimmerOn');
$('html').removeClass('dimmerOn');
}
storage.set('huegasm.dimmerOn', dimmerOn);
return dimmerOnClass;
}),
init(){
this._super(...arguments);
let storage = new window.Locally.Store({compress: true});
let storage = new window.Locally.Store({compress: true}),
dimmerOn = storage.get('huegasm.dimmerOn');
this.set('storage', storage);
if (!isNone(storage.get('huegasm.dimmerOn'))) {
this.set('dimmerOn', storage.get('huegasm.dimmerOn'));
if (!isNone(dimmerOn) && dimmerOn) {
this.send('toggleDimmer');
}
if (!isEmpty(storage.get('huegasm.bridgeIp')) && !isEmpty(storage.get('huegasm.bridgeUsername'))) {
@ -60,7 +36,20 @@ export default Component.extend({
actions: {
toggleDimmer(){
this.toggleProperty('dimmerOn');
let dimmerOn = this.get('dimmerOn');
if (dimmerOn) {
$('body').addClass('dimmerOn');
$('html').addClass('dimmerOn');
} else {
$('body').removeClass('dimmerOn');
$('html').removeClass('dimmerOn');
}
this.get('storage').set('huegasm.dimmerOn', dimmerOn);
},
isReady(){
this.set('ready', true);
}

View file

@ -1,5 +1,5 @@
{{#if bridgeUsername}}
{{hue-controls bridgeIp=bridgeIp bridgeUsername=bridgeUsername trial=trial dimmerOn=dimmerOn storage=storage}}
{{hue-controls bridgeIp=bridgeIp bridgeUsername=bridgeUsername trial=trial dimmerOn=dimmerOn storage=storage toggleDimmer="toggleDimmer"}}
{{else}}
{{#if ready}}
{{bridge-finder bridgeIp=bridgeIp bridgeUsername=bridgeUsername trial=trial storage=storage}}
@ -24,16 +24,4 @@
{{paper-button raised=true primary=true onClick=(action "isReady") class="go-button center-block" label="Go!"}}
</div>
{{/if}}
{{/if}}
<footer id="footer">
<div id="dimmer" {{action "toggleDimmer"}} class={{dimmerOnClass}}></div>
<div id="footer-text">
© {{year}}
<a href="http://www.egorphilippov.me" target="_blank" rel="noopener noreferrer">
Egor Philippov
</a>
</div>
</footer>
{{/if}}

View file

@ -0,0 +1,21 @@
import Ember from 'ember';
const {
Component,
computed
} = Ember;
export default Component.extend({
tagName: 'footer',
classNames: ['footer'],
year: computed(function(){
return new Date().getFullYear();
}),
actions: {
toggleDimmer(){
this.sendAction('toggleDimmer');
}
}
});

View file

@ -0,0 +1,9 @@
<div class="logo" {{action "toggleDimmer"}}></div>
<div class="footer-text">
© {{year}}
<a href="http://www.egorphilippov.me" target="_blank" rel="noopener noreferrer">
Egor Philippov
</a>
</div>

View file

@ -192,7 +192,7 @@ export default Component.extend({
}
}
this.set('strobeOnInervalHandle', setInterval(this.strobeStep.bind(this), 200));
this.set('strobeOnInervalHandle', setInterval(this.strobeStep.bind(this), 500));
} else { // revert the light system to pre-strobe
let preStrobeOnLightsDataCache = this.get('preStrobeOnLightsDataCache'), updateLight = (lightIndex)=> {
$.ajax(this.get('apiURL') + '/lights/' + lightIndex + '/state', {
@ -247,6 +247,12 @@ export default Component.extend({
return this.get('dimmerOn') ? 'dimmerOn' : null;
}),
actions: {
toggleDimmer(){
this.sendAction('toggleDimmer');
}
},
// **************** STROBE LIGHT FINISH ****************
// http://www.developers.meethue.com/documentation/color-conversions-rgb-xy
rgbToXy(red, green, blue){

View file

@ -40,4 +40,6 @@
<p data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip lights-control-tooltip" data-title="Selected lights will slowly cycle through all the colors">Colorloop</p>
{{paper-switch value=colorLoopOn onChange=(action (mut colorLoopOn)) disabled=trial skipProxy=trial label=colorloopOnTxt}}
{{/paper-item}}
{{/paper-list}}
{{/paper-list}}
{{huegasm-footer toggleDimmer="toggleDimmer"}}

View file

@ -888,6 +888,9 @@ export default Component.extend(helperMixin, visualizerMixin, {
}
}
}
},
toggleDimmer(){
this.sendAction('toggleDimmer');
}
}
});

View file

@ -86,7 +86,7 @@
{{#if usingLocalAudio}}
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip" id="shuffleTooltip" data-title={{shuffleTooltipTxt}} {{action "shuffleChanged"}}>{{paper-icon "shuffle" class=shuffleClass}}</span>
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip" id="repeatTooltip" data-title={{repeatTooltipTxt}} {{action "repeatChanged"}}>{{paper-icon repeatIcon class=repeatClass}}</span>
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip" data-title="Clear playlist" {{action "clearPlaylist"}}>{{paper-icon "clear-all" class="player-control-icon"}}</span>
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip hidden-xs" data-title="Clear playlist" {{action "clearPlaylist"}}>{{paper-icon "clear-all" class="player-control-icon"}}</span>
{{/if}}
</div>
@ -155,14 +155,6 @@
{{/if}}
<div class="row" id="beat-option-row">
<div class="beat-option col-sm-4 col-xs-6">
<span data-toggle="tooltip" data-placement="top" data-title="The sensitivity of the beat detector ( more sensitivity results in more registered beats )" class="option-description bootstrap-tooltip">
Sensitivity
</span>
{{range-slider start=threshold orientation="vertical" step=beatOptions.threshold.step range=beatOptions.threshold.range on-slide="thresholdChanged" pips=beatOptions.threshold.pips}}
</div>
<div class="beat-option col-sm-4 col-xs-6">
<span data-toggle="tooltip" data-placement="top" data-title="The range of hues ( colors ) that the lights may change to on beat." class="option-description bootstrap-tooltip">
Hue Range
@ -171,6 +163,14 @@
{{range-slider start=hueRange orientation="vertical" step=beatOptions.hueRange.step range=beatOptions.hueRange.range connect=hueRangeConnect on-slide="hueRangeChanged" pips=beatOptions.hueRange.pips}}
</div>
<div class="beat-option col-sm-4 col-xs-6">
<span data-toggle="tooltip" data-placement="top" data-title="The sensitivity of the beat detector ( more sensitivity results in more registered beats )" class="option-description bootstrap-tooltip">
Sensitivity
</span>
{{range-slider start=threshold orientation="vertical" step=beatOptions.threshold.step range=beatOptions.threshold.range on-slide="thresholdChanged" pips=beatOptions.threshold.pips}}
</div>
{{#if usingMicAudio}}
<div class="beat-option col-xs-4">
<span data-toggle="tooltip" data-placement="top" data-title="The coefficient to boost the microphone signal by" class="option-description bootstrap-tooltip">
@ -217,4 +217,6 @@
{{ember-notify messageStyle='bootstrap' closeAfter=5000}}
{{music-tab/add-soundcloud-sound-modal action="handleNewSoundCloudURL" isShowingModal=isShowingAddSoundCloudModal}}
{{music-tab/add-soundcloud-sound-modal action="handleNewSoundCloudURL" isShowingModal=isShowingAddSoundCloudModal}}
{{huegasm-footer toggleDimmer="toggleDimmer"}}

View file

@ -24,13 +24,13 @@ body, button {
padding-bottom: 50px;
}
#footer {
.footer {
width: 100%;
text-align: center;
margin-top: 20px;
}
#footer-text {
.footer-text {
display: inline-block;
position: relative;
bottom: 10px;

View file

@ -65,12 +65,11 @@ body.dimmerOn {
}
.paper-icon.dimmerOn {
color: inherit !important;
text-shadow: $glowingText;
opacity: 0.9 !important;
}
#dimmer {
.logo {
display: inline-block;
cursor: pointer;
width: 40px;
@ -78,3 +77,24 @@ body.dimmerOn {
background: url(images/huegasm.png) center center no-repeat;
background-size: 40px 40px;
}
#dimmer {
background: url(images/lightswitch.png) !important;
width: 14px;
height: 34px;
display: inline-block;
float: left;
margin-left: 15px;
cursor: pointer;
&.dimmerOn #dimmer-switch {
opacity: 0;
}
#dimmer-switch {
background: url(images/lightswitch.png) -14px 0px;
width: 14px;
height: 34px;
transition: opacity 0.4s;
float: left;
opacity: 1;
}
}

View file

@ -1,4 +1,5 @@
#lights-tab {
padding: 0;
min-height: 350px;
.paper-icon {
line-height: 0.8 !important;
@ -84,7 +85,7 @@
position: absolute;
left: 33px;
top: 15px;
font-size: 16px;
font-size: 16px !important;
}
#navigation .ember-basic-dropdown-trigger {
@ -92,6 +93,8 @@
text-align: right;
float: right;
position: relative;
bottom: 10px;
transform: scale(1.1);
}
@media(min-width:767px) {

View file

@ -22,7 +22,7 @@ module.exports = function(environment) {
};
if (environment === 'development') {
ENV.ignoreFailures = true;
// ENV.ignoreFailures = true;
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,24 @@
import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
moduleForComponent('huegasm-footer', 'Integration | Component | huegasm footer', {
integration: true
});
test('it renders', function(assert) {
// Set any properties with this.set('myProperty', 'value');
// Handle any actions with this.on('myAction', function(val) { ... });
this.render(hbs`{{huegasm-footer}}`);
assert.equal(this.$().text().trim(), '');
// Template block usage:
this.render(hbs`
{{#huegasm-footer}}
template block text
{{/huegasm-footer}}
`);
assert.equal(this.$().text().trim(), 'template block text');
});

View file

@ -0,0 +1,11 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('route:application', 'Unit | Route | application', {
// Specify the other units that are required for this test.
// needs: ['controller:foo']
});
test('it exists', function(assert) {
let route = this.subject();
assert.ok(route);
});