From 9aa30f6091b86c991c7461365258b35abeb7eced Mon Sep 17 00:00:00 2001 From: Olivia Theze Date: Sat, 7 Mar 2015 12:03:24 -0500 Subject: [PATCH] lots of changes. described in description changed config to point to reference by default added reference character, showing all options. added date to required references. modified code to handle some overrides, and adding current year. added sticky footer to css. rewrote templates to match schema in reference. improved features. --- config.yml | 2 +- lib/charbase.rb | 2 +- lib/charbase/app.rb | 9 +- lib/public/assets/css/template.css | 21 +++++ lib/views/character.liquid | 110 +++++++++++-------------- lib/views/charcss.liquid | 52 ++++++------ lib/views/index.liquid | 17 +++- lib/views/usercss.liquid | 66 +++++++++------ reference.yml | 127 +++++++++++++++++++++++++++++ 9 files changed, 283 insertions(+), 123 deletions(-) create mode 100644 reference.yml diff --git a/config.yml b/config.yml index 59bdf7e..8f700be 100644 --- a/config.yml +++ b/config.yml @@ -2,7 +2,7 @@ siteroot: /home/olivia/code/charbase/lib public: public views: views -dsn: yaml://%siteroot%/../characters.yml +dsn: yaml://%siteroot%/../reference.yml site: name: Charbase diff --git a/lib/charbase.rb b/lib/charbase.rb index 43da928..f7247ad 100755 --- a/lib/charbase.rb +++ b/lib/charbase.rb @@ -6,5 +6,5 @@ require 'liquid' require 'yaml' require 'charbase/app' require 'json' - +require 'date' Charbase::App.run! diff --git a/lib/charbase/app.rb b/lib/charbase/app.rb index 5472cfb..7ce01df 100644 --- a/lib/charbase/app.rb +++ b/lib/charbase/app.rb @@ -29,7 +29,7 @@ module Charbase char = {} char["characters"] = @characters["characters"].select { |c| c["hidden"] != true } - liquid :index, :locals => {:s => @site, :c => char} + liquid :index, :locals => {:s => @site, :c => char, :year => DateTime.now.strftime("%Y")} end get "/assets/css/characters.css" do char = {} @@ -72,19 +72,20 @@ module Charbase # this is a nasty hack, eventually i should find a way to add a filter # to liquid to do this. - for x in [ "description","bodydesc","attire","skills","magic" ] + for x in [ "description","appearance","personality","attire","skills","magic" ].push(*char["overrides"]["paragraph"]) if char[x] != nil and char[x].include?("\n\n") char[x].gsub!(/\n\n/,"

") end end # end hack - liquid :character, :locals => {:site => @site, :character => char} + liquid :character, :locals => {:site => @site, :character => char, :year => DateTime.now.strftime("%Y")} end + get "/assets/css/:nick.css" do |nick| char = @characters["characters"].select { |n| n["nick"] == nick }.first content_type "text/css" - liquid :usercss, :locals => {:site => @site, :character => char} + liquid :usercss, :locals => {:site => @site, :css => char["overrides"]["css"], :nick => char["nick"]} end end diff --git a/lib/public/assets/css/template.css b/lib/public/assets/css/template.css index a4c2f73..1ad187f 100755 --- a/lib/public/assets/css/template.css +++ b/lib/public/assets/css/template.css @@ -51,3 +51,24 @@ body { margin-left: auto; margin-right: auto } + +html { + position: relative; + min-height: 100%; +} +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} +.footer { +position: absolute; +bottom: 0; +width: 100%; +/* Set the fixed height of the footer here */ +height: 60px; +background-color: inherit; +} +.footer .container .text-muted { + margin: 20px 0; +} + diff --git a/lib/views/character.liquid b/lib/views/character.liquid index 92ed993..5391917 100644 --- a/lib/views/character.liquid +++ b/lib/views/character.liquid @@ -30,8 +30,8 @@

- {% if character.avatar %} - + {% if character.images.avatar %} + {% endif %} {% if character.name %} @@ -46,85 +46,47 @@

Summary

{{character.description}}

- {% if character.ref %} + {% if character.images.ref %}

Reference Sheet

- +
{% endif %} - {% if character.stat %} + {% if character.stats %}

Statistics

-
- {% for s in character.stat %} -
- {% if s.desc %}\ +
+ {% for s in character.stats %} +
+
+ {% if s.desc %} {% endif %} {{s.key}} {% if s.desc %} {% endif %} -
-
{{stat.value}}
+
+
{{s.value}}
+
{% endfor %} - + +
{% endif %} +

