inkwell_timelines 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +187 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/images/inkwell_timelines/checkbox-checked.png +0 -0
  5. data/app/assets/images/inkwell_timelines/checkbox-unchecked.png +0 -0
  6. data/app/assets/images/inkwell_timelines/minus.png +0 -0
  7. data/app/assets/images/inkwell_timelines/plus.png +0 -0
  8. data/app/assets/images/inkwell_timelines/radiobutton_no.png +0 -0
  9. data/app/assets/images/inkwell_timelines/radiobutton_yes.png +0 -0
  10. data/app/assets/images/inkwell_timelines/up-down.png +0 -0
  11. data/app/assets/images/inkwell_timelines/wi-comment-hover.png +0 -0
  12. data/app/assets/images/inkwell_timelines/wi-comment.png +0 -0
  13. data/app/assets/images/inkwell_timelines/wi-favorite-active.png +0 -0
  14. data/app/assets/images/inkwell_timelines/wi-favorite-hover.png +0 -0
  15. data/app/assets/images/inkwell_timelines/wi-favorite.png +0 -0
  16. data/app/assets/images/inkwell_timelines/wi-reblog-active.png +0 -0
  17. data/app/assets/images/inkwell_timelines/wi-reblog-hover.png +0 -0
  18. data/app/assets/images/inkwell_timelines/wi-reblog.png +0 -0
  19. data/app/assets/javascripts/inkwell_timelines/index.js.erb +17 -0
  20. data/app/assets/javascripts/inkwell_timelines/inkwell_multi_selector.js +216 -0
  21. data/app/assets/javascripts/inkwell_timelines/inkwell_timeline.js.erb +149 -0
  22. data/app/assets/stylesheets/inkwell_timelines/index.css +30 -0
  23. data/app/assets/stylesheets/inkwell_timelines/multi_selector.css.erb +112 -0
  24. data/app/assets/stylesheets/inkwell_timelines/tab-menu.css +26 -0
  25. data/app/assets/stylesheets/inkwell_timelines/wall_item.css.erb +106 -0
  26. data/app/controllers/inkwell_timelines/application_controller.rb +4 -0
  27. data/app/helpers/inkwell_timelines/application_helper.rb +4 -0
  28. data/app/views/default_partials/_comment.html.erb +21 -0
  29. data/app/views/default_partials/_multi_selector.html.erb +15 -0
  30. data/app/views/default_partials/_multi_selector_items.html.erb +8 -0
  31. data/app/views/default_partials/_post.html.erb +22 -0
  32. data/app/views/default_partials/_tab_menu.html.erb +9 -0
  33. data/app/views/layouts/inkwell_timelines/application.html.erb +14 -0
  34. data/config/routes.rb +2 -0
  35. data/lib/inkwell_timelines.rb +6 -0
  36. data/lib/inkwell_timelines/engine.rb +5 -0
  37. data/lib/inkwell_timelines/version.rb +3 -0
  38. data/lib/main/to_controller.rb +22 -0
  39. data/lib/main/to_helpers.rb +93 -0
  40. data/lib/tasks/inkwell_timelines_tasks.rake +4 -0
  41. data/test/dummy/Rakefile +7 -0
  42. data/test/dummy/app/assets/javascripts/application.js +16 -0
  43. data/test/dummy/app/assets/javascripts/test.js +2 -0
  44. data/test/dummy/app/assets/stylesheets/application.css +14 -0
  45. data/test/dummy/app/assets/stylesheets/test.css +4 -0
  46. data/test/dummy/app/controllers/application_controller.rb +9 -0
  47. data/test/dummy/app/controllers/test_controller.rb +5 -0
  48. data/test/dummy/app/controllers/timeline_controller.rb +11 -0
  49. data/test/dummy/app/helpers/application_helper.rb +2 -0
  50. data/test/dummy/app/helpers/test_helper.rb +2 -0
  51. data/test/dummy/app/models/blogline.rb +3 -0
  52. data/test/dummy/app/models/bloglines_categories.rb +3 -0
  53. data/test/dummy/app/models/category.rb +7 -0
  54. data/test/dummy/app/models/comment.rb +16 -0
  55. data/test/dummy/app/models/favoriteline.rb +3 -0
  56. data/test/dummy/app/models/post.rb +16 -0
  57. data/test/dummy/app/models/user.rb +109 -0
  58. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  59. data/test/dummy/app/views/test/show.html.erb +1 -0
  60. data/test/dummy/app/views/timeline/show.html.erb +1 -0
  61. data/test/dummy/config.ru +4 -0
  62. data/test/dummy/config/application.rb +59 -0
  63. data/test/dummy/config/boot.rb +10 -0
  64. data/test/dummy/config/database.yml +25 -0
  65. data/test/dummy/config/environment.rb +5 -0
  66. data/test/dummy/config/environments/development.rb +37 -0
  67. data/test/dummy/config/environments/production.rb +67 -0
  68. data/test/dummy/config/environments/test.rb +37 -0
  69. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  70. data/test/dummy/config/initializers/inflections.rb +15 -0
  71. data/test/dummy/config/initializers/inkwell_timelines.rb +42 -0
  72. data/test/dummy/config/initializers/mime_types.rb +5 -0
  73. data/test/dummy/config/initializers/secret_token.rb +7 -0
  74. data/test/dummy/config/initializers/session_store.rb +8 -0
  75. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  76. data/test/dummy/config/locales/en.yml +5 -0
  77. data/test/dummy/config/routes.rb +5 -0
  78. data/test/dummy/db/development.sqlite3 +0 -0
  79. data/test/dummy/db/migrate/20130422111954_create_posts.rb +16 -0
  80. data/test/dummy/db/migrate/20130422112200_create_users.rb +10 -0
  81. data/test/dummy/db/migrate/20130422112350_create_comments.rb +16 -0
  82. data/test/dummy/db/migrate/20130422112504_create_bloglines.rb +13 -0
  83. data/test/dummy/db/migrate/20130422112804_create_favoritelines.rb +11 -0
  84. data/test/dummy/db/migrate/20130422112954_create_categories.rb +14 -0
  85. data/test/dummy/db/migrate/20130422113135_create_bloglines_categories.rb +12 -0
  86. data/test/dummy/db/schema.rb +92 -0
  87. data/test/dummy/db/seeds.rb +625 -0
  88. data/test/dummy/db/test.sqlite3 +0 -0
  89. data/test/dummy/log/development.log +104306 -0
  90. data/test/dummy/log/test.log +815 -0
  91. data/test/dummy/public/404.html +26 -0
  92. data/test/dummy/public/422.html +26 -0
  93. data/test/dummy/public/500.html +25 -0
  94. data/test/dummy/public/favicon.ico +0 -0
  95. data/test/dummy/script/rails +6 -0
  96. data/test/dummy/spec/helpers/test_helper_spec.rb +8 -0
  97. data/test/dummy/spec/spec_helper.rb +52 -0
  98. data/test/dummy/spec/watir/autoload_spec.rb +33 -0
  99. data/test/dummy/spec/watir/main_spec.rb +80 -0
  100. data/test/dummy/spec/watir/selector_spec.rb +103 -0
  101. data/test/dummy/spec/watir/tab_menu_spec.rb +36 -0
  102. data/test/dummy/tmp/cache/assets/C56/8F0/sprockets%2F1ad046fb9937420d5382984483fc8401 +0 -0
  103. data/test/dummy/tmp/cache/assets/C63/420/sprockets%2F5daa64d9601a1dd14726112003d08364 +0 -0
  104. data/test/dummy/tmp/cache/assets/C65/790/sprockets%2Feacce513669090988829f66e61634451 +0 -0
  105. data/test/dummy/tmp/cache/assets/C77/DD0/sprockets%2F055f9cd12326c5150492b8c584314fa3 +0 -0
  106. data/test/dummy/tmp/cache/assets/C84/E70/sprockets%2F0530f24346bbf970634035b6e55f886e +0 -0
  107. data/test/dummy/tmp/cache/assets/C85/420/sprockets%2F4734da42d41574596ab532629d0867ec +0 -0
  108. data/test/dummy/tmp/cache/assets/C87/A50/sprockets%2F667342f892546b573c52d11f814ae4f3 +0 -0
  109. data/test/dummy/tmp/cache/assets/CA1/750/sprockets%2Fa8471b3ea18986e7368e8273a95865e8 +0 -0
  110. data/test/dummy/tmp/cache/assets/CAC/DB0/sprockets%2Fc424393ee4e4f66aa4014619048753cb +0 -0
  111. data/test/dummy/tmp/cache/assets/CB2/170/sprockets%2F4479eb189646408ec3130b45153ebf7b +0 -0
  112. data/test/dummy/tmp/cache/assets/CB9/630/sprockets%2Fe5952cc2ece61727517547af4232892e +0 -0
  113. data/test/dummy/tmp/cache/assets/CBD/960/sprockets%2F5a35c922c979e889b0338374a9b3f4b0 +0 -0
  114. data/test/dummy/tmp/cache/assets/CC4/730/sprockets%2F78d0941e0543313bbb0a9f0cf630030d +0 -0
  115. data/test/dummy/tmp/cache/assets/CD1/F50/sprockets%2Fbf2261613d1c32c54a6e38a7673531fa +0 -0
  116. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  117. data/test/dummy/tmp/cache/assets/CD9/1E0/sprockets%2F293460f7bea2aea456231b769212f36f +0 -0
  118. data/test/dummy/tmp/cache/assets/CDC/EC0/sprockets%2Ff9a21d40846491577ab5ebe00de07077 +0 -0
  119. data/test/dummy/tmp/cache/assets/CE6/8D0/sprockets%2F9e823d2b49662dbb4389f2841a23e8c1 +0 -0
  120. data/test/dummy/tmp/cache/assets/CEE/110/sprockets%2Faf0654ff711843e082592cd70cf89a88 +0 -0
  121. data/test/dummy/tmp/cache/assets/CEE/490/sprockets%2F97139dc7ad35759531fc7fa572f0c761 +0 -0
  122. data/test/dummy/tmp/cache/assets/CF9/6F0/sprockets%2F952426cea414c6c2a04cc1216a1f36f5 +0 -0
  123. data/test/dummy/tmp/cache/assets/CFA/DE0/sprockets%2F25bf1e7766a300a4c37195df0cbb1107 +0 -0
  124. data/test/dummy/tmp/cache/assets/CFB/A10/sprockets%2F72699e3ed6f9c3984a718b62932ba66e +0 -0
  125. data/test/dummy/tmp/cache/assets/CFC/640/sprockets%2Fc7f89943cb904e76b2437e59348cc5c9 +0 -0
  126. data/test/dummy/tmp/cache/assets/D13/0C0/sprockets%2F218a6e24bfe5005a8a86798baa2585c8 +0 -0
  127. data/test/dummy/tmp/cache/assets/D13/3B0/sprockets%2F00cf5d507582a705af9694cde93ba186 +0 -0
  128. data/test/dummy/tmp/cache/assets/D13/6A0/sprockets%2F4819aa020210496ecf49ee70b78e8be6 +0 -0
  129. data/test/dummy/tmp/cache/assets/D15/560/sprockets%2Ff0007939832a29a27abe3a9579eed81c +0 -0
  130. data/test/dummy/tmp/cache/assets/D16/860/sprockets%2Fb45890d98668c132fee5cae4b15320d9 +0 -0
  131. data/test/dummy/tmp/cache/assets/D1A/150/sprockets%2F49ad9f8620b7712e6f2d4fc2e354e545 +0 -0
  132. data/test/dummy/tmp/cache/assets/D20/4F0/sprockets%2Fb15d3257899ad89007d1348eb9a5f5fe +0 -0
  133. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  134. data/test/dummy/tmp/cache/assets/D36/810/sprockets%2Fb84416b6a4f5a39b0bc23ab72ad94279 +0 -0
  135. data/test/dummy/tmp/cache/assets/D39/390/sprockets%2F3c87a321da4296312f18efc704cd6d2f +0 -0
  136. data/test/dummy/tmp/cache/assets/D3A/260/sprockets%2F69551919ec05c0eb11e55bb59dc143ec +0 -0
  137. data/test/dummy/tmp/cache/assets/D41/350/sprockets%2F2111b16bc0081c14b803cfd350eb4baa +0 -0
  138. data/test/dummy/tmp/cache/assets/D43/D20/sprockets%2Fbcbf2f35591e507593ec6116eac6e924 +0 -0
  139. data/test/dummy/tmp/cache/assets/D48/3C0/sprockets%2F41be77d9f6b62168967ca14ccc6b51d6 +0 -0
  140. data/test/dummy/tmp/cache/assets/D4D/7C0/sprockets%2F5f4f24c2540cffe8b3c5e835756c35f7 +0 -0
  141. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  142. data/test/dummy/tmp/cache/assets/D51/6A0/sprockets%2F80b05d6f75c78bdb1e450c898e47d97a +0 -0
  143. data/test/dummy/tmp/cache/assets/D56/4C0/sprockets%2F66059379b6c72ffe570f4ae394a89eda +0 -0
  144. data/test/dummy/tmp/cache/assets/D56/D30/sprockets%2Fe910c76d93fd4da6984d82e469f62f0c +0 -0
  145. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  146. data/test/dummy/tmp/cache/assets/D65/600/sprockets%2Fdaa0e3c217673cb0ebb89d97438a1b80 +0 -0
  147. data/test/dummy/tmp/cache/assets/D66/6C0/sprockets%2Fa06355ade2a095c01afd8c6f5e67019d +0 -0
  148. data/test/dummy/tmp/cache/assets/D6A/E70/sprockets%2Fc9f71142e4d4a807cb6be80451f74adb +0 -0
  149. data/test/dummy/tmp/cache/assets/D76/E50/sprockets%2F6289e3eb865565eab3fdfb4fae810702 +0 -0
  150. data/test/dummy/tmp/cache/assets/D86/6A0/sprockets%2Fac97d7e4e37faa819a833c7c52c9e687 +0 -0
  151. data/test/dummy/tmp/cache/assets/D91/C00/sprockets%2Fb1cf6c48f161db0a058d10817ddd5e5b +0 -0
  152. data/test/dummy/tmp/cache/assets/D9C/C90/sprockets%2Fa903431f8703bbaafcae42e4f4692ff8 +0 -0
  153. data/test/dummy/tmp/cache/assets/DA0/C60/sprockets%2F90d8e40e6baa19d6556ab9c6ac891a2e +0 -0
  154. data/test/dummy/tmp/cache/assets/DA1/F90/sprockets%2F3bd196480867f8e3c74b10dbcbbe1f9b +0 -0
  155. data/test/dummy/tmp/cache/assets/DA7/EE0/sprockets%2Ffced4a1e089dc82bf773475da4e53c46 +0 -0
  156. data/test/dummy/tmp/cache/assets/DA9/4D0/sprockets%2F3d68828b990fbfa9cdf51daa76c242d5 +0 -0
  157. data/test/dummy/tmp/cache/assets/DB5/4C0/sprockets%2F5e815df4827231fe949b2f9bffd0d9de +0 -0
  158. data/test/dummy/tmp/cache/assets/DB6/910/sprockets%2F3c19b64141a5ceeccf3a3baf4c452a06 +0 -0
  159. data/test/dummy/tmp/cache/assets/DC4/8D0/sprockets%2Fd8daccd2ece841a83a2a584c50e352d5 +0 -0
  160. data/test/dummy/tmp/cache/assets/DCC/6A0/sprockets%2Fa92fb625cc83fe72fc4115e2fb2ed61e +0 -0
  161. data/test/dummy/tmp/cache/assets/DCC/940/sprockets%2Fe7f0ee8bf122b8b72b8e3c7cd13a5d81 +0 -0
  162. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  163. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  164. data/test/dummy/tmp/cache/assets/E08/E50/sprockets%2F22c72aded517c5cdf8cce6f4b58c76b8 +0 -0
  165. data/test/dummy/tmp/cache/assets/E24/740/sprockets%2F2ecee9c0ae221af87da9c5d034c8dd0c +0 -0
  166. data/test/dummy/tmp/cache/assets/E2D/160/sprockets%2Fdb479da69eeed6322f3b8dab3bf91bb0 +0 -0
  167. data/test/dummy/tmp/cache/assets/E4C/810/sprockets%2Fdaf244418a8cfda1aca3e32dbdf17fd2 +0 -0
  168. data/test/dummy/tmp/pids/server.pid +1 -0
  169. data/test/screen/main.png +0 -0
  170. data/test/test_helper.rb +15 -0
  171. metadata +413 -0
