Giter Site home page Giter Site logo

hologram's Introduction

Hologram

Gem Version Build Status Code Climate Dependency Status License

Hologram is a Ruby gem that parses comments in your CSS and helps you turn them into a beautiful style guide.

There are two steps to building a great style guide:

  1. Documenting your css and javascript, and generating html examples.
  2. Styling the output of step 1.

The hologram gem itself is only concerned with step 1. This means you are free to make your style guide look however you would like. If you don't feel like going through this process yourself, you can take a look at the templates in our example repository, and use the assets defined there instead.

Installation

Add this line to your application's Gemfile:

gem 'hologram'

And then execute:

$ bundle

If you don't use bundler you can run gem install hologram.

Quick Start

hologram init

This will create a hologram_config.yml file (more on this below), starter _header.html and _footer.html files, and starter templates for rendering code examples. You can then tweak the config values and start documenting your css.

Add some documentation to one of your stylesheets:

/*doc
---
title: Alert
name: alert
category: basics
---
```html_example
    <div class='alert'>Hello</div>
```
*/

Building the documentation is simply:

hologram

Command line flags

Hologram has a couple of command line flags:

  • -c or --config - specify the config file, by default hologram looks for hologram_config.yml

Details

There are two things you need to do to start using hologram:

  1. Create a YAML config file for your project.

  2. Go document some code!

Creating a YAML config file

Hologram needs a few configuration settings before it can begin to build your documentation for you. Once this is set up, you can execute hologram by simply running:

hologram path/to/your/config.yml or (using bundler) bundle exec hologram path/to/your/config.yml

Your config file needs to contain the following key/value pairs

  • source: relative path(s) to your source files. Accepts either a single value or an array

  • destination: relative path where you want the documentation to be built

  • documentation_assets: The path that contains supporting assets for the documentation page. This typically includes html fragments (header/footer, etc), style guide specific CSS, javascript and any images. Hologram specifically looks for two files: _header.html and _footer.html. These are used to start and end every html page hologram generates.

    Hologram treats _header.html and _footer.html as ERB files for each page that is generated. You can access the title, file_name, blocks, and categories.

    blocks is a list of each documentation block on the page. Each item in the list has a title, name, category, and optionally a parent. This is useful for, say, building a menu that lists each component.

    categories is a list of all the categories found in the documentation

    Nota Bene: Filenames that begin with underscores will not be copied into the destination folder.

  • code_example_templates: (optional) Hologram uses the files in this folder to format the code examples in the styleguide. The initializer generates 4 files:

    • markup_example_template.html.erb - used for html, haml and slim examples

    • markup_table_template.html.erb - used for multiple html, haml and slim examples layed out in a table (see the tabular layout docs for more information)

    • js_example_template.html.erb - used for js examples

    • jsx_example_template.html.erb - used for jsx examples

    The html in the files will be rendered for every code example in the styleguide. The variable rendered_example represents the html generated by the example, while the variable code_example represents the formatted and escaped code behind the example.

    See the documentation on custom code renderers for more information,

    Nota Bene: If template files are missing, or this folder does not exist, hologram will use default templates.

  • code_example_renderers: (optional) A folder that contains your custom code renderers. For example, if you want to have coffee_examples in your code, write a coffeescript renderer and place it in this folder. See #custom_code_example_renders for more inforamtion on this.

  • custom_markdown: (optional) this is the filename of a class that extends RedCarpet::Render::HTML class. Use this for when you need additional classes or html tags for different parts of the page. See [example_markdown_renderer.rb.example] (example_markdown_renderer.rb.example) for an example of what your class can look like.

  • index: (optional) this is a category (see Documenting your styles section below) that will be used as the index.html.

  • dependencies: a list of relative paths to folders containing any dependencies your style guide has. These folders will be copied over into the documentation output directory. ENSURE THE CSS/JS THAT IS ACTUALLY BEING DOCUMENTED IS LISTED HERE. You will also need to ensure that they are included on your pages. A simple way to do this is to add <link> and <script src=> tags to the _header.html file.

  • ignore_paths: (optional) a list of paths to ignore. This can be a file name or a glob. Be sure to wrap globs in double quotes to keep yaml from getting too upset (ie good:".erb" vs bad:.erb).

  • nav_level: (optional) Sets the level of section navigation desired. section sets it to show sub navigation in top level sections. all sets it to show sub navigation for all sections. all can be a bit much, you'll probably want section.

  • custom_extensions: (optional) Additional file extensions that will be included in the parse. Accepts both a single value and an array. The current supported file extensions are .css, .scss, .less, .sass, .styl, .js, .md, .markdown and .erb.

  • exit_on_warnings: (optional) Hologram displays warnings when there are issues with your docs (e.g. if a component's parent is not found, if the _header.html and/or _footer.html files aren't found) If you want Hologram to exit on these warnings, set the value to 'true' (Default value is 'false')

