jekyll-bulma-tabs 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7077c00bf3aaeb0ed31fc92548e513d7c7c11210c2fca8ee539dd7a0413a9da4
4
+ data.tar.gz: 6794ebc37b5996b9f72f035f3bdcf5cd8f868f8d23608065019499767de37534
5
+ SHA512:
6
+ metadata.gz: 0b9a369230e6f040ad968147c4ccec08fa14d1f4a014a905923252be77a9eaa27b59c2f64af93cd11155c54911f1d4767a92e655ee78363aa06bb15fdb866105
7
+ data.tar.gz: f5d16e3363b2cf0270f310fdb8f0b4b33eb51c6345bb8db9e1627d8fe363499392fb38fa776a0f67ce7bf16a1cd5f0c71d571f0286f62d605c67a53557c77697
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in jekyll-bulma-tabs.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+
10
+ gem "rspec", "~> 3.0"
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # Jekyll Bulma Tabs Plugin
2
+
3
+ This is a Jekyll tags plugin to add [bulma](https://bulma.io/) style tabs to the GitHub pages
4
+ along with the [bulma-clean-theme](https://github.com/chrisrhymes/bulma-clean-theme).
5
+
6
+ This plugin was created based on the [Jekyll Tabs](https://github.com/Ovski4/jekyll-tabs) plugin.
7
+ Like the Jekyll Tabs does, Jekyll Bulma Tabs has features:
8
+ - works with multiple tab panels on the same page
9
+ - doesn't require a specific JavaScript framework
10
+
11
+ ## Installation
12
+
13
+ #### Plugin
14
+
15
+ Add the plugin in the Jekyll GitHub pages `Gemfile`.
16
+ ```ruby
17
+ group :jekyll_plugins do
18
+ # ... other gems
19
+ gem "jekyll-bulma-tabs"
20
+ end
21
+ ```
22
+
23
+ Also, add the plugin in the Jekyll Github pages `_config.yml`.
24
+ ```yml
25
+ plugins:
26
+ - jekyll-bulma-tabs
27
+ ```
28
+
29
+ Run the command below to install the plugin.
30
+ ```bash
31
+ bundle install
32
+ ```
33
+
34
+ #### JavaScript and CSS
35
+ Copy JavaScript and CSS files to the Jekyll Github pages public directory.
36
+ In general, the places are `assets/js` and `assets/css`.
37
+ - JavaScript: [https://raw.githubusercontent.com/yokolet/jekyll-bulma-tabs/main/docs/tabs.js](https://raw.githubusercontent.com/yokolet/jekyll-bulma-tabs/main/docs/tabs.js)
38
+ - CSS: [https://raw.githubusercontent.com/yokolet/jekyll-bulma-tabs/main/docs/tabs.css](https://raw.githubusercontent.com/yokolet/jekyll-bulma-tabs/main/docs/tabs.css)
39
+
40
+ Add `tabs.js` and `tabs.css` to GitHub pages' header/footer area. Exactly what file depends on how the GitHub pages are
41
+ created. For example, if the theme is bulma-clean-theme, the `tabs.js` goes to `_includes/footer-scripts.html` while the
42
+ `tabs.css` goes to `_includes/head.html`.
43
+
44
+ Example:
45
+ - `_includes/footer-scripts.html`
46
+ ```html
47
+ <script src="{{ "/assets/js/tabs.js" | prepend: site.baseurl }}" type="text/javascript"></script>
48
+ ```
49
+ - `_includes/head.html`
50
+ ```html
51
+ <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/tabs.css">
52
+ ```
53
+
54
+ ## Usage
55
+
56
+ #### Markup
57
+ The markup looks like below:
58
+
59
+ ````markdown
60
+ {% tabs data-struct is-centered is-boxed %}
61
+
62
+ {% tab data-struct yaml %}
63
+ ```yaml
64
+ hello:
65
+ - 'whatsup'
66
+ - 'hi'
67
+ ```
68
+ {% endtab %}
69
+
70
+ {% tab data-struct json %}
71
+ ```json
72
+ {
73
+ "hello": ["whatsup", "hi"]
74
+ }
75
+ ```
76
+ {% endtab %}
77
+
78
+ {% endtabs %}
79
+ ````
80
+
81
+ #### Description
82
+ The syntax is:
83
+ ```markdown
84
+ {% tabs tabs-group-id bulma-tabs-options %}
85
+ {% tab tabs-group-id tab-title-1 %}
86
+ contents1
87
+ {% endtab %}
88
+ {% tab tabs-group-id tab-title-2 %}
89
+ contents2
90
+ {% endtab %}
91
+ {% endtabs %}
92
+ ```
93
+
94
+ - tabs-group-id: (mandate) The id of tabs group and used to switch contents.
95
+ - bulma-tabs-options: (optional) Among the bulma tabs styling options, those used with tabs class are supported such as `is-centered` or `is-boxed`.
96
+ - tab-title: (mandate) The title appears in the tab.
97
+ - contents: (mandate) The contents tied to the tab title.
98
+
99
+
100
+ ## License
101
+
102
+ The theme is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
data/docs/tabs.css ADDED
@@ -0,0 +1,7 @@
1
+ div.tab-content {
2
+ display: none;
3
+ }
4
+
5
+ div.tab-content.is-active {
6
+ display: block;
7
+ }
data/docs/tabs.js ADDED
@@ -0,0 +1,40 @@
1
+ const TABS = [...document.querySelectorAll('div.tabs ul li')];
2
+ const CONTENTS = [...document.querySelectorAll('div.tab-content')];
3
+ const ACTIVE_CLASS = 'is-active';
4
+
5
+ const updateActiveTab = (selected) => {
6
+ let tabs_group = selected.substring(0, selected.lastIndexOf('-'));
7
+ TABS.forEach((tab) => {
8
+ let data = tab.getAttribute('data-tab');
9
+ if (tab && data.startsWith(tabs_group) && tab.classList.contains(ACTIVE_CLASS)) {
10
+ tab.classList.remove(ACTIVE_CLASS);
11
+ }
12
+ if (data === selected) {
13
+ tab.classList.add(ACTIVE_CLASS);
14
+ }
15
+ });
16
+ }
17
+
18
+ const updateActiveContent = (selected) => {
19
+ let tabs_group = selected.substring(0, selected.lastIndexOf('-'));
20
+ CONTENTS.forEach((content) => {
21
+ let data = content.getAttribute('data-content');
22
+ if (content && data.startsWith(tabs_group) && content.classList.contains(ACTIVE_CLASS)) {
23
+ content.classList.remove(ACTIVE_CLASS);
24
+ }
25
+ if (data === selected) {
26
+ content.classList.add(ACTIVE_CLASS);
27
+ }
28
+ });
29
+ }
30
+
31
+ window.addEventListener('load', (event) => {
32
+ TABS.forEach((tab) => {
33
+ tab.addEventListener('click', (event) => {
34
+ event.preventDefault();
35
+ let selected = tab.getAttribute('data-tab');
36
+ updateActiveTab(selected);
37
+ updateActiveContent(selected);
38
+ });
39
+ });
40
+ });
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Bulma
5
+ module Tabs
6
+ VERSION = "0.1.0"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "tabs/version"
4
+
5
+ module Jekyll
6
+ module Bulma
7
+ module Tabs
8
+ class Error < StandardError; end
9
+
10
+ class TabsBlock < Liquid::Block
11
+ def initialize(tag_name, markup, options)
12
+ super
13
+ markups = markup.split(' ', 2)
14
+ if markups.length == 0
15
+ raise SyntaxError.new("Block #{tag_name} requires 1 attribute")
16
+ end
17
+ @tabs_group = markups[0]
18
+ @tabs_opts = markups[1]
19
+ end
20
+
21
+ def render(context)
22
+ super
23
+ environment = context.environments.first
24
+ currentDirectory = File.dirname(__FILE__)
25
+ templateFile = File.read(currentDirectory + '/template.erb')
26
+ template = ERB.new(templateFile)
27
+ template.result(binding)
28
+ end
29
+ end
30
+
31
+ class TabBlock < Liquid::Block
32
+ alias_method :render_block, :render
33
+
34
+ def initialize(tag_name, markup, options)
35
+ super
36
+ markups = markup.split(' ', 2)
37
+ if markups.length != 2
38
+ raise SyntaxError.new("Block #{tag_name} requires 2 attributes")
39
+ end
40
+ @tabs_group = markups[0]
41
+ @tab_id = markups[1]
42
+ end
43
+
44
+ def render(context)
45
+ super
46
+ site = context.registers[:site]
47
+ converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
48
+ environment = context.environments.first
49
+ environment["tabs-#{@tabs_group}"] ||= {}
50
+ environment["tabs-#{@tabs_group}"][@tab_id] = converter.convert(render_block(context))
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ Liquid::Template.register_tag('tab', Jekyll::Bulma::Tabs::TabBlock)
58
+ Liquid::Template.register_tag('tabs', Jekyll::Bulma::Tabs::TabsBlock)
@@ -0,0 +1,20 @@
1
+ <div class="tabs <%= @tabs_opts %>" id="<%= @tabs_group %>">
2
+ <div class="container">
3
+ <ul>
4
+ <% environment["tabs-#{@tabs_group}"].each_with_index do |(key, value), index| %>
5
+ <li<%= index == 0 ? ' class="is-active"' : ''%>
6
+ data-tab="<%= @tabs_group + '-' + index.to_s %>">
7
+ <a><span><%= key %></span></a>
8
+ </li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ </div>
13
+ <div id="<%= @tabs_group %>-content">
14
+ <div class="container box">
15
+ <% environment["tabs-#{@tabs_group}"].each_with_index do |(key, value), index| %>
16
+ <div<%= index == 0 ? ' class="is-active tab-content"' : ' class="tab-content"'%>
17
+ data-content="<%= @tabs_group + '-' + index.to_s %>"><%= value %></div>
18
+ <% end %>
19
+ </div>
20
+ </div>
@@ -0,0 +1,8 @@
1
+ module Jekyll
2
+ module Bulma
3
+ module Tabs
4
+ VERSION: String
5
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
6
+ end
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-bulma-tabs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yoko Harada
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.6'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.6'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ description: Generate a tabbed interface with bulma as a CSS framework.
34
+ email:
35
+ - yokolet@gmail.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - Gemfile
41
+ - README.md
42
+ - Rakefile
43
+ - docs/tabs.css
44
+ - docs/tabs.js
45
+ - lib/jekyll/bulma/tabs.rb
46
+ - lib/jekyll/bulma/tabs/version.rb
47
+ - lib/jekyll/bulma/template.erb
48
+ - sig/jekyll/bulma/tabs.rbs
49
+ homepage: https://github.com/yokolet/jekyll-bulma-tabs.
50
+ licenses:
51
+ - MIT
52
+ metadata:
53
+ homepage_uri: https://github.com/yokolet/jekyll-bulma-tabs.
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.6.0
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.3.7
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: A Jekyll plugin to add bulma compatible tabs.
73
+ test_files: []