drg_cms 0.4.39

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 (204) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +39 -0
  5. data/app/assets/images/drg_cms/add.png +0 -0
  6. data/app/assets/images/drg_cms/arrow_in.png +0 -0
  7. data/app/assets/images/drg_cms/arrow_out.png +0 -0
  8. data/app/assets/images/drg_cms/checkbox-checked.png +0 -0
  9. data/app/assets/images/drg_cms/checkbox-unchecked.png +0 -0
  10. data/app/assets/images/drg_cms/cols.png +0 -0
  11. data/app/assets/images/drg_cms/copy.png +0 -0
  12. data/app/assets/images/drg_cms/edit.png +0 -0
  13. data/app/assets/images/drg_cms/edit_design.png +0 -0
  14. data/app/assets/images/drg_cms/edit_page.png +0 -0
  15. data/app/assets/images/drg_cms/edit_site.png +0 -0
  16. data/app/assets/images/drg_cms/html.png +0 -0
  17. data/app/assets/images/drg_cms/pin.png +0 -0
  18. data/app/assets/images/drg_cms/printer.png +0 -0
  19. data/app/assets/images/drg_cms/reload.png +0 -0
  20. data/app/assets/images/drg_cms/search_16.png +0 -0
  21. data/app/assets/images/drg_cms/spinner.gif +0 -0
  22. data/app/assets/images/drg_cms/view_tile.png +0 -0
  23. data/app/assets/images/drg_cms/x.png +0 -0
  24. data/app/assets/javascripts/drg_cms/drg_cms.js +449 -0
  25. data/app/assets/javascripts/drg_cms/jquery-migrate.js +511 -0
  26. data/app/assets/javascripts/drg_cms/jquery.datetimepicker.js +1353 -0
  27. data/app/assets/javascripts/drg_cms/some_scripts.js +33 -0
  28. data/app/assets/javascripts/drg_cms_application.js +11 -0
  29. data/app/assets/javascripts/drg_cms_cms.js +28 -0
  30. data/app/assets/stylesheets/drg_cms/drg_cms.css +632 -0
  31. data/app/assets/stylesheets/drg_cms/jquery-ui.css +339 -0
  32. data/app/assets/stylesheets/drg_cms/jquery.datetimepicker.css +304 -0
  33. data/app/assets/stylesheets/drg_cms/th-bg.png +0 -0
  34. data/app/assets/stylesheets/drg_cms/theme.css +49 -0
  35. data/app/assets/stylesheets/drg_cms_application.css +12 -0
  36. data/app/assets/stylesheets/drg_cms_cms.css +26 -0
  37. data/app/controllers/cmsedit_controller.rb +673 -0
  38. data/app/controllers/dc_application_controller.rb +385 -0
  39. data/app/controllers/dc_at_the_beginning_controller.rb +120 -0
  40. data/app/controllers/dc_common_controller.rb +314 -0
  41. data/app/controllers/dc_mail_controller.rb +89 -0
  42. data/app/controllers/dc_main_controller.rb +40 -0
  43. data/app/controllers/drgcms_controls/dc_page_controls.rb +40 -0
  44. data/app/forms/all_options.yml +176 -0
  45. data/app/forms/cms_forms.yml +93 -0
  46. data/app/forms/cms_menu.yml +142 -0
  47. data/app/forms/dc_ad.yml +130 -0
  48. data/app/forms/dc_big_table.yml +59 -0
  49. data/app/forms/dc_big_table_locale.yml +41 -0
  50. data/app/forms/dc_big_table_value.yml +47 -0
  51. data/app/forms/dc_category.yml +57 -0
  52. data/app/forms/dc_design.yml +68 -0
  53. data/app/forms/dc_folder_permission.yml +49 -0
  54. data/app/forms/dc_forum_cat.yml +54 -0
  55. data/app/forms/dc_forum_forum.yml +53 -0
  56. data/app/forms/dc_forum_msg.yml +124 -0
  57. data/app/forms/dc_forum_privmsg.yml +125 -0
  58. data/app/forms/dc_forum_topic.yml +131 -0
  59. data/app/forms/dc_journal.yml +85 -0
  60. data/app/forms/dc_link.yml +55 -0
  61. data/app/forms/dc_mail.yml +88 -0
  62. data/app/forms/dc_mail_address.yml +56 -0
  63. data/app/forms/dc_mail_list.yml +44 -0
  64. data/app/forms/dc_mail_list_member.yml +42 -0
  65. data/app/forms/dc_menu.yml +62 -0
  66. data/app/forms/dc_menu_item.yml +81 -0
  67. data/app/forms/dc_page.yml +145 -0
  68. data/app/forms/dc_part.yml +102 -0
  69. data/app/forms/dc_permission.yml +50 -0
  70. data/app/forms/dc_piece.yml +105 -0
  71. data/app/forms/dc_policy.yml +57 -0
  72. data/app/forms/dc_policy_role.yml +42 -0
  73. data/app/forms/dc_policy_rule.yml +38 -0
  74. data/app/forms/dc_policy_rule_nocms.yml +38 -0
  75. data/app/forms/dc_poll.yml +113 -0
  76. data/app/forms/dc_poll_item.yml +76 -0
  77. data/app/forms/dc_simple_menu.yml +64 -0
  78. data/app/forms/dc_simple_menu_item.yml +80 -0
  79. data/app/forms/dc_site.yml +149 -0
  80. data/app/forms/dc_user.yml +142 -0
  81. data/app/forms/dc_user_role.yml +54 -0
  82. data/app/forms/drgcms_cms.yml +28 -0
  83. data/app/helpers/cmsedit_helper.rb +698 -0
  84. data/app/helpers/dc_ad_renderer.rb +206 -0
  85. data/app/helpers/dc_application_helper.rb +704 -0
  86. data/app/helpers/dc_big_menu_renderer.rb +180 -0
  87. data/app/helpers/dc_captcha_renderer.rb +100 -0
  88. data/app/helpers/dc_common_renderer.rb +132 -0
  89. data/app/helpers/dc_mail_renderer.rb +76 -0
  90. data/app/helpers/dc_menu_renderer.rb +143 -0
  91. data/app/helpers/dc_page_renderer.rb +80 -0
  92. data/app/helpers/dc_part_renderer.rb +162 -0
  93. data/app/helpers/dc_piece_renderer.rb +124 -0
  94. data/app/helpers/dc_poll_renderer.rb +219 -0
  95. data/app/helpers/dc_renderer.rb +56 -0
  96. data/app/helpers/dc_simple_menu_renderer.rb +244 -0
  97. data/app/helpers/drgcms_form_field.rb +863 -0
  98. data/app/models/__dc_global_data.rb +44 -0
  99. data/app/models/dc_ad.rb +52 -0
  100. data/app/models/dc_ad_stat.rb +34 -0
  101. data/app/models/dc_big_menu.rb +89 -0
  102. data/app/models/dc_big_table.rb +63 -0
  103. data/app/models/dc_big_table_locale.rb +35 -0
  104. data/app/models/dc_big_table_value.rb +38 -0
  105. data/app/models/dc_category.rb +48 -0
  106. data/app/models/dc_design.rb +48 -0
  107. data/app/models/dc_dummy.rb +30 -0
  108. data/app/models/dc_folder_permission.rb +43 -0
  109. data/app/models/dc_global_data.rb +44 -0
  110. data/app/models/dc_journal.rb +39 -0
  111. data/app/models/dc_key_value_store.rb +90 -0
  112. data/app/models/dc_link.rb +39 -0
  113. data/app/models/dc_mail.rb +64 -0
  114. data/app/models/dc_mail_address.rb +69 -0
  115. data/app/models/dc_mail_list.rb +48 -0
  116. data/app/models/dc_mail_list_member.rb +34 -0
  117. data/app/models/dc_menu.rb +59 -0
  118. data/app/models/dc_menu_item.rb +40 -0
  119. data/app/models/dc_page.rb +123 -0
  120. data/app/models/dc_part.rb +28 -0
  121. data/app/models/dc_permission.rb +58 -0
  122. data/app/models/dc_piece.rb +57 -0
  123. data/app/models/dc_policy.rb +94 -0
  124. data/app/models/dc_policy_role.rb +47 -0
  125. data/app/models/dc_policy_rule.rb +65 -0
  126. data/app/models/dc_poll.rb +46 -0
  127. data/app/models/dc_poll_item.rb +40 -0
  128. data/app/models/dc_sendmail.rb +48 -0
  129. data/app/models/dc_simple_menu.rb +58 -0
  130. data/app/models/dc_simple_menu_item.rb +39 -0
  131. data/app/models/dc_site.rb +92 -0
  132. data/app/models/dc_stat.rb +36 -0
  133. data/app/models/dc_user.rb +91 -0
  134. data/app/models/dc_user_role.rb +36 -0
  135. data/app/models/dc_visit.rb +35 -0
  136. data/app/views/cmsedit/_edit_stuff.html.erb +59 -0
  137. data/app/views/cmsedit/_edit_stuff.js.erb +6 -0
  138. data/app/views/cmsedit/_form.html.erb +21 -0
  139. data/app/views/cmsedit/_result.html.erb +20 -0
  140. data/app/views/cmsedit/edit.html.erb +6 -0
  141. data/app/views/cmsedit/error.html.erb +2 -0
  142. data/app/views/cmsedit/index.html.erb +6 -0
  143. data/app/views/cmsedit/new.html.erb +5 -0
  144. data/app/views/cmsedit/show.html.erb +21 -0
  145. data/app/views/dc_at_the_beginning/create.html.erb +9 -0
  146. data/app/views/dc_at_the_beginning/index.html.erb +19 -0
  147. data/app/views/dc_common/paste_clipboard.html.erb +17 -0
  148. data/app/views/dc_mail/subscribe.html.erb +7 -0
  149. data/app/views/dc_mail/unsubscribe.html.erb +19 -0
  150. data/app/views/layouts/cms.html.erb +17 -0
  151. data/app/views/layouts/cmsedit.html.erb +16 -0
  152. data/app/views/layouts/content.html.erb +16 -0
  153. data/config/initializers/kaminari_patch.rb +36 -0
  154. data/config/locales/datetimepicker.yml +13 -0
  155. data/config/locales/drgcms_en.yml +96 -0
  156. data/config/locales/drgcms_sl.yml +97 -0
  157. data/config/locales/en.yml +7 -0
  158. data/config/locales/kaminari.yml +26 -0
  159. data/config/locales/models_en.yml +790 -0
  160. data/config/locales/models_sl.yml +805 -0
  161. data/config/locales/mongoid_sl.yml +60 -0
  162. data/config/locales/sl.yml +211 -0
  163. data/config/routes.rb +2 -0
  164. data/drg_cms.gemspec +28 -0
  165. data/lib/drg_cms.rb +45 -0
  166. data/lib/drg_cms/engine.rb +30 -0
  167. data/lib/drg_cms/version.rb +3 -0
  168. data/lib/tasks/at_the_beginning.yml +26 -0
  169. data/lib/tasks/dc_cleanup.rake +94 -0
  170. data/lib/tasks/drg_cms_tasks.rake +118 -0
  171. data/lib/tasks/send_mail.rake +253 -0
  172. data/lib/tasks/site_statistics.rake +80 -0
  173. data/test/drg_cms_test.rb +7 -0
  174. data/test/dummy/README.rdoc +261 -0
  175. data/test/dummy/Rakefile +7 -0
  176. data/test/dummy/app/assets/javascripts/application.js +15 -0
  177. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  178. data/test/dummy/app/controllers/application_controller.rb +3 -0
  179. data/test/dummy/app/helpers/application_helper.rb +2 -0
  180. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  181. data/test/dummy/config.ru +4 -0
  182. data/test/dummy/config/application.rb +59 -0
  183. data/test/dummy/config/boot.rb +10 -0
  184. data/test/dummy/config/database.yml +25 -0
  185. data/test/dummy/config/environment.rb +5 -0
  186. data/test/dummy/config/environments/development.rb +37 -0
  187. data/test/dummy/config/environments/production.rb +67 -0
  188. data/test/dummy/config/environments/test.rb +37 -0
  189. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  190. data/test/dummy/config/initializers/inflections.rb +15 -0
  191. data/test/dummy/config/initializers/mime_types.rb +5 -0
  192. data/test/dummy/config/initializers/secret_token.rb +7 -0
  193. data/test/dummy/config/initializers/session_store.rb +8 -0
  194. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  195. data/test/dummy/config/locales/en.yml +5 -0
  196. data/test/dummy/config/routes.rb +58 -0
  197. data/test/dummy/public/404.html +26 -0
  198. data/test/dummy/public/422.html +26 -0
  199. data/test/dummy/public/500.html +25 -0
  200. data/test/dummy/public/favicon.ico +0 -0
  201. data/test/dummy/script/rails +6 -0
  202. data/test/integration/navigation_test.rb +10 -0
  203. data/test/test_helper.rb +15 -0
  204. metadata +375 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c72a699a0ff7d2c728862a4704654a2a23e826ba
