edifice-widgets 0.1.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.
- 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:
|