compages 0.4.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/.project +18 -0
- data/README +180 -0
- data/Rakefile +10 -0
- data/app/controllers/application.rb +4 -0
- data/app/controllers/contents_controller.rb +116 -0
- data/app/controllers/pages_controller.rb +59 -0
- data/app/controllers/render_controller.rb +24 -0
- data/app/helpers/application_helper.rb +6 -0
- data/app/helpers/contents_helper.rb +5 -0
- data/app/helpers/pages_helper.rb +5 -0
- data/app/helpers/render_helper.rb +2 -0
- data/app/models/content.rb +26 -0
- data/app/models/meta_data.rb +3 -0
- data/app/models/page.rb +106 -0
- data/app/models/page_element.rb +9 -0
- data/app/views/contents/_content_preview.rhtml +1 -0
- data/app/views/contents/_contents_list.rhtml +3 -0
- data/app/views/contents/_show_library.rhtml +60 -0
- data/app/views/contents/_write_now.rhtml +42 -0
- data/app/views/layouts/pages.rhtml +24 -0
- data/app/views/layouts/render.rhtml +11 -0
- data/app/views/pages/_change_theme.rhtml +0 -0
- data/app/views/pages/_edit_menu.rhtml +62 -0
- data/app/views/pages/_page_listed.rhtml +13 -0
- data/app/views/pages/_select_theme.rhtml +4 -0
- data/app/views/pages/edit.rhtml +35 -0
- data/app/views/pages/index.rhtml +45 -0
- data/app/views/pages/list.rhtml +41 -0
- data/app/views/pages/list_a.rhtml +40 -0
- data/app/views/pages/welcome.rhtml +27 -0
- data/app/views/render/_blank.rhtml +3 -0
- data/app/views/render/show.rhtml +1 -0
- data/bin/compages +14 -0
- data/config/boot.rb +44 -0
- data/config/database.yml.home +35 -0
- data/config/environment.rb +53 -0
- data/config/environments/development.rb +21 -0
- data/config/environments/production.rb +18 -0
- data/config/environments/test.rb +19 -0
- data/config/routes.rb +32 -0
- data/db/Copia di schema.rb +48 -0
- data/db/migrate/001_create_pages.rb +12 -0
- data/db/migrate/002_create_contents.rb +12 -0
- data/db/migrate/003_create_meta_datas.rb +14 -0
- data/db/migrate/004_create_page_elements.rb +17 -0
- data/db/migrate/005_add_urlnames.rb +15 -0
- data/db/migrate/006_add_sessions.rb +15 -0
- data/db/schema.mysql.sql +65 -0
- data/db/schema.postgresql.sql +65 -0
- data/db/schema.rb +49 -0
- data/db/schema.sqlite.sql +65 -0
- data/db/schema.sqlserver.sql +71 -0
- data/db/schema_version +1 -0
- data/doc/ER-model/v1.dia +0 -0
- data/doc/ER-model/v2.dia +0 -0
- data/doc/ER-model/v3.dia +0 -0
- data/doc/README_FOR_APP +2 -0
- data/doc/esempi/doc-vir/ecds.htm +2362 -0
- data/doc/esempi/doc-vir/ecds_files/search.gif +0 -0
- data/doc/esempi/doc-vir/ecds_files/upld.gif +0 -0
- data/doc/esempi/doc-vir/ecds_files/upld.jpg +0 -0
- data/installer/apache13.conf.example.template +33 -0
- data/installer/apache20.conf.example.template +40 -0
- data/installer/lighttpd.conf.example.template +6 -0
- data/installer/rails_installer_defaults.yml +5 -0
- data/lib/redcloth.rb +1130 -0
- data/lib/render_engine.rb +94 -0
- data/lib/tasks/release.rake +46 -0
- data/public/.htaccess +41 -0
- data/public/404.html +8 -0
- data/public/500.html +8 -0
- data/public/_index.html +277 -0
- data/public/favicon.ico +0 -0
- data/public/images/body_bg.gif +0 -0
- data/public/images/body_bg_short.gif +0 -0
- data/public/images/ie_shadow.png +0 -0
- data/public/images/journal_reflex.gif +0 -0
- data/public/images/journal_shadow.gif +0 -0
- data/public/images/logo_journal_small.bmp +0 -0
- data/public/images/logo_journal_small.png +0 -0
- data/public/images/page_edit_shadow.png +0 -0
- data/public/images/restore_bar.png +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/javascripts/application.js +23 -0
- data/public/javascripts/controls.js +815 -0
- data/public/javascripts/dragdrop.js +913 -0
- data/public/javascripts/effects.js +958 -0
- data/public/javascripts/lowpro.js +307 -0
- data/public/javascripts/prototype.js +2006 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/compages.css +196 -0
- data/public/stylesheets/editing.css +180 -0
- data/public/stylesheets/editing_ie_filth.css +36 -0
- data/public/themes/Doc_basic/_script.js +342 -0
- data/public/themes/Doc_basic/images/Thumbs.db +0 -0
- data/public/themes/Doc_basic/images/search.gif +0 -0
- data/public/themes/Doc_basic/images/upld.gif +0 -0
- data/public/themes/Doc_basic/images/upld.jpg +0 -0
- data/public/themes/Doc_basic/index.html +114 -0
- data/public/themes/Doc_basic/style.css +1743 -0
- data/public/themes/color7boxes/default2.css +42 -0
- data/public/themes/color7boxes/index.html +40 -0
- data/public/themes/prova/index.html +12 -0
- data/public/zDoc/images/search.gif +0 -0
- data/public/zDoc/images/upld.gif +0 -0
- data/public/zDoc/images/upld.jpg +0 -0
- data/public/zDoc/index.html +176 -0
- data/public/zDoc/script.js +342 -0
- data/public/zDoc/style.css +1741 -0
- data/script/about +3 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/test/fixtures/contents.yml +5 -0
- data/test/fixtures/meta_datas.yml +5 -0
- data/test/fixtures/page_elements.yml +5 -0
- data/test/fixtures/pages.yml +5 -0
- data/test/functional/contents_controller_test.rb +18 -0
- data/test/functional/pages_controller_test.rb +18 -0
- data/test/functional/render_controller_test.rb +18 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/content_test.rb +10 -0
- data/test/unit/meta_data_test.rb +10 -0
- data/test/unit/page_element_test.rb +10 -0
- data/test/unit/page_test.rb +10 -0
- data/tmp/sessions/ruby_sess.0ced4c30e36477ab +0 -0
- data/tmp/sessions/ruby_sess.20fbe26671422e70 +0 -0
- data/tmp/sessions/ruby_sess.2c72521f3a7e2ba9 +0 -0
- data/tmp/sessions/ruby_sess.4107a69d982a2eb7 +0 -0
- data/tmp/sessions/ruby_sess.573ded9c7fdd9035 +0 -0
- data/tmp/sessions/ruby_sess.5a9767815bb96258 +0 -0
- data/tmp/sessions/ruby_sess.85d723b794005388 +0 -0
- data/tmp/sessions/ruby_sess.875b3b3e3529afdb +0 -0
- data/tmp/sessions/ruby_sess.936766f3a397c88b +0 -0
- data/tmp/sessions/ruby_sess.984e2e4c9a2e7891 +0 -0
- data/tmp/sessions/ruby_sess.a1faebd7448bc45d +0 -0
- data/tmp/sessions/ruby_sess.a415768c7635bc15 +0 -0
- data/tmp/sessions/ruby_sess.b2dadcbe6c1b0add +0 -0
- data/tmp/sessions/ruby_sess.ca9100beb103a428 +0 -0
- data/tmp/sessions/ruby_sess.d649c800a046efde +0 -0
- data/tmp/sessions/ruby_sess.db73bbfafd5a537c +0 -0
- data/tmp/sessions/ruby_sess.e32487b847524df1 +0 -0
- data/tmp/sessions/ruby_sess.f4e45d67828cc437 +0 -0
- data/tmp/sessions/ruby_sess.f5a3f064f2f7a26f +0 -0
- data/tmp/sessions/ruby_sess.ff0c47b35f238cda +0 -0
- data/vendor/plugins/acts_as_urlnameable.tar.gz +0 -0
- data/vendor/plugins/acts_as_urlnameable/LICENSE +19 -0
- data/vendor/plugins/acts_as_urlnameable/README +193 -0
- data/vendor/plugins/acts_as_urlnameable/Rakefile +25 -0
- data/vendor/plugins/acts_as_urlnameable/TODO +5 -0
- data/vendor/plugins/acts_as_urlnameable/db/00x_add_urlnames_table.rb +15 -0
- data/vendor/plugins/acts_as_urlnameable/db/urlnames_table.sql +7 -0
- data/vendor/plugins/acts_as_urlnameable/doc/classes/ActiveRecord/Acts/Urlnameable/ClassMethods.html +167 -0
- data/vendor/plugins/acts_as_urlnameable/doc/classes/ActiveRecord/Acts/Urlnameable/InstanceMethods.html +213 -0
- data/vendor/plugins/acts_as_urlnameable/doc/classes/ActiveRecord/Acts/Urlnameable/SingletonMethods.html +189 -0
- data/vendor/plugins/acts_as_urlnameable/doc/created.rid +1 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/LICENSE.html +129 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/README.html +333 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/TODO.html +121 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/lib/acts_as_urlnameable_rb.html +101 -0
- data/vendor/plugins/acts_as_urlnameable/doc/fr_class_index.html +29 -0
- data/vendor/plugins/acts_as_urlnameable/doc/fr_file_index.html +30 -0
- data/vendor/plugins/acts_as_urlnameable/doc/fr_method_index.html +34 -0
- data/vendor/plugins/acts_as_urlnameable/doc/index.html +24 -0
- data/vendor/plugins/acts_as_urlnameable/doc/rdoc-style.css +208 -0
- data/vendor/plugins/acts_as_urlnameable/init.rb +3 -0
- data/vendor/plugins/acts_as_urlnameable/lib/acts_as_urlnameable.rb +159 -0
- data/vendor/plugins/acts_as_urlnameable/lib/urlname.rb +3 -0
- data/vendor/plugins/acts_as_urlnameable/test/acts_as_urlnameable_test.rb +233 -0
- data/vendor/plugins/acts_as_urlnameable/test/connection.rb +8 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/article.rb +13 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/articles.yml +62 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/page.rb +14 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/pages.yml +35 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/people.yml +9 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/person.rb +26 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/schema.rb +24 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/section.rb +5 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/sections.yml +9 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/urlnames.yml +153 -0
- data/vendor/plugins/acts_as_urlnameable/test/test_helper.rb +42 -0
- data/vendor/plugins/gems/README +30 -0
- data/vendor/plugins/gems/init.rb +9 -0
- data/vendor/plugins/gems/tasks/gems_tasks.rake +32 -0
- data/vendor/plugins/unobtrusive_javascript/CHANGELOG +72 -0
- data/vendor/plugins/unobtrusive_javascript/README +73 -0
- data/vendor/plugins/unobtrusive_javascript/Rakefile +33 -0
- data/vendor/plugins/unobtrusive_javascript/about.yml +6 -0
- data/vendor/plugins/unobtrusive_javascript/assets/javascripts/lowpro.js +307 -0
- data/vendor/plugins/unobtrusive_javascript/init.rb +21 -0
- data/vendor/plugins/unobtrusive_javascript/install.rb +1 -0
- data/vendor/plugins/unobtrusive_javascript/lib/actionview_helpers_patches.rb +17 -0
- data/vendor/plugins/unobtrusive_javascript/lib/asset_tag_helper_patches.rb +33 -0
- data/vendor/plugins/unobtrusive_javascript/lib/behaviour_caching.rb +70 -0
- data/vendor/plugins/unobtrusive_javascript/lib/controllers/unobtrusive_javascript_controller.rb +52 -0
- data/vendor/plugins/unobtrusive_javascript/lib/prototype_helper_patches.rb +72 -0
- data/vendor/plugins/unobtrusive_javascript/lib/scriptaculous_helper_patches.rb +62 -0
- data/vendor/plugins/unobtrusive_javascript/lib/tag_helper_patches.rb +37 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs.rb +32 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_helper.rb +62 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_script.rb +54 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_script_converter.rb +23 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/controller_methods.rb +55 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/helpers.rb +152 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/javascript_proxies.rb +57 -0
- data/vendor/plugins/unobtrusive_javascript/tasks/unobtrusive_javascript_tasks.rake +15 -0
- data/vendor/plugins/unobtrusive_javascript/test/asset_tag_helper_patches_test.rb +32 -0
- data/vendor/plugins/unobtrusive_javascript/test/behaviour_helper_test.rb +180 -0
- data/vendor/plugins/unobtrusive_javascript/test/behaviour_script_converter_test.rb +72 -0
- data/vendor/plugins/unobtrusive_javascript/test/behaviour_script_test.rb +98 -0
- data/vendor/plugins/unobtrusive_javascript/test/config/environment.rb +8 -0
- data/vendor/plugins/unobtrusive_javascript/test/config/routes.rb +4 -0
- data/vendor/plugins/unobtrusive_javascript/test/config/schema.rb +3 -0
- data/vendor/plugins/unobtrusive_javascript/test/controller_methods_test.rb +48 -0
- data/vendor/plugins/unobtrusive_javascript/test/helpers_test.rb +186 -0
- data/vendor/plugins/unobtrusive_javascript/test/javascript_proxies_test.rb +3 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/boot.rb +26 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/action_controller.rb +11 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/action_mailer.rb +4 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/active_record.rb +27 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/rails.rb +31 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/ptk.rb +148 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/suite/difference.rb +23 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/stubs/controller_stub.rb +10 -0
- data/vendor/plugins/unobtrusive_javascript/test/ptk_helper.rb +29 -0
- data/vendor/plugins/unobtrusive_javascript/test/tag_helper_patches_test.rb +59 -0
- data/vendor/plugins/unobtrusive_javascript/test/test_helper.rb +25 -0
- data/vendor/plugins/unobtrusive_javascript/test/unobtrusive_javascript_controller_test.rb +95 -0
- data/vendor/plugins/unobtrusive_javascript/uninstall.rb +1 -0
- data/vendor/redcloth/bin/redcloth +3 -0
- data/vendor/redcloth/doc/CHANGELOG +160 -0
- data/vendor/redcloth/doc/COPYING +25 -0
- data/vendor/redcloth/doc/README +106 -0
- data/vendor/redcloth/doc/REFERENCE +216 -0
- data/vendor/redcloth/doc/make.rb +359 -0
- data/vendor/redcloth/lib/redcloth.rb +1130 -0
- data/vendor/redcloth/run-tests.rb +28 -0
- data/vendor/redcloth/setup.rb +1376 -0
- data/vendor/redcloth/tests/code.yml +105 -0
- data/vendor/redcloth/tests/hard_breaks.yml +26 -0
- data/vendor/redcloth/tests/images.yml +171 -0
- data/vendor/redcloth/tests/instiki.yml +39 -0
- data/vendor/redcloth/tests/links.yml +155 -0
- data/vendor/redcloth/tests/lists.yml +77 -0
- data/vendor/redcloth/tests/markdown.yml +218 -0
- data/vendor/redcloth/tests/poignant.yml +64 -0
- data/vendor/redcloth/tests/table.yml +198 -0
- data/vendor/redcloth/tests/textism.yml +406 -0
- metadata +432 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class UJS::BehaviourScriptConverter
|
|
2
|
+
def initialize(script)
|
|
3
|
+
@script = script
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
# Converts a BehaviourScript object into a custom hash format
|
|
7
|
+
def self.convert_to_hash(script)
|
|
8
|
+
self.new(script).to_hash
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Converts a hash-converted BehaviourScript back to a BehaviourScript again
|
|
12
|
+
def self.convert_from_hash(script_hash)
|
|
13
|
+
script = UJS::BehaviourScript.new(script_hash[:options][:cache], script_hash[:options][:reapply_after_ajax])
|
|
14
|
+
script_hash[:rules].each { |r| script.add_rule(r[0], r[1]) }
|
|
15
|
+
script
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Convert behaviour script to a hash
|
|
19
|
+
def to_hash
|
|
20
|
+
{ :options => { :cache => @script.cache?, :reapply_after_ajax => @script.reapply_after_ajax? },
|
|
21
|
+
:rules => @script.rules }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module UJS::ControllerMethods
|
|
2
|
+
def self.included(base)
|
|
3
|
+
base.class_eval do
|
|
4
|
+
before_filter :store_controller_for_helpers
|
|
5
|
+
before_filter :initialise_js_behaviours
|
|
6
|
+
after_filter :store_js_behaviours
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Lets you register javascript behaviours from within
|
|
11
|
+
# the controller. For a description of the different options
|
|
12
|
+
# available, see UJS::Helpers#apply_behaviour (note:
|
|
13
|
+
# this function does not take a block like the view helper version)
|
|
14
|
+
def apply_behaviour(selector, behaviour, opts={})
|
|
15
|
+
opts.reverse_merge!(:prevent_default => false)
|
|
16
|
+
@js_behaviours.add_rule(selector, behaviour, opts[:prevent_default])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def cache_behaviours
|
|
20
|
+
@js_behaviours.enable_cache
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def reapply_behaviours_after_ajax=(val)
|
|
24
|
+
@js_behaviours.reapply_after_ajax = val
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Make American and English spellings both work for apply_behaviour
|
|
28
|
+
alias_method :apply_behavior, :apply_behaviour
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
# Initialises the javascript behaviours
|
|
32
|
+
def initialise_js_behaviours
|
|
33
|
+
@js_behaviours = UJS::BehaviourScript.new(@cache_behaviours)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Clears the array of registered javascript behaviours
|
|
37
|
+
def reset_js_behaviours
|
|
38
|
+
session[:js_behaviours] = nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns a BehaviourScript from the behaviours serialized to the session
|
|
42
|
+
def js_behaviours
|
|
43
|
+
return nil if session[:js_behaviours].nil?
|
|
44
|
+
UJS::BehaviourScriptConverter.convert_from_hash(session[:js_behaviours])
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Stores all registered javascript behaviours in the session as a hash
|
|
48
|
+
def store_js_behaviours
|
|
49
|
+
session[:js_behaviours] = @js_behaviours.to_hash
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def store_controller_for_helpers
|
|
53
|
+
ActionView::Helpers.current_controller = self
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/behaviour_helper'
|
|
2
|
+
require File.dirname(__FILE__) + '/javascript_proxies'
|
|
3
|
+
|
|
4
|
+
module UJS::Helpers
|
|
5
|
+
include UJS::BehaviourHelper
|
|
6
|
+
include UJS::JavascriptProxies
|
|
7
|
+
|
|
8
|
+
# This is the core functionality of the plugin;
|
|
9
|
+
# it allows you to attach javascript behaviour to your page
|
|
10
|
+
# elements in an unobtrusive fashion. It takes three options:
|
|
11
|
+
# * +selector+ - CSS selector and event. For a full overview of
|
|
12
|
+
# the selector syntax, see the event:Selectors website.
|
|
13
|
+
# http://encytemedia.com/event-selectors
|
|
14
|
+
# * +behaviour+ - The javascript that you want to attach to the element
|
|
15
|
+
# and event specified by +selector+ as a string of javascript.
|
|
16
|
+
# * +opts+ - A hash of additional options.
|
|
17
|
+
#
|
|
18
|
+
# Attaching a behaviour to an element on your page is as simple as
|
|
19
|
+
# specifying the element and the event you want the behaviour attached
|
|
20
|
+
# to, using the CSS selector format, and passing in a string of javascript:
|
|
21
|
+
#
|
|
22
|
+
# <% apply_behaviour "#coollink:click", "alert('Hello World')" %>
|
|
23
|
+
#
|
|
24
|
+
# You can also make use of any of the built-in Rails helpers that
|
|
25
|
+
# generate Javascript:
|
|
26
|
+
#
|
|
27
|
+
# <% apply_behaviour "#coolink:click", visual_effect(:highlight, "coollink") %>
|
|
28
|
+
#
|
|
29
|
+
# You will have access to two javascript variables inside your javascript string:
|
|
30
|
+
# * +this+: returns a reference to the HTML element that the behaviour was attached to
|
|
31
|
+
# * +event+: the event the behaviour was attached to:
|
|
32
|
+
#
|
|
33
|
+
# <% apply_behaviour "#coollink:click", "alert('You clicked ' this.id); Event.stop(event)" %>
|
|
34
|
+
#
|
|
35
|
+
# The following options can be set using the opts hash:
|
|
36
|
+
#
|
|
37
|
+
# * <tt>:external</tt> - If true, the behaviour will be attached to the external behaviour file.
|
|
38
|
+
# If false, it will be rendered directly in the page inside +script+ tags. Defaults to true.
|
|
39
|
+
#
|
|
40
|
+
# When setting <tt>:external</tt> to false, you <em>must</em> call the register_js_behaviour from
|
|
41
|
+
# within ERb <em>output</em> blocks. If <tt>:external</tt> is true, you can use either output or non-output blocks.
|
|
42
|
+
#
|
|
43
|
+
# If you set :prevent_default to true the default action of the event is stopped (similar to calling event.stop).
|
|
44
|
+
# This is very useful for hijacking links in order to provide some other behaviour.
|
|
45
|
+
#
|
|
46
|
+
# You can also pass a block to the function instead of a string of javascript -
|
|
47
|
+
# the block will be passed in a JavascriptGenerator object (+page+), the element (optional)
|
|
48
|
+
# and the event (optional). You can use the Javascript generator
|
|
49
|
+
# to write your attached behaviour using Ruby:
|
|
50
|
+
#
|
|
51
|
+
# <% apply_behaviour "#coollink:click" do |page, element, event|
|
|
52
|
+
# page.alert("Hi there, I'm going to fade away...")
|
|
53
|
+
# page.visual_effect :fade, element
|
|
54
|
+
# end %>
|
|
55
|
+
def apply_behaviour(selector, *args, &block) #:yields: page, element, event
|
|
56
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
|
57
|
+
set_default_external!(opts)
|
|
58
|
+
behaviour = normalise_behaviour_string(args.first || '')
|
|
59
|
+
|
|
60
|
+
if block_given?
|
|
61
|
+
generator = new_javascript_generator
|
|
62
|
+
args = [generator, element_proxy(generator), event_proxy(generator)][0..block.arity-1]
|
|
63
|
+
@template.instance_exec(*args, &block)
|
|
64
|
+
behaviour = generator.to_s
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
if !opts[:external]
|
|
68
|
+
render_inline_behaviour_block(selector, behaviour, opts)
|
|
69
|
+
else
|
|
70
|
+
@controller.apply_behaviour(selector, behaviour, opts) and return ''
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Allow you to apply multiple behaviours with block syntax.
|
|
75
|
+
#
|
|
76
|
+
# apply_behaviours do
|
|
77
|
+
# on 'a:click', 'alert("boo")'
|
|
78
|
+
# on 'abbr:mouseover', 'showAbbr(this)'
|
|
79
|
+
# end
|
|
80
|
+
def apply_behaviours(&block)
|
|
81
|
+
mapper = BehaviourMapper.new(self).instance_eval &block
|
|
82
|
+
mapper.to_s
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Make sure American and English spellings both work
|
|
86
|
+
alias_method :apply_behavior, :apply_behaviour
|
|
87
|
+
alias_method :apply_behaviors, :apply_behaviours
|
|
88
|
+
|
|
89
|
+
protected
|
|
90
|
+
# A convenient mapper class for applying
|
|
91
|
+
# multiple behaviours at once.
|
|
92
|
+
class BehaviourMapper
|
|
93
|
+
def initialize(base)
|
|
94
|
+
@base = base
|
|
95
|
+
@output = ''
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def on(*args, &block)
|
|
99
|
+
@output << @base.apply_behaviour(*args, &block)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# delegate all other method calls to the view
|
|
103
|
+
def method_missing(meth, *args)
|
|
104
|
+
@base.send meth, *args
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def to_s
|
|
108
|
+
@output
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Renders a block of javascript behaviours inside +script+ tags
|
|
114
|
+
# directly within the page
|
|
115
|
+
def render_inline_behaviour_block(selector, behaviour, opts)
|
|
116
|
+
script = UJS::BehaviourScript.new
|
|
117
|
+
script.add_rule(selector, behaviour)
|
|
118
|
+
javascript_tag(script.to_s)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Use this to set the default :external option for helper calls.
|
|
122
|
+
# it set external to false if its an xhr request or false if it's a normal request.
|
|
123
|
+
def set_default_external!(options)
|
|
124
|
+
options.reverse_merge!(:external => !current_controller.request.xhr?)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Returns a new JavascriptArgumentProxy for the element the behaviour
|
|
128
|
+
# has been applied to.
|
|
129
|
+
def element_proxy(generator)
|
|
130
|
+
UJS::JavascriptProxies::JavascriptArgumentProxy.new(UJS::JavascriptProxies::ReferencedJavascriptElementProxy, generator, 'this')
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Returns a new JavascriptArgumentProxy for the event the behaviour has
|
|
134
|
+
# been applied to.
|
|
135
|
+
def event_proxy(generator)
|
|
136
|
+
UJS::JavascriptProxies::JavascriptArgumentProxy.new(UJS::JavascriptProxies::JavascriptEventProxy, generator, 'event')
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Returns a new JavasScriptGenerator object
|
|
140
|
+
def new_javascript_generator
|
|
141
|
+
ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(@template) { }
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def current_controller
|
|
145
|
+
@controller
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def normalise_behaviour_string(behaviour)
|
|
149
|
+
behaviour << ';' unless behaviour =~ /;$/
|
|
150
|
+
behaviour
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module ActionView
|
|
2
|
+
module Helpers
|
|
3
|
+
class JavaScriptProxy
|
|
4
|
+
public :method_missing
|
|
5
|
+
|
|
6
|
+
protected
|
|
7
|
+
|
|
8
|
+
def wrap(function, *args)
|
|
9
|
+
args = [function_chain[-1].chomp(';')].concat(args.collect(&:to_json)).join(', ')
|
|
10
|
+
replace_line("#{function.to_s}(#{args});")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def replace_line(new_line)
|
|
14
|
+
function_chain[-1] = new_line
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module UJS
|
|
23
|
+
module JavascriptProxies
|
|
24
|
+
|
|
25
|
+
class ReferencedJavascriptElementProxy < ActionView::Helpers::JavaScriptElementProxy
|
|
26
|
+
|
|
27
|
+
def initialize(generator, var)
|
|
28
|
+
@generator = generator
|
|
29
|
+
@generator << var
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def reload; end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class JavascriptArgumentProxy
|
|
37
|
+
def initialize(proxy, *contructor_args)
|
|
38
|
+
@proxy, @args = proxy, contructor_args
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def method_missing(meth, *args)
|
|
42
|
+
proxy = @proxy.new(*@args)
|
|
43
|
+
proxy.__send__(meth, *args)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class JavascriptEventProxy < ActionView::Helpers::JavaScriptProxy
|
|
48
|
+
def stop
|
|
49
|
+
wrap('Event.stop')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def element
|
|
53
|
+
wrap('Event.element')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
namespace :unobtrusive_javascript do
|
|
2
|
+
|
|
3
|
+
PLUGIN_ROOT = File.dirname(__FILE__) + '/../'
|
|
4
|
+
|
|
5
|
+
desc 'Installs required javascript files to the public/javascripts directory.'
|
|
6
|
+
task :install do
|
|
7
|
+
FileUtils.cp Dir[PLUGIN_ROOT + '/assets/javascripts/*.js'], RAILS_ROOT + '/public/javascripts'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc 'Removes the javascripts for the plugin.'
|
|
11
|
+
task :remove do
|
|
12
|
+
FileUtils.rm %{lowpro.js}.collect { |f| RAILS_ROOT + "/public/javascripts/" + f }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
require 'asset_tag_helper_patches'
|
|
3
|
+
|
|
4
|
+
class JavascriptIncludeTagWithUnobtrusiveOption < Test::Unit::TestCase
|
|
5
|
+
include ActionView::Helpers::AssetTagHelper
|
|
6
|
+
include ActionView::Helpers::TagHelper
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
initialize_test_request
|
|
10
|
+
@output = javascript_include_tag(:unobtrusive).split("\n")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_should_render_script_tag_for_lowpro
|
|
14
|
+
assert @output.include?('<script src="/javascripts/lowpro.js?" type="text/javascript"></script>')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_should_render_script_tag_for_current_requests_behaviour
|
|
18
|
+
assert @output.include?('<script src="/behaviours/controller_stub.js?" type="text/javascript"></script>')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_should_render_index_behaviour_when_request_path_is_just_a_forward_slash
|
|
22
|
+
@controller.request.stubs(:path).returns('/')
|
|
23
|
+
@output = javascript_include_tag(:unobtrusive).split("\n")
|
|
24
|
+
assert @output.include?('<script src="/behaviours/index.js?" type="text/javascript"></script>')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_should_render_index_behaviour_when_request_path_is_blank_as_a_result_of_a_url_prefix
|
|
28
|
+
@controller.request.stubs(:path).returns('')
|
|
29
|
+
@output = javascript_include_tag(:unobtrusive).split("\n")
|
|
30
|
+
assert @output.include?('<script src="/behaviours/index.js?" type="text/javascript"></script>')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
require 'prototype_helper_patches'
|
|
3
|
+
require 'scriptaculous_helper_patches'
|
|
4
|
+
require 'ujs/behaviour_helper'
|
|
5
|
+
|
|
6
|
+
class MakeSortableTest < Test::Unit::TestCase
|
|
7
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
8
|
+
include ActionView::Helpers::ScriptaculousHelper
|
|
9
|
+
include ActionView::Helpers::PrototypeHelper
|
|
10
|
+
include ActionView::Helpers::UrlHelper
|
|
11
|
+
include ActionView::Helpers::TagHelper
|
|
12
|
+
include UJS::BehaviourHelper
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
initialize_test_request
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_should_output_sortable_javascript
|
|
19
|
+
output = make_sortable
|
|
20
|
+
|
|
21
|
+
assert_equal sortable_element_js(javascript_variable('this')), output
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_should_pass_arguments_through
|
|
25
|
+
output = make_sortable :onUpdate => 'function() { alert("updated") }'
|
|
26
|
+
assert_equal 'Sortable.create(this, {onUpdate:function() { alert("updated") }});', output
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class MakeRemoteLinkTest < Test::Unit::TestCase
|
|
31
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
32
|
+
include ActionView::Helpers::ScriptaculousHelper
|
|
33
|
+
include ActionView::Helpers::PrototypeHelper
|
|
34
|
+
include ActionView::Helpers::UrlHelper
|
|
35
|
+
include ActionView::Helpers::TagHelper
|
|
36
|
+
include UJS::BehaviourHelper
|
|
37
|
+
|
|
38
|
+
def setup
|
|
39
|
+
initialize_test_request
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_should_generate_ajax_request
|
|
43
|
+
output = make_remote_link
|
|
44
|
+
assert_match(/new Ajax\.Request/, output)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_should_default_to_element_href
|
|
48
|
+
output = make_remote_link
|
|
49
|
+
assert_match(/\(this\.href/, output)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_should_respond_to_given_options
|
|
53
|
+
output = make_remote_link( :update => 'fartknocker' )
|
|
54
|
+
assert_match(/new Ajax\.Updater\('fartknocker'/, output)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class MakeRemoteFormTest < Test::Unit::TestCase
|
|
59
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
60
|
+
include ActionView::Helpers::ScriptaculousHelper
|
|
61
|
+
include ActionView::Helpers::PrototypeHelper
|
|
62
|
+
include ActionView::Helpers::UrlHelper
|
|
63
|
+
include ActionView::Helpers::TagHelper
|
|
64
|
+
include UJS::BehaviourHelper
|
|
65
|
+
|
|
66
|
+
def setup
|
|
67
|
+
initialize_test_request
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_should_generate_ajax_request
|
|
71
|
+
output = make_remote_form
|
|
72
|
+
assert_match(/new Ajax\.Request/, output)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_should_default_to_form_action
|
|
76
|
+
output = make_remote_form
|
|
77
|
+
assert_match(/\(this\.action/, output)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
class MakeDraggableTest < Test::Unit::TestCase
|
|
82
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
83
|
+
include ActionView::Helpers::ScriptaculousHelper
|
|
84
|
+
include ActionView::Helpers::PrototypeHelper
|
|
85
|
+
include ActionView::Helpers::UrlHelper
|
|
86
|
+
include ActionView::Helpers::TagHelper
|
|
87
|
+
include UJS::BehaviourHelper
|
|
88
|
+
|
|
89
|
+
def setup
|
|
90
|
+
initialize_test_request
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_should_create_draggable_instance
|
|
94
|
+
output = make_draggable
|
|
95
|
+
assert_match(/new Draggable/, output)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_should_pass_this
|
|
99
|
+
output = make_draggable
|
|
100
|
+
assert_match(/\(this/, output)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_should_respond_to_options
|
|
104
|
+
output = make_draggable( :revert => true )
|
|
105
|
+
assert_match(/revert\:true/, output)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class MakeDropRecievingTest < Test::Unit::TestCase
|
|
110
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
111
|
+
include ActionView::Helpers::ScriptaculousHelper
|
|
112
|
+
include ActionView::Helpers::PrototypeHelper
|
|
113
|
+
include ActionView::Helpers::UrlHelper
|
|
114
|
+
include ActionView::Helpers::TagHelper
|
|
115
|
+
include UJS::BehaviourHelper
|
|
116
|
+
|
|
117
|
+
def setup
|
|
118
|
+
initialize_test_request
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_should_add_to_droppables
|
|
122
|
+
output = make_drop_receiving
|
|
123
|
+
assert_match(/Droppables\.add/, output)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_should_pass_this
|
|
127
|
+
output = make_drop_receiving
|
|
128
|
+
assert_match(/\(this/, output)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_should_generate_a_url_from_options
|
|
132
|
+
output = make_drop_receiving( :url => { :action => "bingo" } )
|
|
133
|
+
assert_match(/controller_stub\/bingo/, output)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
class MakeObservedTest < Test::Unit::TestCase
|
|
138
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
139
|
+
include ActionView::Helpers::ScriptaculousHelper
|
|
140
|
+
include ActionView::Helpers::PrototypeHelper
|
|
141
|
+
include ActionView::Helpers::UrlHelper
|
|
142
|
+
include ActionView::Helpers::TagHelper
|
|
143
|
+
include UJS::BehaviourHelper
|
|
144
|
+
|
|
145
|
+
def setup
|
|
146
|
+
initialize_test_request
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def test_should_make_form_observer
|
|
150
|
+
output = make_observed(:form)
|
|
151
|
+
assert_match(/new Form\.EventObserver/, output)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_should_make_field_observer
|
|
155
|
+
output = make_observed(:field)
|
|
156
|
+
assert_match(/new Form\.Element\.EventObserver/, output)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def test_should_pass_this
|
|
160
|
+
output = make_observed(:field)
|
|
161
|
+
assert_match(/\(this/, output)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_should_make_a_timed_observer_if_frequency_passed
|
|
165
|
+
output = make_observed(:form, :frequency => 3 )
|
|
166
|
+
assert_match(/new Form.Observer/, output)
|
|
167
|
+
assert_match(/3,/, output)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_should_generate_a_url_from_options
|
|
171
|
+
output = make_observed(:field, :url => { :action => "bingo" } )
|
|
172
|
+
assert_match(/controller_stub\/bingo/, output)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def test_should_respond_to_options
|
|
176
|
+
output = make_observed(:field, :function => 'alert("boo")' )
|
|
177
|
+
assert_match(/function\(element, value\) \{alert\("boo"\)\}/, output)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|