Example config file
# Hologram will run from same directory where this config file resides
# All paths should be relative to there

# The directory containing the source files to parse recursively
source: ./sass

# You may alternately specify multiple directories.
# source:
#  - ./sass
#  - ./library-sass

# The directory that hologram will build to
destination: ./docs

# The assets needed to build the docs (includes header.html,
# footer.html, etc)
# You may put doc related assets here too: images, css, etc.
documentation_assets: ./doc_assets

# The folder that contains templates for rendering code examples.
# If you want to change the way code examples appear in the styleguide,
# modify the files in this folder
code_example_templates: ./code_example_templates

# The folder that contains custom code example renderers.
# If you want to create additional renderers that are not provided
# by Hologram (i.e. coffeescript renderer, jade renderer, etc)
# place them in this folder
code_example_renderers: ./code_example_renderers

# Any other asset folders that need to be copied to the destination
# folder. Typically this will include the css that you are trying to
# document. May also include additional folders as needed.
dependencies:
  - ./build

# Mark which category should be the index page
# Alternatively, you may have an index.md in the source directory root
# folder instead of specifying this config.
index: basics

# To output navigation for top level sections, set the value to
# 'section'. To output navigation for sub-sections, set the value to `all`
nav_level: all

# Hologram displays warnings when there are issues with your docs
# (e.g. if a component's parent is not found, if the _header.html and/or
#  _footer.html files aren't found)
# If you want Hologram to exit on these warnings, set the value to 'true'
# (Default value is 'false')
exit_on_warnings: false

Documenting your styles and components

Hologram will scan for stylesheets (.css, .scss, .sass, .less, or .styl) and javascript source files (.js) within the source directory defined in your configuration. It will look for comments that match the following:

/*doc
---
title: Buttons
name: button
category: Base CSS
---

Button styles can be applied to any element. Typically you'll want
to use either a `<button>` or an `<a>` element:

```html_example <button class="btn btnDefault">Click</button> <a
class="btn btnDefault" href="trulia.com">Trulia!</a> ```

If your button is actually a link to another page, please use the
`<a>` element, while if your button performs an action, such as
submitting a form or triggering some javascript event, then use a
`<button>` element.

*/

NB: Sass users who are using the .sass flavor of Sass should use //doc style comments with indents to create their comment blocks.

The first section of the comment is a YAML block that defines certain aspects of this documentation block (more on that in the next section). The second part is simply markdown as defined by Redcarpet.

Notice the use of html_example. This tells the markdown renderer that it should treat the example as...well...html. If your project uses haml you can also use haml_example. In that case the output will be html for the example and the code block will show the haml used to generate the html.

For components that require javascript you can use js_example. In addition to outputting the javascript in a <code> block it will also wrap it in a <script> tag for execution.

Additionally, html elements that are generated via markdown will have a class styleguide appended to them. You can use this to apply css to the styleguide itself.

Tabular layout for component documentation

If you want the code snippet next to the rendered component, instead of below, render your component horizontally by applying the html_example_table or haml_example_table modifiers to the code block.

