infopark_rails_connector 6.8.0.beta.200.621.4c8e1b0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/README +59 -0
  2. data/app/assets/images/admin/minus.gif +0 -0
  3. data/app/assets/images/bg80.png +0 -0
  4. data/app/assets/images/edit.png +0 -0
  5. data/app/assets/images/icons/mm_generic.png +0 -0
  6. data/app/assets/images/icons/mm_menu.png +0 -0
  7. data/app/assets/images/ratings/star.gif +0 -0
  8. data/app/assets/images/time_machine/calendar-menuarrow.gif +0 -0
  9. data/app/assets/images/time_machine/calendar_bg.png +0 -0
  10. data/app/assets/images/time_machine/icon.png +0 -0
  11. data/app/assets/images/time_machine/slider_bg.png +0 -0
  12. data/app/assets/images/time_machine/slider_handle.png +0 -0
  13. data/app/assets/images/time_machine/timemachine_bg.png +0 -0
  14. data/app/assets/javascripts/comments.js +29 -0
  15. data/app/assets/javascripts/editmarker.js +240 -0
  16. data/app/assets/javascripts/infopark_rails_connector.js.erb +3 -0
  17. data/app/assets/javascripts/initializer.js +9 -0
  18. data/app/assets/javascripts/ratings.js +26 -0
  19. data/app/assets/javascripts/time_machine/calendar-setup.js +200 -0
  20. data/app/assets/javascripts/time_machine/calendar.js +1806 -0
  21. data/app/assets/javascripts/time_machine/lang/calendar-de.js +127 -0
  22. data/app/assets/javascripts/time_machine/lang/calendar-en.js +127 -0
  23. data/app/assets/javascripts/time_machine/lang/calendar-es.js +129 -0
  24. data/app/assets/javascripts/time_machine/lang/calendar-fr.js +125 -0
  25. data/app/assets/javascripts/time_machine/lang/calendar-it.js +124 -0
  26. data/app/assets/javascripts/time_machine/slider.js +278 -0
  27. data/app/assets/javascripts/time_machine.js +8 -0
  28. data/app/assets/stylesheets/editmarker.css +70 -0
  29. data/app/assets/stylesheets/infopark_rails_connector.css.erb +4 -0
  30. data/app/assets/stylesheets/ratings.css +97 -0
  31. data/app/assets/stylesheets/time_machine/time_machine.css +292 -0
  32. data/app/assets/stylesheets/time_machine.css +6 -0
  33. data/app/controllers/cms_controller.rb +6 -0
  34. data/app/controllers/comments_controller.rb +6 -0
  35. data/app/controllers/crm_form_controller.rb +2 -0
  36. data/app/controllers/pdf_controller.rb +6 -0
  37. data/app/controllers/rails_connector/default_cms_controller.rb +40 -0
  38. data/app/controllers/rails_connector/default_comments_controller.rb +71 -0
  39. data/app/controllers/rails_connector/default_crm_form_controller.rb +167 -0
  40. data/app/controllers/rails_connector/default_pdf_controller.rb +136 -0
  41. data/app/controllers/rails_connector/default_ratings_controller.rb +84 -0
  42. data/app/controllers/rails_connector/default_rss_controller.rb +29 -0
  43. data/app/controllers/rails_connector/default_search_controller.rb +60 -0
  44. data/app/controllers/rails_connector/default_user_controller.rb +267 -0
  45. data/app/controllers/rails_connector/pdf_external_controller.rb +54 -0
  46. data/app/controllers/rails_connector/time_machine_controller.rb +48 -0
  47. data/app/controllers/ratings_controller.rb +6 -0
  48. data/app/controllers/rss_controller.rb +6 -0
  49. data/app/controllers/search_controller.rb +2 -0
  50. data/app/controllers/seo_sitemap_controller.rb +12 -0
  51. data/app/controllers/user_controller.rb +2 -0
  52. data/app/helpers/cms_helper.rb +6 -0
  53. data/app/helpers/cms_routing_helper.rb +6 -0
  54. data/app/helpers/crm_form_helper.rb +3 -0
  55. data/app/helpers/rails_connector/cms_asset_helper.rb +51 -0
  56. data/app/helpers/rails_connector/default_cms_helper.rb +27 -0
  57. data/app/helpers/rails_connector/default_cms_routing_helper.rb +93 -0
  58. data/app/helpers/rails_connector/default_crm_form_helper.rb +58 -0
  59. data/app/helpers/rails_connector/default_ratings_helper.rb +38 -0
  60. data/app/helpers/rails_connector/default_user_helper.rb +90 -0
  61. data/app/helpers/rails_connector/display_helper.rb +117 -0
  62. data/app/helpers/rails_connector/error_messages_helper.rb +23 -0
  63. data/app/helpers/rails_connector/layout_helper.rb +30 -0
  64. data/app/helpers/rails_connector/link_helper.rb +88 -0
  65. data/app/helpers/rails_connector/mandatory_label_helper.rb +10 -0
  66. data/app/helpers/rails_connector/marker_helper.rb +363 -0
  67. data/app/helpers/rails_connector/menu_helper.rb +72 -0
  68. data/app/helpers/rails_connector/micronav_helper.rb +107 -0
  69. data/app/helpers/rails_connector/seo_helper.rb +44 -0
  70. data/app/helpers/rails_connector/table_of_contents_helper.rb +20 -0
  71. data/app/helpers/rails_connector/time_machine_helper.rb +24 -0
  72. data/app/helpers/rails_connector/tracking_helper.rb +32 -0
  73. data/app/helpers/ratings_helper.rb +4 -0
  74. data/app/helpers/user_helper.rb +3 -0
  75. data/app/mailers/confirmation_mailer.rb +13 -0
  76. data/app/models/crm_form.rb +2 -0
  77. data/app/models/named_link.rb +2 -0
  78. data/app/models/obj.rb +9 -0
  79. data/app/models/rails_connector/default_comment.rb +28 -0
  80. data/app/models/rails_connector/default_rating.rb +20 -0
  81. data/app/models/rails_connector/link_list.rb +30 -0
  82. data/app/views/cms/_comments.html.erb +44 -0
  83. data/app/views/cms/_index.html.erb +7 -0
  84. data/app/views/cms/_rating.html.erb +31 -0
  85. data/app/views/cms/index.html.erb +3 -0
  86. data/app/views/comments/_comment.html.erb +28 -0
  87. data/app/views/confirmation_mailer/register_confirmation.erb +5 -0
  88. data/app/views/confirmation_mailer/reset_password.erb +5 -0
  89. data/app/views/crm_form/_flash_messages.html.erb +11 -0
  90. data/app/views/crm_form/_form.html.erb +17 -0
  91. data/app/views/crm_form/confirmation.html.erb +3 -0
  92. data/app/views/crm_form/index.html.erb +5 -0
  93. data/app/views/crm_form/not_logged_in.html.erb +1 -0
  94. data/app/views/errors/403_forbidden.html.erb +3 -0
  95. data/app/views/errors/410_gone.html.erb +7 -0
  96. data/app/views/layouts/rails_connector/time_machine.html.erb +12 -0
  97. data/app/views/pdf/index.html.erb +7 -0
  98. data/app/views/pdf/index.xsl +1240 -0
  99. data/app/views/rails_connector/time_machine/index.html.erb +88 -0
  100. data/app/views/rss/_item.rss.builder +11 -0
  101. data/app/views/rss/index.rss.builder +11 -0
  102. data/app/views/search/_hit.html.erb +12 -0
  103. data/app/views/search/_hits.html.erb +11 -0
  104. data/app/views/search/_mini_panel.html.erb +4 -0
  105. data/app/views/search/_pagination.html.erb +5 -0
  106. data/app/views/search/_panel.html.erb +4 -0
  107. data/app/views/search/search.html.erb +12 -0
  108. data/app/views/seo_sitemap/show.xml.builder +16 -0
  109. data/app/views/user/_flash_messages.html.erb +11 -0
  110. data/app/views/user/edit.html.erb +6 -0
  111. data/app/views/user/edit_password.html.erb +11 -0
  112. data/app/views/user/forgot_password.html.erb +7 -0
  113. data/app/views/user/login.html.erb +15 -0
  114. data/app/views/user/new.html.erb +11 -0
  115. data/app/views/user/profile.html.erb +8 -0
  116. data/app/views/user/register_pending.html.erb +1 -0
  117. data/app/views/user/set_password.html.erb +14 -0
  118. data/config/cms_routes.rb +13 -0
  119. data/config/locales/de.rails_connector.controllers.yml +30 -0
  120. data/config/locales/de.rails_connector.errors.yml +11 -0
  121. data/config/locales/de.rails_connector.helpers.yml +9 -0
  122. data/config/locales/de.rails_connector.lib.yml +6 -0
  123. data/config/locales/de.rails_connector.models.yml +8 -0
  124. data/config/locales/de.rails_connector.views.yml +87 -0
  125. data/config/locales/en.rails_connector.controllers.yml +30 -0
  126. data/config/locales/en.rails_connector.errors.yml +10 -0
  127. data/config/locales/en.rails_connector.helpers.yml +9 -0
  128. data/config/locales/en.rails_connector.lib.yml +6 -0
  129. data/config/locales/en.rails_connector.models.yml +8 -0
  130. data/config/locales/en.rails_connector.views.yml +87 -0
  131. data/config/routes.rb +37 -0
  132. data/lib/generators/rails_connector/comments/comments_generator.rb +21 -0
  133. data/lib/generators/rails_connector/comments/templates/migration.rb +17 -0
  134. data/lib/generators/rails_connector/install/install_generator.rb +38 -0
  135. data/lib/generators/rails_connector/install/templates/initializers/rails_connector.rb +58 -0
  136. data/lib/generators/rails_connector/install/templates/local/configuration.rb +2 -0
  137. data/lib/generators/rails_connector/install/templates/obj_extensions.rb +25 -0
  138. data/lib/generators/rails_connector/ratings/ratings_generator.rb +21 -0
  139. data/lib/generators/rails_connector/ratings/templates/migration.rb +15 -0
  140. data/lib/infopark_rails_connector.rb +31 -0
  141. data/lib/obj_extensions.rb +6 -0
  142. data/lib/rails_connector/authenticable.rb +30 -0
  143. data/lib/rails_connector/cms_accessible.rb +114 -0
  144. data/lib/rails_connector/cms_dispatch_controller.rb +47 -0
  145. data/lib/rails_connector/cms_env.rb +55 -0
  146. data/lib/rails_connector/cms_test_request.rb +23 -0
  147. data/lib/rails_connector/commentable.rb +23 -0
  148. data/lib/rails_connector/configuration/google_analytics.rb +29 -0
  149. data/lib/rails_connector/configuration/pdf_generator.rb +15 -0
  150. data/lib/rails_connector/configuration/rss.rb +46 -0
  151. data/lib/rails_connector/configuration.rb +235 -0
  152. data/lib/rails_connector/core_extensions/time.rb +18 -0
  153. data/lib/rails_connector/core_extensions.rb +1 -0
  154. data/lib/rails_connector/crm.rb +282 -0
  155. data/lib/rails_connector/engine.rb +78 -0
  156. data/lib/rails_connector/fop.rb +18 -0
  157. data/lib/rails_connector/fop_on_rails/document/dom_tree.rb +42 -0
  158. data/lib/rails_connector/fop_on_rails/document/images.rb +34 -0
  159. data/lib/rails_connector/fop_on_rails/document/tables.rb +67 -0
  160. data/lib/rails_connector/fop_on_rails/document.rb +25 -0
  161. data/lib/rails_connector/fop_on_rails.rb +92 -0
  162. data/lib/rails_connector/googlebot_checker.rb +47 -0
  163. data/lib/rails_connector/html_string.rb +19 -0
  164. data/lib/rails_connector/infopark_base.rb +2 -0
  165. data/lib/rails_connector/link_resolvable.rb +9 -0
  166. data/lib/rails_connector/liquid_support/action_marker.rb +69 -0
  167. data/lib/rails_connector/liquid_support/field_value_drop.rb +22 -0
  168. data/lib/rails_connector/liquid_support/general_helper_tag.rb +44 -0
  169. data/lib/rails_connector/liquid_support/link_drop.rb +22 -0
  170. data/lib/rails_connector/liquid_support/liquid_template_handler.rb +162 -0
  171. data/lib/rails_connector/liquid_support/named_object_drop.rb +14 -0
  172. data/lib/rails_connector/liquid_support/obj_drop.rb +43 -0
  173. data/lib/rails_connector/liquid_support/obj_filters.rb +77 -0
  174. data/lib/rails_connector/liquid_support.rb +23 -0
  175. data/lib/rails_connector/markdown_string.rb +19 -0
  176. data/lib/rails_connector/rateable.rb +57 -0
  177. data/lib/rails_connector/seo.rb +52 -0
  178. data/lib/rails_connector/ses.rb +72 -0
  179. data/lib/rails_connector/string_tagging.rb +29 -0
  180. data/lib/rails_connector/syndicateable.rb +11 -0
  181. data/lib/search_request.rb +2 -0
  182. data/lib/tasks/check.rake +25 -0
  183. data/lib/tasks/cms_license_check.rake +17 -0
  184. metadata +489 -0
