changed storage system to be less obstusive (it doesnt need redirects anymore...)

This commit is contained in:
phil 2013-07-03 07:55:15 +02:00
parent f8ae5fc4c9
commit f483a9ac55
8 changed files with 213 additions and 162 deletions

View file

@ -59,8 +59,12 @@ categories: [ Character-Sheet ]
</div> </div>
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"ability1": { "title": "Ability 1 name", "description": "Ability 1 description" }, "ability1": { "title": "Ability 1 name", "description": "Ability 1 description" },
"ability2": { "title": "Ability 2 name", "description": "Ability 2 description" }, "ability2": { "title": "Ability 2 name", "description": "Ability 2 description" },
@ -74,6 +78,6 @@ categories: [ Character-Sheet ]
"ability10": { "title": "", "description": "" }, "ability10": { "title": "", "description": "" },
"ability11": { "title": "", "description": "" }, "ability11": { "title": "", "description": "" },
"ability12": { "title": "", "description": "" } "ability12": { "title": "", "description": "" }
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -55,8 +55,12 @@ categories: [ Character-Sheet ]
</div> </div>
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"benefit1": { "title": "Common Feats", "description": "Boost Non-Attack Skill Roll - Heroic Dodge - Make a Quick Action - Parry - Relentless Charge - Reroll Failed Attack/Skill/Willpower roll - Run and Gun - Shake Continuous Effect - Shake Knockdown - Shake Stationary - Sprint - Two-Fister - Walk it Off" }, "benefit1": { "title": "Common Feats", "description": "Boost Non-Attack Skill Roll - Heroic Dodge - Make a Quick Action - Parry - Relentless Charge - Reroll Failed Attack/Skill/Willpower roll - Run and Gun - Shake Continuous Effect - Shake Knockdown - Shake Stationary - Sprint - Two-Fister - Walk it Off" },
"benefit2": { "title": "Benefit/Feat name", "description": "Benefit/Feat description" }, "benefit2": { "title": "Benefit/Feat name", "description": "Benefit/Feat description" },
@ -69,6 +73,6 @@ categories: [ Character-Sheet ]
"benefit9": { "title": "", "description": "" }, "benefit9": { "title": "", "description": "" },
"benefit10": { "title": "", "description": "" }, "benefit10": { "title": "", "description": "" },
"benefit11": { "title": "", "description": "" } "benefit11": { "title": "", "description": "" }
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -103,8 +103,12 @@ categories: [ Character-Sheet ]
</div> </div>
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"gear1": { "title": "Gear 1", "benefit": "Benefit 1" }, "gear1": { "title": "Gear 1", "benefit": "Benefit 1" },
"gear2": { "title": "Gear 2", "benefit": "Benefit 2" }, "gear2": { "title": "Gear 2", "benefit": "Benefit 2" },
@ -129,6 +133,6 @@ categories: [ Character-Sheet ]
"gear21": { "title": "", "benefit": "" }, "gear21": { "title": "", "benefit": "" },
"gear22": { "title": "", "benefit": "" }, "gear22": { "title": "", "benefit": "" },
"gear23": { "title": "", "benefit": "" } "gear23": { "title": "", "benefit": "" }
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -59,8 +59,12 @@ categories: [ Character-Sheet ]
</div> </div>
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"note1": { "title": "Permanent Injuries", "text": "None" }, "note1": { "title": "Permanent Injuries", "text": "None" },
"note2": { "title": "Spoken Languages", "text": "" }, "note2": { "title": "Spoken Languages", "text": "" },
@ -74,6 +78,6 @@ categories: [ Character-Sheet ]
"note10": { "title": "", "text": "" }, "note10": { "title": "", "text": "" },
"note11": { "title": "", "text": "" }, "note11": { "title": "", "text": "" },
"note12": { "title": "", "text": "" } "note12": { "title": "", "text": "" }
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -158,8 +158,12 @@ categories: [ Character-Sheet ]
</div> </div>
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"s1": { "title": "Skill 1 name", "stat": "", "base": "", "lvl": "", "sum": "" }, "s1": { "title": "Skill 1 name", "stat": "", "base": "", "lvl": "", "sum": "" },
"s2": { "title": "Skill 2 name", "stat": "", "base": "", "lvl": "", "sum": "" }, "s2": { "title": "Skill 2 name", "stat": "", "base": "", "lvl": "", "sum": "" },
@ -182,6 +186,6 @@ categories: [ Character-Sheet ]
"s19": { "title": "", "stat": "", "base": "", "lvl": "", "sum": "" }, "s19": { "title": "", "stat": "", "base": "", "lvl": "", "sum": "" },
"s20": { "title": "", "stat": "", "base": "", "lvl": "", "sum": "" }, "s20": { "title": "", "stat": "", "base": "", "lvl": "", "sum": "" },
"s21": { "title": "", "stat": "", "base": "", "lvl": "", "sum": "" } "s21": { "title": "", "stat": "", "base": "", "lvl": "", "sum": "" }
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -121,8 +121,12 @@ categories: [ Character-Sheet ]
</div> </div>
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"spell1": { "title": "Spell 1", "cost": 0, "rng": 0, "aoe": "-", "pow": 0, "up": "NO", "off": "YES", "description": "Spell 1 description" }, "spell1": { "title": "Spell 1", "cost": 0, "rng": 0, "aoe": "-", "pow": 0, "up": "NO", "off": "YES", "description": "Spell 1 description" },
"spell2": { "title": "Spell 2", "cost": 0, "rng": 0, "aoe": "-", "pow": 0, "up": "NO", "off": "YES", "description": "Spell 2 description" }, "spell2": { "title": "Spell 2", "cost": 0, "rng": 0, "aoe": "-", "pow": 0, "up": "NO", "off": "YES", "description": "Spell 2 description" },
@ -135,6 +139,6 @@ categories: [ Character-Sheet ]
"spell9": { "title": "", "cost": "", "rng": "", "aoe": "", "pow": "", "up": "", "off": "", "description": "" }, "spell9": { "title": "", "cost": "", "rng": "", "aoe": "", "pow": "", "up": "", "off": "", "description": "" },
"spell10": { "title": "", "cost": "", "rng": "", "aoe": "", "pow": "", "up": "", "off": "", "description": "" }, "spell10": { "title": "", "cost": "", "rng": "", "aoe": "", "pow": "", "up": "", "off": "", "description": "" },
"spell11": { "title": "", "cost": "", "rng": "", "aoe": "", "pow": "", "up": "", "off": "", "description": "" }, "spell11": { "title": "", "cost": "", "rng": "", "aoe": "", "pow": "", "up": "", "off": "", "description": "" },
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -87,8 +87,12 @@ categories: [ Character-Sheet ]
<input id="xp" type="text" /> <input id="xp" type="text" />
</form> </form>
</div> </div>
<p>
<a href="javascript:hero.url();">Store inserted data in URL</a>
</p>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var Hero = { var hero = new Heroic({
"name": "Hero's name", "name": "Hero's name",
"archetype": "Archetype", "archetype": "Archetype",
"race": "Race", "race": "Race",
@ -125,6 +129,6 @@ categories: [ Character-Sheet ]
"r1m2": false, "r1m2": false,
"r2": false, "r2": false,
"m2": false "m2": false
}; });
</script> hero.bind();
<script type="text/javascript" src="/static/javascripts/heroic.js"></script> </script>