General Details

- {% if character.general.sex %} + {% for attr in character.general.attr %}
-
Sex
-
{{character.general.sex}}
+
{{ attr[0] | replace:"_"," " | capitalize }}
+
{{attr[1]}}
- {% endif %} - {% if character.general.gender %} -
-
Gender
-
{{character.general.gender}}
-
- {% endif %} - {% if character.general.class %} -
-
Class
-
{{character.general.class}}
-
- {% endif %} - {% if character.general.alignment %} -
-
Alignment
-
{{character.general.alignment}}
-
- {% endif %} - {% if character.general.species %} -
-
Species
-
{{character.general.species}}
-
- {% endif %} - {% if character.general.build %} -
-
Build
-
{{character.general.build}}
-
- {% endif %} - {% if character.general.height %} -
-
Height
-
{{character.general.height}}
-
- {% endif %} - {% if character.general.weight %} -
-
Weight
-
{{character.general.weight}}
-
- {% endif %} + {% endfor %}
- {% if character.general.colors %} + {% if character.general.color %}

Colours

- {% for col in character.general.colors %} + {% for col in character.general.color %}
{{col.text}} @@ -140,12 +102,16 @@
- {% if character.bodydesc %} + {% if character.appearance %}

Appearance

-

{{character.bodydesc}}

+

{{character.appearance}}

+ {% endif %} + {% if character.personality %} +

Personality

+

{{character.personality}}

{% endif %} {% if character.attire %} -

Clothing

+

Clothing/Equipment

{{character.attire}}

{% endif %} {% if character.skills or character.magic %} @@ -163,7 +129,23 @@ {% endif %}
- +
+
+
    Powered by Charbase +
  • Code under BSD2
  • + {% if character.player %} +
  • + {% if character.name %} + {{character.name | split:" " | first}} © {{year}} {{character.player}} + {% else %} + {{character.nick}} © {{year}} {{character.player}} + {% endif %} +
  • + {% endif %} +
+
+
diff --git a/lib/views/charcss.liquid b/lib/views/charcss.liquid index e71bc86..2029750 100644 --- a/lib/views/charcss.liquid +++ b/lib/views/charcss.liquid @@ -1,29 +1,31 @@ /* front page character overrides. */ {% for ch in c.characters %} - {% if ch.overrides.css.backgroundcolor or ch.overrides.css.textcolor or ch.overrides.css.navbarcolor or ch.overrides.css.navhovercolor %} - /* classes for {{ch.nick}} */ - {% if ch.overrides.css.backgroundcolor or ch.overrides.css.textcolor %} - .cu-{{ch.nick}} { - {% if ch.overrides.css.backgroundcolor %} - background-color: {{ch.overrides.css.backgroundcolor}}; - border-color: {{ch.overrides.css.backgroundcolor}}; - {% endif %} - {% if ch.overrides.css.textcolor %} - color: {{ch.overrides.css.textcolor}}; - {%endif%} - } - {% endif %} - {% if ch.overrides.css.navbarcolor or ch.overrides.css.navhovercolor %} - .cu-{{ch.nick}}:hover { - {% if ch.overrides.css.navbarcolor %} - background-color: {{ch.overrides.css.navbarcolor}}; - border-color: {{ch.overrides.css.navbarcolor}}; - {% endif %} - {% if ch.overrides.css.navhovercolor %} - color: {{ch.overrides.css.navhovoercolor}} - {% endif %} - } - {% endif %} - {% endif %} + {% if ch.overrides.css.color.homepagebg or ch.overrides.css.color.homepagehoverbg or ch.overrides.css.color.homepagefg or ch.overrides.css.color.homepagehoverfg %} +/* classes for {{ch.nick}} */ + {% if ch.overrides.css.color.homepagebg or ch.overrides.css.color.homepagefg %} +.cu-{{ch.nick}} { {% if ch.overrides.css.color.homepagebg %} + background-color: {{ch.overrides.css.color.homepagebg}}; + border-color: {{ch.overrides.css.color.homepagebg}};{% endif %}{% if ch.overrides.css.color.homepagefg %} + color: {{ch.overrides.css.color.homepagefg}};{% endif %} +} +{%endif %}{% if ch.overrides.css.color.homepagehoverbg or ch.overrides.css.color.homepagehoverfg %} +.cu-{{ch.nick}}:hover { {% if ch.overrides.css.color.homepagehoverbg %} + background-color: {{ch.overrides.css.color.homepagehoverbg}}; + border-color: {{ch.overrides.css.color.homepagehoverbg}};{% endif %}{% if ch.overrides.css.color.homepagehoverfg %} + color: {{ch.overrides.css.color.homepagehoverfg }};{% endif %} +}{% endif %} +{% elsif ch.overrides.css.color.background or ch.overrides.css.color.text or ch.overrides.css.color.navfg or ch.overriced.css.color.navbg %} +/* classes for {{ch.nick}} */{% if ch.overrides.css.color.background or ch.overrides.css.color.text %} +.cu-{{ch.nick}} { {% if ch.overrides.css.color.background %} + background-color: {{ch.overrides.css.color.background}}; + border-color: {{ch.overrides.css.color.background}};{% endif %}{% if ch.overrides.css.color.text %} + color: {{ch.overrides.css.color.text}};{%endif%} +}{% endif %} +{% if ch.overrides.css.color.navbg or ch.overrides.css.color.navhoverfg %} +.cu-{{ch.nick}}:hover { {% if ch.overrides.css.color.navbg %} + background-color: {{ch.overrides.css.color.navbg}}; + border-color: {{ch.overrides.css.color.navbg}};{% endif %}{% if ch.overrides.css.color.navhoverfg %} + color: {{ch.overrides.css.color.navhoverfg}}{% endif %} +}{% endif %}{% endif %} {% endfor %} diff --git a/lib/views/index.liquid b/lib/views/index.liquid index ce7a385..e6d9e81 100644 --- a/lib/views/index.liquid +++ b/lib/views/index.liquid @@ -55,11 +55,13 @@
{% for character in c.characters %}
- {% if character.avatar %} - + {% if character.image.homepage %} + + {% elsif character.image.avatar %} + {% else %} - {% endif %} + {% endif %} {% if character.name %}

