dismissible_blocks 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7f626613af83496fe42408bf4e578a4aa19afaac01889691f60500c5a37cf78
4
- data.tar.gz: c5cba02f795af41d067fd11bd966168453ca608cd6924accdd804d0838ec92be
3
+ metadata.gz: 145a0ac22b989d3f165280b7203087d2bc6b5c1b434eceb0875f38b282136134
4
+ data.tar.gz: 146bec7c1c582eef33bb4367698459dd5e2bfba3ce811ddb9f0766ce5a74f109
5
5
  SHA512:
6
- metadata.gz: dff7e203a31bbc6a2249f804df4fe8fc265c6f11c3cf53c8491173ef54da2e498cea472064f050328f9f54a3762b018702285d78d1ee6046cb3f67ca76563b95
7
- data.tar.gz: 873081056dd3d5a7d461fb417b4ecc4b698b9767c2ae5935ef510f1293ca6987f8912212583f734a90bde3f9007aa951ca87f0a252a8932ca2d97ba532a4534a
6
+ metadata.gz: f6816d384f8175983ce60b20463ce1c2ab428661d8ebb3f27173ce6be4341e2eb8a4a3adeef0d14ff88f4289b4c66f08e61d8e708dd4e53eac2795e3c0145ddf
7
+ data.tar.gz: d5d4f21dca16061981216bafccd73e329ec76b5472d940e0cad37872f0dd490fd4ef82af25bf0e033f196fe1fa68263f9de5e350a46005173f2e485ac814e008
data/README.md CHANGED
@@ -3,13 +3,13 @@
3
3
  ## Overview