data/README ADDED
@@ -0,0 +1,59 @@
1
+ = Infopark Rails Connector
2
+
3
+ Infopark Rails Connector allows you to integrate a number of ready-to-run features into your Rails application.
4
+
5
+ == Configuration
6
+ Here is how all available addons would be enabled in the <tt>rails_connector.rb</tt> initializer file of your application:
7
+
8
+ RailsConnector::Configuration.enable(
9
+ :comments,
10
+ :google_analytics,
11
+ :infopark_tracking,
12
+ :omc,
13
+ :pdf_generator,
14
+ :ratings,
15
+ :rss,
16
+ :search,
17
+ :seo_sitemap,
18
+ :time_machine
19
+ )
20
+
21
+ == Layout Helpers
22
+ Some of those functions depend on html or javascript code being included in the application layout.
23
+ For example, Google Analytics does only track pageviews if their javascript snippet is included
24
+ at the bottom of the html body.
25
+
26
+ Rails Connector provides two helpers which manage that kind of layout code,
27
+ switching on or off parts depending on what features are enabled or not:
28
+
29
+ rails_connector_header_tags
30
+
31
+ This helper needs to be called inside the html head tag.
32
+
33
+ rails_connector_after_content_tags
34
+
35
+ That helper is to be put right before the closing body tag.
36
+
37
+ == Generators
38
+ Infopark Rails Connector comes with three generators to help you get up and running quickly:
39
+
40
+ <tt>rails generate rails_connector:install</tt>
41
+
42
+ Adds Time machine assets, a +rails_connector.rb+ initializer and rake tasks specific to the gem to your application.
43
+
44
+ <tt>rails generate rails_connector:comments</tt>
45
+
46
+ Specific to the +comments+ feature. Adds a comments migration to your application.
47
+
48
+ <tt>rails generate rails_connector:ratings</tt>
49
+
50
+ Specific to the +ratings+ feature. Adds a ratings migration to your application as well as an example stylesheet and background image.
51
+
52
+ == Infopark Tracking
53
+
54
+ If you enable the infopark_tracking, please refer to the OMC documentation for further details,
55
+ e.g. Apache logging options.
56
+
57
+ == Seo Sitemap
58
+
59
+ The default implementation for the seo sitemap will feature all files from your CMS in the generated <tt>sitemap.xml</tt>. For a large number of files, this can slow down your server. Please refer to <tt>RailsConnector::SEO::ClassMethods#find_all_for_sitemap</tt> for advise on optimization.
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,29 @@
1
+ var rails_connector = (function(rails_connector, $) {
2
+ rails_connector.comments = {
3
+ initialize: function() {
4
+ var form = $("#comment_form");
5
+ if (form.length > 0) {
6
+ form.find(".submit").click(function() {
7
+ $.post(form.attr("action"), form.serialize(), function(json) {
8
+ form.find("label").removeClass("error");
9
+ if (json.comment) {
10
+ $("#no_comments").hide();
11
+ $("#comment_list_container").show();
12
+ var comment = $(json.comment).hide();
13
+ $("#comment_list_container").append(comment);
14
+ comment.slideDown(750, "swing");
15
+ $("html, body").animate({scrollTop: comment.offset().top}, 1000);
16
+ form[0].reset();
17
+ } else {
18
+ $.each(json.errors, function() {
19
+ $("#comment_form_" + this + "_label").addClass("error");
20
+ });
21
+ }
22
+ }, "json");
23
+ return false;
24
+ });
25
+ }
26
+ }
27
+ };
28
+ return rails_connector;
29
+ }(rails_connector || {}, jQuery));
@@ -0,0 +1,240 @@
1
+ var inline_editing = (function() {
2
+
3
+ /********************************************************************************************/
4
+ /* Global vars */
5
+ var prevElement = false;
6
+ var actionMarkerVisible = true;
7
+ var actionMarkerArray;
8
+ var rememberBackgroundColor;
9
+ var rememberZoom;
10
+ var editMarkerDefinitions;
11
+ var parentWindow = parent;
12
+
13
+ /********************************************************************************************/
14
+ /* Global Functions */
15
+
16
+ var findInfoFromClassName = function(element, regexp) {
17
+ var info;
18
+ var matches = (jQuery(element).attr("class") || "").match(regexp);
19
+ if (matches && matches.length > 1) {
20
+ return matches[1];
21
+ }
22
+ };
23
+
24
+ /****************************************/
25
+ /* Hilfsfunktionen für die Hervorhebung */
26
+
27
+ var stashStyle = function(element)
28
+ {
29
+ var nps_style_stash = {};
30
+ jQuery.each(['backgroundColor', 'zoom', 'color'], function(i, property) {
31
+ nps_style_stash[property] = element.css(property);
32
+ });
33
+ element.data('nps_style_stash', nps_style_stash);
34
+ };
35
+
36
+ var highlight = function(element)
37
+ {
38
+ // setting the zoom works around incomplete redraws on ie6
39
+ element.css({
40
+ backgroundColor: '#ffffaa',
41
+ zoom: 1,
42
+ color: '#000000'
43
+ });
44
+ };
45
+
46
+ var unstashStyle = function(element)
47
+ {
48
+ if (element.data('nps_style_stash')) {
49
+ element.css(element.data('nps_style_stash'));
50
+ element.removeData('nps_style_stash');
51
+ }
52
+ };
53
+
54
+ /********************************************************************************************/
55
+ /* Marker Definitions */
56
+
57
+ /********************************************************************************************/
58
+ /* Marker Permission Checking */
59
+
60
+ var that = {
61
+ setParentWindow: function(new_parent) {
62
+ parentWindow = new_parent;
63
+ },
64
+
65
+ attachMarkerMenu: function(marker_menu_target){
66
+ var id = findInfoFromClassName(marker_menu_target, /nps_marker_menu_target_([0-9]+)/);
67
+ var marker_menu = jQuery("#nps_marker_menu_"+id);
68
+ if (marker_menu.length) {
69
+ var definition = that.findMarkerDefinitionForElement(marker_menu);
70
+ var target_pos = marker_menu_target.offset();
71
+ var parent_pos = marker_menu.offsetParent().offset();
72
+
73
+ marker_menu.css({
74
+ position: 'absolute',
75
+ left: target_pos.left + definition.offset_left - parent_pos.left,
76
+ top: target_pos.top + definition.offset_top - parent_pos.top
77
+ });
78
+
79
+ jQuery(marker_menu).unbind('mouseenter');
80
+ jQuery(marker_menu).mouseenter(function(){
81
+ stashStyle(marker_menu_target);
82
+ highlight(marker_menu_target);
83
+ });
84
+ jQuery(marker_menu).unbind('mouseleave');
85
+ jQuery(marker_menu).mouseleave(function(){
86
+ unstashStyle(marker_menu_target);
87
+ });
88
+ }
89
+ },
90
+
91
+ initMarkerMenus: function() {
92
+ var visible = false;
93
+ jQuery('.nps_marker_menu_button').click(function() {
94
+ if (visible) {
95
+ jQuery(this).next().slideUp(200);
96
+ visible = false;
97
+ } else {
98
+ jQuery(this).next().slideDown(200);
99
+ visible = true;
100
+ }
101
+ return false;
102
+ });
103
+ },
104
+
105
+ attachMarkerMenus: function() {
106
+ jQuery('.nps_marker_menu_target').each(function() {
107
+ that.attachMarkerMenu(jQuery(this));
108
+ });
109
+ },
110
+
111
+ initActionMarker: function() {
112
+ jQuery('.nps_action_marker').each(function(ignore, marker_element) {
113
+ if (!that.hasRequiredPermissionsForMarkerElement(marker_element)) {
114
+ jQuery(marker_element).hide();
115
+ }
116
+ });
117
+ },
118
+
119
+ bindEditMarkerEvents: function(marker, target){
120
+ marker.unbind();
121
+ marker.mouseenter(function() {
122
+ target.find("*").each(function() { stashStyle(jQuery(this)); });
123
+ target.find("*").each(function() { highlight(jQuery(this)); });
124
+ stashStyle(target);
125
+ highlight(target);
126
+ });
127
+ marker.mouseleave(function() {
128
+ target.find("*").each(function() { unstashStyle(jQuery(this)); });
129
+ unstashStyle(target);
130
+ });
131
+ marker.click(function() { return that.startEditing(this); });
132
+ },
133
+
134
+ initEditMarker: function() {
135
+ // add functions and behaviour to all edit marker elements
136
+ jQuery(".nps_edit_marker").each(function(i, marker) {
137
+ marker = jQuery(marker);
138
+ if (that.hasRequiredPermissionsForMarkerElement(marker)) {
139
+ var id = findInfoFromClassName(marker, /nps_marker_id_([0-9]+)/);
140
+ var target = jQuery("#nps_marker_id_" + id);
141
+ if (target.length) {
142
+ var pos = target.offset();
143
+ var parent_pos = marker.offsetParent().offset();
144
+ that.bindEditMarkerEvents(marker, target);
145
+ marker.css({
146
+ left: pos.left - parent_pos.left,
147
+ top: pos.top - parent_pos.top,
148
+ position: "absolute",
149
+ display: "inline"
150
+ });
151
+ } else {
152
+ marker.hide();
153
+ }
154
+ }
155
+ else {
156
+ marker.hide();
157
+ }
158
+ });
159
+ },
160
+
161
+ openEditDialog: function(obj_id, attribute, context_id, size, target) {
162
+ // pass control to Fiona GUI
163
+ parentWindow.openEditDialog(obj_id, attribute, context_id, size, target);
164
+ },
165
+
166
+ initMarker: function() {
167
+ that.initEditMarker();
168
+ that.initActionMarker();
169
+ that.initMarkerMenus();
170
+ that.attachMarkerMenus();
171
+ },
172
+
173
+ init: function() {
174
+ jQuery(document).ready(that.initMarker);
175
+ jQuery(window).load(that.initMarker);
176
+ jQuery(window).resize(that.initMarker);
177
+ },
178
+
179
+ storeMarkerDefinitions: function(definitions) {
180
+ editMarkerDefinitions = editMarkerDefinitions || {};
181
+ jQuery.extend(editMarkerDefinitions, definitions);
182
+ },
183
+
184
+ markerDefinition: function(id) {
185
+ return editMarkerDefinitions[id];
186
+ },
187
+
188
+ findMarkerDefinitionForElement: function(element) {
189
+ return that.markerDefinition(findInfoFromClassName(element, /nps_marker_id_([0-9]+)/));
190
+ },
191
+
192
+ currentUserHasGlobalPermission: function(perm) {
193
+ if (parentWindow.currentUserIsMemberOf) {
194
+ return parentWindow.currentUserHasGlobalPermission(perm);
195
+ }
196
+ else {
197
+ return true;
198
+ }
199
+ },
200
+
201
+ currentUserIsMemberOf: function(groups) {
202
+ if (parentWindow.currentUserIsMemberOf) {
203
+ return parentWindow.currentUserIsMemberOf(groups);
204
+ }
205
+ else {
206
+ return true;
207
+ }
208
+ },
209
+
210
+ hasRequiredPermissionsForMarkerElement: function(element) {
211
+ if (that.currentUserHasGlobalPermission("permissionGlobalRoot")) { return true; }
212
+
213
+ var definition = that.findMarkerDefinitionForElement(element);
214
+ var member_in_group = 0;
215
+ jQuery.each(definition.memberships, function() {
216
+ if (that.currentUserIsMemberOf(this)) {
217
+ member_in_group += 1;
218
+ return true;
219
+ }
220
+ return false;
221
+ });
222
+ return member_in_group === definition.memberships.length;
223
+ },
224
+
225
+ startEditing: function(element) {
226
+ var definition = that.findMarkerDefinitionForElement(element);
227
+
228
+ // pass control to Fiona GUI
229
+ that.openEditDialog(
230
+ definition.obj_id, definition.attribute, definition.context_id,
231
+ definition.size, definition.target
232
+ );
233
+ return false;
234
+ }
235
+
236
+ };
237
+
238
+ return that;
239
+
240
+ }());
@@ -0,0 +1,3 @@
1
+ <% require_asset "comments" if comments = RailsConnector::Configuration.enabled?(:comments) %>
2
+ <% require_asset "ratings" if ratings = RailsConnector::Configuration.enabled?(:ratings) %>
3
+ <% require_asset "initializer" if comments || ratings %>
@@ -0,0 +1,9 @@
1
+ var rails_connector = (function(rails_connector, $) {
2
+ if (rails_connector.hasOwnProperty("comments")) {
3
+ $(document).ready(rails_connector.comments.initialize);
4
+ }
5
+ if (rails_connector.hasOwnProperty("ratings")) {
6
+ $(document).ready(rails_connector.ratings.initialize);
7
+ }
8
+ return rails_connector;
9
+ })(rails_connector || {}, jQuery);
@@ -0,0 +1,26 @@
1
+ var rails_connector = (function(rails_connector, $) {
2
+ rails_connector.ratings = {
3
+ initialize: function() {
4
+ var rating = $("#starRating");
5
+ if (rating.length > 0) {
6
+ var label = $("#starRating_label");
7
+ $.each(rating.find("ul.star-rating li a"), function(i, link_elem) {
8
+ var link = $(link_elem);
9
+ link.click(function() {
10
+ $.post(link.attr("href"), function(data) {
11
+ rating.replaceWith(data);
12
+ }, "html");
13
+ return false;
14
+ });
15
+ link.mouseover(function() {
16
+ label.text(link.attr("data-description"));
17
+ });
18
+ link.mouseout(function() {
19
+ label.text(rating.attr("data-default_description"));
20
+ });
21
+ });
22
+ }
23
+ }
24
+ };
25
+ return rails_connector;
26
+ }(rails_connector || {}, jQuery));
@@ -0,0 +1,200 @@
1
+ /* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/
2
+ * ---------------------------------------------------------------------------
3
+ *
4
+ * The DHTML Calendar
5
+ *
6
+ * Details and latest version at:
7
+ * http://dynarch.com/mishoo/calendar.epl
8
+ *
9
+ * This script is distributed under the GNU Lesser General Public License.
10
+ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
11
+ *
12
+ * This file defines helper functions for setting up the calendar. They are
13
+ * intended to help non-programmers get a working calendar on their site
14
+ * quickly. This script should not be seen as part of the calendar. It just
15
+ * shows you what one can do with the calendar, while in the same time
16
+ * providing a quick and simple method for setting it up. If you need
17
+ * exhaustive customization of the calendar creation process feel free to
18
+ * modify this code to suit your needs (this is recommended and much better
19
+ * than modifying calendar.js itself).
20
+ */
21
+
22
+ // $Id: calendar-setup.js,v 1.25 2005/03/07 09:51:33 mishoo Exp $
23
+
24
+ /**
25
+ * This function "patches" an input field (or other element) to use a calendar
26
+ * widget for date selection.
27
+ *
28
+ * The "params" is a single object that can have the following properties:
29
+ *
30
+ * prop. name | description
31
+ * -------------------------------------------------------------------------------------------------
32
+ * inputField | the ID of an input field to store the date
33
+ * displayArea | the ID of a DIV or other element to show the date
34
+ * button | ID of a button or other element that will trigger the calendar
35
+ * eventName | event that will trigger the calendar, without the "on" prefix (default: "click")
36
+ * ifFormat | date format that will be stored in the input field
37
+ * daFormat | the date format that will be used to display the date in displayArea
38
+ * singleClick | (true/false) wether the calendar is in single click mode or not (default: true)
39
+ * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc.
40
+ * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation
41
+ * range | array with 2 elements. Default: [1900, 2999] -- the range of years available
42
+ * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers
43
+ * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID
44
+ * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)
45
+ * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar
46
+ * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay)
47
+ * onClose | function that gets called when the calendar is closed. [default]
48
+ * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar.
49
+ * date | the date that the calendar will be initially displayed to
50
+ * showsTime | default: false; if true the calendar will include a time selector
51
+ * timeFormat | the time format; can be "12" or "24", default is "12"
52
+ * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close
53
+ * step | configures the step of the years in drop-down boxes; default: 2
54
+ * position | configures the calendar absolute position; default: null
55
+ * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible
56
+ * showOthers | if "true" (but default: "false") it will show days from other months too
57
+ *
58
+ * None of them is required, they all have default values. However, if you
59
+ * pass none of "inputField", "displayArea" or "button" you'll get a warning
60
+ * saying "nothing to setup".
61
+ */
62
+ Calendar.setup = function (params) {
63
+ function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
64
+
65
+ param_default("inputField", null);
66
+ param_default("displayArea", null);
67
+ param_default("button", null);
68
+ param_default("eventName", "click");
69
+ param_default("ifFormat", "%Y/%m/%d");
70
+ param_default("daFormat", "%Y/%m/%d");
71
+ param_default("singleClick", true);
72
+ param_default("disableFunc", null);
73
+ param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined
74
+ param_default("dateText", null);
75
+ param_default("firstDay", null);
76
+ param_default("align", "Br");
77
+ param_default("range", [1900, 2999]);
78
+ param_default("weekNumbers", true);
79
+ param_default("flat", null);
80
+ param_default("flatCallback", null);
81
+ param_default("onSelect", null);
82
+ param_default("onClose", null);
83
+ param_default("onUpdate", null);
84
+ param_default("date", null);
85
+ param_default("showsTime", false);
86
+ param_default("timeFormat", "24");
87
+ param_default("electric", true);
88
+ param_default("step", 2);
89
+ param_default("position", null);
90
+ param_default("cache", false);
91
+ param_default("showOthers", false);
92
+ param_default("multiple", null);
93
+
94
+ var tmp = ["inputField", "displayArea", "button"];
95
+ for (var i in tmp) {
96
+ if (typeof params[tmp[i]] == "string") {
97
+ params[tmp[i]] = document.getElementById(params[tmp[i]]);
98
+ }
99
+ }
100
+ if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
101
+ alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");
102
+ return false;
103
+ }
104
+
105
+ function onSelect(cal) {
106
+ var p = cal.params;
107
+ var update = (cal.dateClicked || p.electric);
108
+ if (update && p.inputField) {
109
+ p.inputField.value = cal.date.print(p.ifFormat);
110
+ if (typeof p.inputField.onchange == "function")
111
+ p.inputField.onchange();
112
+ }
113
+ if (update && p.displayArea)
114
+ p.displayArea.innerHTML = cal.date.print(p.daFormat);
115
+ if (update && typeof p.onUpdate == "function")
116
+ p.onUpdate(cal);
117
+ if (update && p.flat) {
118
+ if (typeof p.flatCallback == "function")
119
+ p.flatCallback(cal);
120
+ }
121
+ if (update && p.singleClick && cal.dateClicked)
122
+ cal.callCloseHandler();
123
+ };
124
+
125
+ if (params.flat != null) {
126
+ if (typeof params.flat == "string")
127
+ params.flat = document.getElementById(params.flat);
128
+ if (!params.flat) {
129
+ alert("Calendar.setup:\n Flat specified but can't find parent.");
130
+ return false;
131
+ }
132
+ var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
133
+ cal.showsOtherMonths = params.showOthers;
134
+ cal.showsTime = params.showsTime;
135
+ cal.time24 = (params.timeFormat == "24");
136
+ cal.params = params;
137
+ cal.weekNumbers = params.weekNumbers;
138
+ cal.setRange(params.range[0], params.range[1]);
139
+ cal.setDateStatusHandler(params.dateStatusFunc);
140
+ cal.getDateText = params.dateText;
141
+ if (params.ifFormat) {
142
+ cal.setDateFormat(params.ifFormat);
143
+ }
144
+ if (params.inputField && typeof params.inputField.value == "string") {
145
+ cal.parseDate(params.inputField.value);
146
+ }
147
+ cal.create(params.flat);
148
+ cal.show();
149
+ return cal;
150
+ }
151
+
152
+ var triggerEl = params.button || params.displayArea || params.inputField;
153
+ triggerEl["on" + params.eventName] = function() {
154
+ var dateEl = params.inputField || params.displayArea;
155
+ var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
156
+ var mustCreate = false;
157
+ var cal = window.calendar;
158
+ if (dateEl)
159
+ params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
160
+ if (!(cal && params.cache)) {
161
+ window.calendar = cal = new Calendar(params.firstDay,
162
+ params.date,
163
+ params.onSelect || onSelect,
164
+ params.onClose || function(cal) { cal.hide(); });
165
+ cal.showsTime = params.showsTime;
166
+ cal.time24 = (params.timeFormat == "24");
167
+ cal.weekNumbers = params.weekNumbers;
168
+ mustCreate = true;
169
+ } else {
170
+ if (params.date)
171
+ cal.setDate(params.date);
172
+ cal.hide();
173
+ }
174
+ if (params.multiple) {
175
+ cal.multiple = {};
176
+ for (var i = params.multiple.length; --i >= 0;) {
177
+ var d = params.multiple[i];
178
+ var ds = d.print("%Y%m%d");
179
+ cal.multiple[ds] = d;
180
+ }
181
+ }
182
+ cal.showsOtherMonths = params.showOthers;
183
+ cal.yearStep = params.step;
184
+ cal.setRange(params.range[0], params.range[1]);
185
+ cal.params = params;
186
+ cal.setDateStatusHandler(params.dateStatusFunc);
187
+ cal.getDateText = params.dateText;
188
+ cal.setDateFormat(dateFmt);
189
+ if (mustCreate)
190
+ cal.create();
191
+ cal.refresh();
192
+ if (!params.position)
193
+ cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
194
+ else
195
+ cal.showAt(params.position[0], params.position[1]);
196
+ return cal;
197
+ };
198
+
199
+ return cal;
200
+ };