From 34f8e9d532afd0e23d3c2d6d59dbefcac7b7f0ed Mon Sep 17 00:00:00 2001 From: Russell Champoux Date: Mon, 26 Jan 2015 14:22:50 -0500 Subject: [PATCH] Started hooking things up to the GrimoireJS library. Thinks work! --- app.js | 7 ++ bower.json | 7 +- grimoire-controller.js | 167 +++++++++++++++++++++++++++++------------ grimoire.css | 29 ++++++- index.html | 44 +++++++---- 5 files changed, 189 insertions(+), 65 deletions(-) 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 @@ - +
-