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 %}
- + 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. + + +