whowish_word 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/.gitignore +6 -0
  2. data/.loadpath +5 -0
  3. data/.project +17 -0
  4. data/Gemfile +3 -0
  5. data/HOW_TO_BUILD_WHOWISH_HOOK.md +10 -0
  6. data/ISSUE.md +93 -0
  7. data/README.md +72 -0
  8. data/config.ru +4 -0
  9. data/lib/legacy/whowish_word/config.rb +1 -0
  10. data/lib/legacy/whowish_word/init.rb +4 -0
  11. data/lib/legacy/whowish_word/lib/app/controllers/whowish_word_controller.rb +115 -0
  12. data/lib/legacy/whowish_word/lib/app/controllers/whowish_word_email_controller.rb +66 -0
  13. data/lib/legacy/whowish_word/lib/app/controllers/whowish_word_facebook_controller.rb +62 -0
  14. data/lib/legacy/whowish_word/lib/app/models/mongodb/whowish_word.rb +12 -0
  15. data/lib/legacy/whowish_word/lib/app/models/mongodb/whowish_word_email.rb +10 -0
  16. data/lib/legacy/whowish_word/lib/app/models/mongodb/whowish_word_facebook.rb +28 -0
  17. data/lib/legacy/whowish_word/lib/app/models/mysql/whowish_word.rb +5 -0
  18. data/lib/legacy/whowish_word/lib/app/models/mysql/whowish_word_email.rb +5 -0
  19. data/lib/legacy/whowish_word/lib/app/models/mysql/whowish_word_facebook.rb +18 -0
  20. data/lib/legacy/whowish_word/lib/app/views/layouts/whowish_word_blank.html.erb +94 -0
  21. data/lib/legacy/whowish_word/lib/app/views/whowish_word/_javascript.html.erb +82 -0
  22. data/lib/legacy/whowish_word/lib/app/views/whowish_word/_row.html.erb +50 -0
  23. data/lib/legacy/whowish_word/lib/app/views/whowish_word/index.html.erb +219 -0
  24. data/lib/legacy/whowish_word/lib/app/views/whowish_word/login.html.erb +5 -0
  25. data/lib/legacy/whowish_word/lib/app/views/whowish_word_email/_row.html.erb +42 -0
  26. data/lib/legacy/whowish_word/lib/app/views/whowish_word_email/index.html.erb +99 -0
  27. data/lib/legacy/whowish_word/lib/app/views/whowish_word_facebook/_row.html.erb +48 -0
  28. data/lib/legacy/whowish_word/lib/app/views/whowish_word_facebook/index.html.erb +100 -0
  29. data/lib/legacy/whowish_word/lib/db_migration.rb +2 -0
  30. data/lib/legacy/whowish_word/lib/db_migration/mongodb.rb +0 -0
  31. data/lib/legacy/whowish_word/lib/db_migration/mysql.rb +60 -0
  32. data/lib/legacy/whowish_word/lib/hook.rb +186 -0
  33. data/lib/whowish_word.rb +1 -0
  34. data/lib/whowish_word/action_controller/base.rb +35 -0
  35. data/lib/whowish_word/action_mailer/base.rb +12 -0
  36. data/lib/whowish_word/action_view/base.rb +65 -0
  37. data/lib/whowish_word/action_view/template.rb +22 -0
  38. data/lib/whowish_word/authentication.rb +14 -0
  39. data/lib/whowish_word/constant.rb +9 -0
  40. data/lib/whowish_word/db_migration/active_record/whowish_word_html.rb +15 -0
  41. data/lib/whowish_word/initializer.rb +55 -0
  42. data/lib/whowish_word/rails/app/controllers/whowish_word_controller.rb +71 -0
  43. data/lib/whowish_word/rails/app/models/active_record/whowish_word_html.rb +4 -0
  44. data/lib/whowish_word/rails/app/models/mongoid/whowish_word_html.rb +10 -0
  45. data/lib/whowish_word/rails/public/javascripts/0_class.js +64 -0
  46. data/lib/whowish_word/rails/public/javascripts/0_jquery-1.6.4-whowish_word.js +9046 -0
  47. data/lib/whowish_word/rails/public/javascripts/1_csrf_and_authenticity_token_hook.js +9 -0
  48. data/lib/whowish_word/rails/public/javascripts/1_jquery.escape.js +23 -0
  49. data/lib/whowish_word/rails/public/javascripts/1_jquery.loading_button.js +66 -0
  50. data/lib/whowish_word/rails/public/javascripts/1_jquery.sizes.min.js +8 -0
  51. data/lib/whowish_word/rails/public/javascripts/2_whowish_word_variables.js +64 -0
  52. data/lib/whowish_word/rails/public/javascripts/3_whowish_word_dialog.js +136 -0
  53. data/lib/whowish_word/rails/public/javascripts/3_whowish_word_helper.js +94 -0
  54. data/lib/whowish_word/rails/public/javascripts/4_whowish_word.js +43 -0
  55. data/lib/whowish_word/rails/public/javascripts/4_whowish_word_content_handler.js +15 -0
  56. data/lib/whowish_word/rails/public/javascripts/4_whowish_word_creator.js +62 -0
  57. data/lib/whowish_word/rails/public/javascripts/5_whowish_word_common_creator.js +49 -0
  58. data/lib/whowish_word/rails/public/javascripts/6_whowish_word_element_creator.js +72 -0
  59. data/lib/whowish_word/rails/public/javascripts/6_whowish_word_html_creator.js +19 -0
  60. data/lib/whowish_word/rails/public/javascripts/6_whowish_word_select_creator.js +11 -0
  61. data/lib/whowish_word/rails/public/javascripts/6_whowish_word_text_creator.js +20 -0
  62. data/lib/whowish_word/rails/public/javascripts/6_whowish_word_value_creator.js +20 -0
  63. data/lib/whowish_word/rails/public/javascripts/7_whowish_word_attribute_handler.js +17 -0
  64. data/lib/whowish_word/rails/public/javascripts/7_whowish_word_html_handler.js +15 -0
  65. data/lib/whowish_word/rails/public/javascripts/7_whowish_word_text_handler.js +15 -0
  66. data/lib/whowish_word/rails/public/javascripts/7_whowish_word_value_handler.js +19 -0
  67. data/lib/whowish_word/rails/public/stylesheets/whowish_word.css +197 -0
  68. data/lib/whowish_word/whowish_word.rb +39 -0
  69. data/lib/whowish_word/word_for.rb +97 -0
  70. data/rails/Gemfile +18 -0
  71. data/rails/Gemfile.lock +130 -0
  72. data/rails/Rakefile +7 -0
  73. data/rails/app/assets/javascripts/integration.js +2 -0
  74. data/rails/app/assets/javascripts/test_javascript.js +2 -0
  75. data/rails/app/assets/javascripts/test_word_for.js +2 -0
  76. data/rails/app/assets/stylesheets/integration.css +4 -0
  77. data/rails/app/assets/stylesheets/test_javascript.css +4 -0
  78. data/rails/app/assets/stylesheets/test_word_for.css +4 -0
  79. data/rails/app/controllers/application_controller.rb +14 -0
  80. data/rails/app/controllers/home_controller.rb +9 -0
  81. data/rails/app/controllers/integration_controller.rb +5 -0
  82. data/rails/app/controllers/test_javascript_controller.rb +11 -0
  83. data/rails/app/controllers/test_word_for_controller.rb +5 -0
  84. data/rails/app/helpers/integration_helper.rb +2 -0
  85. data/rails/app/helpers/test_javascript_helper.rb +2 -0
  86. data/rails/app/helpers/test_word_for_helper.rb +2 -0
  87. data/rails/app/views/home/index.html.erb +95 -0
  88. data/rails/app/views/home/static_edit.html.erb +50 -0
  89. data/rails/app/views/home/static_edit_select.html.erb +9 -0
  90. data/rails/app/views/integration/attr.html.erb +1 -0
  91. data/rails/app/views/integration/index.html.erb +1 -0
  92. data/rails/app/views/integration/select.html.erb +3 -0
  93. data/rails/app/views/integration/value.html.erb +1 -0
  94. data/rails/app/views/layouts/integration.html.erb +14 -0
  95. data/rails/app/views/layouts/main.html.erb +14 -0
  96. data/rails/app/views/layouts/nested_test_word_for.html.erb +14 -0
  97. data/rails/app/views/layouts/test_javascript.html.erb +13 -0
  98. data/rails/app/views/layouts/test_word_for.html.erb +22 -0
  99. data/rails/app/views/test_javascript/change_value.html.erb +32 -0
  100. data/rails/app/views/test_javascript/index.html.erb +78 -0
  101. data/rails/app/views/test_word_for/_partial.html.erb +5 -0
  102. data/rails/app/views/test_word_for/index.html.erb +7 -0
  103. data/rails/config.ru +4 -0
  104. data/rails/config/application.rb +30 -0
  105. data/rails/config/boot.rb +9 -0
  106. data/rails/config/database.yml +25 -0
  107. data/rails/config/environment.rb +16 -0
  108. data/rails/config/initializers/whowish_word.rb +5 -0
  109. data/rails/config/mongoid.rb +6 -0
  110. data/rails/config/mongoid.yml +14 -0
  111. data/rails/config/routes.rb +7 -0
  112. data/rails/log/.gitignore +2 -0
  113. data/rails/mongo.bat +5 -0
  114. data/rails/public/jasmine/MIT.LICENSE +20 -0
  115. data/rails/public/jasmine/jasmine-html.js +190 -0
  116. data/rails/public/jasmine/jasmine.css +166 -0
  117. data/rails/public/jasmine/jasmine.js +2476 -0
  118. data/rails/public/jasmine/jasmine_favicon.png +0 -0
  119. data/rails/public/javascripts/jquery-1.6.4.js +9046 -0
  120. data/rails/public/sinonjs/sinonjs.js +2821 -0
  121. data/rails/public/stylesheets/main.css +22 -0
  122. data/rails/public/test/jquery_version.html +26 -0
  123. data/rails/script/rails +6 -0
  124. data/rails/spec/controllers/whowish_word_controller_spec.rb +56 -0
  125. data/rails/spec/integration/whowish_word_generator_spec.rb +116 -0
  126. data/rails/spec/integration/whowish_word_spec.rb +110 -0
  127. data/rails/spec/spec_helper.rb +44 -0
  128. data/rails/spec/support/browser.rb +194 -0
  129. data/rails/spec/support/json_rspec_helper.rb +9 -0
  130. data/rails/spec/support/mongoid_helper.rb +10 -0
  131. data/spec/spec_helper.rb +19 -0
  132. data/spec/unit/word_for_attr_in_edit_mode_spec.rb +44 -0
  133. data/spec/unit/word_for_attr_spec.rb +44 -0
  134. data/spec/unit/word_for_in_edit_mode_spec.rb +44 -0
  135. data/spec/unit/word_for_spec.rb +44 -0
  136. data/whowish_word.gemspec +21 -0
  137. metadata +181 -0