4
4
  [DismissibleBlocks](https://github.com/pbougie/dismissible_blocks) is a simple gem for [Ruby on Rails](http://rubyonrails.org/) projects to add blocks of content to a webpage that can be dismissed by the user. Dismissed blocks are remembered and persisted to the database using [Ajax](https://en.wikipedia.org/wiki/Ajax_%28programming%29). DismissibleBlocks is ORM agnostic and works with MySQL, PostgreSQL, MongoDB, etc.
5
5
 
6
+ > **WARNING:** DismissibleBlocks 2+ removed jQuery as a dependency. If you are not using the loader, you will have to make changes to your code. See examples below.
6
7
 
7
8
  ## Installation
8
9
  ### Requirements
9
- The DismissibleBlocks gem has the following requirements:
10
+ The DismissibleBlocks gem has the following requirement:
10
11
 
11
12
  - [Ruby on Rails](http://rubyonrails.org/) 3.2 or above
12
- - [jQuery](http://jquery.com/)
13
13
 
14
14
  ### Gemfile
15
15
  Add the following line to your application's Gemfile:
@@ -35,23 +35,25 @@ Add the following JavaScript to `app/assets/javascripts/application.js`.
35
35
 
36
36
  In its simplest form, you can require all the needed JavaScript using:
37
37
 
38
- //= require jquery
39
38
  //= require dismissible_blocks
40
39
  //= require dismissible_blocks_loader
41
40
 
42
41
  If you want to customize how a block of HTML is hidden using — for example — a slide up effect, you can customize the JavaScript like so:
43
42
 
44
- //= require jquery
45
43
  //= require dismissible_blocks
46
-
47
- $(document).ready(function() {
48
- $('[data-dismissible]').dismissible({
44
+
45
+ document.addEventListener('DOMContentLoaded', function() {
46
+ document.querySelectorAll('[data-dismissible]').dismissible({
49
47
  dismiss: function(helper) {
50
- helper.slideUp();
48
+ helper.slideUp().then(function(el) {
49
+ el.remove();
50
+ });
51
51
  }
52
52
  });
53
53
  });
54
54
 
55
+ **Note:** The above example is using the `slideUp()` method from the [dom-slider](https://github.com/BrentonCozby/dom-slider) JavaScript library by Brenton Cozby.
56
+
55
57
  ### Helper
56
58
  DismissibleBlocks uses the `current_user` helper method to access the current user/account. Make sure the helper method is also available in your views:
57
59
 
@@ -59,7 +61,7 @@ DismissibleBlocks uses the `current_user` helper method to access the current us
59
61
  ...
60
62
  end
61
63
  helper_method :current_user
62
-
64
+
63
65
  By default, DismissibleBlocks saves the state to the database using the `current_user` helper method. If your user/account helper method is named something else — for example `current_employee`:
64
66
 
65
67
  def current_employee
@@ -83,7 +85,7 @@ ActiveRecord's serialization feature can achieve this. First, create a database
83
85
  def up
84
86
  add_column :users, :dismissed_blocks, :text
85
87
  end
86
-
88
+
87
89
  def down
88
90
  remove_column :users, :dismissed_blocks
89
91
  end
@@ -102,7 +104,7 @@ If you are using [PostgreSQL](http://www.postgresql.org/) with native array supp
102
104
  def up
103
105
  add_column :users, :dismissed_blocks, :string, :array => true
104
106
  end
105
-
107
+
106
108
  def down
107
109
  remove_column :users, :dismissed_blocks
108
110
  end
@@ -1,37 +1,40 @@
1
1
  (function() {
2
- (function($) {
3
2
 
4
- $.fn.dismissible = function(options) {
5
- return this.each(function() {
6
- var _this = $(this);
7
- $('[data-dismissible-hide]', this).click(function(event) {
8
- event.preventDefault();
9
- return _this.dismiss(options);
10
- })
11
- });
12
- };
3
+ NodeList.prototype.dismissible = function(options) {
4
+ this.forEach(function(el) {
5
+ el.dismissible(options);
6
+ });
7
+ }
8
+
9
+ HTMLElement.prototype.dismissible = function(options) {
10
+ this.querySelector('[data-dismissible-hide]').addEventListener('click', function(event) {
11
+ event.preventDefault();
12
+ this.dismiss(options);
13
+ });
14
+ }
15
+
16
+ HTMLElement.prototype.dismiss = function(options) {
17
+ var block_name = this.getAttribute('data-dismissible-hide');
18
+ var block = document.querySelector('[data-dismissible=' + block_name + ']');
19
+ var csrf = document.querySelector('meta[name=csrf-token]');
20
+ var token = csrf != null ? csrf.getAttribute('content') : null;
21
+ var xhr = new XMLHttpRequest();
13
22
 
14
- return $.fn.dismiss = function(options) {
15
- return $.ajax({
16
- type: 'POST',
17
- url: '/dismissible_blocks.json',
18
- dataType: 'json',
19
- contentType: 'application/json',
20
- data: JSON.stringify({
21
- block: $(this).attr('data-dismissible'),
22
- authenticity_token: $('meta[name=csrf-token]').attr('content')
23
- }),
24
- success: (function(_this) {
25
- return function() {
26
- if ((options != null) && options.dismiss !== void 0) {
27
- return options.dismiss(_this);
28
- } else {
29
- return $(_this).remove();
30
- }
31
- }
32
- })(this)
33
- });
23
+ xhr.open('PUT', '/dismissible_blocks.json');
24
+ xhr.setRequestHeader('Content-Type', 'application/json');
25
+ xhr.onload = function() {
26
+ if (xhr.status === 200) {
27
+ if (options !== undefined && options.dismiss !== undefined) {
28
+ return options.dismiss(block);
29
+ } else {
30
+ return block.remove();
31
+ }
32
+ }
34
33
  };
34
+ xhr.send(JSON.stringify({
35
+ block: block_name,
36
+ authenticity_token: token
37
+ }));
38
+ }
35
39
 
36
- })(jQuery);
37
- }).call(this);
40
+ })();
@@ -1,3 +1,7 @@
1
- $(document).ready(function() {
2
- $('[data-dismissible]').dismissible();
3
- });
1
+ (function() {
2
+
3
+ document.addEventListener('DOMContentLoaded', function() {
4
+ document.querySelectorAll('[data-dismissible]').dismissible();
5
+ });
6
+
7
+ })();
@@ -1,8 +1,10 @@
1
1
  class DismissibleBlocksController < ApplicationController
2
2
  def create
3
3
  if current_user_available
4
- current_user.dismissed_blocks += [ params[:block].to_s ]
5
- current_user.save!
4
+ unless current_user.dismissed_blocks.include?(block)
5
+ current_user.dismissed_blocks.push(block)
6
+ current_user.save!
7
+ end
6
8
  render json: {}, status: :ok
7
9
  else
8
10
  render json: {}, status: :unprocessable_entity
@@ -14,4 +16,8 @@ class DismissibleBlocksController < ApplicationController
14
16
  def current_user_available
15
17
  respond_to?(:current_user) && current_user.respond_to?(:dismissed_blocks)
16
18
  end
19
+
20
+ def block
21
+ params[:block].to_s
22
+ end
17
23
  end
data/config/routes.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  Rails.application.routes.draw do
2
- post '/dismissible_blocks' => 'dismissible_blocks#create'
2
+ put '/dismissible_blocks' => 'dismissible_blocks#create'
3
3
  end
@@ -20,8 +20,9 @@ Gem::Specification.new do |s|
20
20
  'LICENSE.txt'
21
21
  ]
22
22
 
23
+ s.post_install_message = 'DismissibleBlocks 2+ removed jQuery as a dependency. See README.'
24
+
23
25
  s.add_runtime_dependency 'rails', '>= 3.2'
24
- s.add_runtime_dependency 'jquery-rails'
25
26
 
26
27
  s.add_development_dependency 'bundler'
27
28
  s.add_development_dependency 'rake'
@@ -1,3 +1,3 @@
1
1
  module DismissibleBlocks
2
- VERSION = '1.2.0'
2
+ VERSION = '2.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dismissible_blocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Bougie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-11 00:00:00.000000000 Z
11
+ date: 2018-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
- - !ruby/object:Gem::Dependency
28
- name: jquery-rails
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -160,7 +146,7 @@ homepage: https://github.com/pbougie/dismissible_blocks
160
146
  licenses:
161
147
  - MIT
162
148
  metadata: {}
163
- post_install_message:
149
+ post_install_message: DismissibleBlocks 2+ removed jQuery as a dependency. See README.
164
150
  rdoc_options: []
165
151
  require_paths:
166
152
  - lib