unobtrusive_flash 0.0.2 → 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 +15 -0
- data/.gitignore +17 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +4 -0
- data/README.markdown +49 -15
- data/Rakefile +1 -0
- data/lib/unobtrusive_flash/controller_mixin.rb +19 -0
- data/lib/unobtrusive_flash/{railtie.rb → engine.rb} +3 -2
- data/lib/unobtrusive_flash/version.rb +3 -0
- data/lib/unobtrusive_flash.rb +2 -18
- data/unobtrusive_flash.gemspec +28 -0
- data/vendor/assets/javascripts/unobtrusive_flash.js +61 -0
- data/vendor/assets/javascripts/unobtrusive_flash_bootstrap.js +35 -0
- data/vendor/assets/javascripts/unobtrusive_flash_ui.js +38 -0
- data/vendor/assets/stylesheets/unobtrusive_flash_ui.css +23 -0
- metadata +85 -57
- data/generators/unobtrusive_flash/unobtrusive_flash_generator.rb +0 -27
- data/init.rb +0 -2
- data/lib/generators/templates/unobtrusive_flash.css +0 -23
- data/lib/generators/templates/unobtrusive_flash.js +0 -67
- data/lib/generators/unobtrusive_flash/install/install_generator.rb +0 -15
- data/rails/init.rb +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MWU1ZTA0MjUzNzMyYmY4MTkzZGUzMzE3MmEzNmE1NTc2YWEwYTA4NQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTVhNmFkNWI2YTFjYjk3MjY2YjI5YjI2Yjg5MDY1YjQzNzc3YTM2NQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDkwODU2YmEzNTJjODJmYTg2MDhhZDllMzUwYmRiYjdiNjNlNTY0MDcyMjdi
|
10
|
+
NDkzYTk4MjVmYjk5N2RhMjEyN2NhYTBkZjg2ODU2NDZhYmMzNTJkNDNhNjkz
|
11
|
+
NzI3NGIxODQwMmI1NTU3MjUzYjRkNGQzOGJkODA3MTNmMTcwY2M=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YjIxMGFkMjkzZjMyYjg0ZWQ5NWQ1OWU1YmJkZTk3ZDk3MTVmZTgxZjY1NTI5
|
14
|
+
N2M5ZGVlNTlhYjA5ODY1OGIxM2ZhOTZjYjYwNGJiZjQxOTgwYmE0NWVmNTEx
|
15
|
+
OWUyZjE0MGMwMjE5Yjk2NzM1MDNkMjk3NDcwYmM0Mjg3YzZiMjc=
|
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/README.markdown
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Unobtrusive flash messages for Rails
|
2
2
|
|
3
|
+
**Version 1 users:** this gem got a major redesign in version 2, please read the documentation
|
4
|
+
|
3
5
|
Ever got tired of pages that can't be cached because they contain flash messages?
|
4
6
|
|
5
7
|
Ever got tired of writing custom code to handle flash messages passed in AJAX responses?
|
@@ -13,32 +15,64 @@ about 3 extra lines of code in your app - how's that for unobtrusive?
|
|
13
15
|
You can pass up to 4K of text into flash this way, and you don't need to worry about cookie size since they are
|
14
16
|
cleared immediately upon rendering.
|
15
17
|
|
16
|
-
Tested
|
18
|
+
Tested in:
|
17
19
|
|
18
|
-
* Internet Explorer 8
|
19
|
-
* Firefox
|
20
|
-
* Chrome
|
21
|
-
* Safari
|
22
|
-
* Opera
|
23
|
-
* *please let me know if it works in firefox 3 and ie 6, 7*
|
20
|
+
* Internet Explorer 8 and later
|
21
|
+
* Firefox up to v24
|
22
|
+
* Chrome up to v30
|
23
|
+
* Safari 6
|
24
|
+
* Opera 12
|
24
25
|
|
25
26
|
## Requirements
|
26
27
|
|
27
|
-
* Rails
|
28
|
-
* jQuery (
|
28
|
+
* Rails 3
|
29
|
+
* jQuery (tested with v1.10)
|
29
30
|
|
30
31
|
## Usage
|
31
32
|
|
32
33
|
1. Add the gem to your Rails app.
|
33
|
-
2.
|
34
|
-
3. Add the following to the controllers that generate flash messages (or better, to the `ApplicationController`):
|
34
|
+
2. Add the following to the controllers that generate flash messages (or better, to the `ApplicationController`):
|
35
35
|
|
36
36
|
after_filter :prepare_unobtrusive_flash
|
37
|
+
|
38
|
+
Important! **Flash messages are NOT HTML escaped**, so you can use any markup in them. Take additional care to protect yourself from injection attacks if necessary.
|
39
|
+
|
40
|
+
3. Include `require unobtrusive_flash` in your `application.js`.
|
41
|
+
|
42
|
+
4. Delete flash rendering code from your views, if there was any.
|
43
|
+
|
44
|
+
5. You have three options to render flash messages on the frontend:
|
45
|
+
|
46
|
+
### Option 1: For Bootstrap projects
|
47
|
+
|
48
|
+
Also `require unobtrusive_flash_bootstrap` in your `application.js`. This file contains flash message UI based on the [Bootstrap alert component](http://getbootstrap.com/components/#alerts).
|
49
|
+
|
50
|
+
Either declare a `.unobtrusive-flash-container` element somewhere on the page to contain the alerts, or Unobtrusive flash will choose the first `.container` or `.container-fluid` element on the page, or fall back to the `body`.
|
51
|
+
|
52
|
+
### Option 2: For non-Bootstrap projects
|
53
|
+
|
54
|
+
Also `require unobtrusive_flash_ui` in your `application.js` and `require unobtrusive_flash_ui` in your `application.css`. These files contain a no-frills flash message UI that works out of the box.
|
55
|
+
|
56
|
+
### Option 3: Roll your own
|
57
|
+
|
58
|
+
Unobtrusive Flash triggers jQuery events when flash is received. If you want to integrate it with your own UI, implement and bind a handler:
|
59
|
+
|
60
|
+
flashHandler = function(e, params) {
|
61
|
+
alert('Received flash message '+params.message+' with type '+params.type);
|
62
|
+
};
|
63
|
+
|
64
|
+
$(window).bind('rails:flash', flashHandler);
|
65
|
+
|
37
66
|
|
38
|
-
|
39
|
-
|
40
|
-
|
67
|
+
## Bonus: show 'flash messages' from the front-end
|
68
|
+
|
69
|
+
Both Bootstrap and non-Bootstrap versions contain a function to display flash messages:
|
70
|
+
|
71
|
+
// Shown for 5 seconds (default)
|
72
|
+
$.showFlashMessage('Hello World', {type: 'notice'})
|
73
|
+
// Shown forever
|
74
|
+
$.showFlashMessage('Error', {type: 'error', timeout: 0})
|
41
75
|
|
42
76
|
* * *
|
43
77
|
|
44
|
-
© 2010 Leonid Shevtsov, released under the MIT license
|
78
|
+
© 2010-2013 Leonid Shevtsov, released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module UnobtrusiveFlash
|
2
|
+
module ControllerMixin
|
3
|
+
protected
|
4
|
+
|
5
|
+
def prepare_unobtrusive_flash
|
6
|
+
if flash.any?
|
7
|
+
cookie_flash = []
|
8
|
+
if cookies['flash']
|
9
|
+
cookie_flash = JSON.parse(cookies['flash']) rescue nil
|
10
|
+
cookie_flash=[] unless cookie_flash.is_a? Array
|
11
|
+
end
|
12
|
+
|
13
|
+
cookie_flash += flash.to_a
|
14
|
+
cookies[:flash] = {:value => cookie_flash.to_json, :domain => :all}
|
15
|
+
flash.discard
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'unobtrusive_flash'
|
2
|
+
require "unobtrusive_flash/controller_mixin"
|
2
3
|
require 'rails'
|
3
4
|
|
4
5
|
module UnobtrusiveFlash
|
5
|
-
class
|
6
|
+
class Engine < ::Rails::Engine
|
6
7
|
initializer 'unobtrusive_flash.initialize', :after => :after_initialize do
|
7
|
-
ActionController::Base.send :include, UnobtrusiveFlash
|
8
|
+
ActionController::Base.send :include, UnobtrusiveFlash::ControllerMixin
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
data/lib/unobtrusive_flash.rb
CHANGED
@@ -1,21 +1,5 @@
|
|
1
|
-
require
|
1
|
+
require "unobtrusive_flash/version"
|
2
|
+
require "unobtrusive_flash/engine"
|
2
3
|
|
3
4
|
module UnobtrusiveFlash
|
4
|
-
|
5
|
-
protected
|
6
|
-
|
7
|
-
def prepare_unobtrusive_flash
|
8
|
-
if flash.any?
|
9
|
-
cookie_flash = []
|
10
|
-
if cookies['flash']
|
11
|
-
cookie_flash = JSON.parse(cookies['flash']) rescue nil
|
12
|
-
cookie_flash=[] unless cookie_flash.is_a? Array
|
13
|
-
end
|
14
|
-
|
15
|
-
cookie_flash += flash.to_a
|
16
|
-
|
17
|
-
cookies['flash'] = cookie_flash.to_json
|
18
|
-
flash.discard
|
19
|
-
end
|
20
|
-
end
|
21
5
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'unobtrusive_flash/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "unobtrusive_flash"
|
8
|
+
spec.version = UnobtrusiveFlash::VERSION
|
9
|
+
spec.authors = ["Leonid Shevtsov"]
|
10
|
+
spec.email = ["leonid@shevtsov.me"]
|
11
|
+
spec.summary = "Unobtrusive flash messages for Rails"
|
12
|
+
spec.description = <<EOT
|
13
|
+
unobtrusive_flash takes your flash messages for the backend and automagically passes them to the frontend via HTTP cookies.
|
14
|
+
This works with both regular page loads and AJAX requests, does not tamper with the page body and requires about 3 extra
|
15
|
+
lines of code in your app - how's that for unobtrusive?
|
16
|
+
EOT
|
17
|
+
spec.homepage = "https://github.com/leonid-shevtsov/unobtrusive_flash"
|
18
|
+
|
19
|
+
spec.files = `git ls-files`.split($/)
|
20
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_dependency "railties"
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
$(function() {
|
2
|
+
// Delete the cookie regardless of the domain it was set from
|
3
|
+
// Partial credit to http://stackoverflow.com/a/2959110/6678
|
4
|
+
function nukeCookie(cookieName) {
|
5
|
+
var yesterday = new Date();
|
6
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
7
|
+
var hostParts = window.location.host.split('.').reverse();
|
8
|
+
var expireHost = hostParts.shift();
|
9
|
+
$.each(hostParts, function(i,part) {
|
10
|
+
expireHost = part + '.' + expireHost;
|
11
|
+
document.cookie = cookieName+'=; path=/;expires='+yesterday+'; domain='+expireHost;
|
12
|
+
});
|
13
|
+
document.cookie = cookieName+'=; path=/';expires=+yesterday+'; domain=';
|
14
|
+
}
|
15
|
+
|
16
|
+
// Extracts flash array stored in cookie and clears the cookie
|
17
|
+
function extractFlashFromCookies() {
|
18
|
+
var data = null;
|
19
|
+
if (document.cookie && document.cookie !== '') {
|
20
|
+
var cookies = document.cookie.split(';');
|
21
|
+
var name = 'flash';
|
22
|
+
var cookieValue = null;
|
23
|
+
|
24
|
+
for (var i = 0; i < cookies.length; i++) {
|
25
|
+
var cookie = jQuery.trim(cookies[i]);
|
26
|
+
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
27
|
+
// replace fixes problems with Rails escaping. Duh.
|
28
|
+
cookieValue = decodeURIComponent(cookie.substring(name.length + 1).replace(/\+/g,'%20'));
|
29
|
+
if (cookieValue.length > 0) break; // there might be empty "flash=" cookies
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
try {
|
34
|
+
data = $.parseJSON(cookieValue);
|
35
|
+
} catch(e) {
|
36
|
+
}
|
37
|
+
|
38
|
+
nukeCookie('flash');
|
39
|
+
}
|
40
|
+
|
41
|
+
return data;
|
42
|
+
}
|
43
|
+
|
44
|
+
// Reads flash messages from cookies and fires corresponding events
|
45
|
+
function showFlashFromCookies() {
|
46
|
+
var flashMessages = extractFlashFromCookies();
|
47
|
+
if (flashMessages !== null) {
|
48
|
+
$.each(flashMessages, function(_, flashMessage) {
|
49
|
+
$(window).trigger('rails:flash', {type: flashMessage[0], message: flashMessage[1]});
|
50
|
+
});
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
$(function() {
|
55
|
+
showFlashFromCookies();
|
56
|
+
});
|
57
|
+
|
58
|
+
$(document).ajaxSuccess(function(event,request,options) {
|
59
|
+
showFlashFromCookies();
|
60
|
+
});
|
61
|
+
});
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// Unobtrusive flash UI implementation with Bootstrap 3
|
2
|
+
// For sites that use Bootstrap http://getbootstrap.com/
|
3
|
+
//
|
4
|
+
// Declare a .unobtrusive-flash-container wherever you want the messages to appear
|
5
|
+
// Defaults to .container, .container-fluid (core Bootstrap classes), or just the body tag, whichever is present
|
6
|
+
$(function() {
|
7
|
+
var $flashContainer = $($('.unobtrusive-flash-container')[0] || $('.container')[0] || $('.container-fluid')[0] || $('body')[0]);
|
8
|
+
|
9
|
+
$.showFlashMessage = function(message, options) {
|
10
|
+
options = $.extend({type: 'notice', timeout: 5000}, options);
|
11
|
+
|
12
|
+
// Workaround for common Rails flash type to match common Bootstrap alert type
|
13
|
+
if (options.type=='notice') options.type = 'info';
|
14
|
+
|
15
|
+
var $flash = $('<div class="alert alert-'+options.type+'"><button type="button" class="close" data-dismiss="alert">×</button>'+message+'</div>');
|
16
|
+
|
17
|
+
$flashContainer.prepend($flash);
|
18
|
+
|
19
|
+
$flash.hide().delay(300).slideDown(100);
|
20
|
+
|
21
|
+
$flash.alert();
|
22
|
+
|
23
|
+
if (options.timeout>0) {
|
24
|
+
setTimeout(function() {
|
25
|
+
$flash.alert('close');
|
26
|
+
},options.timeout);
|
27
|
+
}
|
28
|
+
};
|
29
|
+
|
30
|
+
flashHandler = function(e, params) {
|
31
|
+
$.showFlashMessage(params.message, {type: params.type});
|
32
|
+
};
|
33
|
+
|
34
|
+
$(window).bind('rails:flash', flashHandler);
|
35
|
+
});
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// Unobtrusive flash UI implementation, design agnostic
|
2
|
+
// Remember to link unobtrusive_flash_ui.css as well
|
3
|
+
//
|
4
|
+
// Shows flash messages as translucent bars on top of the page
|
5
|
+
$(function() {
|
6
|
+
$('<div id="unobtrusive-flash-messages"></div>').prependTo('body');
|
7
|
+
|
8
|
+
function hideFlash($flash) {
|
9
|
+
$flash.slideUp(100,function(){
|
10
|
+
$flash.remove();
|
11
|
+
});
|
12
|
+
}
|
13
|
+
|
14
|
+
$.showFlashMessage = function(message, options) {
|
15
|
+
options = $.extend({type: 'notice', timeout: 5000}, options);
|
16
|
+
|
17
|
+
var $flash = $('<div class="unobtrusive-flash-message-wrapper unobtrusive-flash-'+options.type+'"><div class="unobtrusive-flash-message">'+message+'</div></div>');
|
18
|
+
|
19
|
+
$('#unobtrusive-flash-messages').prepend($flash);
|
20
|
+
$flash.hide().delay(300).slideDown(100);
|
21
|
+
|
22
|
+
$flash.click(function() {
|
23
|
+
hideFlash($flash);
|
24
|
+
});
|
25
|
+
|
26
|
+
if (options.timeout>0) {
|
27
|
+
setTimeout(function() {
|
28
|
+
hideFlash($flash);
|
29
|
+
},options.timeout);
|
30
|
+
}
|
31
|
+
};
|
32
|
+
|
33
|
+
flashHandler = function(e, params) {
|
34
|
+
$.showFlashMessage(params.message, {type: params.type});
|
35
|
+
};
|
36
|
+
|
37
|
+
$(window).bind('rails:flash', flashHandler);
|
38
|
+
});
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#unobtrusive-flash-messages {
|
2
|
+
position: fixed;
|
3
|
+
top: 0;
|
4
|
+
left: 0;
|
5
|
+
width: 100%;
|
6
|
+
z-index: 10000;
|
7
|
+
}
|
8
|
+
|
9
|
+
#unobtrusive-flash-messages .unobtrusive-flash-message-wrapper {
|
10
|
+
padding: 10px 0;
|
11
|
+
background: #dcecaa;
|
12
|
+
opacity: 0.8;
|
13
|
+
}
|
14
|
+
|
15
|
+
#unobtrusive-flash-messages .unobtrusive-flash-message-wrapper.unobtrusive-flash-error {
|
16
|
+
background: #ffe2e2;
|
17
|
+
}
|
18
|
+
|
19
|
+
#unobtrusive-flash-messages .unobtrusive-flash-message-wrapper .unobtrusive-flash-message {
|
20
|
+
width: 960px;
|
21
|
+
margin: 0 auto;
|
22
|
+
}
|
23
|
+
|
metadata
CHANGED
@@ -1,79 +1,107 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: unobtrusive_flash
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Leonid Shevtsov
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
11
|
+
date: 2013-10-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: ! 'unobtrusive_flash takes your flash messages for the backend and automagically
|
56
|
+
passes them to the frontend via HTTP cookies.
|
17
57
|
|
18
|
-
|
19
|
-
|
20
|
-
dependencies: []
|
58
|
+
This works with both regular page loads and AJAX requests, does not tamper with
|
59
|
+
the page body and requires about 3 extra
|
21
60
|
|
22
|
-
|
23
|
-
unobtrusive_flash takes your flash messages for the backend and automagically passes them to the frontend via HTTP cookies.
|
24
|
-
This works with both regular page loads and AJAX requests, does not tamper with the page body and requires about 3 extra
|
25
|
-
lines of code in your app - how's that for unobtrusive?
|
61
|
+
lines of code in your app - how''s that for unobtrusive?
|
26
62
|
|
27
|
-
|
63
|
+
'
|
64
|
+
email:
|
65
|
+
- leonid@shevtsov.me
|
28
66
|
executables: []
|
29
|
-
|
30
67
|
extensions: []
|
31
|
-
|
32
68
|
extra_rdoc_files: []
|
33
|
-
|
34
|
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
- lib/generators/unobtrusive_flash/install/install_generator.rb
|
38
|
-
- lib/unobtrusive_flash.rb
|
39
|
-
- lib/unobtrusive_flash/railtie.rb
|
40
|
-
- generators/unobtrusive_flash/unobtrusive_flash_generator.rb
|
41
|
-
- rails/init.rb
|
42
|
-
- init.rb
|
69
|
+
files:
|
70
|
+
- .gitignore
|
71
|
+
- CHANGELOG.md
|
72
|
+
- Gemfile
|
43
73
|
- README.markdown
|
44
|
-
|
45
|
-
|
74
|
+
- Rakefile
|
75
|
+
- lib/unobtrusive_flash.rb
|
76
|
+
- lib/unobtrusive_flash/controller_mixin.rb
|
77
|
+
- lib/unobtrusive_flash/engine.rb
|
78
|
+
- lib/unobtrusive_flash/version.rb
|
79
|
+
- unobtrusive_flash.gemspec
|
80
|
+
- vendor/assets/javascripts/unobtrusive_flash.js
|
81
|
+
- vendor/assets/javascripts/unobtrusive_flash_bootstrap.js
|
82
|
+
- vendor/assets/javascripts/unobtrusive_flash_ui.js
|
83
|
+
- vendor/assets/stylesheets/unobtrusive_flash_ui.css
|
84
|
+
homepage: https://github.com/leonid-shevtsov/unobtrusive_flash
|
46
85
|
licenses: []
|
47
|
-
|
86
|
+
metadata: {}
|
48
87
|
post_install_message:
|
49
88
|
rdoc_options: []
|
50
|
-
|
51
|
-
require_paths:
|
89
|
+
require_paths:
|
52
90
|
- lib
|
53
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
none: false
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
hash: 3
|
68
|
-
segments:
|
69
|
-
- 0
|
70
|
-
version: "0"
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
71
101
|
requirements: []
|
72
|
-
|
73
102
|
rubyforge_project:
|
74
|
-
rubygems_version:
|
103
|
+
rubygems_version: 2.0.5
|
75
104
|
signing_key:
|
76
|
-
specification_version:
|
105
|
+
specification_version: 4
|
77
106
|
summary: Unobtrusive flash messages for Rails
|
78
107
|
test_files: []
|
79
|
-
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
class UnobtrusiveFlashGenerator < Rails::Generator::Base
|
4
|
-
|
5
|
-
def manifest
|
6
|
-
record do |m|
|
7
|
-
m.directory File.join('public', 'stylesheets')
|
8
|
-
m.template 'unobtrusive_flash.css', File.join('public', 'stylesheets', 'unobtrusive_flash.css')
|
9
|
-
|
10
|
-
m.directory File.join('public', 'javascripts')
|
11
|
-
m.template 'unobtrusive_flash.js', File.join('public', 'javascripts', 'unobtrusive_flash.js')
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
protected
|
16
|
-
|
17
|
-
def banner
|
18
|
-
%{Usage: #{$0} #{spec.name}\nCopies unobtrusive_flash.css and .js to their corresponding locations}
|
19
|
-
end
|
20
|
-
|
21
|
-
def source_root
|
22
|
-
File.expand_path('../../../lib/generators/templates', __FILE__)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
|
data/init.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
#flash-messages {
|
2
|
-
position: fixed;
|
3
|
-
top: 0;
|
4
|
-
left: 0;
|
5
|
-
width: 100%;
|
6
|
-
z-index: 10000;
|
7
|
-
}
|
8
|
-
|
9
|
-
#flash-messages .flash-message {
|
10
|
-
padding: 10px 0;
|
11
|
-
background: #dcecaa;
|
12
|
-
opacity: 0.8;
|
13
|
-
}
|
14
|
-
|
15
|
-
#flash-messages .flash-message.flash-error {
|
16
|
-
background: #ffe2e2;
|
17
|
-
}
|
18
|
-
|
19
|
-
#flash-messages .flash-message .message {
|
20
|
-
width: 960px;
|
21
|
-
margin: 0 auto;
|
22
|
-
}
|
23
|
-
|
@@ -1,67 +0,0 @@
|
|
1
|
-
// This requires jQuery at least for now
|
2
|
-
$(function() {
|
3
|
-
$('<div id="flash-messages"></div>').prependTo('body');
|
4
|
-
|
5
|
-
function hideFlash($flash) {
|
6
|
-
$flash.slideUp(100,function(){$flash.remove()});
|
7
|
-
}
|
8
|
-
|
9
|
-
$.flash = function(message, options) {
|
10
|
-
|
11
|
-
options = $.extend({type: 'notice', timeout: 5000}, options);
|
12
|
-
|
13
|
-
var $flash = $('<div class="flash-message flash-'+options.type+' invisible"><div class="message">'+message+'</div></div>');
|
14
|
-
|
15
|
-
$('#flash-messages').prepend($flash);
|
16
|
-
$flash.slideDown(100);
|
17
|
-
|
18
|
-
$flash.click(function() {
|
19
|
-
hideFlash($flash);
|
20
|
-
});
|
21
|
-
|
22
|
-
if (options.timeout>0) {
|
23
|
-
setTimeout(function() {
|
24
|
-
hideFlash($flash);
|
25
|
-
},options.timeout);
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
function loadFlashFromCookies() {
|
32
|
-
if (document.cookie && document.cookie != '') {
|
33
|
-
var cookies = document.cookie.split(';');
|
34
|
-
var name = 'flash';
|
35
|
-
var cookieValue = null;
|
36
|
-
var data = null;
|
37
|
-
|
38
|
-
for (var i = 0; i < cookies.length; i++) {
|
39
|
-
var cookie = jQuery.trim(cookies[i]);
|
40
|
-
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
41
|
-
// replace fixes problems with Rails escaping. Duh.
|
42
|
-
cookieValue = decodeURIComponent(cookie.substring(name.length + 1).replace(/\+/g,'%20'));
|
43
|
-
break;
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
|
-
try {
|
48
|
-
data = $.parseJSON(cookieValue);
|
49
|
-
} catch(e) {
|
50
|
-
}
|
51
|
-
|
52
|
-
if (data!=null) {
|
53
|
-
$.each(data, function(i, d) {
|
54
|
-
$.flash(d[1], {type: d[0]});
|
55
|
-
});
|
56
|
-
}
|
57
|
-
|
58
|
-
document.cookie = 'flash=; path=/';
|
59
|
-
}
|
60
|
-
}
|
61
|
-
|
62
|
-
loadFlashFromCookies();
|
63
|
-
|
64
|
-
$('html').ajaxSuccess(function(event,request,options) {
|
65
|
-
loadFlashFromCookies();
|
66
|
-
});
|
67
|
-
});
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module UnobtrusiveFlash
|
3
|
-
class InstallGenerator < Rails::Generators::Base
|
4
|
-
desc "Copies unobtrusive_flash.css and .js to their corresponding locations"
|
5
|
-
|
6
|
-
source_root File.expand_path('../../../templates', __FILE__)
|
7
|
-
|
8
|
-
def copy_files
|
9
|
-
empty_directory 'public/stylesheets'
|
10
|
-
template 'unobtrusive_flash.css', 'public/stylesheets/unobtrusive_flash.css'
|
11
|
-
empty_directory 'public/javascripts'
|
12
|
-
template 'unobtrusive_flash.js', 'public/javascripts/unobtrusive_flash.js'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "init.rb"))
|