@@ -0,0 +1,5 @@
1
+ <span style="color:red;"><%=@error%></span>
2
+ <form action="/whowish_word/do_login" method="post">
3
+ Password: <input type="password" name="password">
4
+ <input type="submit" value="Login">
5
+ </form>
@@ -0,0 +1,42 @@
1
+ <%
2
+ id = ""
3
+ if is_new
4
+ entity = WhowishWordEmail.new
5
+ id = 0
6
+ else
7
+ id = entity.id
8
+ end
9
+ %>
10
+ <span style="width:740px;display:block;margin-top:20px;border:5px solid black;background-color:#EDEDED;" id="email_<%=id%>">
11
+ <span style="width:720px;display:block;margin:10px 10px 10px 10px;">
12
+ <span style="width:100px;display:inline-block;font-weight:bold;font-size:20px;color:#999999;">
13
+ <%=entity.id%>
14
+ </span>
15
+ <span style="width:610px;display:inline-block;">
16
+ <span style="display:block;font-weight:bold;font-size:20px;">
17
+ Email ID: <input type="text" id="page_id_<%=id%>" value="<%=entity.page_id%>" style="width:450px;font-size:20px;" onchange="$('#email_<%=id%>').addClass('edited');">
18
+ </span>
19
+ <span style="display:block;font-weight:bold;font-size:20px;">
20
+ Content ID: <input type="text" id="word_id_<%=id%>" value="<%=entity.word_id%>" style="width:450px;font-size:20px;" onchange="$('#email_<%=id%>').addClass('edited');">
21
+ </span>
22
+ <span style="display:block;">
23
+ <textarea style="width:550px;height:200px;" id="content_<%=id%>" onchange="$('#email_<%=id%>').addClass('edited');"><%=entity.content%></textarea>
24
+ </span>
25
+ <span style="display:block;font-weight:bold;margin-left:5px;">
26
+ <a href="#" style="font-weight:bold;font-size:20px;" id="save_button_<%=id%>" onclick="save_email(<%=id%>);return false;">
27
+ <% if is_new %>
28
+ Add
29
+ <% else %>
30
+ Save
31
+ <% end %>
32
+ </a>
33
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
34
+ <% if !is_new %>
35
+ <a href="#" style="font-weight:bold;font-size:20px;" id="delete_button_<%=id%>" onclick="delete_email(<%=id%>);return false;">
36
+ Delete
37
+ </a>
38
+ <% end %>
39
+ </span>
40
+ </span>
41
+ </span>
42
+ </span>
@@ -0,0 +1,99 @@
1
+
2
+ <script language="javascript">
3
+
4
+ function save_email(email_id)
5
+ {
6
+
7
+ $('#save_button_'+email_id).loading_button(true);
8
+ var action = "edit";
9
+ if (email_id == 0 || email_id == undefined) action = "add";
10
+
11
+ $.ajax({
12
+ type: "POST",
13
+ url: '/whowish_word_email/'+action,
14
+ cache: false,
15
+ async: false,
16
+ data: {
17
+ authenticity_token: "<%=form_authenticity_token%>",
18
+ "page_id": $('#page_id_'+email_id).val(),
19
+ "word_id": $('#word_id_'+email_id).val(),
20
+ "content": $('#content_'+email_id).val(),
21
+ "id":email_id
22
+ },
23
+ success: function(data){
24
+ try
25
+ {
26
+ if (data.ok == true)
27
+ {
28
+ $('#email_'+email_id).removeClass('edited');
29
+ if (action == "add")
30
+ $('#block_anchor').before(data.html);
31
+ }
32
+ else
33
+ {
34
+ alert(data.error_message);
35
+ }
36
+
37
+ } catch (e) {
38
+
39
+ }
40
+
41
+ $('#save_button_'+email_id).loading_button(false);
42
+ },
43
+ error: function(req, status, e){
44
+ $('#save_button_'+email_id).loading_button(false);
45
+ if (req.status == 0) return;
46
+ alert('Cannot connect to the server. Please try again later.');
47
+ }
48
+ });
49
+ }
50
+
51
+ function delete_email(email_id)
52
+ {
53
+ $('#delete_button_'+email_id).loading_button(true);
54
+
55
+ $.ajax({
56
+ type: "POST",
57
+ url: '/whowish_word_email/delete',
58
+ cache: false,
59
+ async: false,
60
+ data: {
61
+ authenticity_token: "<%=form_authenticity_token%>",
62
+ "id": email_id
63
+ },
64
+ success: function(data){
65
+ try
66
+ {
67
+ $('#email_'+email_id).fadeOut(function() {
68
+ $('#email_'+email_id).remove();
69
+ });
70
+ } catch (e) {
71
+
72
+ }
73
+
74
+ $('#delete_button_'+email_id).loading_button(false);
75
+ },
76
+ error: function(req, status, e){
77
+ $('#delete_button_'+email_id).loading_button(false);
78
+ if (req.status == 0) return;
79
+ alert('Cannot connect to the server. Please try again later.');
80
+ }
81
+ });
82
+ }
83
+
84
+ $(window).bind('beforeunload', function(){
85
+ if ($('.edited').length > 0)
86
+ {
87
+ return "You have unsaved records. Are you sure you want to exits?";
88
+ }
89
+ });
90
+ </script>
91
+ <%
92
+ WhowishWordEmail.all().each do |entity|
93
+ %>
94
+ <%=render :partial=>"row",:locals=>{:entity=>entity,:is_new=>false}%>
95
+ <%
96
+ end
97
+ %>
98
+ <span id="block_anchor"></span>
99
+ <%=render :partial=>"row",:locals=>{:entity=>nil,:is_new=>true}%>
@@ -0,0 +1,48 @@
1
+ <%
2
+ id = ""
3
+ if is_new
4
+ entity = WhowishWordFacebook.new
5
+ id = 0
6
+ else
7
+ id = entity.id
8
+ end
9
+ %>
10
+ <span style="width:740px;display:block;margin-top:20px;border:5px solid black;background-color:#EDEDED;" id="facebook_<%=id%>">
11
+ <span style="width:720px;display:block;margin:10px 10px 10px 10px;">
12
+ <span style="width:100px;display:inline-block;font-weight:bold;font-size:20px;color:#999999;">
13
+ <%=entity.id%>
14
+ </span>
15
+ <span style="width:610px;display:inline-block;">
16
+ <span style="display:block;font-weight:bold;font-size:20px;">
17
+ Publish ID: <input type="text" id="publish_id_<%=id%>" value="<%=entity.publish_id%>" style="width:450px;font-size:20px;" onchange="$('#facebook_<%=id%>').addClass('edited');">
18
+ </span>
19
+ <span style="display:block;">
20
+ Message: <input type="text" id="message_<%=id%>" value="<%=entity.message%>" style="width:500px;" onchange="$('#facebook_<%=id%>').addClass('edited');">
21
+ </span>
22
+ <span style="display:block;">
23
+ Topic: <input type="text" id="name_<%=id%>" value="<%=entity.name%>" style="width:500px;" onchange="$('#facebook_<%=id%>').addClass('edited');">
24
+ </span>
25
+ <span style="display:block;">
26
+ Caption: <input type="text" id="caption_<%=id%>" value="<%=entity.caption%>" style="width:500px;" onchange="$('#facebook_<%=id%>').addClass('edited');">
27
+ </span>
28
+ <span style="display:block;">
29
+ Description: <input type="text" id="description_<%=id%>" value="<%=entity.description%>" style="width:500px;" onchange="$('#facebook_<%=id%>').addClass('edited');">
30
+ </span>
31
+ <span style="display:block;font-weight:bold;margin-left:5px;">
32
+ <a href="#" style="font-weight:bold;font-size:20px;" id="save_button_<%=id%>" onclick="save_facebook(<%=id%>);return false;">
33
+ <% if is_new %>
34
+ Add
35
+ <% else %>
36
+ Save
37
+ <% end %>
38
+ </a>
39
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
40
+ <% if !is_new %>
41
+ <a href="#" style="font-weight:bold;font-size:20px;" id="delete_button_<%=id%>" onclick="delete_facebook(<%=id%>);return false;">
42
+ Delete
43
+ </a>
44
+ <% end %>
45
+ </span>
46
+ </span>
47
+ </span>
48
+ </span>
@@ -0,0 +1,100 @@
1
+ <script language="javascript">
2
+
3
+ function save_facebook(id)
4
+ {
5
+
6
+ $('#save_button_'+id).loading_button(true);
7
+ var action = "edit";
8
+ if (id == 0 || id == undefined) action = "add";
9
+
10
+ $.ajax({
11
+ type: "POST",
12
+ url: '/whowish_word_facebook/'+action,
13
+ cache: false,
14
+ async: false,
15
+ data: {
16
+ authenticity_token: "<%=form_authenticity_token%>",
17
+ "publish_id": $('#publish_id_'+id).val(),
18
+ "message": $('#message_'+id).val(),
19
+ "name": $('#name_'+id).val(),
20
+ "caption": $('#caption_'+id).val(),
21
+ "description": $('#description_'+id).val(),
22
+ "id":id
23
+ },
24
+ success: function(data){
25
+ try
26
+ {
27
+ if (data.ok)
28
+ {
29
+ $('#facebook_'+id).removeClass('edited');
30
+ if (action == "add")
31
+ $('#block_anchor').before(data.html);
32
+ }
33
+ else
34
+ {
35
+ alert(data.error_message);
36
+ }
37
+
38
+ } catch (e) {
39
+
40
+ }
41
+
42
+ $('#save_button_'+id).loading_button(false);
43
+ },
44
+ error: function(req, status, e){
45
+ $('#save_button_'+id).loading_button(false);
46
+ if (req.status == 0) return;
47
+ alert('Cannot connect to the server. Please try again later.');
48
+ }
49
+ });
50
+ }
51
+
52
+ function delete_facebook(id)
53
+ {
54
+ $('#delete_button_'+id).loading_button(true);
55
+
56
+ $.ajax({
57
+ type: "POST",
58
+ url: '/whowish_word_facebook/delete',
59
+ cache: false,
60
+ async: false,
61
+ data: {
62
+ authenticity_token: "<%=form_authenticity_token%>",
63
+ "id": id
64
+ },
65
+ success: function(data){
66
+ try
67
+ {
68
+ $('#facebook_'+id).fadeOut(function() {
69
+ $('#facebook_'+id).remove();
70
+ });
71
+ } catch (e) {
72
+
73
+ }
74
+
75
+ $('#delete_button_'+id).loading_button(false);
76
+ },
77
+ error: function(req, status, e){
78
+ $('#delete_button_'+id).loading_button(false);
79
+ if (req.status == 0) return;
80
+ alert('Cannot connect to the server. Please try again later.');
81
+ }
82
+ });
83
+ }
84
+
85
+ $(window).bind('beforeunload', function(){
86
+ if ($('.edited').length > 0)
87
+ {
88
+ return "You have unsaved records. Are you sure you want to exits?";
89
+ }
90
+ });
91
+ </script>
92
+ <%
93
+ WhowishWordFacebook.all().each do |entity|
94
+ %>
95
+ <%=render :partial=>"row",:locals=>{:entity=>entity,:is_new=>false}%>
96
+ <%
97
+ end
98
+ %>
99
+ <span id="block_anchor"></span>
100
+ <%=render :partial=>"row",:locals=>{:entity=>nil,:is_new=>true}%>
@@ -0,0 +1,2 @@
1
+ require File.dirname(__FILE__)+"/../config"
2
+ require File.dirname(__FILE__)+"/db_migration/#{WHOWISH_WORD_DATABASE_ENGINE}"
@@ -0,0 +1,60 @@
1
+ ## define schema for words
2
+
3
+ begin
4
+ ActiveRecord::Schema.define do
5
+
6
+ create_table "whowish_words", :force => false do |t|
7
+ t.string "word_id", :null => false
8
+ t.text "content", :null => false
9
+ end
10
+
11
+ end
12
+
13
+ ActiveRecord::Base.connection.execute("ALTER TABLE `whowish_words` ADD UNIQUE (`word_id`)")
14
+
15
+ add_index :whowish_word_emails, :word_id
16
+
17
+ rescue Exception=>e
18
+ puts "Create whowish_words failed: #{e}"
19
+ end
20
+
21
+ ## define schema for emails
22
+ begin
23
+ ActiveRecord::Schema.define do
24
+
25
+ create_table "whowish_word_emails", :force => false do |t|
26
+ t.string "word_id", :null => false
27
+ t.text "content", :null => false
28
+ end
29
+
30
+ end
31
+
32
+ ActiveRecord::Base.connection.execute("ALTER TABLE `whowish_word_emails` ADD UNIQUE (`word_id`)")
33
+
34
+ add_index :whowish_word_emails, :word_id
35
+
36
+ rescue Exception=>e
37
+ puts "Create whowish_words failed: #{e}"
38
+ end
39
+
40
+ ## define schema for facebooks
41
+ begin
42
+ ActiveRecord::Schema.define do
43
+
44
+ create_table "whowish_word_facebooks", :force => false do |t|
45
+ t.string "publish_id", :null => false
46
+ t.string "message", :null => false
47
+ t.string "name", :null => false
48
+ t.string "caption", :null => false
49
+ t.text "description", :null => false
50
+ end
51
+
52
+ end
53
+
54
+ ActiveRecord::Base.connection.execute("ALTER TABLE `whowish_word_facebooks` ADD UNIQUE (`publish_id`)")
55
+
56
+ add_index :whowish_word_facebooks, :publish_id
57
+
58
+ rescue Exception=>e
59
+ puts "Create whowish_words failed: #{e}"
60
+ end
@@ -0,0 +1,186 @@
1
+ require File.dirname(__FILE__)+"/../config"
2
+
3
+ paths = ["controllers","views","models/#{WHOWISH_WORD_DATABASE_ENGINE}"]
4
+
5
+ # load all controllers, helpers, and models
6
+ paths.each do |dir|
7
+ path = File.join(File.dirname(__FILE__), 'app', dir)
8
+ $LOAD_PATH.insert(0, path)
9
+ ActiveSupport::Dependencies.autoload_paths.insert(0, path)
10
+ ActiveSupport::Dependencies.autoload_once_paths.delete(path)
11
+ end
12
+
13
+ ActionController::Base.append_view_path(File.join(File.dirname(__FILE__), 'app', 'views'))
14
+
15
+ class ActionController::Base
16
+
17
+ def choose_locale
18
+
19
+ $locale = "en"
20
+ $locale = session[:whowish_locale].downcase.strip if session[:whowish_locale]
21
+ $locale = params[:whowish_locale].downcase.strip if params[:whowish_locale]
22
+
23
+ session[:whowish_locale] = $locale
24
+
25
+ logger.debug { "locale=#{$locale}"}
26
+
27
+ end
28
+
29
+ end
30
+
31
+ class ActionView::Base
32
+
33
+ @@whowish_word = {}
34
+
35
+ def self.whowish_word
36
+ @@whowish_word
37
+ end
38
+
39
+ def self.init_whowish_word
40
+
41
+ words = WhowishWord.all() + WhowishWordEmail.all()
42
+
43
+ @@whowish_word = {}
44
+ words.each { |word|
45
+ @@whowish_word[word.word_id] = word.content
46
+ }
47
+ end
48
+
49
+ def self.whowish_word_for(page_id,id,*p)
50
+
51
+ $locale = "en" if !$locale
52
+
53
+ word_id = WhowishWord.generate_word_id(page_id,id,$locale)
54
+
55
+ css = "cursor:pointer;\
56
+ position:absolute;\
57
+ left:0px;\
58
+ top:-15px;\
59
+ width:15px;\
60
+ height:18px;";
61
+
62
+ js_arg = []
63
+
64
+ content = "##{page_id}:#{id}(#{$locale})".downcase
65
+ if p.length > 0
66
+ content_params = []
67
+ p[0].each_pair { |key,val|
68
+ content_params.push("#{key}: \"#{val}\"")
69
+ }
70
+ content += "{#{content_params.join(',')}}"
71
+ end
72
+
73
+
74
+ if @@whowish_word[word_id]
75
+
76
+ content = "#{@@whowish_word[word_id]}"
77
+
78
+ if p.length > 0
79
+ p = p[0]
80
+
81
+ p.each_pair { |key,val|
82
+ content.gsub!("{#{key}}","#{val}")
83
+ js_arg.push("\"#{key}\":\"#{val.to_s.gsub('"','\\"')}\"")
84
+ }
85
+ end
86
+
87
+ end
88
+
89
+ edit_icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAKDSURBVHjabJJLaJRXGIaf75z5J5M4TLxFF4GELLIUqsa6kNqAiyJ0odBVRUHBhfQmIgpSLzVIcFFcRKGblBYC2dh2RCjiptgGNCZBUTBVaRwTkpCQONO5/Zdz/v+48BLR+dbPw/vy8skv7e00PBESY8jE8f5sS8vBxNpDkTEFEVlBbl79o7GrFLZc3TR/4fxINF3IrV+3rpTW+mgURb86514xC/cHG8pKkFC80YWltm1PL/3M0o08q3M5VmUyl40x3wCIvf9Do1xw9vugdK/Pxydq/4on+VkeX+pHlhcHtE59CyDhvb5Gck9UfXo7qDxM2foUopuwXUcpTHUXlsf+3aS0VAEkmDj9nqfTcbh4xy+Ob3YuxARzpJs7sLVJW87u2hXkdv4tLnqF+mMn310JFwcX/eLdE4hgg3mUtxqcJaoXTokL+sXFK3h99LsV2bnPg8rk9cT+j0rliKNldHotUfXJrSSu9YIADiUWRYyURs+9qZsinHkUlW51Z1p7MP5zdLoN4z+v2XBhq4g8VsQIMcW4i1LcibwYH3iT24HSBS1lofIAbJ0kqRP5018L5koKQyXZwH/Bp8yZzRjXjPiPBtFaoZT6OFGZ0ZAsSADLt4mW/rqmXG1P6LJM+duZDrcSJDm0RAgJcu74AYrFIsDe3h0f/b77s0+QzBqU1/Rbafz04ZnSmuKzYDvluI3Ua+ntYANXfmJiYoJ8Pn8s8Os/9p85cm3fl1+ceTZbfjA7M0M5yqJIUBJ/+A3Dw8Pa87z1IyP/nG1qytDR2flna67VGms3au1pJUkCVAEH+EAFmAOmZWhoKA1s8TyvWymVM8ZsiJOkRaD5nZAQqL2Wl4BJYPzlAKO+L7lvWnFqAAAAAElFTkSuQmCC"
90
+
91
+ return_data = ""
92
+ if !$whowish_word_admin
93
+ return_data = content
94
+ elsif id.to_s.match("default") or id.to_s.match("whowish_box_title")
95
+
96
+ edit = "<span style='"+css+"' onclick=\"change_whowish_word(this,'#{word_id}',{},arguments[0] );return false;\"><img src='#{edit_icon}'/></span>"
97
+
98
+
99
+ return_data = content.gsub("\"", "\"")+"\",({whowish_word_class:\"#{word_id}\",edit:\"" + edit.gsub('"', '\\"') + "\"}),\""
100
+ else
101
+
102
+ arg_id = "whowish_word_arg_" + word_id.gsub('.','_').gsub('/','__')
103
+
104
+ edit = "<span style='"+css+"' onclick=\"change_whowish_word(this,'#{word_id}',{},arguments[0] );return false;\"><img src='#{edit_icon}'/></span>"
105
+
106
+
107
+ return_data = "<span style='position:relative;'><span class='#{word_id}'>" + content + "</span>" + edit + "</span>"
108
+ end
109
+
110
+ return return_data.html_safe
111
+
112
+ end
113
+
114
+ def global_word_for(namespace, id, *p)
115
+ ActionView::Base.whowish_word_for(namespace,id,*p)
116
+ end
117
+
118
+ def word_for(id, *p)
119
+ page_id = @last_template.identifier.sub("#{Rails.root}/app/views/", '')
120
+ ActionView::Base.whowish_word_for(page_id,id,*p)
121
+ end
122
+ end
123
+
124
+ class ActionController::Base
125
+
126
+ def word_for(namespace,id,*p)
127
+ ActionView::Base.whowish_word_for(namespace,id,*p)
128
+ end
129
+
130
+ def self.word_for(namespace,id,*p)
131
+ ActionView::Base.whowish_word_for(namespace,id,*p)
132
+ end
133
+
134
+
135
+ end
136
+
137
+
138
+ module ActionView::Rendering
139
+ alias_method :_render_template_original, :_render_template
140
+ def _render_template(template, layout = nil, options = {})
141
+ @last_template = template
142
+ _render_template_original(template, layout, options)
143
+ end
144
+ end
145
+
146
+ module ActionView::Layouts
147
+ alias_method :_render_layout_original, :_render_layout
148
+ # Contains the logic that actually renders the layout.
149
+ def _render_layout(layout, locals, &block) #:nodoc:
150
+ @last_template = layout
151
+
152
+ _render_layout_original(layout, locals, &block)
153
+ end
154
+ end
155
+
156
+ module ActionView::Partials
157
+ alias_method :_render_partial_original, :_render_partial
158
+
159
+ def _render_partial(options, &block) #:nodoc:
160
+
161
+ @last_template ||= nil
162
+
163
+ previous_template = @last_template
164
+ prefix = self.controller_path unless options[:partial].include?(?/)
165
+ @last_template = self.find_template(options[:partial], prefix, true)
166
+
167
+ html = _render_partial_original(options, &block)
168
+
169
+ @last_template = previous_template
170
+
171
+ return html
172
+ end
173
+
174
+ end
175
+
176
+
177
+ # init all words
178
+ ActionView::Base.init_whowish_word
179
+
180
+ class ActionMailer::Base
181
+
182
+ def word_for(id, *p)
183
+
184
+ ActionView::Base.whowish_word_for(mailer_name + "/" + @template+".html.erb",id,*p)
185
+ end
186
+ end