Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: CI
on:
pull_request:
push:
branches: [master]

permissions:
contents: read
pages: write
id-token: write

jobs:
test:
name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} / AA ${{ matrix.activeadmin }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ruby: ['3.2', '3.3', '3.4']
rails: ['7.1.0', '7.2.0', '8.0.0']
activeadmin: ['3.2.0', '3.3.0', '3.4.0', '3.5.0']
exclude:
- rails: '8.0.0'
activeadmin: '3.2.0'
env:
RAILS: ${{ matrix.rails }}
AA: ${{ matrix.activeadmin }}
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Run tests
run: bundle exec rspec spec

- name: Generate badge.json
if: matrix.ruby == '3.4' && matrix.rails == '8.0.0' && matrix.activeadmin == '3.5.0'
run: |
LAST_RUN="coverage/.last_run.json"
if [ ! -f "$LAST_RUN" ]; then
mkdir -p badge
echo '{"schemaVersion":1,"label":"coverage","message":"unknown","color":"lightgrey"}' > badge/badge.json
exit 0
fi
PERCENT=$(ruby -rjson -e "puts JSON.parse(File.read('$LAST_RUN')).dig('result','line').round(1)")
PERCENT_NUM=$(ruby -rjson -e "puts JSON.parse(File.read('$LAST_RUN')).dig('result','line')")
if ruby -e "exit(($PERCENT_NUM >= 90) ? 0 : 1)"; then COLOR="brightgreen"
elif ruby -e "exit(($PERCENT_NUM >= 75) ? 0 : 1)"; then COLOR="green"
elif ruby -e "exit(($PERCENT_NUM >= 60) ? 0 : 1)"; then COLOR="yellow"
else COLOR="red"; fi
mkdir -p badge
echo "{\"schemaVersion\":1,\"label\":\"coverage\",\"message\":\"${PERCENT}%\",\"color\":\"${COLOR}\"}" > badge/badge.json

- name: Upload badge artifact
if: matrix.ruby == '3.4' && matrix.rails == '8.0.0' && matrix.activeadmin == '3.5.0'
uses: actions/upload-artifact@v4
with:
name: coverage-badge
path: badge

deploy-coverage:
needs: test
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

steps:
- uses: actions/checkout@v4
with:
ref: gh-pages

- name: Download coverage badge
uses: actions/download-artifact@v4
with:
name: coverage-badge
path: .

- name: Setup Pages
uses: actions/configure-pages@v5

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: .

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/.bundle/
/Gemfile.lock
/pkg/
/tmp/
spec/rails/rails-*
/coverage
23 changes: 0 additions & 23 deletions .travis.yml

This file was deleted.

22 changes: 12 additions & 10 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
source 'https://rubygems.org'

# Specify your gem's dependencies in activeadmin_scoped_collection_actions.gemspec
gemspec

group :test do
gem 'rails', "~> #{ENV['RAILS'] || '5.2.1'}"
gem 'activeadmin', "~> #{ENV['AA'] || '1.3.1'}"
default_rails_version = '7.1.0'
default_activeadmin_version = '3.2.0'

gem 'rails', "~> #{ENV['RAILS'] || default_rails_version}"
gem 'activeadmin', "~> #{ENV['AA'] || default_activeadmin_version}"
gem 'sprockets-rails'
gem 'sass-rails'

group :test do
gem 'simplecov', require: false
gem 'rspec-rails'
gem 'sqlite3'
gem 'sqlite3', '~> 2.0'
gem 'database_cleaner'
gem 'capybara'
gem 'selenium-webdriver'
gem 'chromedriver-helper'
gem 'byebug'
gem 'sassc-rails'
gem 'cuprite'
gem 'webrick', require: false
end
101 changes: 40 additions & 61 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,119 +1,98 @@
[![Gem Version](https://badge.fury.io/rb/active_admin_sidebar.svg)](https://badge.fury.io/rb/active_admin_sidebar)
[![NPM Version](https://badge.fury.io/js/@activeadmin-plugins%2Factive_admin_sidebar.svg)](https://badge.fury.io/js/@activeadmin-plugins%2Factive_admin_sidebar)
![npm](https://img.shields.io/npm/dm/@activeadmin-plugins/active_admin_sidebar)
![Coverage](https://img.shields.io/endpoint?url=https://activeadmin-plugins.github.io/active_admin_sidebar/badge.json)

# ActiveAdmin Sidebar

Provides ability to manipulate sidebar position for ActiveAdmin (tested with ActiveAdmin ~> 1.0.0)
Manipulate sidebar position and add collapsible sidebar support for ActiveAdmin 3.x.

## Install

Add following line to the `Gemfile`
Add to your `Gemfile`:

```ruby
gem 'active_admin_sidebar'
```

##### Using assets via Sprockets
Add following line to the `app/assets/stylesheets/active_admin.css.scss`
### Using assets via Sprockets

Add to `app/assets/stylesheets/active_admin.scss`:

```scss
@import "active_admin_sidebar";
@import "active_admin_sidebar";
```

If you want to use collapsing feature, add following line
Add to `app/assets/javascripts/active_admin.js`:

```javascripts
//= require active_admin_sidebar
```javascript
//= require active_admin_sidebar
```

to the `app/assets/javascripts/active_admin.js`

##### Using assets via Webpacker (or any other assets bundler) as a NPM module (Yarn package)

Execute:
### Using assets via NPM

$ npm i @activeadmin-plugins/active_admin_sidebar

Or

$ yarn add @activeadmin-plugins/active_admin_sidebar

Or add manually to `package.json`:

```json
"dependencies": {
"@activeadmin-plugins/active_admin_sidebar": "2.0.0"
}
```
and execute:

$ yarn

Add the following line into `app/assets/javascripts/active_admin.js`:
Add to `app/assets/javascripts/active_admin.js`:

```javascript
import '@activeadmin-plugins/active_admin_sidebar';
```

Add the following line into `app/assets/stylesheets/active_admin.scss`:
Add to `app/assets/stylesheets/active_admin.scss`:

```css
```scss
@import '@activeadmin-plugins/active_admin_sidebar';
```

# Configuration per resource
## Configuration per resource

Changing sidebar position dynamically with before_action
Change sidebar position with `before_action`:

```ruby
# app/admin/posts.rb
ActiveAdmin.register Post do
before_action :left_sidebar!, only: [:show]
# app/admin/posts.rb
ActiveAdmin.register Post do
before_action only: [:index] do
left_sidebar!
end
end

# app/admin/comments.rb
ActiveAdmin.register Comment do
before_action :right_sidebar!
# app/admin/comments.rb
ActiveAdmin.register Comment do
before_action do
right_sidebar!
end
end
```

## Global configuration

Moving sidebar to the left within all resource. Set configuration in `config/initializers/active_admin.rb`
Move sidebar to the left for all resources in `config/initializers/active_admin.rb`:

```ruby
# == Controller before-actions
#
# You can add before, after and around actions to all of your resources
ActiveAdmin.setup do |config|
config.before_action do
left_sidebar! if respond_to?(:left_sidebar!)
end
ActiveAdmin.setup do |config|
config.before_action do
left_sidebar! if respond_to?(:left_sidebar!)
end
end
```

## Collapsing sidebar
## Collapsible sidebar

You can use sidebar collapsing.
It will add "hide/show" button. Shown/Hidden state is persisted across all pages.
Add a toggle button to collapse/expand the sidebar. State is persisted per-resource across page navigations.

```ruby
left_sidebar!(collapsed: true)
```
# Collapsible sidebar (starts expanded)
left_sidebar!(collapsible: true)
right_sidebar!(collapsible: true)

You can override button color according to your color theme. For example:

```scss
body.active_admin {
#active_admin_content.left_sidebar, #active_admin_content.collapsed_sidebar {
.collapse_btn, .uncollapse_btn {
background-color: #767270;
}
}
}
# Collapsible sidebar (starts collapsed)
left_sidebar!(collapsible: true, start_collapsed: true)
right_sidebar!(collapsible: true, start_collapsed: true)
```

Example

![Alt text](https://raw.githubusercontent.com/activeadmin-plugins/active_admin_sidebar/master/screen/sidebar.jpg "Example")
![Demo](https://activeadmin-plugins.github.io/active_admin_sidebar/demo.gif "Collapsible sidebar demo")
2 changes: 0 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@ require "bundler"
require 'rake'
Bundler.setup
Bundler::GemHelper.install_tasks

# Import all our rake tasks
FileList['tasks/**/*.rake'].each { |task| import task }
7 changes: 4 additions & 3 deletions active_admin_sidebar.gemspec
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
require "active_admin_sidebar/version"

Expand All @@ -7,15 +6,17 @@ Gem::Specification.new do |s|
s.version = ActiveAdminSidebar::VERSION
s.authors = ["Igor"]
s.email = ["fedoronchuk@gmail.com"]
s.homepage = "https://github.com/Fivell/active_admin_sidebar"
s.homepage = "https://github.com/activeadmin-plugins/active_admin_sidebar"
s.summary = %q{active_admin_sidebar gem}
s.description = %q{extension for activeadmin gem to manage sidebar}
s.license = "MIT"

s.add_dependency "activeadmin"
s.required_ruby_version = '>= 3.1.0'

s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
s.require_paths = ["lib"]

s.add_dependency "activeadmin", ">= 3.0", "< 4.0"
end
22 changes: 11 additions & 11 deletions app/assets/javascripts/active_admin_sidebar.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
(function() {
$(document).ready(function() {
var $aa_content, set_collapsed_sidebar;
if ($('body').hasClass('index') && ($('#active_admin_content').hasClass('collapsible_sidebar'))) {
$aa_content = $('#active_admin_content');
$aa_content.find('.sidebar_section:first>h3').append('<span class="collapse_btn icono-caret-left" title="Hide sidebar"></span>');
$aa_content.prepend('<span class="uncollapse_btn icono-caret-right" title="Show sidebar"></span>');
set_collapsed_sidebar = function(value) {
var $aa_content = $('#active_admin_content');
var $sidebar = $aa_content.find('#sidebar');

var $toggleBtn = $('<span class="sidebar_toggle_btn" title="Toggle sidebar"><span class="chevron"></span></span>');
$sidebar.prepend($toggleBtn);

var set_collapsed_sidebar = function(value) {
return $.getJSON(this.href, {
collapsed_sidebar: value
});
};
return $aa_content.on('click', '.collapse_btn, .uncollapse_btn', function(e) {

$toggleBtn.on('click', function(e) {
if (!$aa_content.hasClass('collapsed_sidebar')) {
set_collapsed_sidebar(true);
$aa_content.removeClass('left_sidebar');
$aa_content.addClass('collapsed_sidebar');
return $aa_content.trigger('collapsible_sidebar:collapsed');
$aa_content.trigger('collapsible_sidebar:collapsed');
} else {
set_collapsed_sidebar(false);
$aa_content.removeClass('collapsed_sidebar');
$aa_content.addClass('left_sidebar');
return $aa_content.trigger('collapsible_sidebar:uncollapsed');
$aa_content.trigger('collapsible_sidebar:uncollapsed');
}
});
}
});

}).call(this);
Loading
Loading