diff --git a/app.js b/app.js
index ce89c65..62bb71d 100644
--- a/app.js
+++ b/app.js
@@ -5,9 +5,16 @@
//'ngRoute',
'ui.bootstrap',
'ui.slimscroll',
+ 'zeroclipboard',
'grimoire.controller',
]);
+ app.config(['uiZeroclipConfigProvider', function(uiZeroclipConfigProvider) {
+ uiZeroclipConfigProvider.setZcConf({
+ swfPath: 'bower_components/zeroclipboard/dist/ZeroClipboard.swf'
+ });
+ }]);
+
/*
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/grimoire', {
diff --git a/bower.json b/bower.json
index 7cf46ed..3b3d5ee 100644
--- a/bower.json
+++ b/bower.json
@@ -25,6 +25,11 @@
"lodash": "~3.0.0",
"angular-route": "~1.3.10",
"slimscroll": "~1.3.3",
- "angular-slimscroll": "~1.1.2"
+ "angular-slimscroll": "~1.1.2",
+ "zeroclipboard": "~2.2.0",
+ "angular-zeroclipboard": "~0.4.0"
+ },
+ "resolutions": {
+ "angular": ">=1 <1.3.0"
}
}
diff --git a/grimoire-controller.js b/grimoire-controller.js
index 86ac998..a9147d6 100644
--- a/grimoire-controller.js
+++ b/grimoire-controller.js
@@ -1,3 +1,6 @@
+/*global _:false */
+/*global Grimoire:false, Weapons:false, Potions:false, Rings:false, Scrolls:false, Wands:false, Rods:false, Staves:false, WondrousItems:false, Intelligence:false*/
+/*jshint forin: false */
(function (angular) {
'use strict';
@@ -5,68 +8,134 @@
function GrimoireController() {
/*jshint validthis: true */
+ var self = this;
this.welcome = 'Welcome to the Grimoire App!';
+ this.itemCount = [1,1,1];
+
this.sources = [
{
'name': 'Core Rule Book',
- 'sources': ['Armor', 'Weapons', 'Wondrous Items'],
+ 'shortName': 'CRB',
+ 'sources': ['Armors and Shields', 'Weapons', 'Potions', 'Rings', 'Rods', 'Scrolls', 'Staves', 'Wands', 'Wondrous Items'],
+ 'selected': true,
},
{
'name': 'Advanced Player\'s Guide',
- 'sources': ['Armor', 'Weapons', 'Wondrous Items'],
- },
- {
- 'name': 'Core Rule Book',
- 'sources': ['Armor', 'Weapons', 'Wondrous Items'],
- },
- {
- 'name': 'Advanced Player\'s Guide',
- 'sources': ['Armor', 'Weapons', 'Wondrous Items'],
- },
- {
- 'name': 'Core Rule Book',
- 'sources': ['Armor', 'Weapons', 'Wondrous Items'],
- },
- {
- 'name': 'Advanced Player\'s Guide',
- 'sources': ['Armor', 'Weapons', 'Wondrous Items'],
+ 'shortName': 'APG',
+ 'sources': ['Wondrous Items'],
+ 'selected': true,
},
];
- this.itemLists = [
- {
- 'timestamp': new Date() - 100000,
- 'items': [
- {
- 'name': '+2 super cool sword',
- 'worth': 5000,
- 'url': 'http://www.google.com'
- },
- {
- 'name': 'nifty hat',
- 'worth': 2000,
- 'url': ''
+ this.selected = false;
+ this.checkSource = function(source) {
+ if(source.selected === true) {
+ //uncheck the radio button
+ self.radio = false;
}
- ],
- },
- {
- 'timestamp': new Date(),
- 'items': [
- {
- 'name': '+3 super cool sword',
- 'worth': 5000,
- 'url': 'http://www.google.com'
- },
- {
- 'name': 'nifty boots',
- 'worth': 2000,
- 'url': ''
+ };
+ this.radio = 0;
+ this.checkRadio = function() {
+ //uncheck all the source checkboxes
+ for( var idx in self.sources) {
+ var source = self.sources[idx];
+ source.selected = false;
}
- ],
- }];
+ };
+
+ this.itemLists = [];
this.copyToClipboard = function(list) {
- console.log(list);
- }
+ var text = "~~" + new Date(list.timestamp).toJSON() + "~~
";
+ for(var idx in list.items) {
+ text += "* " + list.items[idx].name + "," + list.items[idx].cost + "," + list.items[idx].url + "\n";
+ }
+ text += "----\n" + list.items.notes;
+
+ return text;
+ };
+
+ this.generateItem = function(type, quality, source) {
+ var item;
+ switch(type) { //the radio selected type
+ case "Armors and Shields": item = Grimoire.getArmorOrShield(quality); break;
+ case "Weapons": item = Weapons.getWeapon(quality); break;
+ case "Potions": item = Potions.getPotion(quality); break;
+ case "Rings": item = Rings.getRing(quality); break;
+ case "Scrolls": item = Scrolls.getScroll(quality); break;
+ case "Wands": item = Wands.getWand(quality); break;
+ case "Wondrous Items": item = WondrousItems.getItem(quality, source); break;
+ case "Rods": item = Rods.getRod(quality); break;
+ case "Staves": item = Staves.getStaff(quality); break;
+ }
+ if(item === undefined) {
+ item = {
+ 'name': "ERROR in generating " + String(quality) + " " + String(type),
+ };
+ }
+ return item;
+ };
+
+ this.generateItems = function() {
+ var itemList = {};
+ itemList.items = [];
+
+ if(self.radio) {
+ //console.log("Generating item from " + self.radio);
+ var source = self.radio.split("|");
+ var types = ["minor", "medium", "major"];
+ for(var idx in types) { //for each item level
+ for(var i = 0; i < self.itemCount[idx]; i++) {
+ itemList.items.push(self.generateItem(source[1], types[idx]));
+ }
+ }
+ }
+ else {
+ var ss = "";
+ for( var idx in self.sources) {
+ var source = self.sources[idx];
+ if(source.selected) {
+ ss += source.shortName + " ";
+ }
+ }
+ if(ss) {
+ //console.log("Generating items from " + ss);
+ itemList.items = Grimoire.getItems(self.itemCount[0], self.itemCount[1], self.itemCount[2]);
+ }
+ else {
+ console.log("Error: No sources selected");
+ }
+ }
+ itemList.timestamp = new Date();
+ self.addItemList(itemList);
+ };
+
+ this.generateIntelligence = function(cost) {
+ var list = {};
+ var stats = Intelligence.getItemIntelligence(cost).print().split(";");
+ list.notes = "";
+ for(var s in stats) {
+ var stat = stats[s].split(":");
+ //list.notes += "" + stat[0] + ": " + stat[1] + "
";
+ list.notes += stat[0] + ": " + stat[1] + "\n";
+ }
+
+ list.timestamp = new Date();
+ self.itemLists.push(list);
+ };
+
+ this.addItemList = function(list) {
+ self.itemLists.push(list);
+ self.scrollItemsBottom();
+ };
+
+ this.scrollItemsBottom = function() {
+ //BAD BAD ANGULAR FORM!
+ //The slimscroll item didn't allow for a way to bind to an object
+ //I'm not sure how to do this correctly
+ $('#itemScroll').slimScroll({ scrollBy: 99999}); //just all the way
+ //I couldn't get {start: 'bottom'} to work right
+ };
+
}
angular
diff --git a/grimoire.css b/grimoire.css
index a0638e1..b528eee 100644
--- a/grimoire.css
+++ b/grimoire.css
@@ -14,9 +14,36 @@
}
.copy {
- font-size: smaller;
+ font-size: x-small;
}
.big {
font-size: 200%;
+}
+
+.sidebar {
+ height: 30em;
+}
+
+.itembar {
+ height: 40em;
+}
+
+.header {
+ height: 2em;
+}
+
+.footer {
+ height: 4em;
+ white-space:nowrap;
+ margin-top: 1em;
+}
+
+.list-header {
+ width: 100%;
+}
+
+input.numberbox {
+ width: 4em;
+ display:inline-block;
}
\ No newline at end of file
diff --git a/index.html b/index.html
index 8dfc9e2..f28d607 100644
--- a/index.html
+++ b/index.html
@@ -12,35 +12,49 @@