edifice-widgets 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.md +124 -0
- data/Rakefile +7 -0
- data/app/assets/javascripts/edifice-widgets/hooks.js +16 -0
- data/app/assets/javascripts/edifice-widgets/traits.js +31 -0
- data/app/assets/javascripts/edifice-widgets/widgets.js +107 -0
- data/app/assets/javascripts/edifice-widgets.js +5 -0
- data/edifice-widgets.gemspec +26 -0
- data/lib/edifice-widgets/version.rb +5 -0
- data/lib/edifice-widgets.rb +9 -0
- data/spec/rails3.1/.gitignore +5 -0
- data/spec/rails3.1/app/assets/images/rails.png +0 -0
- data/spec/rails3.1/app/assets/javascripts/application.js +15 -0
- data/spec/rails3.1/app/assets/javascripts/traits.js +5 -0
- data/spec/rails3.1/app/assets/javascripts/widgets.js +5 -0
- data/spec/rails3.1/app/assets/stylesheets/application.css +7 -0
- data/spec/rails3.1/app/controllers/application_controller.rb +3 -0
- data/spec/rails3.1/app/controllers/test_controller.rb +2 -0
- data/spec/rails3.1/app/views/layouts/application.html.erb +14 -0
- data/spec/rails3.1/app/views/test/ajax.html.erb +2 -0
- data/spec/rails3.1/app/views/test/base.html.erb +4 -0
- data/spec/rails3.1/config/application.rb +55 -0
- data/spec/rails3.1/config/boot.rb +6 -0
- data/spec/rails3.1/config/environment.rb +5 -0
- data/spec/rails3.1/config/environments/test.rb +35 -0
- data/spec/rails3.1/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails3.1/config/initializers/inflections.rb +10 -0
- data/spec/rails3.1/config/initializers/mime_types.rb +5 -0
- data/spec/rails3.1/config/initializers/secret_token.rb +7 -0
- data/spec/rails3.1/config/initializers/session_store.rb +8 -0
- data/spec/rails3.1/config/initializers/wrap_parameters.rb +14 -0
- data/spec/rails3.1/config/routes.rb +4 -0
- data/spec/rails3.1/log/.gitkeep +0 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/widgets_and_traits_spec.rb +43 -0
- metadata +209 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
Edifice Widgets + Traits
|
2
|
+
========================
|
3
|
+
|
4
|
+
Edifice-widgets is a companion gem to [edifice](/tmeasday/edifice) which allows simple unobtrusive javascript behaviours, allowing you to make pages dynamic, whilst avoiding unnecessary boilerplate.
|
5
|
+
|
6
|
+
Note that it does not depend on edifice although it complements it well. Also note that it doesn't depend on rails---the javascript files can be used in isolation if you want. It does depend on jQuery.
|
7
|
+
|
8
|
+
Installation
|
9
|
+
------------
|
10
|
+
|
11
|
+
To install, simply add to your Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'edifice-widgets'
|
15
|
+
```
|
16
|
+
|
17
|
+
|
18
|
+
To include the javascript, add to your application.js:
|
19
|
+
|
20
|
+
```js
|
21
|
+
/*
|
22
|
+
*= require edifice-widgets
|
23
|
+
*/
|
24
|
+
```
|
25
|
+
|
26
|
+
Traits -- unobtrusive JS behaviours
|
27
|
+
-----------------------------------
|
28
|
+
|
29
|
+
Traits are best explained through example. Suppose you have a input field that you'd like to automatically select all when clicked on (for example github's repository URL field). If we define:
|
30
|
+
|
31
|
+
```javascript
|
32
|
+
$.edifice_traits.always_select_all = function() {
|
33
|
+
return this.bind('click select focus focusin', function() {
|
34
|
+
this.select();
|
35
|
+
});
|
36
|
+
}
|
37
|
+
```
|
38
|
+
|
39
|
+
Then we can use such a behaviour with:
|
40
|
+
|
41
|
+
```html
|
42
|
+
<input data-trait="always_select_all">
|
43
|
+
```
|
44
|
+
|
45
|
+
edifice-widgets will ensure that the code is attached to the `input` and everything behaves as you'd expect.
|
46
|
+
|
47
|
+
You can define more than one trait for an element (separate them with spaces, as you would CSS classes). For that reason, as a rule, it is best if traits remain very simple, and don't alter the internal HTML structure of the element. Otherwise bugs are bound to happen when you combine them.
|
48
|
+
|
49
|
+
Widgets -- unobtrusive specialised elements
|
50
|
+
-------------------------------------------
|
51
|
+
|
52
|
+
If you need something more complex that will significantly alter the HTML, or which requires arguments, it is best to use a widget. For example, suppose you want to create a styled separatelect. Suppose we want to use it all over our website.
|
53
|
+
|
54
|
+
Then we want to write the minimum of HTML above what we would to use a vanilla select, and let the JS framework take care of hooking things together. edifice-widgets lets us write simply:
|
55
|
+
|
56
|
+
```html
|
57
|
+
<select name="country" data-widget="select">
|
58
|
+
<option value="au">Australia</option>
|
59
|
+
<option value="us">USA</option>
|
60
|
+
</select>
|
61
|
+
```
|
62
|
+
|
63
|
+
To enable this, we can write a `select` widget, which goes something like:
|
64
|
+
|
65
|
+
```js
|
66
|
+
// note this is basically untested psuedo-code, don't use on production please
|
67
|
+
$.edifice_widgets.select = function() {
|
68
|
+
return this.each(function(){
|
69
|
+
var $select = $(this).wrap('<div class="select">'),
|
70
|
+
$widget = $select.parent(), $ul = $('<ul>').insertBefore($select);
|
71
|
+
|
72
|
+
// insert the selected text
|
73
|
+
$widget.prepend('<a class="selected">' + $select.val() + '</a>');
|
74
|
+
|
75
|
+
$select.find('option').each(function() {
|
76
|
+
// add a <li> to $ul
|
77
|
+
var $li = $('<li">' + $(this).text() + '</li>').data('option', $(this));
|
78
|
+
$ul.append();
|
79
|
+
});
|
80
|
+
|
81
|
+
// bind click events on lis to select the li's value and close the select widget
|
82
|
+
$widget.delegate('li', 'click', function() {
|
83
|
+
$select.val($(this).data('option').val());
|
84
|
+
$widget.find('.selected').text($(this).data('option').text());
|
85
|
+
$widget.removeClass('open');
|
86
|
+
|
87
|
+
// bind click events on the selected value to toggle the open state
|
88
|
+
}).delegate('.selected', 'click', function() {
|
89
|
+
$widget.toggleClass('open');
|
90
|
+
})
|
91
|
+
});
|
92
|
+
}
|
93
|
+
```
|
94
|
+
|
95
|
+
Of course you would also need to define some appropriate styles to make the select look right.
|
96
|
+
|
97
|
+
Widgets can take arguments, which are set like so:
|
98
|
+
|
99
|
+
```html
|
100
|
+
<select data-widget="select" data-widget-open_class="expanded">
|
101
|
+
```
|
102
|
+
|
103
|
+
To access the option easily, use the `.read_options` method:
|
104
|
+
|
105
|
+
```js
|
106
|
+
var settings = $(this).read_options({
|
107
|
+
'open_class': 'open' // <-- this is the default value for settings.open_class
|
108
|
+
})
|
109
|
+
```
|
110
|
+
|
111
|
+
Use `$edifice_widgets.REQUIRED` to indicate that a setting is required:
|
112
|
+
|
113
|
+
```js
|
114
|
+
var settings = $(this).read_options({
|
115
|
+
'autosubmit_url': $.edifice_widgets.REQUIRED
|
116
|
+
});
|
117
|
+
```
|
118
|
+
|
119
|
+
|
120
|
+
License
|
121
|
+
-------
|
122
|
+
|
123
|
+
Edifice is crafted by [Percolate Studio](http://percolatestudio.com) and released under the [MIT license](www.opensource.org/licenses/MIT)
|
124
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
(function($) {
|
2
|
+
// code that automatically hooks up the traits + widgets defined in the edifice namespace
|
3
|
+
|
4
|
+
// when the document is ready, we can attach widgets
|
5
|
+
$(document).ready(function() {
|
6
|
+
$('body').attach_widgets().attach_traits();
|
7
|
+
$(document).trigger('widgetsReady');
|
8
|
+
|
9
|
+
// whenever an ajax request completes, we want to attach any widgets that have been attached to do the dom
|
10
|
+
$('body').ajaxComplete(function(event, request) {
|
11
|
+
$('body').attach_widgets().attach_traits();
|
12
|
+
$(document).trigger('widgetsReady');
|
13
|
+
});
|
14
|
+
});
|
15
|
+
|
16
|
+
}(jQuery));
|
@@ -0,0 +1,31 @@
|
|
1
|
+
(function($) {
|
2
|
+
// *********** EDIFICE TRAIT CODE ************ //
|
3
|
+
|
4
|
+
/**
|
5
|
+
@name $.edifice_traits
|
6
|
+
@namespace
|
7
|
+
@description Traits live here.
|
8
|
+
*/
|
9
|
+
$.edifice_traits = {};
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Runs $.edifice.traits.X on all contained elements with data-trait containing X
|
13
|
+
*
|
14
|
+
* @param {Boolean} Reset the checks to see if things have already been attached
|
15
|
+
* [use this if you have clone an element without copying events]
|
16
|
+
*
|
17
|
+
* Records which elements have already been 'traited' via data-trait-attached
|
18
|
+
*/
|
19
|
+
$.fn.attach_traits = function(reset) {
|
20
|
+
if (reset) { this.find('[data-trait]').removeAttr('data-trait-attached'); }
|
21
|
+
|
22
|
+
for (trait in $.edifice_traits) {
|
23
|
+
var $els = this.find('[data-trait~=' + trait + ']:not([data-trait-attached~=' + trait + '])');
|
24
|
+
$els.attr('data-trait-attached', function(i, val) {
|
25
|
+
return (val ? val + ' ' : '') + trait;
|
26
|
+
});
|
27
|
+
$.edifice_traits[trait].call($els);
|
28
|
+
}
|
29
|
+
return this;
|
30
|
+
}
|
31
|
+
}(jQuery));
|
@@ -0,0 +1,107 @@
|
|
1
|
+
(function($) {
|
2
|
+
// *********** EDIFICE WIDGET CODE *********** //
|
3
|
+
/**
|
4
|
+
@name $.edifice_widgets
|
5
|
+
@namespace
|
6
|
+
@description Our widgets live here.
|
7
|
+
*/
|
8
|
+
$.edifice_widgets = {};
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Runs attach_widget() on any widget found in the html which isn't already attached.
|
12
|
+
*
|
13
|
+
* @param {Boolean} Reset the checks to see if things have already been attached
|
14
|
+
* [use this if you have clone an element without copying events]
|
15
|
+
*
|
16
|
+
*/
|
17
|
+
$.fn.attach_widgets = function(reset) {
|
18
|
+
if (reset) { this.find('[data-widget]').removeAttr('data-widget-attached'); }
|
19
|
+
|
20
|
+
this.find('[data-widget]:not([data-widget-attached])').attach_widget();
|
21
|
+
|
22
|
+
return this;
|
23
|
+
};
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Call $.WIDGET_NAME on the matched elements where WIDGET_NAME is set in the
|
27
|
+
* data-widget attribute.
|
28
|
+
*
|
29
|
+
* @param {Object} extra_options Use these options in addition to those specified
|
30
|
+
* in the html as data-widget-OPTION_NAME=VALUE
|
31
|
+
*
|
32
|
+
* @throws {Exception} If a widget has already been attached.
|
33
|
+
* @throws {Exception} If the type of widget doesn't exist.
|
34
|
+
*/
|
35
|
+
$.fn.attach_widget = function(extra_options) {
|
36
|
+
return this.each(function() {
|
37
|
+
var $e = $(this), fn_name = $e.attr('data-widget');
|
38
|
+
|
39
|
+
// error checking
|
40
|
+
if ($e.attr('data-widget-attached')) {
|
41
|
+
throw('attach_widget called on already attached widget.');
|
42
|
+
}
|
43
|
+
if (!(fn_name in $.edifice_widgets)) {
|
44
|
+
throw("edifice widget '" + fn_name + "' is not defined.");
|
45
|
+
}
|
46
|
+
|
47
|
+
// attach extra options to the widget
|
48
|
+
if (typeof(extra_options) != 'undefined') {
|
49
|
+
$.each(extra_options, function(name, def) {
|
50
|
+
$e.data('widget-' + name, def);
|
51
|
+
});
|
52
|
+
}
|
53
|
+
|
54
|
+
// load the widget up
|
55
|
+
$.edifice_widgets[fn_name].call($e);
|
56
|
+
$e.attr('data-widget-attached', true);
|
57
|
+
});
|
58
|
+
};
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Make a widget out of an element which doesn't already have data-widget set
|
62
|
+
* in the html.
|
63
|
+
*
|
64
|
+
* @param {String} Type Type of widget, e.g 'ajax_form'
|
65
|
+
* @param {Object} Options for widget.
|
66
|
+
*/
|
67
|
+
$.fn.create_widget = function(type, options) {
|
68
|
+
return $(this).attr('data-widget', type).attach_widget(options);
|
69
|
+
};
|
70
|
+
|
71
|
+
/**
|
72
|
+
* @constant
|
73
|
+
*/
|
74
|
+
$.edifice_widgets.REQUIRED = '*** VALUE REQUIRED ***';
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Read the set of options attached to a widget via data-widget-OPTION_NAME
|
78
|
+
* in the html.
|
79
|
+
*
|
80
|
+
* @param {Object} defaults Specifies the names and default values of
|
81
|
+
* applicable options. Set default value to $.edifice_widgets.REQUIRED to indicate
|
82
|
+
* a mandatory value.
|
83
|
+
*
|
84
|
+
* @returns {Object} The options calculated.
|
85
|
+
*
|
86
|
+
* @throws {Exception} If a required option is not found.
|
87
|
+
*/
|
88
|
+
$.fn.read_options = function(defaults) {
|
89
|
+
var that = this;
|
90
|
+
var options = {};
|
91
|
+
$.each(defaults, function(name, def) {
|
92
|
+
var val = that.data('widget-' + name) || that.attr('data-widget-' + name);
|
93
|
+
|
94
|
+
if (val) {
|
95
|
+
options[name] = val;
|
96
|
+
} else {
|
97
|
+
if (def === $.edifice_widgets.REQUIRED) {
|
98
|
+
throw("Widget argument required: " + name);
|
99
|
+
}
|
100
|
+
|
101
|
+
options[name] = def;
|
102
|
+
}
|
103
|
+
});
|
104
|
+
|
105
|
+
return options;
|
106
|
+
}
|
107
|
+
}(jQuery));
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "edifice-widgets/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "edifice-widgets"
|
7
|
+
s.version = Edifice::Widgets::VERSION
|
8
|
+
s.authors = ["Tom Coleman"]
|
9
|
+
s.email = ["tom@thesnail.org"]
|
10
|
+
s.homepage = "http://edifice-rails.com"
|
11
|
+
s.summary = %q{Edifice-widgets is a companion gem to edifice which allows simple unobtrusive javascript behaviours.}
|
12
|
+
s.description = %q{Edifice-widgets is a companion gem to edifice which allows simple unobtrusive javascript behaviours, allowing you to make pages dynamic, whilst avoiding unnecessary boilerplate.}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_dependency 'jquery-rails'
|
20
|
+
|
21
|
+
s.add_development_dependency 'rake'
|
22
|
+
s.add_development_dependency 'rails'
|
23
|
+
s.add_development_dependency 'rspec-rails'
|
24
|
+
s.add_development_dependency 'capybara'
|
25
|
+
s.add_development_dependency 'tzinfo'
|
26
|
+
end
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into including all the files listed below.
|
2
|
+
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
|
3
|
+
// be included in the compiled file accessible from http://example.com/assets/application.js
|
4
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
5
|
+
// the compiled file.
|
6
|
+
//
|
7
|
+
//= require jquery
|
8
|
+
//= require edifice-widgets
|
9
|
+
//= require_tree .
|
10
|
+
|
11
|
+
(function($) {
|
12
|
+
$(document).bind('widgetsReady', function() {
|
13
|
+
$('body').append('<h1 class="widgetsReady">widgets ready<h1>');
|
14
|
+
})
|
15
|
+
}(jQuery));
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll automatically include all the stylesheets available in this directory
|
3
|
+
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
|
4
|
+
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
5
|
+
*= require_self
|
6
|
+
*= require_tree .
|
7
|
+
*/
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require "action_controller/railtie"
|
4
|
+
require "sprockets/railtie"
|
5
|
+
|
6
|
+
require 'jquery-rails'
|
7
|
+
|
8
|
+
|
9
|
+
if defined?(Bundler)
|
10
|
+
# If you precompile assets before deploying to production, use this line
|
11
|
+
Bundler.require(*Rails.groups(:assets => %w(development test)))
|
12
|
+
# If you want your assets lazily compiled in production, use this line
|
13
|
+
# Bundler.require(:default, :assets, Rails.env)
|
14
|
+
end
|
15
|
+
|
16
|
+
module Rails31
|
17
|
+
class Application < Rails::Application
|
18
|
+
# don't know how i was supposed to set this
|
19
|
+
config.root = ENV['RAILS_ROOT']
|
20
|
+
|
21
|
+
# Settings in config/environments/* take precedence over those specified here.
|
22
|
+
# Application configuration should go into files in config/initializers
|
23
|
+
# -- all .rb files in that directory are automatically loaded.
|
24
|
+
|
25
|
+
# Custom directories with classes and modules you want to be autoloadable.
|
26
|
+
# config.autoload_paths += %W(#{config.root}/extras)
|
27
|
+
|
28
|
+
# Only load the plugins named here, in the order given (default is alphabetical).
|
29
|
+
# :all can be used as a placeholder for all plugins not explicitly named.
|
30
|
+
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
31
|
+
|
32
|
+
# Activate observers that should always be running.
|
33
|
+
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
34
|
+
|
35
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
36
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
37
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
38
|
+
|
39
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
40
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
41
|
+
# config.i18n.default_locale = :de
|
42
|
+
|
43
|
+
# Configure the default encoding used in templates for Ruby 1.9.
|
44
|
+
config.encoding = "utf-8"
|
45
|
+
|
46
|
+
# Configure sensitive parameters which will be filtered from the log file.
|
47
|
+
config.filter_parameters += [:password]
|
48
|
+
|
49
|
+
# Enable the asset pipeline
|
50
|
+
config.assets.enabled = true
|
51
|
+
|
52
|
+
# Version of your assets, change this if you want to expire all your assets
|
53
|
+
config.assets.version = '1.0'
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Rails31::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb
|
3
|
+
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
8
|
+
config.cache_classes = true
|
9
|
+
|
10
|
+
# Configure static asset server for tests with Cache-Control for performance
|
11
|
+
config.serve_static_assets = true
|
12
|
+
config.static_cache_control = "public, max-age=3600"
|
13
|
+
|
14
|
+
# Log error messages when you accidentally call methods on nil
|
15
|
+
config.whiny_nils = true
|
16
|
+
|
17
|
+
# Show full error reports and disable caching
|
18
|
+
config.consider_all_requests_local = true
|
19
|
+
config.action_controller.perform_caching = false
|
20
|
+
|
21
|
+
# Raise exceptions instead of rendering exception templates
|
22
|
+
config.action_dispatch.show_exceptions = false
|
23
|
+
|
24
|
+
# Disable request forgery protection in test environment
|
25
|
+
config.action_controller.allow_forgery_protection = false
|
26
|
+
|
27
|
+
|
28
|
+
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
29
|
+
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
30
|
+
# like if you have constraints or database-specific column types
|
31
|
+
# config.active_record.schema_format = :sql
|
32
|
+
|
33
|
+
# Print deprecation notices to the stderr
|
34
|
+
config.active_support.deprecation = :stderr
|
35
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
|
+
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format
|
4
|
+
# (all these examples are active by default):
|
5
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
6
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
7
|
+
# inflect.singular /^(ox)en/i, '\1'
|
8
|
+
# inflect.irregular 'person', 'people'
|
9
|
+
# inflect.uncountable %w( fish sheep )
|
10
|
+
# end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
# Make sure the secret is at least 30 characters and all random,
|
6
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
+
Rails31::Application.config.secret_token = '9c49a20f1a1927d39445006fa86e869792e085b10f0a4f0c8301cd50207d8beca37dd1f3c641522d4411528c87cbf50827cccf7f89e51529be1b4c71a7d7d7bc'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
Rails31::Application.config.session_store :cookie_store, :key => '_rails3.1_session'
|
4
|
+
|
5
|
+
# Use the database for sessions instead of the cookie-based default,
|
6
|
+
# which shouldn't be used to store highly confidential information
|
7
|
+
# (create the session table with "rails generate session_migration")
|
8
|
+
# Rails31::Application.config.session_store :active_record_store
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
#
|
3
|
+
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
+
# is enabled by default.
|
5
|
+
|
6
|
+
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
+
ActiveSupport.on_load(:action_controller) do
|
8
|
+
wrap_parameters :format => [:json]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Disable root element in JSON by default.
|
12
|
+
ActiveSupport.on_load(:active_record) do
|
13
|
+
self.include_root_in_json = false
|
14
|
+
end
|
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe 'widgets and traits', :type => :request, :js => true do
|
4
|
+
it "should fire widgetsReady" do
|
5
|
+
visit('/test/base')
|
6
|
+
|
7
|
+
page.should have_selector('h1.widgetsReady')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should fire widgetsReady on ajax" do
|
11
|
+
visit('/test/base')
|
12
|
+
page.should have_selector('h1.widgetsReady')
|
13
|
+
|
14
|
+
page.evaluate_script('jQuery.get("/test/ajax")')
|
15
|
+
page.should have_selector('h1.widgetsReady', :count => 2)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should hook up widgets" do
|
19
|
+
visit('/test/base')
|
20
|
+
|
21
|
+
page.should have_selector('.widget_loaded')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should hook up traits" do
|
25
|
+
visit('/test/base')
|
26
|
+
|
27
|
+
page.should have_selector('.trait_loaded')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should hook up widgets on ajax" do
|
31
|
+
visit('/test/base')
|
32
|
+
page.evaluate_script('jQuery.get("/test/ajax", function(d) { jQuery("#ajax").append(d); })')
|
33
|
+
|
34
|
+
page.should have_selector('#ajax .widget_loaded')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should hook up traits on ajax" do
|
38
|
+
visit('/test/base')
|
39
|
+
page.evaluate_script('jQuery.get("/test/ajax", function(d) { jQuery("#ajax").append(d); })')
|
40
|
+
|
41
|
+
page.should have_selector('#ajax .trait_loaded')
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: edifice-widgets
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Tom Coleman
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-01-22 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: jquery-rails
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rake
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rails
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec-rails
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: capybara
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: tzinfo
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
type: :development
|
103
|
+
version_requirements: *id006
|
104
|
+
description: Edifice-widgets is a companion gem to edifice which allows simple unobtrusive javascript behaviours, allowing you to make pages dynamic, whilst avoiding unnecessary boilerplate.
|
105
|
+
email:
|
106
|
+
- tom@thesnail.org
|
107
|
+
executables: []
|
108
|
+
|
109
|
+
extensions: []
|
110
|
+
|
111
|
+
extra_rdoc_files: []
|
112
|
+
|
113
|
+
files:
|
114
|
+
- .gitignore
|
115
|
+
- Gemfile
|
116
|
+
- README.md
|
117
|
+
- Rakefile
|
118
|
+
- app/assets/javascripts/edifice-widgets.js
|
119
|
+
- app/assets/javascripts/edifice-widgets/hooks.js
|
120
|
+
- app/assets/javascripts/edifice-widgets/traits.js
|
121
|
+
- app/assets/javascripts/edifice-widgets/widgets.js
|
122
|
+
- edifice-widgets.gemspec
|
123
|
+
- lib/edifice-widgets.rb
|
124
|
+
- lib/edifice-widgets/version.rb
|
125
|
+
- spec/rails3.1/.gitignore
|
126
|
+
- spec/rails3.1/app/assets/images/rails.png
|
127
|
+
- spec/rails3.1/app/assets/javascripts/application.js
|
128
|
+
- spec/rails3.1/app/assets/javascripts/traits.js
|
129
|
+
- spec/rails3.1/app/assets/javascripts/widgets.js
|
130
|
+
- spec/rails3.1/app/assets/stylesheets/application.css
|
131
|
+
- spec/rails3.1/app/controllers/application_controller.rb
|
132
|
+
- spec/rails3.1/app/controllers/test_controller.rb
|
133
|
+
- spec/rails3.1/app/views/layouts/application.html.erb
|
134
|
+
- spec/rails3.1/app/views/test/ajax.html.erb
|
135
|
+
- spec/rails3.1/app/views/test/base.html.erb
|
136
|
+
- spec/rails3.1/config/application.rb
|
137
|
+
- spec/rails3.1/config/boot.rb
|
138
|
+
- spec/rails3.1/config/environment.rb
|
139
|
+
- spec/rails3.1/config/environments/test.rb
|
140
|
+
- spec/rails3.1/config/initializers/backtrace_silencers.rb
|
141
|
+
- spec/rails3.1/config/initializers/inflections.rb
|
142
|
+
- spec/rails3.1/config/initializers/mime_types.rb
|
143
|
+
- spec/rails3.1/config/initializers/secret_token.rb
|
144
|
+
- spec/rails3.1/config/initializers/session_store.rb
|
145
|
+
- spec/rails3.1/config/initializers/wrap_parameters.rb
|
146
|
+
- spec/rails3.1/config/routes.rb
|
147
|
+
- spec/rails3.1/log/.gitkeep
|
148
|
+
- spec/spec_helper.rb
|
149
|
+
- spec/widgets_and_traits_spec.rb
|
150
|
+
homepage: http://edifice-rails.com
|
151
|
+
licenses: []
|
152
|
+
|
153
|
+
post_install_message:
|
154
|
+
rdoc_options: []
|
155
|
+
|
156
|
+
require_paths:
|
157
|
+
- lib
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
none: false
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
hash: 3
|
164
|
+
segments:
|
165
|
+
- 0
|
166
|
+
version: "0"
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
hash: 3
|
173
|
+
segments:
|
174
|
+
- 0
|
175
|
+
version: "0"
|
176
|
+
requirements: []
|
177
|
+
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 1.8.10
|
180
|
+
signing_key:
|
181
|
+
specification_version: 3
|
182
|
+
summary: Edifice-widgets is a companion gem to edifice which allows simple unobtrusive javascript behaviours.
|
183
|
+
test_files:
|
184
|
+
- spec/rails3.1/.gitignore
|
185
|
+
- spec/rails3.1/app/assets/images/rails.png
|
186
|
+
- spec/rails3.1/app/assets/javascripts/application.js
|
187
|
+
- spec/rails3.1/app/assets/javascripts/traits.js
|
188
|
+
- spec/rails3.1/app/assets/javascripts/widgets.js
|
189
|
+
- spec/rails3.1/app/assets/stylesheets/application.css
|
190
|
+
- spec/rails3.1/app/controllers/application_controller.rb
|
191
|
+
- spec/rails3.1/app/controllers/test_controller.rb
|
192
|
+
- spec/rails3.1/app/views/layouts/application.html.erb
|
193
|
+
- spec/rails3.1/app/views/test/ajax.html.erb
|
194
|
+
- spec/rails3.1/app/views/test/base.html.erb
|
195
|
+
- spec/rails3.1/config/application.rb
|
196
|
+
- spec/rails3.1/config/boot.rb
|
197
|
+
- spec/rails3.1/config/environment.rb
|
198
|
+
- spec/rails3.1/config/environments/test.rb
|
199
|
+
- spec/rails3.1/config/initializers/backtrace_silencers.rb
|
200
|
+
- spec/rails3.1/config/initializers/inflections.rb
|
201
|
+
- spec/rails3.1/config/initializers/mime_types.rb
|
202
|
+
- spec/rails3.1/config/initializers/secret_token.rb
|
203
|
+
- spec/rails3.1/config/initializers/session_store.rb
|
204
|
+
- spec/rails3.1/config/initializers/wrap_parameters.rb
|
205
|
+
- spec/rails3.1/config/routes.rb
|
206
|
+
- spec/rails3.1/log/.gitkeep
|
207
|
+
- spec/spec_helper.rb
|
208
|
+
- spec/widgets_and_traits_spec.rb
|
209
|
+
has_rdoc:
|