Added quick feedback form
This commit is contained in:
58
rpg-docs/Model/Meta/Reports.js
Normal file
58
rpg-docs/Model/Meta/Reports.js
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
Reports = new Mongo.Collection("reports");
|
||||||
|
|
||||||
|
Schemas.Report = new SimpleSchema({
|
||||||
|
owner: {
|
||||||
|
type: String,
|
||||||
|
regEx: SimpleSchema.RegEx.Id,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
trim: false,
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: String,
|
||||||
|
trim: false,
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
allowedValues: ["bug", "change", "feature", "general"],
|
||||||
|
defaultValue: "bug",
|
||||||
|
},
|
||||||
|
//the immediate impact of doing this action (eg. -1 rages)
|
||||||
|
severity: {
|
||||||
|
type: Number,
|
||||||
|
defaultValue: 5,
|
||||||
|
min: 1,
|
||||||
|
max: 10,
|
||||||
|
},
|
||||||
|
metaData: {
|
||||||
|
type: Object,
|
||||||
|
blackbox: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
Reports.attachSchema(Schemas.Report);
|
||||||
|
|
||||||
|
Meteor.methods({
|
||||||
|
insertReport: function(report) {
|
||||||
|
check(report, {
|
||||||
|
title: String,
|
||||||
|
description: String,
|
||||||
|
type: String,
|
||||||
|
severity: Number,
|
||||||
|
metaData: Object,
|
||||||
|
});
|
||||||
|
report.owner = this.userId;
|
||||||
|
Reports.insert(report);
|
||||||
|
},
|
||||||
|
deleteReport: function(id) {
|
||||||
|
var user = Meteor.users.findOne(this.userId);
|
||||||
|
if (!_.contains(user.roles, "admin")){
|
||||||
|
throw new Meteor.Error(
|
||||||
|
"not admin",
|
||||||
|
"The user must be an administrator to delete feedback"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Reports.remove(id);
|
||||||
|
},
|
||||||
|
});
|
||||||
28
rpg-docs/client/views/feedback/feedback.html
Normal file
28
rpg-docs/client/views/feedback/feedback.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<template name="feedback">
|
||||||
|
<div class="feedback">
|
||||||
|
<div layout horizontal>
|
||||||
|
<paper-input id="feedbackTitle" label="Title" floatinglabel></paper-input>
|
||||||
|
<paper-dropdown-menu class="typeDropdown" label="Operation" flex>
|
||||||
|
<paper-dropdown layered class="dropdown">
|
||||||
|
<core-menu class="menu typeMenu" selected="general">
|
||||||
|
<paper-item name="general">General Feedback</paper-item>
|
||||||
|
<paper-item name="bug">Bug</paper-item>
|
||||||
|
<paper-item name="change">Suggested Change</paper-item>
|
||||||
|
<paper-item name="feature">Feature Request</paper-item>
|
||||||
|
</core-menu>
|
||||||
|
</paper-dropdown>
|
||||||
|
</paper-dropdown-menu>
|
||||||
|
</div>
|
||||||
|
<div layout horizontal center>
|
||||||
|
<div>Importance</div>
|
||||||
|
<paper-slider id="severity" max=10 pin value=5 snap></paper-slider>
|
||||||
|
</div>
|
||||||
|
<paper-input-decorator label="Description" floatinglabel layout vertical>
|
||||||
|
<paper-autogrow-textarea>
|
||||||
|
<textarea id="feedbackDescription"></textarea>
|
||||||
|
</paper-autogrow-textarea>
|
||||||
|
</paper-input-decorator>
|
||||||
|
</div>
|
||||||
|
<paper-button id="cancelButton" affirmative>Cancel</paper-button>
|
||||||
|
<paper-button id="sendButton" affirmative>Send </paper-button>
|
||||||
|
</template>
|
||||||
15
rpg-docs/client/views/feedback/feedback.js
Normal file
15
rpg-docs/client/views/feedback/feedback.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
Template.feedback.events({
|
||||||
|
"tap #sendButton": function(event, instance) {
|
||||||
|
var report = {};
|
||||||
|
report.title = instance.find("#feedbackTitle").value;
|
||||||
|
report.severity = instance.find("#severity").value;
|
||||||
|
report.type = instance.find(".typeMenu").selected;
|
||||||
|
report.description = instance.find("#feedbackDescription").value;
|
||||||
|
report.metaData = {
|
||||||
|
url: window.location.href,
|
||||||
|
session: _.pairs(Session.keys),
|
||||||
|
};
|
||||||
|
console.log(report);
|
||||||
|
Meteor.call("insertReport", report);
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
<div id="navPanel">
|
<div id="navPanel">
|
||||||
<core-item id="homeNav" icon="home" label="Home"></core-item>
|
<core-item id="homeNav" icon="home" label="Home"></core-item>
|
||||||
{{> characterSideList}}
|
{{> characterSideList}}
|
||||||
|
<core-item id="feedback" icon="bug-report" label="Send Feedback"></core-item>
|
||||||
</div>
|
</div>
|
||||||
</core-header-panel>
|
</core-header-panel>
|
||||||
<core-animated-pages main
|
<core-animated-pages main
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
Template.layout.onCreated(function() {
|
||||||
|
this.subscribe("user");
|
||||||
|
});
|
||||||
|
|
||||||
Template.layout.rendered = function() {
|
Template.layout.rendered = function() {
|
||||||
$(window).on("popstate", GlobalUI.popStateHandler);
|
$(window).on("popstate", GlobalUI.popStateHandler);
|
||||||
};
|
};
|
||||||
@@ -23,4 +27,11 @@ Template.layout.events({
|
|||||||
"tap #profileLink": function(event, instance){
|
"tap #profileLink": function(event, instance){
|
||||||
Router.go("profile");
|
Router.go("profile");
|
||||||
},
|
},
|
||||||
|
"tap #feedback": function(event, instance) {
|
||||||
|
GlobalUI.showDialog({
|
||||||
|
heading: "Feedback",
|
||||||
|
template: "feedback",
|
||||||
|
fullOnMobile: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
3
rpg-docs/server/publications/user.js
Normal file
3
rpg-docs/server/publications/user.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Meteor.publish("user", function(){
|
||||||
|
return Meteor.users.find(this.userId);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user