{{character.name}}

@@ -75,6 +77,13 @@ - + diff --git a/lib/views/usercss.liquid b/lib/views/usercss.liquid index fd9dc1d..ba0af92 100644 --- a/lib/views/usercss.liquid +++ b/lib/views/usercss.liquid @@ -1,40 +1,58 @@ -/* css for {{character.nick}} */ +/* css for {{nick}} */ -{% if character.overrides.css.backgroundcolor or character.overrides.css.textcolor or character.overrides.css.navbarcolor or character.overrides.css.navhovercolor or character.overrides.css.linkcolor or character.overrides.css.linkhovercolor %} +{% if css.color.background or css.color.text or css.color.navbg or css.color.navhoverbg or css.color.navactivebg or css.color.navfg or css.color.navhoverfg or css.color.navactivefg %} /* rules generated from yaml css overrides section */ -{% if character.overrides.css.backgroundcolor or character.overrides.css.textcolor %} +{% if css.color.background or css.color.text %} body { - {% if character.overrides.css.backgroundcolor %} - background-color: {{character.overrides.css.backgroundcolor}}; + {% if css.color.background %} + background-color: {{css.color.background}}; {% endif %} - {% if character.overrides.css.textcolor %} - color: {{character.overrides.css.textcolor }}; + {% if css.color.text %} + color: {{css.color.text }}; {% endif %} } {% endif %} {% endif %} -{% if character.overrides.css.navbarcolor or character.overrides.css.textcolor %} - .navbar, .navbar-default, - .navbar .navbar-brand, - .navbar .navbar-nav li a { -{% if character.overrides.css.navbarcolor %} - background-color: {{character.overrides.css.navbarcolor}}; - border-color: {{character.overrides.css.navbarcolor}}; -{% endif %} -{% if character.overrides.css.textcolor %} - color: {{character.overrides.css.textcolor}}; -{% endif %} + +{% if css.color.navbg or css.color.navfg or css.color.navborder %} +.navbar, .navbar-default, +.navbar .navbar-brand, +.navbar .navbar-nav li a { + {% if css.color.navbg %} + background-color: {{css.color.navbg}}; + {% endif %} + {% if css.color.navborder %} + border-color: {{css.color.navborder}}; + {% elsif css.color.navbg %} + border-color: {{css.color.navbg}}; + {% endif %} + {% if css.color.navfg %} + color: {{css.color.navfg}}; + {% endif %} } {% endif %} - -{% if character.overrides.css.navhovercolor %} -.navbar .navbar-brand:hover, +{% if css.color.navhoverfg %} +.navbar .navbar-brand:hover { + color: {{css.color.navhoverfg}}; +} +{% endif %} +{% if css.color.navhoverfg or css.color.navhoverbg or css.color.navhoverborder%} .navbar .navbar-nav li a:hover { - color: {{character.overrides.css.navhovercolor}}; +{% if css.color.navhoverfg %} + color: {{css.color.navhoverfg}}; +{%endif %} +{% if css.color.navhoverborder %} + border-color: {{css.color.navhoverborder}}; +{% elsif css.color.navhoverbg %} + border-color: {{css.color.navhoverbg}}; +{% endif %} +{% if css.color.navhoverbg %} + background-color: {{css.color.navhoverbg}}; +{% endif %} } {% endif %} -{% if character.overrides.css.userrules %} +{% if character.overrides.css.style %} /* user-defined custom rules */ -{{character.overrides.css.style}} +{{css.style}} {% endif %} diff --git a/reference.yml b/reference.yml new file mode 100644 index 0000000..963e495 --- /dev/null +++ b/reference.yml @@ -0,0 +1,127 @@ + + +characters: # array of all characters + - nick: reference # required: nickname/id for loading character. + hidden: false # optional: is sheet hidden from public if true + overrides: # all values in this section are optional. + css: # css knobs + color: # change color without writing css. + # overrides the background of the character sheet + background: '#fff' + # overrides the text colour of the character sheet + text: '#333' + # overrides the navbar background color on the character sheet + navbg: '#f8f8f8' + # overrides the color the navbar's background is while hovering + navhoverbg: '#f8f8f8' + # override the background color of the active link in the navbar + navactivebg: '#f8f8f8' + # override the foreground (text) color of the navbar + navfg: '#777' + # override the text color of the navbar while hovering + navhoverfg: '#333' + # override the text color of the active link on the navbar + navactivefg: '#777' + # override the border color of the navbar + navborder: '#e7e7e7' + # override the border color of the navbar while hovering + navhoverborder: '#e7e7e7' + # override the border color of the navbar while active + navactiveborder: '#e7e7e7' + # override the background color of the homepage banner + homepagebg: '#fff' + # override the background color of the homepage banner while hovering + homepagehoverbg: '#fff' + # override the text color of the homepage banner + homepagefg: '#fff' + # override the text color of the homepage banner while hovering + homepagehoverfg: '#fff' + style: # rules and text to add to the css file directly. + # todo: make this a working feature. + # override the order of the page, and fields used. + # order: ["desc","ref","general.attr","general.color","appearence","attire","skills","magic"] + paragraph: "" # additional sections to convert to paragraphs go here. + # an optional real name for the character to go by + name: Reference Character + # optional player of character, shown in footer in the copyright notice. + player: foxiepaws + general: + attr: # required section: any key/value pair can go here, keys will be title-cased and underbars will be replaced with spaces. examples follow. + age: 21 + sex: female + gender: female + class: Mage + alignment: Lawful Good + species: Human + build: average + height: 5'9" + weight: 144lbs + color: # optional section: each color must have a location and text, hex value is optional. + - location: skin + text: White + - location: hair + text: Brown + - location: eyes + text: Blue + hex: '#4259e0' + + stats: # optional section, must have key and value, desc (description) optional. example based on ADD basic stats + - key: STR + desc: Strength + value: 0 + - key: DEX + desc: Dexterity + value: 0 + - key: CON + value: 0 + - key: INT + value: 0 + - key: WIS + value: 0 + - key: CHA + value: 0 + + images: + avatar: reference_avatar.png + homepage: reference_avatar-transparent.png + ref: reference_refsheet.png + more: # optional section + - path: /path/to/uploaded/file + caption: Some image + - path: http://somehostsite/path/to/file + caption: another image! + + description: | + This section is shown at the top of the page as a summary. + It is required for each character. + + double line breaks (\n\n) will be interpreted as the start + of a new paragraph + + appearance: | + This section is used to describe what your character looks like in general. + It is not used for clothing/equipment, just a general overview. It also + supports double linebreaks -> paragraphs. It is optional. + + personality: | + This section is used to describe your character's personality, it is optional + and supports formatting into paragraphs. + + attire: | + This section is used to describe what your character wears. It is optional and + supports splitting into paragraphs + + skills: | + This section is used to describe what skills your character has. it is optional + and supports splitting into paragraphs. It appears first in the skills and magic + section of the default template. + + magic: | + This section is used to describe what magical abilities, hexes placed on, effects, + charms, etc your character has. it is optional, supports splitting into paragraphs + and appears second in the Skills and Magic section on the default template + + # more sections can be added, and simply need to be added to the template in most cases. + + +