View file

@ -1,149 +1,172 @@
var query = window.location.search; function Heroic(Hero) {
var Query = (query == "") ? {} : JSON.parse(unescape(query.substring(1))); var self = this;
self.search = "";
self.url = function() {
//var root = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;
document.location.search = self.search;
//return root+"?"+self.search;
};
self.redirect = function(link) {
link.href = self.url();
link.click();
//var sheet = document.querySelector("div.sheet");
//var parent = sheet.parentNode;
//var content = parent.innerHTML;
//parent.innerHTML = content+'<a href="'+self.url()+'">Link to this sheet</a>';
};
self.bind = function() {
var query = window.location.search;
var Query = (query == "") ? {} : JSON.parse(unescape(query.substring(1)));
for (attr in Query) Hero[attr] = Query[attr]; for (attr in Query) Hero[attr] = Query[attr];
var isArray = function(someVar) { return Object.prototype.toString.call(someVar) === "[object Array]"; }; var isArray = function(someVar) { return Object.prototype.toString.call(someVar) === "[object Array]"; };
var isBoolean = function(someVar) { return Object.prototype.toString.call(someVar) === "[object Boolean]"; }; var isBoolean = function(someVar) { return Object.prototype.toString.call(someVar) === "[object Boolean]"; };
var isDefined = function(someVar) { return typeof someVar !== "undefined" && someVar != null; }; var isDefined = function(someVar) { return typeof someVar !== "undefined" && someVar != null; };
var isString = function(someVar) { return typeof someVar === "string"; }; var isString = function(someVar) { return typeof someVar === "string"; };
var isNumber = function(someVar) { return typeof someVar === "number"; }; var isNumber = function(someVar) { return typeof someVar === "number"; };
var isObject = function(someVar) { return typeof someVar === "object"; }; var isObject = function(someVar) { return typeof someVar === "object"; };
var observe; var observe;
if (window.attachEvent) observe = function (element, event, handler) { element.attachEvent('on'+event, handler); }; if (window.attachEvent) observe = function (element, event, handler) { element.attachEvent('on'+event, handler); };
else observe = function (element, event, handler) { element.addEventListener(event, handler, false); }; else observe = function (element, event, handler) { element.addEventListener(event, handler, false); };
var resizeTextarea = function(textarea) { var resizeTextarea = function(textarea) {
return function() { return function() {
textarea.style.height = "auto"; textarea.style.height = "auto";
textarea.style.height = (textarea.scrollHeight)+"px"; textarea.style.height = (textarea.scrollHeight)+"px";
};
};
var delayedTextareaResize = function(textarea) {
return function() { window.setTimeout(resizeTextarea(textarea), 0); };
};
var autoresizableTextarea = function(textarea) {
observe(textarea, "change", resizeTextarea(textarea));
observe(textarea, "cut", delayedTextareaResize(textarea));
observe(textarea, "paste", delayedTextareaResize(textarea));
observe(textarea, "drop", delayedTextareaResize(textarea));
observe(textarea, "keydown", delayedTextareaResize(textarea));
}; };
};
var delayedTextareaResize = function(textarea) {
return function() { window.setTimeout(resizeTextarea(textarea), 0); };
};
var autoresizableTextarea = function(textarea) {
observe(textarea, "change", resizeTextarea(textarea));
observe(textarea, "cut", delayedTextareaResize(textarea));
observe(textarea, "paste", delayedTextareaResize(textarea));
observe(textarea, "drop", delayedTextareaResize(textarea));
observe(textarea, "keydown", delayedTextareaResize(textarea));
};
var redirect = function() { var redirect = function() {
document.location.search = encodeURIComponent(JSON.stringify(Hero)); //document.location.search = encodeURIComponent(JSON.stringify(Hero));
}; self.search = encodeURIComponent(JSON.stringify(Hero));
console.log(self.search);
};
var switchWeapons = function() { var switchWeapons = function() {
var r1m1 = Hero.r1m1; var r1m1 = Hero.r1m1;
var r2m1 = Hero.r2m1; var r2m1 = Hero.r2m1;
var r1m2 = Hero.r1m2; var r1m2 = Hero.r1m2;
var r2 = Hero.r2; var r2 = Hero.r2;
var m2 = Hero.m2; var m2 = Hero.m2;
if (r1m1 == true) { Hero.r1m1 = false; Hero.r2m1 = true; } if (r1m1 == true) { Hero.r1m1 = false; Hero.r2m1 = true; }
else if (r2m1 == true) { Hero.r2m1 = false; Hero.r1m2 = true; } else if (r2m1 == true) { Hero.r2m1 = false; Hero.r1m2 = true; }
else if (r1m2 == true) { Hero.r1m2 = false; Hero.r2 = true; } else if (r1m2 == true) { Hero.r1m2 = false; Hero.r2 = true; }
else if (r2 == true) { Hero.r2 = false; Hero.m2 = true; } else if (r2 == true) { Hero.r2 = false; Hero.m2 = true; }
else if (m2 == true) { Hero.m2 = false; Hero.r1m1 = true; } else if (m2 == true) { Hero.m2 = false; Hero.r1m1 = true; }
else { Hero.r1m1 = true; } else { Hero.r1m1 = true; }
redirect(); redirect();
}; };
var initialize = function() { var initialize = function() {
var textareas = document.querySelectorAll("textarea"); var textareas = document.querySelectorAll("textarea");
var fillOut = function(attribute, value) { var fillOut = function(attribute, value) {
if (isString(value) || isNumber(value)) { if (isString(value) || isNumber(value)) {
var element = document.querySelector("input#"+attribute); var element = document.querySelector("input#"+attribute);
if (element != null && isDefined(element.value)) { if (element != null && isDefined(element.value)) {
element.value = value; element.value = value;
if (element.nodeName == "TEXTAREA") resizeTextarea(element)(); if (element.nodeName == "TEXTAREA") resizeTextarea(element)();
} }
} else if (isObject(value)) { } else if (isObject(value)) {
var parent = document.querySelector("#"+attribute); var parent = document.querySelector("#"+attribute);
for (key in value) { for (key in value) {
var child = parent.querySelector("input."+key+", textarea."+key); var child = parent.querySelector("input."+key+", textarea."+key);
if (child != null && isDefined(child.value)) { if (child != null && isDefined(child.value)) {
child.value = value[key]; child.value = value[key];
if (child.nodeName == "TEXTAREA") resizeTextarea(child)(); if (child.nodeName == "TEXTAREA") resizeTextarea(child)();
}
} }
} }
} };
}; var saveOnChange = function(attribute, value) {
var saveOnChange = function(attribute, value) { var updateSearchString;
var updateSearchString; if (isString(value) || isNumber(value)) {
if (isString(value) || isNumber(value)) { var input = document.querySelector("input#"+attribute);
var input = document.querySelector("input#"+attribute); updateSearchString = function() {
updateSearchString = function() { Hero[attribute] = input.value;
Hero[attribute] = input.value;
Hero["focus"] = attribute;
redirect();
};
if (isDefined(input)) { input.addEventListener("change", updateSearchString, false); }
} else if (isObject(value)) {
var parent = document.querySelector("#"+attribute);
updateSearchString = function(key, input) {
return function() {
Hero[attribute][key] = input.value;
Hero["focus"] = attribute; Hero["focus"] = attribute;
redirect(); redirect();
}; };
}; if (isDefined(input)) { input.addEventListener("change", updateSearchString, false); }
for (key in value) { } else if (isObject(value)) {
var child = parent.querySelector("input."+key+", textarea."+key); var parent = document.querySelector("#"+attribute);
if (isDefined(child)) { observe(child, "change", updateSearchString(key, child)); } updateSearchString = function(key, input) {
return function() {
Hero[attribute][key] = input.value;
Hero["focus"] = attribute;
redirect();
};
};
for (key in value) {
var child = parent.querySelector("input."+key+", textarea."+key);
if (isDefined(child)) { observe(child, "change", updateSearchString(key, child)); }
}
} }
} };
}; var showWeapons = function(hero) {
var showWeapons = function(hero) { var setDisplay = function(element, bool) { if (isDefined(element.style)) element.style.display = (bool) ? "block" : "none"; };
var setDisplay = function(element, bool) { if (isDefined(element.style)) element.style.display = (bool) ? "block" : "none"; }; var showElement = function(element) { setDisplay(element, true); };
var showElement = function(element) { setDisplay(element, true); }; var hideElement = function(element) { setDisplay(element, false); };
var hideElement = function(element) { setDisplay(element, false); }; var showElements = function(array) { if (isDefined(array.forEach)) array.forEach(showElement); };
var showElements = function(array) { if (isDefined(array.forEach)) array.forEach(showElement); }; var hideElements = function(array) { if (isDefined(array.forEach)) array.forEach(hideElement); };
var hideElements = function(array) { if (isDefined(array.forEach)) array.forEach(hideElement); }; var r1m1 = document.querySelector("div#r1m1");
var r1m1 = document.querySelector("div#r1m1"); var r2m1 = document.querySelector("div#r2m1");
var r2m1 = document.querySelector("div#r2m1"); var r1m2 = document.querySelector("div#r1m2");
var r1m2 = document.querySelector("div#r1m2"); var r2 = document.querySelector("div#r2");
var r2 = document.querySelector("div#r2"); var m2 = document.querySelector("div#m2");
var m2 = document.querySelector("div#m2"); var rat1 = document.querySelector("div#rat1");
var rat1 = document.querySelector("div#rat1"); var rat2 = document.querySelector("div#rat2");
var rat2 = document.querySelector("div#rat2"); var mat1 = document.querySelector("div#mat1");
var mat1 = document.querySelector("div#mat1"); var mat2 = document.querySelector("div#mat2");
var mat2 = document.querySelector("div#mat2"); var mat3 = document.querySelector("div#mat3");
var mat3 = document.querySelector("div#mat3"); if (isBoolean(hero.r1m1) && hero.r1m1 == true) {
if (isBoolean(hero.r1m1) && hero.r1m1 == true) { showElements([ r1m1, rat1, mat2 ]);
showElements([ r1m1, rat1, mat2 ]); hideElements([ r2m1, r1m2, r2, m2, mat1, rat2, mat3 ]);
hideElements([ r2m1, r1m2, r2, m2, mat1, rat2, mat3 ]); } else if (isBoolean(hero.r2m1) && hero.r2m1 == true) {
} else if (isBoolean(hero.r2m1) && hero.r2m1 == true) { showElements([ r2m1, rat1, rat2, mat3 ]);
showElements([ r2m1, rat1, rat2, mat3 ]); hideElements([ r1m1, r1m2, r2, m2, mat1, mat2 ]);
hideElements([ r1m1, r1m2, r2, m2, mat1, mat2 ]); } else if (isBoolean(hero.r1m2) && hero.r1m2 == true) {
} else if (isBoolean(hero.r1m2) && hero.r1m2 == true) { showElements([ r1m2, rat1, mat2, mat3 ]);
showElements([ r1m2, rat1, mat2, mat3 ]); hideElements([ r1m1, r2m1, r2, m2, mat1, rat2 ]);
hideElements([ r1m1, r2m1, r2, m2, mat1, rat2 ]); } else if (isBoolean(hero.r2) && hero.r2 == true) {
} else if (isBoolean(hero.r2) && hero.r2 == true) { showElements([ r2, rat1, rat2 ]);
showElements([ r2, rat1, rat2 ]); hideElements([ r1m1, r2m1, r1m2, m2, mat1, mat2, mat3 ]);
hideElements([ r1m1, r2m1, r1m2, m2, mat1, mat2, mat3 ]); } else if (isBoolean(hero.m2) && hero.m2 == true) {
} else if (isBoolean(hero.m2) && hero.m2 == true) { showElements([ m2, mat1, mat2 ]);
showElements([ m2, mat1, mat2 ]); hideElements([ r1m1, r2m1, r1m2, r2, rat1, rat2, mat3 ]);
hideElements([ r1m1, r2m1, r1m2, r2, rat1, rat2, mat3 ]); }
} };
}; var focusLastInput = function(hero) {
var focusLastInput = function(hero) { if (isDefined(hero["focus"])) {
if (isDefined(hero["focus"])) { var input = document.querySelector("input#"+hero["focus"]);
var input = document.querySelector("input#"+hero["focus"]); if (input == null) input = document.querySelector("#"+hero["focus"]+" input");
if (input == null) input = document.querySelector("#"+hero["focus"]+" input"); if (input != null) { input.focus(); input.scrollIntoView(); }
if (input != null) { input.focus(); input.scrollIntoView(); } }
} };
};
for (var i = 0; i < textareas.length; i++) { autoresizableTextarea(textareas[i]); }
showWeapons(Hero);
for (attribute in Hero) { fillOut(attribute, Hero[attribute]); }
for (attribute in Hero) { saveOnChange(attribute, Hero[attribute]); }
focusLastInput(Hero);
var names = document.querySelectorAll("section > input.name");
for (name in names) { names[name].value = Hero["name"]; }
};
document.addEventListener("DOMContentLoaded", initialize, false); for (var i = 0; i < textareas.length; i++) { autoresizableTextarea(textareas[i]); }
showWeapons(Hero);
for (attribute in Hero) { fillOut(attribute, Hero[attribute]); }
for (attribute in Hero) { saveOnChange(attribute, Hero[attribute]); }
focusLastInput(Hero);
var names = document.querySelectorAll("section > input.name");
for (name in names) { names[name].value = Hero["name"]; }
redirect();
};
document.addEventListener("DOMContentLoaded", initialize, false);
};
}