/*doc
---
title: Buttons
name: button
category: Base CSS
---

```html_example_table
<button class="btn btnDefault">Click</button>

<a class="btn btnDefault" href="trulia.com">Trulia!</a>
```

*/

NB: Components separated by a blank line will be rendered as separate table rows.

Referencing other components

For some components, you may want to reference the documentation of another component. As an example, you may want your link components to link to the button documentation.

/*doc
---
title: Links
name: links
category: Other Category
---

...

You may want to use a button for a link.
See [the button documentation][button] for more info.

*/

You can use a reference link of the form [link description][component_name] to link to any other component in the styleguide. These links will even work if the referenced component belongs to a different category.

Document YAML section

The YAML in the documentation block can have any key/value pairs you deem important, but it specifically looks for the following keys:

  • title: The title to display in the documents
  • category/categories: This is the broad categories for the component, all components in the same category will be written to the same page. It can be set to either a string or a YAML array. If you use an array, the component will be written to both pages. Note: There is no need to set a category if this component has a parent.
  • name: This is used for grouping components, by assigning a name, a component can be referenced in another component as a parent. Note that items in the same category are sorted alphabetically by name.
  • parent: (Optional.) This should be the name of another component. If this is set, the current component will be displayed as a section within the parent's documentation, but only if it specifies the same category, or allows the category to be inherited from its parent.
  • hologram: (markdown only) To avoid conflicts with Jekyll and other YAML+markdown formats, Markdown (.md) files must include a hologram: true key/value pair in the YAML block to indicate that it is intended to be processed by Hologram.

For example, you might have a component with the name buttons and another component named buttonSkins. You could set the parent for the buttonSkins component to be buttons. It would then nest the buttonSkins documentation inside the buttons documentation.

Each level of nesting (components are infinitely nestable) will have a heading tag that represents its depth. In the above example buttons would have an <h1> and buttonSkins would have an <h2>.

You can see this exact example in our demo repo, and the output of this nesting in our demo style guide.

Documentation Assets

The documentation assets folder contains the html, css, js and images you'll need for making your style guide look beautiful.

Hologram doesn't care too much about what is in here as it is intended to be custom for your style guide.

Styling Your Code Examples

Hologram uses pygments.rb gem to provide syntax highlighting for code examples. One of the assets that you probably want to include in your documentation assets folder is a css file that styles the "pygmentized" code examples. We use github.css which can be found along with the css we use to style code blocks here.

Custom Code Example Renderers

By default, hologram supports the following code example types:

  • html_example and html_example_table
  • haml_example and haml_example_table
  • slim_example and slim_example_table
  • js_example
  • jsx_example

Let's say you want to include coffeescript examples in your styleguide. You'll need to create a custom renderer for this.

First, if none of the included templates (markup_example_template, js_example_template, etc) work for you, create new custom template files. In this example, let's say you have the templates my_custom_coffee_example_template.html.erb and my_custom_coffee_table_template.html.erb in your ./code_example_templates folder.

<!-- ./code_example_templates/my_custom_coffee_example_template.html.erb -->

<script><%= rendered_example %></script>
<div class="codeBlock coffeeExample">
  <div class="highlight">
    <pre><%= code_example %></pre>
  </div>
</div>
<!-- ./code_example_templates/my_custom_coffee_table_template.html.erb -->

<div class="codeTable">
  <table>
    <tbody>
      <% examples.each do |example| %>
        <tr>
          <td>
            <script><%= example.rendered_example %></script>
            <div class="codeBlock coffeeExample">
              <div class="highlight">
                <pre><%= example.code_example %></pre>
              </div>
            </div>
          </td>
        </tr>
      <% end %>
    </tbody>
  </table>
</div>

Next, create a custom renderer for coffeescript in the file ./code_example_renderers/coffee_renderer.rb.

# ./code_example_renderers/coffee_renderer.rb

require 'coffee-script'

