xforum 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +139 -0
  4. data/Rakefile +31 -0
  5. data/app/assets/images/xforum/addphoto.jpg +0 -0
  6. data/app/assets/images/xforum/bg-input-focus.png +0 -0
  7. data/app/assets/images/xforum/internet.png +0 -0
  8. data/app/assets/images/xforum/silver_selector.png +0 -0
  9. data/app/assets/javascripts/xforum/application.js +25 -0
  10. data/app/assets/javascripts/xforum/forum_admin.js.coffee +477 -0
  11. data/app/assets/javascripts/xforum/forum_basic.js.coffee +321 -0
  12. data/app/assets/javascripts/xforum/forum_translator.js.coffee +116 -0
  13. data/app/assets/javascripts/xforum/forum_user.js.coffee +403 -0
  14. data/app/assets/javascripts/xforum/global_java.js +141 -0
  15. data/app/assets/javascripts/xforum/help.js.coffee +10 -0
  16. data/app/assets/stylesheets/xforum/application.css.scss +15 -0
  17. data/app/assets/stylesheets/xforum/custom.css.scss +295 -0
  18. data/app/controllers/xforum/application_controller.rb +25 -0
  19. data/app/controllers/xforum/forums_controller.rb +123 -0
  20. data/app/helpers/xforum/application_helper.rb +4 -0
  21. data/app/mailers/xforum/user_mailer.rb +15 -0
  22. data/app/models/xforum/category.rb +76 -0
  23. data/app/models/xforum/forum.rb +217 -0
  24. data/app/models/xforum/hyperlink.rb +42 -0
  25. data/app/models/xforum/language.rb +104 -0
  26. data/app/models/xforum/people_list.rb +189 -0
  27. data/app/models/xforum/photo.rb +60 -0
  28. data/app/models/xforum/topic.rb +140 -0
  29. data/app/models/xforum/translation.rb +92 -0
  30. data/app/views/layouts/xforum/application.html.erb +14 -0
  31. data/app/views/user_mailer/xforum/note_to_forum_users.html.erb +32 -0
  32. data/app/views/xforum/forums/_dummy.html.erb +0 -0
  33. data/app/views/xforum/forums/_forum.html.erb +18 -0
  34. data/app/views/xforum/forums/_forum_admin.html.erb +139 -0
  35. data/app/views/xforum/forums/_forum_comments.html.erb +45 -0
  36. data/app/views/xforum/forums/_forum_entry.html.erb +44 -0
  37. data/app/views/xforum/forums/_forum_video.html.erb +7 -0
  38. data/app/views/xforum/forums/newphoto.js.erb +1 -0
  39. data/app/views/xforum/forums/the_page.html.erb +3 -0
  40. data/config/intiializers/xforum.rb +2 -0
  41. data/config/locales/forum.de.yml +93 -0
  42. data/config/locales/forum.en.yml +96 -0
  43. data/config/locales/forum.es.yml +94 -0
  44. data/config/locales/forum.fr.yml +94 -0
  45. data/config/routes.rb +10 -0
  46. data/db/migrate/20140600_add_forum_to_users.rb +20 -0
  47. data/db/migrate/20140601_create_forum_forums.rb +147 -0
  48. data/db/migrate/20140602_add_restricted_to_category.rb +6 -0
  49. data/db/migrate/20140602_change_suggestion_default.rb +7 -0
  50. data/lib/tasks/xforum_tasks.rake +65 -0
  51. data/lib/xforum.rb +95 -0
  52. data/lib/xforum/engine.rb +6 -0
  53. data/lib/xforum/set.yml +209 -0
  54. data/lib/xforum/user_include.rb +13 -0
  55. data/lib/xforum/version.rb +3 -0
  56. data/test/dummy/README.rdoc +28 -0
  57. data/test/dummy/Rakefile +6 -0
  58. data/test/dummy/app/assets/javascripts/application.js +13 -0
  59. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  60. data/test/dummy/app/controllers/application_controller.rb +5 -0
  61. data/test/dummy/app/helpers/application_helper.rb +2 -0
  62. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  63. data/test/dummy/bin/bundle +3 -0
  64. data/test/dummy/bin/rails +4 -0
  65. data/test/dummy/bin/rake +4 -0
  66. data/test/dummy/config.ru +4 -0
  67. data/test/dummy/config/application.rb +23 -0
  68. data/test/dummy/config/boot.rb +5 -0
  69. data/test/dummy/config/database.yml +25 -0
  70. data/test/dummy/config/environment.rb +5 -0
  71. data/test/dummy/config/environments/development.rb +37 -0
  72. data/test/dummy/config/environments/production.rb +83 -0
  73. data/test/dummy/config/environments/test.rb +39 -0
  74. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  75. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  76. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  77. data/test/dummy/config/initializers/inflections.rb +16 -0
  78. data/test/dummy/config/initializers/mime_types.rb +4 -0
  79. data/test/dummy/config/initializers/session_store.rb +3 -0
  80. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  81. data/test/dummy/config/locales/en.yml +23 -0
  82. data/test/dummy/config/routes.rb +4 -0
  83. data/test/dummy/config/secrets.yml +22 -0
  84. data/test/dummy/db/development.sqlite3 +0 -0
  85. data/test/dummy/log/development.log +0 -0
  86. data/test/dummy/public/404.html +67 -0
  87. data/test/dummy/public/422.html +67 -0
  88. data/test/dummy/public/500.html +66 -0
  89. data/test/dummy/public/favicon.ico +0 -0
  90. data/test/integration/navigation_test.rb +10 -0
  91. data/test/test_helper.rb +15 -0
  92. data/test/xforum_test.rb +7 -0
  93. metadata +327 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: daa8a9801c65c8378e2dada2148c71f10e8c2345
