Updated the new character dialog to Polymer 1

This commit is contained in:
Stefan Zermatten
2017-01-16 15:34:23 +02:00
parent d4bec4f5e7
commit bdc64dfb10
7 changed files with 93 additions and 73 deletions

View File

@@ -18,16 +18,6 @@ body {
background-color: #E0E0E0; background-color: #E0E0E0;
} }
//fix tabs and core-toolbar having box shadow
core-toolbar {
box-shadow: none;
}
//give drawer panel a shadow always
core-header-panel[drawer] {
box-shadow: 2px 0px 5px 0px rgba(0,0,0,0.2);
}
//Paragraphs //Paragraphs
p { p {
margin-bottom: 8px; margin-bottom: 8px;
@@ -77,6 +67,10 @@ paper-icon-item::shadow #contentIcon {
right: 24px; right: 24px;
} }
paper-fab {
background-color: #d13b2e;
}
//Buttons //Buttons
paper-button { paper-button {
color: #000; color: #000;

View File

@@ -1,40 +1,27 @@
<template name="newCharacterDialog"> <template name="newCharacterDialog">
<div> <div class="fit layout vertical">
<paper-input id="nameInput" label="Name"></paper-input><br> <app-header-layout has-scrolling-region class="new-character-dialog flex">
<paper-input id="genderInput" label="Gender"></paper-input><br> <app-header fixed effects="waterfall">
<paper-input id="raceInput" label="Race"></paper-input> <app-toolbar>
<!-- <div main-title>New Character</div>
<div> </app-toolbar>
<div layout horizontal center-justified> </app-header>
{{pointsUsed}}/<paper-input-decorator><input type="number" value="27"></paper-input-decorator> <div class="form">
</div> <p>
<div layout horizontal wrap> Input the basics of your character, but don't worry, you can always change these values later
<div>Strength</div> </p>
<paper-slider id="strSlider" min="8" max="15" value="8" secondaryProgress={{secondaryProgress}}></paper-slider> <paper-input class="nameInput" label="Name" {{errorAtts "name"}}></paper-input><br>
</div> <paper-input class="genderInput" label="Gender" {{errorAtts "gender"}}></paper-input><br>
<div layout horizontal wrap> <paper-input class="raceInput" label="Race" {{errorAtts "race"}}></paper-input>
<div>Dexterity</div>
<paper-slider id="dexSlider" min="8" max="15" value="8" secondaryProgress={{secondaryProgress}}></paper-slider>
</div>
<div layout horizontal wrap>
<div>Constitution</div>
<paper-slider id="conSlider" min="8" max="15" value="8" secondaryProgress={{secondaryProgress}}></paper-slider>
</div>
<div layout horizontal wrap>
<div>Intelligence</div>
<paper-slider id="intSlider" min="8" max="15" value="8" secondaryProgress={{secondaryProgress}}></paper-slider>
</div>
<div layout horizontal wrap>
<div>Wisdom</div>
<paper-slider id="wisSlider" min="8" max="15" value="8" secondaryProgress={{secondaryProgress}}></paper-slider>
</div>
<div layout horizontal wrap>
<div>Charisma</div>
<paper-slider id="chaSlider" min="8" max="15" value="8" secondaryProgress={{secondaryProgress}}></paper-slider>
</div> </div>
</app-header-layout>
<div class="buttons layout horizontal end-justified">
<paper-button class="cancelButton">
Cancel
</paper-button>
<paper-button class="addButton" disabled={{invalid}}>
Add
</paper-button>
</div> </div>
-->
</div> </div>
<paper-button id="cancelButton" affirmative> Cancel </paper-button> </template>
<paper-button id="addButton" affirmative> Add </paper-button>
</template>

View File

@@ -1,13 +1,49 @@
Template.newCharacterDialog.events({ Template.newCharacterDialog.onCreated(function(){
"tap #addButton": function(event, instance){ this.character = {};
Characters.insert({ this.schema = new SimpleSchema({
name: instance.find("#nameInput").value, //strings
gender: instance.find("#genderInput").value, name: {type: String},
race: instance.find("#raceInput").value, gender: {type: String, optional: true},
owner: Meteor.userId(), race: {type: String, optional: true},
}, function(err, id){ });
if (err) throw err; this.context = this.schema.newContext();
Router.go("characterSheet", {_id: id}); this.context.runOnce = false;
}); });
}
Template.newCharacterDialog.helpers({
invalid(){
let context = Template.instance().context;
let valid = context.isValid() && context.runOnce;
return !valid;
},
errorAtts(key){
let error = Template.instance().context.keyErrorMessage(key);
if (error){
return {
invalid: true,
["error-message"]: error,
}
}
},
});
changeFunction = function(field){
return _.debounce(function(event, instance){
instance.character[field] = event.currentTarget.value;
instance.schema.clean(instance.character);
instance.context.validate(instance.character);
if (!instance.context.runOnce) instance.context.runOnce = true;
}, 200);
};
Template.newCharacterDialog.events({
"input .nameInput": changeFunction("name"),
"input .genderInput": changeFunction("gender"),
"input .raceInput": changeFunction("race"),
"click .cancelButton": function(event, instance){
popDialogStack();
},
"click .addButton": function(event, instance){
popDialogStack(instance.character);
},
}); });

View File

@@ -51,11 +51,7 @@
<div class="fab-buffer"></div> <div class="fab-buffer"></div>
<paper-fab class="floatyButton addCharacter" <paper-fab class="floatyButton addCharacter"
icon="add" icon="add"
title="Add" title="Add"></paper-fab>
role="button"
tabindex="0"
aria-label="Add"
hero-id="main"></paper-fab>
</div> </div>
</app-header-layout> </app-header-layout>
</template> </template>

View File

@@ -22,9 +22,15 @@ Template.characterList.helpers({
Template.characterList.events({ Template.characterList.events({
"tap .addCharacter": function(event, template) { "tap .addCharacter": function(event, template) {
GlobalUI.showDialog({ pushDialogStack({
heading: "New Character",
template: "newCharacterDialog", template: "newCharacterDialog",
}); element: event.currentTarget,
callback(character){
if (!character) return;
character.owner = Meteor.userId();
let _id = Characters.insert(character);
Router.go("characterSheet", {_id});
},
})
}, },
}); });

View File

@@ -1,7 +0,0 @@
.feedback .form {
padding: 24px;
}
.feedback .buttons {
padding: 8px 8px 8px 24px;
}

View File

@@ -50,3 +50,11 @@
background: red; background: red;
border-radius: 30px; border-radius: 30px;
} }
.dialog-stack .dialog .form {
padding: 24px;
}
.dialog-stack .dialog .buttons {
padding: 8px 8px 8px 24px;
}