Hologram::CodeExampleRenderer::Factory.define('coffee') do
  example_template 'my_custom_coffee_example_template'
  table_template 'my_custom_coffee_table_template'

  lexer { Rouge::Lexer.find(:coffee) }

  rendered_example do |code|
    CoffeeScript.compile(code)
  end
end

Now you should be able to render coffeescript examples in your styleguide. You can render single coffeescript examples...

$('#myDiv').click ->
  alert 'Oh wow we are rendering coffee script'

Or you can render coffeescript tables...

$('#myDiv').click ->
  alert 'Oh wow we are rendering coffee script'

$('#myOtherDiv').click ->
  console.log 'Yeah coffee script!'

$('#yetAnotherDiv').click ->
  window.location =

Here's some details on the code example renderer factory:

  • Hologram::CodeExampleRenderer::Factory.define(example_type, &block) - this is how you declare a custom renderer. example_type is the name of the renderer, and determines the example name. For example, if example_type was "foobar", in your styleguide you can create foobar_examples and foobar_example_tables

  • example_template - the name of the template used to render the example, minus the .html.erb extension (e.g. "markup_example_template"). It should live in your code_example_templates folder

  • table_template - (optional) the name of the template used to render examples in tabular form, minus the extension (e.g. "markup_table_template").

  • lexer - (optional) a Rogue Lexer that matches the syntax of your example (i.e. Rouge::Lexer.find(:haml), Rouge::Lexer.find(:ruby)). Here's a complete list of possible lexers. If this argument is not provided, hologram will guess what the best one is.

  • rendered_example - (optional) this is the set of instructions to "translate" your exaple so it can be rendered. I.e. for coffeescript to be "rendered" in the browser, you need to transform it to javascript (as can be seen in the block above). For haml, you need to transform it to html. If no block is provided, the code is rendered as is.

Supported Preprocessors/File Types

The following preprocessors/file types are supported by Hologram:

  • Sass (.scss, .sass)
  • Less (.less)
  • Stylus (.styl)
  • Vanilla CSS (.css)
  • Javascript (.js)
  • Markdown (.md, .markdown)

Extensions and Plugins

  • Guard Hologram is a sweet little gem that uses guard to monitor changes to your hologram project and rebuilds your style guide on the fly as you make changes.
  • Grunt Hologram is a sweet little grunt task that will generate your hologram style guide.
  • Hologram Plugin for Gulp is a gulp task for hologram.
  • Classname Clicker is a handy UI addition that gives the ability to see rules that apply to a classname by clicking on them within hologram.
  • Cortana is a theme for hologram. It also includes a handy search feature.
  • Hologram Github Theme is a Github Styleguide inspired theme for hologram.
  • Voxel Hologram is a minimal theme for Hologram.
  • Acme Styleguide is a starter project that helps Pivotal Labs Designers build living styleguides with Sass and Hologram.

Contributing

  1. Fork it
  2. Create your feature/bug fix branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Authors

Hologram is written and maintained by August Flanagan and JD Cantrell.

Contributors

These fine people have also contributed to making hologram a better gem:

License

Hologram is licensed under the MIT License

hologram's People

Contributors

a5e avatar acconrad avatar aflanagan avatar aflanagan-trulia avatar askl56 avatar bebepeng avatar bigethan avatar carpodaster avatar cih avatar d-reinhold avatar gpleiss avatar hupf avatar jcantrell-trulia avatar jdcantrell avatar jho406 avatar keram avatar mattrothenberg avatar mikezx6r avatar noppanit avatar professor avatar ragaskar avatar sceendy avatar stubbornella avatar thinkspill avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hologram's Issues

It's possible to create plugins?

I would like to create a plugin for generate styleguide with translation (mutli-langual). I need a "hook" or events. Their is somethings available?

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Should support inline comments