4
+ data.tar.gz: 162273135c2be3ca8e6ed94a6ee56e00eec2255a
5
+ SHA512:
6
+ metadata.gz: 22893cf485499702a541f39f41bb480cae7244a742f05c2ed5c9c29c37a62ccde3bdf622dd8af22f2bc8f3925bb9c2f8c3e073d68d025c7c7d11a4240f82ec64
7
+ data.tar.gz: 9d9c0acaf0a7e8eaa27f945ad2e6fbe9e734cc23fc77282de50647bba0f80d98b416be80d993768f2149c3f7be198aefa0b7d07e34966f219afccacf9118d363
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012+ Damjan Rems
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = DrgCms
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'DrgCms'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+ Bundler::GemHelper.install_tasks
28
+
29
+ require 'rake/testtask'
30
+
31
+ Rake::TestTask.new(:test) do |t|
32
+ t.libs << 'lib'
33
+ t.libs << 'test'
34
+ t.pattern = 'test/**/*_test.rb'
35
+ t.verbose = false
36
+ end
37
+
38
+
39
+ task :default => :test
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,449 @@
1
+ /*
2
+ # Copyright (c) 2012+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ /*******************************************************************
25
+ * Find and extract parameters value from url
26
+ *******************************************************************/
27
+ $.getUrlParam = function(name) {
28
+ var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
29
+ return results[1] || 0;
30
+ };
31
+
32
+ /*******************************************************************
33
+ * Dump all attributes to console
34
+ *******************************************************************/
35
+ dumpAttributes = function(obj) {
36
+ console.log('Dumping attributes:');
37
+ $.each(obj.attributes, function() {
38
+ console.log(this.name,this.value);
39
+ });
40
+ };
41
+
42
+ /*******************************************************************
43
+ * Used for removing background from iframe element.
44
+ *******************************************************************/
45
+ remove_background_from_iframe = function(obj) {
46
+ var head = obj.head;
47
+ var css = '<style type="text/css">' +
48
+ 'body{background: none;} ' +
49
+ '</style>';
50
+ $(head).append(css);
51
+ };
52
+
53
+ /*******************************************************************
54
+ * Activate jquery UI tooltip. This needs jquery.ui >= 1.9
55
+ *******************************************************************/
56
+ /*
57
+ $(function() {
58
+ $( document ).tooltip();
59
+ });
60
+ */
61
+
62
+ /*******************************************************************
63
+ * Process json result from ajax call and update parts of document
64
+ *******************************************************************/
65
+ process_json_result = function(json) {
66
+ var c = '';
67
+ $.each(json, function(key, val) {
68
+ i = key.search('_');
69
+ if (i > 1) {
70
+ oper = key.substring(0,i);
71
+ what = key.substring(i+1,100);
72
+ switch (oper) {
73
+ /* update field */
74
+ case 'record':
75
+ $('#'+key).val(val);
76
+ break;
77
+ /* display message */
78
+ case 'msg':
79
+ selector = 'dc-form-' + what;
80
+ if ($('.'+selector).length == 0) {
81
+ val = '<div class="' + selector + '">' + val + '</div>';
82
+ $('.dc-title').after(val);
83
+ } else
84
+ $('.'+selector).html(val);
85
+ break;
86
+ /* update div */
87
+ case '#div+':
88
+ $('#'+what).append(val);
89
+ break;
90
+ case '#+div':
91
+ $('#'+what).prepend(val);
92
+ break;
93
+ case '#div':
94
+ $('#'+what).html(val);
95
+ break;
96
+ case '.div+':
97
+ $('.'+what).append(val);
98
+ break;
99
+ case '.+div':
100
+ $('.'+what).prepend(val);
101
+ break;
102
+ case '.div':
103
+ $('.'+what).html(val);
104
+ break;
105
+ /* goto url */
106
+ case 'url':
107
+ window.location.href = val;
108
+ break;
109
+ case 'window':
110
+ w = window.open(val, what);
111
+ w.focus();
112
+ break;
113
+ case 'reload':
114
+ location.reload();
115
+ break;
116
+ }
117
+ }
118
+ });
119
+ };
120
+
121
+ /*******************************************************************
122
+ * Will reload window
123
+ *******************************************************************/
124
+ function dc_reload_window() {
125
+ location.reload();
126
+ }
127
+
128
+ /*******************************************************************
129
+ * Will scroll to position on the screen. This is replacement for
130
+ * location.hash, which doesn't work in Chrome.
131
+ *
132
+ * Thanks goes to: http://web-design-weekly.com/snippets/scroll-to-position-with-jquery/
133
+ *******************************************************************/
134
+ $.fn.dc_scroll_view = function () {
135
+ return this.each(function () {
136
+ $('html, body').animate({
137
+ scrollTop: $(this).offset().top - 50
138
+ }, 500);
139
+ });
140
+ };
141
+
142
+ /*******************************************************************
143
+ *
144
+ *******************************************************************/
145
+ $(document).ready( function() {
146
+ /*******************************************************************
147
+ * Register ad clicks
148
+ *******************************************************************/
149
+ $('a.link_to_track').click(function() {
150
+ $.post('/dc_common/ad_click', { id: this.id });
151
+ return true;
152
+ });
153
+
154
+ /*******************************************************************
155
+ * Popup or close CMS edit menu on icon click
156
+ *******************************************************************/
157
+ $('.drgcms_popmenu').bind('click',function(e) {
158
+ $(e.target).parents('dl:first').find('ul').toggleClass('div-hidden');
159
+ });
160
+
161
+ /*******************************************************************
162
+ * Popup CMS edit menu option clicked
163
+ *******************************************************************/
164
+ $('.drgcms_popmenu_item').bind('click',function(e) {
165
+ url = e.target.getAttribute("data-url");
166
+ $('#iframe_cms').attr('src', url);
167
+ // $('#iframe_cms').width(1000).height(1000);
168
+ // scroll to top of page and hide menu
169
+ window.scrollTo(0,0);
170
+ $(e.target).parents('dl:first').find('ul').toggleClass('div-hidden');
171
+ });
172
+
173
+ /*******************************************************************
174
+ * Sort action clicked on cmsedit
175
+ *******************************************************************/
176
+ $('.drgcms_sort').change( function(e) {
177
+ table = e.target.getAttribute("data-table");
178
+ sort = e.target.value;
179
+ e.target.value = null;
180
+ window.location.href = "/cmsedit?sort=" + sort + "&table=" + table;
181
+ });
182
+
183
+ /*******************************************************************
184
+ * Tab clicked on form. Hide old and show selected div.
185
+ *******************************************************************/
186
+ $('.dc-form-li').bind('click', function(e) {
187
+ /* find li with dc-form-li-selected class and remove it. This will deselect tab */
188
+ var old_id = null;
189
+ $(e.target).parents('ul').find('li').each( function() {
190
+ /* console.debug( $(this) ); */
191
+ if ($(this).hasClass('dc-form-li-selected')) {
192
+ /* ignore if tab is already selected */
193
+ if ($(this) !== $(e.target)) {
194
+ $(this).toggleClass('dc-form-li-selected');
195
+ $(e.target).toggleClass('dc-form-li-selected');
196
+ old_id = this.getAttribute("data-div");
197
+ }
198
+ return false;
199
+ }
200
+
201
+ }); /* show selected data div */
202
+ if (old_id !== null) {
203
+ $('#data_' + old_id).toggleClass('div-hidden');
204
+ $('#data_' + e.target.getAttribute("data-div")).toggleClass('div-hidden');
205
+ }
206
+ });
207
+
208
+ /*******************************************************************
209
+ * Resize iframe_cms to the size of its contents. Make at least 500 px hight
210
+ * unless on initial display.
211
+ *******************************************************************/
212
+ $('#iframe_cms').load( function() {
213
+ // alert('bla 1');
214
+ new_height = this.contentWindow.document.body.offsetHeight + 50;
215
+ if (new_height < 500 & new_height > 60) new_height = 500;
216
+ this.style.height = new_height + 'px';
217
+ remove_background_from_iframe(this.contentWindow.document);
218
+ $('#iframe_cms').dc_scroll_view();
219
+ });
220
+
221
+ /*******************************************************************
222
+ * Same goes for editiframe. Resize it + 30px
223
+ * unless on initial display with no data
224
+ *******************************************************************/
225
+ $('#iframe_edit').load( function() {
226
+ // console.log(this.contentWindow.document.body.offsetHeight);
227
+ if (this.contentWindow.document.body.offsetHeight > 10) {
228
+ this.style.height = (this.contentWindow.document.body.offsetHeight + 30) + 'px';
229
+ }
230
+ remove_background_from_iframe(this.contentWindow.document);
231
+ // scroll to it
232
+ $('#iframe_edit').dc_scroll_view();
233
+ });
234
+
235
+ /*******************************************************************
236
+ * Process Ajax call on cmsedit form actions
237
+ *******************************************************************/
238
+ $('.dc-link-ajax').bind('click', function(e) {
239
+ var target = e.target;
240
+ // if (e.target.src !== undefined) {
241
+ // target = e.target.parent(); // picture
242
+ // };
243
+ // dumpAttributes(target);
244
+ req = target.getAttribute("data-request");
245
+ /* Get some values from elements on the page: */
246
+ if (req == "script") {
247
+ eval (target.getAttribute("data-script"));
248
+ return false;
249
+ }
250
+ else if (req == "post") {
251
+ data = $('form').serialize();
252
+ alert(data);
253
+ }
254
+ else {
255
+ data = {};
256
+ req = 'get'; // by default
257
+ }
258
+
259
+ $('#dc-spinner').toggleClass('div-hidden');
260
+ $.ajax({
261
+ url: target.getAttribute("data-url"),
262
+ type: req,
263
+ dataType: "json",
264
+ data: data,
265
+ success: function(data) {
266
+ process_json_result(data);
267
+ $('#dc-spinner').toggleClass('div-hidden');
268
+ }
269
+ });
270
+ });
271
+
272
+ /*******************************************************************
273
+ * Animate button on click
274
+ ******************************************************************
275
+ $('.xdc-action-menu li').mousedown( function() {
276
+ $(this).toggleClass('dc-animate-button');
277
+ });
278
+
279
+ ******************************************************************
280
+ * Animate button on click
281
+ ******************************************************************
282
+ $('.xdc-action-menu li').mouseup( function() {
283
+ $(this).toggleClass('dc-animate-button');
284
+ });
285
+ */
286
+ /*******************************************************************
287
+ * Animate button on click
288
+ *******************************************************************/
289
+ $('.dc-animate').mousedown( function() {
290
+ $(this).toggleClass('dc-animate-button');
291
+ });
292
+
293
+ /*******************************************************************
294
+ * Animate button on click
295
+ *******************************************************************/
296
+ $('.dc-animate').mouseup( function() {
297
+ $(this).toggleClass('dc-animate-button');
298
+ });
299
+
300
+ /*******************************************************************
301
+ * App menu option clicked
302
+ *******************************************************************/
303
+ $('.app-menu-item a').bind('click', function(e) {
304
+ /* parent of a is li */
305
+ $(e.target).parents('li').each( function() {
306
+ /* for all li's in ul, deselect */
307
+ $(this).parents('ul').find('li').each( function() {
308
+ if ($(this).hasClass('app-menu-item-selected')) {
309
+ $(this).toggleClass('app-menu-item-selected');
310
+ }
311
+ });
312
+ /* select clicked li */
313
+ $(this).toggleClass('app-menu-item-selected');
314
+ });
315
+ });
316
+
317
+ /*******************************************************************
318
+ * Display spinner on link with spinner, submit link
319
+ *******************************************************************/
320
+ $('.dc-link-spinner').bind('click', function(e) {
321
+ $('#dc-spinner').toggleClass('div-hidden');
322
+ });
323
+
324
+ $('.dc-link-submit').bind('click', function(e) {
325
+ $('#dc-spinner').toggleClass('div-hidden');
326
+ });
327
+
328
+ /*******************************************************************
329
+ * Add button clicked while in edit. Create window dialog for adding new record
330
+ * into required table. This is helper scenario, when user is selecting
331
+ * data from with text_autocomplete and data doesn't exist in belongs_to table.
332
+ *******************************************************************/
333
+ $('.in-edit-add').bind('click', function(e) {
334
+ url = '/cmsedit/new?table=' + this.getAttribute("data-table");
335
+ /* I know. It doesn't work as expected. But it will do for now. */
336
+ w = window.open(url, '', 'chrome=yes,width=800,height=600,resizable,scrollbars=yes,status=1,centerscreen=yes,modal=yes');
337
+ w.focus();
338
+ });
339
+
340
+ /**********************************************************************
341
+ *
342
+ *
343
+ **********************************************************************/
344
+ $('#_filter_field').bind('change', function() {
345
+ if (this.value.length > 0) {
346
+ name = 'filter_' + this.value;
347
+ $(this).parents('form').find('span').each( function() {
348
+ /*
349
+ element = $(this).find(':first').attr('id');
350
+ sometimes it is the second element
351
+ if (element == nil) { element = $(this).find(':first').next().attr('id');}
352
+ */
353
+ if ($(this).attr('id') == name) {
354
+ if ( $(this).hasClass('div-hidden') ) { $(this).toggleClass('div-hidden'); }
355
+ } else {
356
+ if ( !$(this).hasClass('div-hidden') ) { $(this).toggleClass('div-hidden'); }
357
+ }
358
+ });
359
+ }
360
+ });
361
+
362
+ /*******************************************************************
363
+ * It is not possible to attach any data to submit button except the text
364
+ * that is written on a button and it is therefore very hard to distinguish
365
+ * which button was pressed when more than one button is present on a form.
366
+ *
367
+ * The purpose of this trigger is to append data hidden in html5 data attributes
368
+ * to the form. We can now attach any kind of data to submit button and data
369
+ * will be passed as data[] parameters to controller.
370
+ *******************************************************************/
371
+ $('.dc-submit').bind('click', function() {
372
+ $.each(this.attributes, function() {
373
+ if (this.name.substring(0,5) == 'data-') {
374
+ $('<input>').attr({
375
+ type: 'hidden',
376
+ name: 'data[' + this.name.substring(5) + ']',
377
+ value: this.value
378
+ }).appendTo('form');
379
+ }
380
+ });
381
+ });
382
+
383
+ /* DOCUMENT INFO */
384
+ /*******************************************************************
385
+ * Popup or hide document information
386
+ *******************************************************************/
387
+ $('#dc-document-info').bind('click',function(e) {
388
+ popup = $(e.target).next();
389
+ popup.toggleClass('div-hidden');
390
+ if (!popup.hasClass('div-hidden')) {
391
+ var o = {
392
+ left: e.pageX - popup.width() - 10,
393
+ top: e.pageY - popup.height() - 20
394
+ };
395
+ popup.offset(o);
396
+ };
397
+ });
398
+ /*******************************************************************
399
+ * Just hide document information on click.
400
+ *******************************************************************/
401
+ $('#dc-document-info-popup').bind('click',function(e) {
402
+ // click on container (id)
403
+ if (e.target.id == 'dc-document-info-popup') {
404
+ $(e.target).toggleClass('div-hidden');
405
+ // click on text or picture. Hence hide parent
406
+ } else {
407
+ $(e.target).parent().toggleClass('div-hidden');
408
+ }
409
+ });
410
+
411
+ /*******************************************************************
412
+ * Force reload of parent page if this div appears
413
+ *******************************************************************/
414
+ $('#div-reload-parent').load( function() {
415
+ alert('div-reload-parent 1');
416
+ parent.location.href=parent.location.href
417
+ });
418
+
419
+ /*******************************************************************
420
+ * Force reload of parent page if this div appears
421
+ *******************************************************************/
422
+ $('#div-reload').load( function() {
423
+ alert('div-reload 1');
424
+ location.href=location.href
425
+ });
426
+
427
+ $('#div-reload-parent').bind('DOMNodeInserted DOMNodeRemoved', function() {
428
+ alert('div-reload-parent 2');
429
+ });
430
+ $('#div-reload').bind('DOMNodeInserted DOMNodeRemoved', function() {
431
+ alert('div-reload 2');
432
+ });
433
+
434
+ });
435
+
436
+ /*******************************************************************
437
+ * Catch ctrl+s key pressed and fire save form event. I press ctrl+s
438
+ * almost every minute. That was a lesson learned years ago when I lost
439
+ * few hours of work on computer lockup ;-(
440
+ *******************************************************************/
441
+ $(document).keydown( function(e) {
442
+ if ((e.which == '115' || e.which == '83' ) && (e.ctrlKey || e.metaKey))
443
+ {
444
+ e.preventDefault();
445
+ document.forms[0].submit();
446
+ return false;
447
+ }
448
+ return true;
449
+ });