@@ -0,0 +1,15 @@
1
+ <div class="inkwell_multi_selector" id="inkwell_<%= options[:id]%>">
2
+ <span class="name"> <%= options[:name] %>: </span>
3
+ <div class="action">
4
+ <span class="action_name">Change</span>
5
+ <span class="action_icon"></span>
6
+ <div class="dropdown" style="display: none">
7
+ <%= render :partial => 'default_partials/multi_selector_items', :locals => {:records => records, :id => nil, :selector_id => options[:id]} %>
8
+ </div>
9
+ </div>
10
+ <div class="current_state">
11
+ <% records.select {|record| record.parent_category_id == nil }.each do |record| %>
12
+ <span id="<%= "inkwell_#{options[:id]}_state_#{record.id}" %>"><%= record.name %></span>
13
+ <% end %>
14
+ </div>
15
+ </div>
@@ -0,0 +1,8 @@
1
+ <% records.select {|record| record.parent_category_id == id }.each do |current_record| %>
2
+ <div<% if id %> class="nested" style="display: none" <% end %>>
3
+ <% child_records = records.select {|record| record.parent_category_id == current_record.id} %>
4
+ <span class="nesting <% unless child_records.empty? %>collapsed<% end %>"></span>
5
+ <span class="checkbox_with_label checked" id="<%= "inkwell_#{selector_id}_checkbox_#{current_record.id}" %>"><%= current_record.name %></span>
6
+ <%= render :partial => 'default_partials/multi_selector_items', :locals => {:records => records, :id => current_record.id, :selector_id => selector_id} unless child_records.empty? %>
7
+ </div>
8
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <div class="wall_item" id="<%= timeline %>_<%= record.item_id %>">
2
+ <a href="<%= user_path record.user.id %>" class="avatar_link"><img class="avatar" src="<%= record.user.avatar %>" alt="<%= record.user.nick %>"></a>
3
+
4
+ <div class="item_container">
5
+ <div class="item_description">
6
+ <span class="name"> <%= record.user.name %>:</span>
7
+ <span class="title"> <%= record.title %></span>
8
+ </div>
9
+ <% if record.preview_image %><a class="item_img_link"><img src="<%= record.preview_image %>" class="item_img"></a><% end%>
10
+
11
+ <p><%= truncate record.body, :length => 500 %></p>
12
+
13
+ <div class="clear item_menu">
14
+ <span class="favorite_action action<% if record.is_favorited %> active<% end%>"><%= record.favorite_count %></span>
15
+ <span class="reblog_action action<% if record.is_reblogged %> active<% end%>"><%= record.reblog_count %></span>
16
+ <span class="comment_action action"><%= record.comment_count %></span>
17
+ <span class="date" style="display: none;"><%= record.created_at.utc.to_i * 1000 %></span>
18
+ <div class="clear"></div>
19
+ </div>
20
+
21
+ </div>
22
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="tab-menu">
2
+ <% options.each do |option| %>
3
+ <span class="timeline_<%= option[:class] %>
4
+ <% if option[:active] %> active
5
+ <% end %>">
6
+ <%=option[:name]%>
7
+ </span>
8
+ <% end %>
9
+ </div>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>InkwellTimelines</title>
5
+ <%= stylesheet_link_tag "inkwell_timelines/application", :media => "all" %>
6
+ <%= javascript_include_tag "inkwell_timelines/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ InkwellTimelines::Engine.routes.draw do
2
+ end
@@ -0,0 +1,6 @@
1
+ require "inkwell_timelines/engine"
2
+ require "main/to_helpers"
3
+ require "main/to_controller"
4
+
5
+ module InkwellTimelines
6
+ end
@@ -0,0 +1,5 @@
1
+ module InkwellTimelines
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace InkwellTimelines
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module InkwellTimelines
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,22 @@
1
+ module InkwellTimelines
2
+ module MethodsForControllers
3
+ def inkwell_timelines_get_params(request_body, options = {})
4
+ request_params = ActiveSupport::JSON.decode(request_body).symbolize_keys!
5
+ options.merge! request_params
6
+ options.merge! ActiveSupport::JSON.decode(options[:transferred_params]).symbolize_keys!
7
+ options.delete :transferred_params
8
+
9
+ if options[:selectors_values]
10
+ options[:selectors_values].each do |selector_values|
11
+ selector_values.symbolize_keys!
12
+ options[selector_values[:name].to_sym] = selector_values[:data]
13
+ end
14
+ options.delete :selectors_values
15
+ end
16
+
17
+ options
18
+ end
19
+ end
20
+ end
21
+
22
+ ActionController::Base.send :include, InkwellTimelines::MethodsForControllers
@@ -0,0 +1,93 @@
1
+ module InkwellTimelines
2
+ module Helpers
3
+ def inkwell_timelines_tag(block_id, options = {})
4
+ partials_dir = InkwellTimelines::Engine::config.respond_to?('partials_dir') ? InkwellTimelines::Engine::config.partials_dir : 'default_partials'
5
+
6
+ block_configs = InkwellTimelines::Engine::config.timeline_blocks
7
+ block_index = block_configs.index{|block| block[:id] == block_id}
8
+ current_block = block_configs[block_index]
9
+
10
+ tab_menu_params = []
11
+ transferred_params = []
12
+ active_timeline = nil
13
+ timeline_configs = current_block[:timelines]
14
+ timeline_configs.each do |config|
15
+ tab_menu_params << {
16
+ :name => config[:name],
17
+ :class => config[:id],
18
+ :active => config[:active]
19
+ }
20
+ active_timeline = config if config[:active]
21
+
22
+ if config[:transferred_params] and !config[:transferred_params].empty?
23
+ passed_options = {:name => config[:id], :value => {}}
24
+ config[:transferred_params].each {|param| passed_options[:value][param] = options[param]}
25
+ transferred_params << passed_options
26
+ end
27
+ end
28
+
29
+ tab_menu = render :partial => "#{partials_dir}/tab_menu", :locals => {:options => tab_menu_params}
30
+
31
+ multi_selectors = ActionView::OutputBuffer.new
32
+ if active_timeline[:multi_selectors] and !active_timeline[:multi_selectors].empty?
33
+ active_timeline[:multi_selectors].each do |selector|
34
+ records = selector[:data_get].call(options)
35
+ multi_selectors += render :partial => "#{partials_dir}/multi_selector", :locals => {:records => records, :options => selector}
36
+ end
37
+ end
38
+
39
+ data = active_timeline[:data_get].call(options)
40
+ wall_items = ActionView::OutputBuffer.new
41
+ puts
42
+ data.each do |record|
43
+ wall_item = render :partial => "#{partials_dir}/#{record.class.to_s.downcase}", :locals => {:record => record, :timeline => active_timeline[:id]}
44
+ wall_items += wall_item
45
+ end
46
+
47
+ transferred_params_fields = ActionView::OutputBuffer.new
48
+ unless transferred_params.empty?
49
+ transferred_params.each do |params|
50
+ transferred_params_fields += tag :input, :type => :hidden, :class => "transferred_params #{params[:name]}", :value => ActiveSupport::JSON.encode(params[:value])
51
+ end
52
+ end
53
+
54
+ content_tag :div, tab_menu + multi_selectors + (transferred_params_fields unless transferred_params.empty?) + wall_items, :class => 'inkwell_timelines', :id => block_id
55
+ end
56
+
57
+ def inkwell_timelines_autoload_tag(options = {})
58
+ partials_dir = InkwellTimelines::Engine::config.respond_to?('partials_dir') ? InkwellTimelines::Engine::config.partials_dir : 'default_partials'
59
+
60
+ block_configs = InkwellTimelines::Engine::config.timeline_blocks
61
+ block_index = block_configs.index { |block| block[:id] == options[:block_name] }
62
+ raise "block #{options[:block_name]} is not found" unless block_index
63
+ current_block = block_configs[block_index]
64
+
65
+ block_timelines = current_block[:timelines]
66
+ active_timeline = nil
67
+ block_timelines.each { |timeline| active_timeline = timeline if timeline[:id] == options[:timeline] }
68
+
69
+ multi_selectors = ActionView::OutputBuffer.new
70
+ puts(options[:include_selectors])
71
+ puts(!options[:last_item_id] || !options[:include_selectors])
72
+ if options[:include_selectors]
73
+ if active_timeline[:multi_selectors] and !active_timeline[:multi_selectors].empty?
74
+ active_timeline[:multi_selectors].each do |selector|
75
+ records = selector[:data_get].call(options)
76
+ multi_selectors += render :partial => "#{partials_dir}/multi_selector", :locals => {:records => records, :options => selector}
77
+ end
78
+ end
79
+ end
80
+
81
+ data = active_timeline[:data_get].call options
82
+ wall_items = ActionView::OutputBuffer.new
83
+ data.each do |record|
84
+ wall_item = render :partial => "#{partials_dir}/#{record.class.to_s.downcase}", :locals => {:record => record, :timeline => active_timeline[:id]}
85
+ wall_items += wall_item
86
+ end
87
+ multi_selectors + wall_items
88
+ end
89
+
90
+ end
91
+ end
92
+
93
+ ActionView::Base.send :include, InkwellTimelines::Helpers
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :inkwell_timelines do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,16 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
16
+ //= require inkwell_timelines
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,14 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ *= require inkwell_timelines
14
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,9 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ helper_method :current_user
5
+
6
+ def current_user
7
+ User.first
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class TestController < ApplicationController
2
+ def show
3
+
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ class TimelineController < ApplicationController
2
+ def show
3
+ @options = inkwell_timelines_get_params(request.body, :for_user => current_user)
4
+
5
+ #Here you can check came from js options. For exapmle:
6
+ user = User.find @options[:user_id]
7
+ raise "current user has no permissions to see #{user.nick} timeline" unless current_user.can_see_timeline user
8
+
9
+ render :layout => false
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module TestHelper
2
+ end
@@ -0,0 +1,3 @@
1
+ class Blogline < ActiveRecord::Base
2
+ # attr_accessible :title, :body
3
+ end
@@ -0,0 +1,3 @@
1
+ class BloglinesCategories < ActiveRecord::Base
2
+ # attr_accessible :title, :body
3
+ end
@@ -0,0 +1,7 @@
1
+ class Category < ActiveRecord::Base
2
+ # attr_accessible :title, :body
3
+ attr_accessor :has_children
4
+ def child_record_ids
5
+ ActiveSupport::JSON.decode self.child_ids
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ class Comment < ActiveRecord::Base
2
+ attr_accessor :item_id, :is_reblogged, :is_favorited
3
+ belongs_to :user
4
+
5
+ def reblog_count
6
+ self.id
7
+ end
8
+
9
+ def favorite_count
10
+ self.id
11
+ end
12
+
13
+ def comment_count
14
+ self.id
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ class Favoriteline < ActiveRecord::Base
2
+ # attr_accessible :title, :body
3
+ end
@@ -0,0 +1,16 @@
1
+ class Post < ActiveRecord::Base
2
+ attr_accessor :item_id, :is_reblogged, :is_favorited
3
+ belongs_to :user
4
+
5
+ def reblog_count
6
+ self.id
7
+ end
8
+
9
+ def favorite_count
10
+ self.id
11
+ end
12
+
13
+ def comment_count
14
+ self.id
15
+ end
16
+ end
@@ -0,0 +1,109 @@
1
+ class User < ActiveRecord::Base
2
+ #attr_accessible :title, :body
3
+ has_many :posts
4
+ has_many :comments
5
+
6
+ def blogline(options = {})
7
+ last_shown_obj_id = options[:last_item_id]
8
+ limit = options[:limit] || 10
9
+ for_user = options[:for_user]
10
+ category = options[:category]
11
+
12
+ if category
13
+ categories = Category.find category
14
+ category_ids = []
15
+ categories.each do |category|
16
+ category_ids = category_ids | ActiveSupport::JSON.decode(category.child_ids) | [category.id]
17
+ end
18
+
19
+ if last_shown_obj_id
20
+ bloglines_categories = BloglinesCategories.where(:category_id => category_ids).where("blog_item_created_at < ?", Blogline.find(last_shown_obj_id).created_at).order("blog_item_created_at DESC").limit(limit)
21
+ else
22
+ bloglines_categories = BloglinesCategories.where(:category_id => category_ids).order("blog_item_created_at DESC").limit(limit)
23
+ end
24
+
25
+ blog_items_ids = []
26
+ bloglines_categories.each do |record|
27
+ blog_items_ids << record.blog_item_id
28
+ end
29
+ blog_items = Blogline.where(:id => blog_items_ids, :owner_id => self.id, :owner_type => 'u').order("created_at DESC")
30
+ else
31
+ if last_shown_obj_id
32
+ blog_items = Blogline.where(:owner_id => self.id, :owner_type => 'u').where("created_at < ?", Blogline.find(last_shown_obj_id).created_at).order("created_at DESC").limit(limit)
33
+ else
34
+ blog_items = Blogline.where(:owner_id => self.id, :owner_type => 'u').order("created_at DESC").limit(limit)
35
+ end
36
+ end
37
+
38
+ result = []
39
+ blog_items.each do |item|
40
+ if item.item_type == 'c'
41
+ blog_obj = Comment.find item.item_id
42
+ else
43
+ blog_obj = Post.find item.item_id
44
+ end
45
+
46
+ blog_obj.item_id = item.id
47
+
48
+ if for_user
49
+ blog_obj.is_reblogged = for_user.reblog? blog_obj
50
+ blog_obj.is_favorited = for_user.favorite? blog_obj
51
+ end
52
+
53
+ result << blog_obj
54
+ end
55
+ result
56
+ end
57
+
58
+ def favoriteline(options = {})
59
+ last_shown_obj_id = options[:last_item_id]
60
+ limit = options[:limit] || 10
61
+ for_user = options[:for_user]
62
+
63
+ if last_shown_obj_id
64
+ favorite_items = Favoriteline.where(:owner_id => self.id, :owner_type => 'u').where("created_at < ?", Favoriteline.find(last_shown_obj_id).created_at).order("created_at DESC").limit(limit)
65
+ else
66
+ favorite_items = Favoriteline.where(:owner_id => self.id, :owner_type => 'u').order("created_at DESC").limit(limit)
67
+ end
68
+
69
+ result = []
70
+ favorite_items.each do |item|
71
+ if item.item_type == 'c'
72
+ favorite_obj = Comment.find item.item_id
73
+ else
74
+ favorite_obj = Post.find item.item_id
75
+ end
76
+
77
+ favorite_obj.item_id = item.id
78
+
79
+ if for_user
80
+ favorite_obj.is_reblogged = for_user.reblog? favorite_obj
81
+ favorite_obj.is_favorited = for_user.favorite? favorite_obj
82
+ end
83
+
84
+ result << favorite_obj
85
+ end
86
+ result
87
+ end
88
+
89
+ def reblog?(obj)
90
+ if obj.id % 2 == 1
91
+ true
92
+ else
93
+ false
94
+ end
95
+
96
+ end
97
+
98
+ def favorite?(obj)
99
+ if obj.id % 2 == 1
100
+ true
101
+ else
102
+ false
103
+ end
104
+ end
105
+
106
+ def can_see_timeline(other_user)
107
+ true
108
+ end
109
+ end