Hologram currently only supports multi-line comments. /*
The use of single line comments // should be an option and would also be great providing the ability to omit the style guide code from the generated css.

remove rspec runtime dependency

Is it really necessary to have rspec as a runtime dependency? I've never written a gem myself, but as I understand it, rspec should go into the Gemfile, so it's available at build time.

Bundler could not find compatible versions for gem "rspec":
  In Gemfile:
    hologram (~> 1.0.1) ruby depends on
      rspec (~> 2.14.1) ruby

    rspec (3.0.0.beta2)

Better "getting started" instructions

I created the folders and yml file as directed, and used the "buttons" doc from the site, and running "hologram" just gives me:

Warning: Could not generate index.html, there was no content generated for the category basics.
Warning: Could not copy dependency: ./build

inuit.css folder name error

Seems naming a folder *.css in sources results in this error :

/var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:75:in read': Is a directory - css/inuit.css (Errno::EISDIR) from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:75:inprocess_file'
from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:69:in block in process_files' from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:65:ineach'
from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:65:in process_files' from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:59:inblock in process_dir'
from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:52:in each' from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:52:inprocess_dir'
from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:19:in parse' from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_builder.rb:72:inbuild_docs'
from /var/lib/gems/1.9.1/gems/hologram-1.0.1/lib/hologram/doc_builder.rb:38:in init' from /var/lib/gems/1.9.1/gems/hologram-1.0.1/bin/hologram:5:in<top (required)>'
from /usr/local/bin/hologram:23:in load' from /usr/local/bin/hologram:23:in

'

Folder structure used : cf. https://github.com/csswizardry/inuit.css/

Dynamic stylesheet/script inclusion

Hi !

First, I want to say that your tool is really cool. We test so many styleguide generators, but yours seems to be one of the best for our needs.

Anyway, last week I create a nicer theme for Hologram called Cortana and I see something important is missing : the dynamic inclusion of used stylesheet and scripts into the build. In the config file we define the path of all the files which will be parse and use to build the doc, but we have always to include manually all those files in the theme to render our examples.

Can you do something to reuse the source config and dynamically include all the css/js files in the final doc build ?

Fix error reporting

If the config file references a directory that does not exist hologram returns an error that the config could not be read.

  1. make the error reporting more accurate and robust
  2. should we just create the directory in that case?

Categories list for Templates

To generate a complete Navigation for the documentation the _header.html ERB needs access to categories. categories should be a list of each category, that generates an html files. Each item in the should contain the title, file_name and maybe the blocks list as well.

The Navigation section in the hologram example could then be updated accordingly:

<ul class="docNav listInline">
    <% @categories.each do |category| %> 
        <li>
            <a href="#<%= category[:file_name] %>"><%= category[:title] %></a>
        </li>
    <% end %>
</ul>

Sidebar menu requires local server?

This isn't really a bug but I wanted to point out I could only get the sidebar menu to load when I ran the docs from a local server.

I'm guessing this is because of some JS reading the structure, but thought you might want to add this to the docs as I scratched my head a minute before trying it from a local server.

Alternatively, if I'm doing something wrong and my workaround is a red herring - I'd love some help. Thanks!

Folder names ending in ".js" are attempted to be parsed as files

In one of my projects I have a vendor folder with some third party javascript. One third party is cookie.js, which is in a file named cookie.js within a folder named cookie.js. It appears that hologram is running into the folder cookie.js and trying to parse it as a file - where it fails with a is directory exception.

Jasmines-iMac:EMRDemo jhegman$ hologram hologram-test-cfg.yml 
/Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:151:in `read': Is a directory - /Users/jhegman/architecture/EMRDemo/public/shared/js/framework/vendor//cookie.js (Errno::EISDIR)
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:151:in `process_file'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:144:in `process_files'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:140:in `each'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:140:in `process_files'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:134:in `process_dir'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:127:in `each'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:127:in `process_dir'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:97:in `build_docs'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/lib/hologram.rb:76:in `init'
    from /Library/Ruby/Gems/1.8/gems/hologram-0.5.3/bin/hologram:5
    from /usr/bin/hologram:19:in `load'
    from /usr/bin/hologram:19

I can rename the directory to anything not ending in .js and things compile fine.

So summary is that folders ending with ".js" break hologram's build process.

wrap code semantically

I know this is currently handled by the markdown parser, but the current code examples and samples are technically semantically incorrect. Code examples are outputted in <pre> tags. According to the W3:

In the following snippet, a sample of computer code is presented.

<p>This is the <code>Panel</code> constructor:</p>
<pre><code>function Panel(element, canClose, closeHandler) {
 this.element = element;
 this.canClose = canClose;
 this.closeHandler = function () { if (closeHandler) closeHandler() };
}</code></pre>

This would not only improve semantics, but allow out-of-the-box compatibility with syntax tools like Prism.js

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Replace Redcarpet markdown processor with kramdown

http://kramdown.gettalong.org/index.html

I've been using Middleman for some site generation, and it uses kramdown. Was trying to do some custom handling of image tags, and eventually discovered that kramdown has some very nice extension features that Redcarpet does not. Also, Redcarpet has a few issues that impacted me directly like not recognizing html5 tags yet, and not supporting lists more than 5 levels deep.

Examples:
putting {.class} or {#id} after some markup will add the id or class. Can also use standard Ruby hash syntax to add additional attributes.

kramdown also supports markdown within html blocks (http://kramdown.gettalong.org/syntax.html#html-blocks)

Put any markdown *in here* and it will be processed

Several other nice features in here, and it appears that it's extensible like Redcarpet.

Obviously this would break everyone's custom renderers, so I thought I'd reach out and see if there's any appetite for this. I may do it regardless just as an exercise in Ruby coding for myself, but if the community wants it too then it's more incentive more me.

Error when running "hologram config.yml"

I cloned the hologram-example repo and ran hologram config.yml then I got this error:

Build not complete.
 Could not parse YAML:
title: Badges
name: badge
category: Components
author:

But if I put a space after author: or if I put a value after it then there's no problem running the command.

New gem release

The last release is from February. It's not very old but you made a lot of cool changes during this time. Do you plan to publish a new gem release?

Ordering objects in a Category

Hey guys, is there a way to order objects underneath a parent category? Right now, when I put two components (i.e. buttons.less, grid.less) in the same category it adds them to the styleguide in reverse alphabetical order.

Grid

grid guide

Buttons

button guide

Thanks!

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Strange error when running hologram config.yml

When I run hologram config.yml I get the following back:

←[32m(?°?°)?←[0m←[31m? ??? ←[0m←[31m Build not complete.←[0m
Failed to get header.

It does actually build a file with the header in there. But not sure what the error is suppose to say before that. Anyone else had this?

I'm running Windows 8

headers don't nest deeper than two levels

Currently we only handle outputting markdown headers for parent and child relationships that are one level deep (# and ##). Remove hard coding of these and make them based off the level of nesting.

Make hologram open source

Here's the todo list:

  • Make sure we're cleared with legal
  • Move TruliaMarkdown to a config option
  • Add a real readme
  • Create an example for building docs
  • Create a simple github page
  • Solve the problem of parsing more than one comment block
  • Add a rakefile
  • Basic test coverage?

CSS in library is not linked

I cloned the hologram-example then ran hologram config.yml and opened docs/index.html, but the compiled CSS doesn't seem to be linked properly. Not sure if I'm suppose to change the folder structure in any way?

screen shot 2013-07-23 at 10 42 57 pm

Current folder structure:
screen shot 2013-07-23 at 10 49 53 pm

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

hologram gem not compatible with latest version of yajl-ruby and sass

Bundler could not find compatible versions for gem "yajl-ruby":
  In Gemfile:
    hologram (>= 0) ruby depends on
      yajl-ruby (~> 1.1.0) ruby

    yajl-ruby (1.2.0)

Bundler could not find compatible versions for gem "sass":
  In Gemfile:
    hologram (>= 0) ruby depends on
      sass (~> 3.2.7) ruby

    compass (= 0.13.alpha.12) ruby depends on
      sass (3.3.2)

Can we update hologram.gemspec?

HTML modifiers

Just looking at alternatives to KSS which is what I currently use for generating documentation and stumbled across hologram which looks great! A feature I feel it misses (unless I've missed it somewhere) is the ability to create modifiers like KSS, so instead of writing:

<button class="btn">Click</button>
<button class="btn btnAlert">Click</button> 
<button class="btn btnWarning">Click</button> 

KSS allows you to do:

<button class="btn {$modifiers}">Click</button>

.btnAlert - Red button
.btnWarning - Yellow button

Each modified version is then generated as an example in the docs. I find this very handy for showing variations of a component.

Is a similar feature like this available in hologram?

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

`initialize': Is a directory

Hi!

I'm starting a component library using Hologram as the tool to generate it.

I'm getting this error in my project and can't figure out what's causing it.

Command failed: /Users/vince/.rvm/gems/ruby-1.9.3-p545/gems/hologram-1.0.1/lib/hologram/doc
_builder.rb:200:in `initialize': Is a directory - /Users/vince/Projects/leveleleven/builder-component-library/build/ (Errno::EIS
DIR)

my hologram_config.yml:

# Hologram will run from same directory where this config file resides
# All paths should be relative to there

# The directory containing the source files to parse recursively
source: ./app/styles

# The directory that hologram will build to
destination: ./build

# The assets needed to build the docs (includes header.html,
# footer.html, etc)
# You may put doc related assets here too: images, css, etc.
documentation_assets: ./app/templates

# Any other asset folders that need to be copied to the destination
# folder. Typically this will include the css that you are trying to
# document. May also include additional folders as needed.
#dependencies:

# Mark which category should be the index page
# Alternatively, you may have an index.md in the documenatation assets
# folder instead of specifying this configu.
#index: basics

Any ideas what I'm doing wrong?

invalid byte sequence in US-ASCII

I got this error. Certainly because a char than I can write on the disk.

$ hologram
/usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:82:in `scan': invalid byte sequence in US-ASCII (ArgumentError)
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:82:in `process_file'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:69:in `block in process_files'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:65:in `each'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:65:in `process_files'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:59:in `block in process_dir'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:52:in `each'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:52:in `process_dir'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_parser.rb:19:in `parse'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_builder.rb:72:in `build_docs'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/lib/hologram/doc_builder.rb:38:in `init'
    from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/hologram-1.0.1/bin/hologram:5:in `<top (required)>'
    from /usr/local/opt/ruby/bin/hologram:23:in `load'
    from /usr/local/opt/ruby/bin/hologram:23:in `<main>'

Support for traditional SASS syntax

Question. I'm having issues getting Hologram up and running on a Rails 3.2.16 project that uses the traditional SASS syntax. SASS comments like this:

/*doc
  ---
  title: Buttons
  name: button
  category: Forms CSS
  ---

  Button styles can be applied to any element. Typically you'll want to
  use either a `<button>` or an `<a>` element:

  ```html_example
  <button class="btn-primary">Click</button>
  <a class="btn" href="http://trulia.com">Trulia!</a>
  /```

  Default button style is generic. See:
  http://designweb.blurb.com/patterns/#button-generic
  */