4
+ data.tar.gz: 24d364fe9aff810ce12ae25f5f250f4b579e5c95
5
+ SHA512:
6
+ metadata.gz: 5bc456f9dba77b0210c6e32501e690368d1a1012142722c41b8624d5c4e1d18f2ba5dc32e059e28d719040ff65e394ba35503ee51adf255b42adf4dedcdf6feb
7
+ data.tar.gz: ec01ef886bc872f616270f4d54304596de545ea27b1482fe75e8ffebf36aa4b7ae0286bb5e6fedf744ecd11e93225150fbdb8a23b1f87104cdffe7bd97cd675c
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
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,139 @@
1
+ = Xforum
2
+ This is a javascript dependent forum that is relatively light weight. It's unique feature is that it supports multiple language posting and ask the user community to translate the various posting from other users.
3
+
4
+ You'd be a bit crazy to use it now at v.0000000001 since this is my first attempt:)
5
+
6
+
7
+ usage
8
+ include gem 'xforum' in you gem file
9
+
10
+ bundle install
11
+
12
+ in your config/routes
13
+ mount Xforum::Engine => '/xforum', as: 'xforum'
14
+
15
+
16
+ To use as a partial in you page
17
+
18
+ In application.js
19
+ //= require xforum/application.js
20
+ in application.css (or css.scss)
21
+ *= require xforum/application.css.scss
22
+
23
+ <label id="gotoforum" class='nav-label'><%= t('Forum')%></label>
24
+ add this javascript so we can hide the area you want hidden when the forum is up
25
+
26
+
27
+ function showPageName() {
28
+ "use strict";
29
+ return 'the-ID-of-div-to-hide';
30
+ }
31
+
32
+ you have to provide your own translation for the label
33
+ add this where you want the page to display
34
+ <div class="row" id="forum-page" style='display: none;'>
35
+ <%=render partial: 'xforum/forums/forum' %>
36
+ </div>
37
+
38
+
39
+ to use as a separate page. Create a link to xforum/forums/the_page
40
+
41
+
42
+
43
+ create xforum_init.rb in config/initializers
44
+ include in it these two lines
45
+ Xforum.user_class='User' or whatever you user class is e.g. Member
46
+ Xforum.user_table='users' or whatever you user table is e.g. members
47
+
48
+ rake xforum:install:migrations
49
+
50
+ rake db:migrate
51
+
52
+ in your user model
53
+ require 'xforum/user_include.rb'
54
+
55
+ You now have access to the instance methods Xforum in you model.
56
+
57
+ forum_reading_privileges?
58
+ forum_translating_privileges?
59
+ forum_posting_privileges?
60
+ forum_admin?
61
+
62
+ Set ENV variables
63
+ XFORUM_S3_BUCKET: your_bucket_name
64
+ XFORUM_PHOTOS: path_to_photos
65
+ XFORUM_S3_ACCESS_KEY_ID:
66
+ XFORUM_S3_SECRET_ACCESS_KEY:
67
+ XFORUM_USE_S3: true
68
+ XFORUM_LANGUAGES: en;es (list of languages you want active at start.)
69
+ (for a single language forum don't include the variable)
70
+
71
+ This project rocks and uses MIT-LICENSE.
72
+ This is a javascript dependent forum that is relatively light weight. It's unique feature is that it supports multiple language posting and ask the user community to translate the various posting from other users.
73
+
74
+ You'd be a bit crazy to use it now at v.000001 since this is my first attempt:)
75
+
76
+
77
+ usage
78
+ include gem in you gem file
79
+ gem 'xforum'
80
+ bundle install
81
+
82
+ in your config/routes
83
+ mount Xforum::Engine => '/xforum', as: 'xforum'
84
+
85
+
86
+ To use as a partial in you page
87
+
88
+ In application.js
89
+ //= require xforum/application.js
90
+ in application.css (or css.scss)
91
+ *= require xforum/application.css.scss
92
+
93
+ add a label so we know to open the forum
94
+ <label id="gotoforum" class='nav-label'><%= t('Forum')%></label>
95
+ add this javascript so we can hide the area you want hidden when the forum is up
96
+
97
+
98
+ function showPageName() {
99
+ "use strict";
100
+ return 'the-ID-of-div-to-hide';
101
+ }
102
+
103
+ you have to provide your own translation for the label
104
+ add this where you want the page to display
105
+ <div class="row" id="forum-page" style='display: none;'>
106
+ <%=render partial: 'xforum/forums/forum' %>
107
+ </div>
108
+
109
+
110
+ to use as a separate page. Create a link to xforum/forums/the_page
111
+
112
+
113
+
114
+ create xforum_init.rb in config/initializers
115
+ include in it these two lines
116
+ Xforum.user_class='User' or whatever you user class is e.g. Member
117
+ Xforum.user_table='users' or whatever you user table is e.g. members
118
+
119
+ rake xforum:install:migrations
120
+ rake db:migrate
121
+
122
+ in your user model
123
+ require 'xforum/user_include.rb'
124
+
125
+ You now have access to the instance methods Xforum in you model.
126
+
127
+ forum_reading_privileges?
128
+ forum_translating_privileges?
129
+ forum_posting_privileges?
130
+ forum_admin?
131
+
132
+ Set ENV variables
133
+ XFORUM_S3_BUCKET: your_bucket_name
134
+ XFORUM_PHOTOS: path_to_photos
135
+ XFORUM_S3_ACCESS_KEY_ID:
136
+ XFORUM_S3_SECRET_ACCESS_KEY:
137
+ XFORUM_USE_S3: true
138
+ XFORUM_LANGUAGES: en;es (list of languages you want active at start.)
139
+ (for a single language forum don't include the variable)
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Xforum'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
22
+ require 'rake/testtask'
23
+
24
+ Rake::TestTask.new(:test) do |t|
25
+ t.libs << 'lib'
26
+ t.libs << 'test'
27
+ t.pattern = 'test/**/*_test.rb'
28
+ t.verbose = false
29
+ end
30
+
31
+ task default: :test
@@ -0,0 +1,25 @@
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
+ // compiled file.rectives.
9
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
10
+ // GO AFTER THE REQUIRES BELOW.
11
+ // //= require jquery
12
+
13
+
14
+ //= require jquery
15
+ //= require jquery_ujs
16
+ //= require jquery.ui.all
17
+ //= require jquery.form
18
+ //= require jquery.turbolinks
19
+ //= require turbolinks
20
+ // = require_tree .
21
+
22
+ //
23
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
24
+ // about supported di
25
+
@@ -0,0 +1,477 @@
1
+ CHILD_DEL = 0
2
+ CHILD_ITEM = CHILD_DEL+1
3
+
4
+ CHILD_EDIT = CHILD_DEL+1
5
+ CHILD_EDIT_ITEM=CHILD_ITEM+1
6
+ CHILD_EDIT_ENTRY=CHILD_EDIT_ITEM+1
7
+
8
+ SUGGESTION_ACCEPT=0
9
+ SUGGESTION_REJECT=SUGGESTION_ACCEPT+1
10
+ SUGGESTION= SUGGESTION_REJECT+1
11
+ SUGGESTION_OWNER=SUGGESTION+1
12
+ SUGGESTION_CATEGORY=SUGGESTION_OWNER+1
13
+
14
+ jQuery ->
15
+ hideMe({id:'forum-add-hyperlink-span'})
16
+ $('#forum-box').delegate 'input[id = delete-forum-object]','click', (evt) ->
17
+ deleteForumObject(event.target)
18
+ $('#forum-box').delegate 'input[id = edit-forum-object]','click', (evt) ->
19
+ openEditObject(event.target)
20
+ $('#forum-box').delegate 'input[id = forum-admin-button]','click', (evt) ->
21
+ doButtonAction(event.target)
22
+ event.stopPropagation()
23
+ $('#forum-senate-admin-users').delegate 'option[id = forum-admin-option]','click', (evt) ->
24
+ checkForNone(event.target)
25
+ $('#forum-category-admin').change ->
26
+ getAdminsTopic()
27
+ $('#forum-actions').change ->
28
+ checkActionSetup(event.target)
29
+ $('#forum-admin-language-select').change ->
30
+ flipLanguage(event.target)
31
+ $('#forum-actions').change ->
32
+ handleActionChange(event.target)
33
+ $('#forum-category-monitor').change ->
34
+ monitorNewTopic()
35
+ $('#restrict-category').click ->
36
+ doRestrictCategory(event.target)
37
+ $('#restrict-topic').click ->
38
+ doRestrictTopic(event.target)
39
+ #todo add reason selection for rejecion (forum and user privilages)
40
+
41
+ doRestrictCategory=(button)->
42
+ if button.value== button.dataset.restrict
43
+ button.value=button.dataset.submit
44
+ showMe({id:'forum-restricted-list'})
45
+ else
46
+ button.value= button.dataset.restrict
47
+ hideMe({id:'forum-restricted-list'})
48
+ request={function:'forum admin action'}
49
+ request.forum_action='restrict category'
50
+ request.user_list=$('#forum-restricted-list').val()
51
+ request.category=$('#forum-category-admin').val()
52
+ $.post('xforum/forum_ajax',request)
53
+
54
+ doRestrictTopic=(button)->
55
+ if button.value== button.dataset.restrict
56
+ button.value=button.dataset.submit
57
+ showMe({id:'forum-restricted-list'})
58
+ showMe({id:'forum-admin-topic'})
59
+ else
60
+ button.value= button.dataset.restrict
61
+ request={function:'forum admin action'}
62
+ request.forum_action='restrict topic'
63
+ request.category=$('#forum-topic-admin').val()
64
+ request.user_list=$('#forum-restricted-list').val()
65
+ hideMe({id:'forum-restricted-list'})
66
+ hideMe({id:'forum-admin-topic'})
67
+ $.post('xforum/forum_ajax',request)
68
+
69
+ monitorNewTopic=->
70
+ select = document.getElementById('forum-category-monitor').value
71
+ $.post('xforum/forum_ajax', {function: 'get topics',list:'forum-topic-monitor', category: select, hold_test: false, restricted: false}, loadList)
72
+
73
+
74
+ getAdminCategory=->
75
+ document.getElementById('forum-category-admin').value
76
+
77
+ handleActionChange=(which)->
78
+ switch which.value
79
+ when 'send email to'
80
+ showMe({id:"forum-email-email"})
81
+ else
82
+ hideMe({id:"forum-email-email"})
83
+
84
+ doButtonAction = (which)->
85
+ switch(which.name)
86
+ when 'forum-add-topic'
87
+ addTopic(which,getAdminCategory(),'me')
88
+ when 'review-forum'
89
+ setUpReview(which)
90
+ when 'forum-activate-language'
91
+ turnLanguage('on')
92
+ when 'forum-deactivate-language'
93
+ turnLanguage('off')
94
+ when 'forum-add-category'
95
+ addCategory(which,'me')
96
+ when 'forum-add-language'
97
+ addLanguage(which,'me')
98
+ when 'forum-translate-topic'
99
+ translateList(which)
100
+ when 'forum-translate-category'
101
+ translateList(which)
102
+ when 'forum-user-tag-choose'
103
+ setTagView()
104
+ when 'forum-user-email-choose'
105
+ setEmailView()
106
+ when 'forum-act-on-admin-selector'
107
+ doAction()
108
+ when 'forum-add-cancel'
109
+ addCancel({obj:which})
110
+ when 'forum-admin-views'
111
+ setAdminView(which)
112
+ when 'forum-suggestion-response'
113
+ handleSuggestionResponse(which)
114
+ else
115
+
116
+ window.doAdminStuff = ->
117
+ document.getElementById('forum-senate').dataset.admining = 'true'
118
+ setAdminDisplay()
119
+ $.post('xforum/forum_ajax',{function:'get list',by_name:false, list:'admin-actions'},loadList)
120
+ $.post('xforum/forum_ajax',{function:'get list',by_name:false, list:'forum-distribution-lists'},loadList)
121
+ $.post('xforum/forum_ajax',{function:'get list',by_name:true, list:'admin-emails'},loadList)
122
+ $.post('xforum/forum_ajax',{function:'get list',by_name:true, list:'admin-users'},loadList)
123
+ $.post('xforum/forum_ajax',{function:'get list',by_name:false, list:'forum-restricted-list'},loadList)
124
+
125
+
126
+ setAdminDisplay=->
127
+ hideMe({id: 'review-forum-span'})
128
+ hideMe({id: 'forum-senate'})
129
+ showMe({id: 'forum-senate-admin'})
130
+ hideMe({id: 'forum-user-tag-span'})
131
+ hideMe({id: 'forum-user-email-span'})
132
+ hideMe({id: 'forum-email-email'})
133
+ showMe({name: 'forum-user-email-show'})
134
+ hideMe({id:'forum-admin-topic'})
135
+ showMe({name: 'forum-user-tag-show'})
136
+ showMe({id:'forum-distribution-span'})
137
+ hideMe({id:'forum-moderator-add-span'})
138
+ hideMe({id:'forum-restricted-list'})
139
+ document.getElementById('forum-new-distribution-list').value=''
140
+
141
+ turnLanguage=(toggle)->
142
+ showMe({id:'language-selector-span'})
143
+ $.post('xforum/forum_ajax',{function:'get language set',list:'forum-admin-language-select',active:toggle =='off'},loadList)
144
+
145
+ checkForNone = (which)->
146
+ if which.value == 'select none'
147
+ hideMe({obj:which.parentNode.parentNode})
148
+ name=which.parentNode.name + '-show'
149
+ showMe({name:name})
150
+
151
+ setEmailView = ->
152
+ blockMe({id:'forum-user-email-span'})
153
+ hideMe({name:'forum-user-email-show'})
154
+ $('#forum-user-email').focus()
155
+
156
+ setMonitorView=->
157
+ hideMe({id:'forum-distribution-span'})
158
+ showMe({id:'forum-moderator-add-span'})
159
+
160
+ setDistributionListView=->
161
+ showMe({id:'forum-distribution-span'})
162
+ hideMe({id:'forum-moderator-add-span'})
163
+
164
+ setTagView = ->
165
+ blockMe({id:'forum-user-tag-span'})
166
+ hideMe({name:'forum-user-tag-show'})
167
+ $('#user-tag').focus()
168
+
169
+ checkActionSetup = (which)->
170
+ switch which.value
171
+ when 'create distribution'
172
+ setDistributionListView()
173
+ when 'add topic monitor'
174
+ setMonitorView()
175
+ else
176
+
177
+ flipLanguage=(selector)->
178
+ select = getSelectValues({obj:selector,ref:false})
179
+ $.post('xforum/forum_ajax',{function:'toggle language',language:select})
180
+ selector.selectedIndex=0
181
+ hideMe({id:'language-selector-span'})
182
+
183
+ doAction = ->
184
+ request={}
185
+ request.function = 'forum admin action'
186
+ request.users1 = getSelectValues({name:'forum-user-tag',ref:false})
187
+ request.users2 = getSelectValues({name:'forum-user-email',ref:false})
188
+ request.subject = $('#forum-email-subject').val()
189
+ request.body= $('#forum-email-body').val()
190
+ request.topic=$('#forum-topic-monitor').val()
191
+ $('#forum-email-body').val('')
192
+ $('#forum-email-subject').val('')
193
+ request.new_list_name = $('#forum-new-distribution-list').val()
194
+ request.distribution_list = $('#forum-distribution-lists').val()
195
+ request.forum_action = $('#forum-actions').val()
196
+ document.getElementById('forum-actions').selectedIndex=0
197
+ setAdminDisplay()
198
+ $("forum-email-body").val('')
199
+ $.post('xforum/forum_ajax',request)
200
+
201
+ setAdminView = (which_one)->
202
+ switch(which_one.dataset.view)
203
+ when 'lists'
204
+ blockMe({id:'forum-senate-admin-lists'})
205
+ hideMe({id:'forum-senate-admin-users'})
206
+ addCancel({name:'category'})
207
+ addCancel({name:'topic'})
208
+ addCancel({name:'language'})
209
+ $.post('xforum/forum_ajax',{function:'categories',list:'category', language:getLanguage(),hold_test:false,restricted:false},loadAdminsList)
210
+ $.post('xforum/forum_ajax',{function:'get suggestions',list:'category'},loadForumSuggestions)
211
+ $.post('xforum/forum_ajax',{function:'get suggestions',list:'topic'},loadForumSuggestions)
212
+ $.post('xforum/forum_ajax',{function:'get suggestions',list:'language'},loadForumSuggestions)
213
+ when 'users'
214
+ hideMe({id:'forum-senate-admin-lists'})
215
+ blockMe({id:'forum-senate-admin-users'})
216
+ else
217
+
218
+ setUpReview=(button)->
219
+ if button.dataset.state == 'done'
220
+ showMe(id:'forum-review-buttons')
221
+ button.dataset.state = 'review'
222
+ clearSenate()
223
+ $.post('xforum/forum_ajax', {function: 'get senate', topic: getTopic(), review: true}, setSenate)
224
+ button.value = button.dataset.done
225
+ else
226
+ button.dataset.state = 'done'
227
+ hideMe(id:'forum-review-buttons')
228
+ button.value= button.dataset.review
229
+ clearSenate
230
+
231
+ deleteForumObject = (which_one)->
232
+ id = which_one.dataset.target
233
+ $.post('xforum/forum_ajax',{function:'remove forum object',id:which_one.dataset.id,state_action:which_one.value})
234
+ if which_one.dataset.state == 'open'
235
+ which_one.value = which_one.dataset.del
236
+ document.getElementById(id).className = ''
237
+ which_one.dataset.state = 'closed'
238
+ else
239
+ which_one.value = which_one.dataset.open
240
+ document.getElementById(id).className = ''
241
+ which_one.dataset.state= 'open'
242
+ $.post('xforum/forum_ajax',{function:'categories',language:getLanguage(),hold_test:true,restricted:true},loadAdminsList)
243
+
244
+ addOptionTo = (which_one,item)->
245
+ by_name=false
246
+ switch which_one
247
+ when 'category'
248
+ pushOption($('[name=category_admin]'),{item:item,value:item},0)
249
+ pushOption($('[name=category]'),{item:item,value:item},2)
250
+ when 'language'
251
+ pushOption($('[name=language]'),{item:item,value:item},1)
252
+ else
253
+
254
+ translateList=(which)->
255
+ if which.dataset.state == 'done'
256
+ translateSetup({obj:which})
257
+ else
258
+ addCancel({obj:which})
259
+
260
+ addCategory = (which,user)->
261
+ if which.dataset.state == 'saved'
262
+ addSetup({obj:which})
263
+ else
264
+ new_category = $('#forum-add-admin-category').val()
265
+ unless new_category == ''
266
+ addListEntry('forum-admins-category-list',{item:new_category})
267
+ $.post('xforum/forum_ajax',{function:'add to list',list:'category',new_item:new_category,user:$('#forum-add-admin-user').val()})
268
+ addOptionTo('forum-category',new_category)
269
+ addCancel({obj:which})
270
+
271
+ addLanguage = (which,user)->
272
+ if which.dataset.state == 'saved'
273
+ addSetup({obj:which})
274
+ else
275
+ new_language = $('#forum-add-admin-language').val()
276
+ new_local = $('#forum-add-admin-language-localized').val()
277
+ new_code = $('#forum-add-admin-language-code')
278
+ unless new_language == ''
279
+ addListEntry('forum-admins-language-list',{item:new_language})
280
+ $.post('xforum/forum_ajax',{function:'add to list',list:'language',language:new_language,local:new_local,code:new_code, user:$('#forum-add-admin-user').val()})
281
+ addCancel({obj:which})
282
+
283
+ addTopic=(which,category,user)->
284
+ if which.dataset.state == 'saved'
285
+ addSetup({obj:which})
286
+ else
287
+ new_topic = $('#forum-add-admin-topic').val()
288
+ unless new_topic == ''
289
+ addListEntry('forum-admins-topic-list',{item:new_topic,shift:true})
290
+ $.post('xforum/forum_ajax',{function:'add to list',list:'topic', topic:new_topic,category:category,user:$('#forum-add-admin-user').val()})
291
+ #addCancel({obj:which}) Don't know why this was here? Code copy
292
+
293
+ addSetup=(params)->
294
+ if params.name == undefined
295
+ params.name = params.obj.name.split('-')[2]
296
+ params.obj.value = params.obj.dataset.save
297
+ params.obj.dataset.state='adding'
298
+ hideMe({name:"forum-translate-#{params.name}"})
299
+ $("input[data-who=#{params.name}]").show() #show cancel button
300
+ showMe({id:"forum-add-#{params.name}-input-span"})
301
+ document.getElementById("forum-add-admin-#{params.name}").focus()
302
+
303
+ translateSetup=(params)->
304
+ if params.name == undefined
305
+ params.name = params.obj.name.split('-')[2]
306
+ params.obj.value = params.obj.dataset.done
307
+ params.obj.dataset.state='translating'
308
+ document.getElementById('forum-admins-'+params.name+'-list').dataset.translating=true
309
+ hideMe({name:"forum-add-#{params.name}"})
310
+ $("input[data-who=#{params.name}]").show() #show cancel button
311
+ document.getElementById("forum-add-admin-#{params.name}").focus()
312
+
313
+ addCancel=(params)->
314
+ if params.name == undefined
315
+ if params.obj.dataset.who == undefined then params.name = params.obj.name.split('-')[2]
316
+ else params.name = params.obj.dataset.who
317
+ button = $("[name = forum-add-#{params.name}]").get()[0]
318
+ button.dataset.state = 'saved'
319
+ button.value = button.dataset.add
320
+ unless params.name == 'language'
321
+ button2= $("[name = forum-translate-#{params.name}]").get()[0]
322
+ button2.dataset.state='done'
323
+ button2.value= button2.dataset.translate
324
+ showMe({obj:button2})
325
+ document.getElementById("forum-admins-#{params.name}-list").dataset.translating=false
326
+ $("input[data-who=#{params.name}]").hide()
327
+ hideMe({id:"forum-add-#{params.name}-input-span"})
328
+ showMe({obj:button})
329
+ showMe({name:"forum-add-#{params.name}"})
330
+ $("[id = forum-add-admin-#{params.name}]").val('')
331
+ $("[id = forum-add-admin-user]").val('me')
332
+
333
+ openEditObject = (which_one)->
334
+ line= document.getElementById("edit-entry-#{which_one.dataset.id}")
335
+ id=which_one.dataset.id
336
+ if which_one.dataset.state == 'edit'
337
+ parent = which_one.parentNode
338
+ showMe({obj:parent.children[CHILD_EDIT_ENTRY]})
339
+ which_one.value = which_one.dataset.save
340
+ which_one.dataset.state = 'save'
341
+ line.value = parent.children[CHILD_EDIT_ITEM].innerHTML
342
+ hideMe({obj:parent.children[CHILD_EDIT_ITEM]})
343
+ line.focus()
344
+ else if which_one.dataset.state == 'save'
345
+ parent = which_one.parentNode
346
+ id = which_one.dataset.id
347
+ which_one.dataset.state = 'edit'
348
+ newline = line.value
349
+ hideMe({obj:parent.children[CHILD_EDIT_ENTRY]})
350
+ showMe({obj:parent.children[CHILD_EDIT_ITEM]})
351
+ which_one.value = which_one.dataset.edit
352
+ unless newline == ''
353
+ translating=which_one.parentNode.parentElement.dataset.translating
354
+ parent.children[CHILD_EDIT_ITEM].innerHTML = newline
355
+ $.post('xforum/forum_ajax',{function:'edit forum object',id:id,newline:newline,which_list:which_one.parentNode.parentElement.id, translating:translating})
356
+
357
+ getAdminCategories = ->
358
+ $.post('xforum/forum_ajax',{function:'get categories',category:select,language:getLanguage(),list,'category',hold_test:false,restriced:false},loadAdminsList)
359
+
360
+ getAdminsTopic = ->
361
+ select = document.getElementById('forum-category-admin').value
362
+ $.post('xforum/forum_ajax',{function:'get topics',category:select,list:'topic',language:getLanguage(),hold_test:false,restricted:false},loadAdminsList)
363
+ $.post('xforum/forum_ajax',{function:'get topics',category:select,list:'forum-admin-topic',language:getLanguage(),hold_test:false,restricted:false},loadList)
364
+
365
+ window.loadAdminsList = (params)->
366
+ list_data = params.list_data
367
+ switch params.id
368
+ when 'topic'
369
+ which = 'forum-admins-topic-list'
370
+ short = 0
371
+ shift = true
372
+ when 'category'
373
+ which = 'forum-admins-category-list'
374
+ short = 1
375
+ shift = true
376
+ else
377
+ alist = document.getElementById(which).children
378
+ dummy = alist[0]
379
+ if dummy?
380
+ for i in [1...alist.length]
381
+ removeMe({obj:document.getElementById(which).children[1]})
382
+ if list_data.length>0
383
+ for i in [0...list_data.length-short]
384
+ vars = list_data[i]
385
+ vars.inert = i == 0||i == list_data.length-1-short
386
+ vars.shift = shift
387
+ if list_data[i].state?
388
+ vars.state = list_data[i].state
389
+ addListEntry(which,vars)
390
+ removeMe({obj:dummy})
391
+ else
392
+ id = dummy.children[0].dataset.target
393
+ document.getElementById(id).innerHTML = ''
394
+
395
+ addListEntry = (which,vars)->
396
+ entry = document.getElementById(which).children[0].cloneNode(true)
397
+ i = document.getElementById(which).children.length
398
+ ref = document.getElementById(which).children[i-1]
399
+ tag = which.split('-')[1]
400
+ entry.children[CHILD_DEL].dataset.id = vars.id
401
+ entry.children[CHILD_DEL].dataset.target = 'list-item-'+tag+'-'+i
402
+ if vars.inert
403
+ $(entry.children[CHILD_DEL]).val('----')
404
+ else
405
+ entry.children[CHILD_DEL].id = 'delete-forum-object'
406
+ entry.children[CHILD_DEL].value= entry.children[CHILD_DEL].dataset.del
407
+ entry.children[CHILD_EDIT].dataset.id = vars.id
408
+ entry.children[CHILD_EDIT].dataset.target = 'list-item-'+tag+'-'+i
409
+ entry.children[CHILD_EDIT].dataset.state = 'edit'
410
+ entry.children[CHILD_EDIT_ITEM].innerHTML = vars.item
411
+ entry.children[CHILD_EDIT_ITEM].id = 'list-item-'+tag+'-'+i
412
+ entry.children[CHILD_EDIT_ENTRY].children[0].id="edit-entry-#{vars.id}"
413
+ item=CHILD_EDIT_ITEM
414
+
415
+ if vars.closed
416
+ entry.children[item].className = 'forum-closed'
417
+ entry.children[CHILD_DEL].value = entry.children[CHILD_DEL].dataset.open
418
+ entry.children[CHILD_DEL].dataset.state = 'closed'
419
+ else
420
+ entry.children[CHILD_DEL].dataset.state = 'open'
421
+ document.getElementById(which).insertBefore(entry,ref)
422
+
423
+ loadForumSuggestions = (params)->
424
+ unless !params? || params.data.length == 0
425
+ list = document.getElementById(params.list)
426
+ for i in [0...params.data.length]
427
+ pushElement(list,params.data[i],params.list)
428
+ removeMe({obj:list.children[0]})
429
+
430
+ pushElement = (list,data,which)->
431
+ entry = list.children[0].cloneNode(true)
432
+ entry.id = 'list-' + which.split('-')[0]+ list.children.length
433
+ entry.dataset.the_id = data.id
434
+ entry.children[SUGGESTION_ACCEPT].dataset.id = list.children.length
435
+ entry.children[SUGGESTION_REJECT].dataset.id = list.children.length
436
+ entry.children[SUGGESTION].id = which.split('-')[1]+ '-item-'+ list.children.length
437
+ entry.children[SUGGESTION_OWNER].id = which.split('-')[1]+ '-user-'+ list.children.length
438
+ entry.children[SUGGESTION].innerHTML = data.suggestion
439
+ entry.children[SUGGESTION_OWNER].innerHTML = " |"+data.user+"| "
440
+ if data.category?
441
+ entry.children[SUGGESTION_CATEGORY].innerHTML = data.category
442
+ entry.children[SUGGESTION_CATEGORY].id = which.split('-')[1]+ '-category-'+ list.children.length
443
+ list.appendChild(entry)
444
+
445
+ handleSuggestionResponse = (which_one)->
446
+ if which_one.value == 'Accept'
447
+ id = which_one.dataset.id
448
+ which_one.dataset.state='save'
449
+ switch which_one.parentNode.parentElement.id
450
+ when 'forum-category-prososals-list'
451
+ user=$("span[id = category-user-#{id}]").get()[0].innerHTML.split('|')[1]
452
+ $('#forum-add-admin-category').val($("span[id = category-item-#{id}]").get()[0].innerHTML)
453
+ $('#forum-add-admin-user').val(user)
454
+ addCategory(which_one,user)
455
+ when 'forum-topic-prososals-list'
456
+ topic=$('span[id = topic-item-'+id+']').get()[0].innerHTML
457
+ user= $("span[id =topic-user-#{id}]").get()[0].innerHTML.split('|')[1]
458
+ $('#forum-add-admin-topic').val(topic)
459
+ $('#forum-add-admin-user').val(user)
460
+ category= $('span[id = topic-category-'+id+']').get()[0].innerHTML.trim()
461
+ addTopic(which_one,category,user)
462
+ when 'forum-language-proposal-list'
463
+ $('#forum-aadd-admin-language').val($("span[id = language-item-#{id}]").get()[0].innerHTML)
464
+ $('#forum-add-admin-user').val($("span[id = language-user-#{id}]").get()[0].innerHTML.split('|')[1])
465
+ user= $("span[id = language-user-#{id}]").get()[0].innerHTML.split('|')[1]
466
+ addLanguage(which_one,user)
467
+ else
468
+ closeListItem(which_one)
469
+
470
+ closeListItem = (which_one)->
471
+ id = which_one.parentNode.dataset.the_id
472
+ $.post('xforum/forum_ajax',{function:'suggestion close',id:id,result:which_one.value,list:which_one.parentNode.parentElement.id})
473
+ if which_one.parentNode.parentElement.children.length == 1
474
+ which_one.parentNode.parentElement.style.display = 'none'
475
+ else
476
+ removeIt(which_one.parentNode)
477
+