drg_cms 0.4.39

Sign up to get free protection for your applications and to get access to all the features.
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
+ });