... get converted to

/*doc
 * ---
 * title: Buttons
 * name: button
 * category: Forms CSS
 * ---
 *
 * Button styles can be applied to any element. Typically you'll want to
 * use either a `<button>` or an `<a>` element:
 *
 * ```html_example
 * <button class="btn-primary">Click</button>
 * <a class="btn" href="http://trulia.com">Trulia!</a>
 * ```
 *
 * Default button style is generic. See:
 * http://designweb.blurb.com/patterns/#button-generic
 */

Hologram isn't picking these up, I'm assuming b/c of the asterisk preceding each line. Is there a way around this?

Thanks for this great tool!

Child should inherit parent's category

The docs state that an item that defines a parent will be included in its parent's documentation.

This is only true if the child has the same category defined.

To minimize documentation maintenance (that defining a style guide, and not hologram's documentation), does it make sense to have the child inherit the category from its parent?

This is somewhat related to issue #83

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Tabbed code snippets

I have an interest in having a tabbed interface for code in a given example. The reason being is sometimes an example requires multiple code environments for proper implementation. For example, we like to use scss to keep our grids in our stylesheets like so:

// html markup
<header>
   <div class="nav-links">...</div>
   <div class="account-links">...</div>
</header>

// Css markup
header { @include grid-row; }
.nav-links { @include column(6); }
.account-links { @include column(6); }

I would be happy to create a fork and PR if having a tabbed interface is something you guys would consider merging into the code base. Otherwise we will just include both markup in a single code block.

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

invalid byte sequence in UTF-8 (ArgumentError)

Hallo,
since i installed osx mavericks i get the following error message: Maybe sombody know what to do.

/Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:216:in `scan': invalid byte sequence in UTF-8 (ArgumentError)
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:216:in `process_file'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:202:in `block in process_files'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:198:in `each'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:198:in `process_files'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:191:in `block in process_dir'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:184:in `each'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:184:in `process_dir'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:127:in `build_docs'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/lib/hologram.rb:92:in `init'
    from /Library/Ruby/Gems/2.0.0/gems/hologram-0.6.0/bin/hologram:5:in `<top (required)>'
    from /usr/bin/hologram:23:in `load'
    from /usr/bin/hologram:23:in `<main>'

Make hologram works on Windows

Hologram do not work on windows. I'm using the Power Shell. Ruby was installed with http://rubyinstaller.org and https://github.com/oneclick/rubyinstaller/wiki/Development-Kit

I do have a hologram config files and it perfectly works on OSX.

PS C:\myProject> hologram
C:/Ruby200/lib/ruby/gems/2.0.0/gems/posix-spawn-0.3.8/lib/posix/
'which' is not recognized as an internal or external command,
operable program or batch file.
(?°?°)?? ???  Build not complete.
 Could not load config file, try 'hologram init' to get started

SCSS/SASS parsing?

Just wondering, since I don't use plain CSS anymore, should I fist compile SASS keeping comments intact and then run through hologram or there is hope of supporting SASS?

Allow greater level of category nesting

I'd love to be able to nest categories further. ex:

├── elements
│   ├── _forms.sass
│   ├── _lists.sass
│   ├── _loader.sass
│   ├── _tables.sass
│   ├── buttons
│   │   ├── _button.sass
│   │   ├── _close-button.sass
│   │   ├── _minor-button.sass
│   │   └── _save-button.sass
│   ├── forms
│   │   ├── _input-labels.sass
│   │   └── _text-inputs.sass
│   ├── lists
│   │   ├── _bare-list.sass
│   │   ├── _line-list.sass
│   │   ├── _list.sass
│   │   └── _tabs.sass
│   └── text
│       ├── _copy.sass
│       └── _headlines.sass
├── helpers
│   ├── _formatters.sass
│   └── _helpers.sass

that way I can arrange by type, in this case:

  • elements
  • components
  • modules
  • helpers

adding Sass's multi-line comment syntax to docs

I imagine using Hologram in addition to my normal Compass or SassC compiling, not in place of it.

To do this without getting errors, you need to use Sass's multi-line comments "//". but the docs only have single line: "/*".

I'm sure future developers would appreciate that in the docs, it's a bit of a nuance.

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Custom erb file are not compiled

I try the new feature to build custom erb files, like my doc_data.json for JS search engine, but Hologram didn't compile my file and inside the styleguide dir, I have always the doc_data.json.erb ...

Urgent! This repo is publicly accessible!

This repository is publicly accessible. Pushing proprietary code to this repo could reveal trade secrets.

If this is intentional, please contact your lead so this repo can be whitelisted. Until that time, please refrain from pushing code to this repo.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.