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
@@ -0,0 +1,321 @@
1
+ jQuery ->
2
+ $('#gotoforum').click ->
3
+ startForum()
4
+ $('#gotoforumpage').click ->
5
+ startForum()
6
+ $('#close-forum').click ->
7
+ closeForum()
8
+ $('#forum-senate').delegate 'img[id = forum-photo]','click', (evt) ->
9
+ playPhoto(event.target)
10
+ $('#forum-senate').delegate 'img[id = forum-photo]','mouseenter', (evt) ->
11
+ makePhotoBig(event.target,true)
12
+ $('#forum-senate').delegate 'img[id = forum-photo]','mouseleave', (evt) ->
13
+ makePhotoBig(event.target,false)
14
+ $('#forum-senate').delegate 'img[id = forum-photo]','dblclick', (evt) ->
15
+ runPhotoGallery(event.target)
16
+ $('#forum-topic').change ->
17
+ getSenate()
18
+ $('#forum-language').change ->
19
+ getSenate()
20
+ $('#forum-category').change ->
21
+ changeTopic()
22
+ $('#forum-video-replay').click ->
23
+ img=document.getElementById('big-forum-photo')
24
+ img.src=img.src
25
+ $('#forum-video-back').click ->
26
+ goBackToSenate()
27
+
28
+ goBackToSenate=->
29
+ hideMe({id:'forum-senate-video'})
30
+ showForumElements()
31
+ showMe({id:'forum-senate'})
32
+
33
+
34
+ runPhotoGallery=(target)->
35
+ hideMe({id:'forum-senate'})
36
+ showMe({id:'forum-senate-video'})
37
+ img=document.getElementById('big-forum-photo')
38
+ img.src=target.src
39
+ hideForumElements()
40
+
41
+ window.startForum = ->
42
+ hideMe({id: showPageName()})
43
+ showForumElements()
44
+ blockMe({id: 'forum-page'})
45
+ clearSenate()
46
+ showMe({id:'forum-category'})
47
+ $.post('xforum/forum_ajax', {function: 'get topics', category: 'select category', hold_test: true, restricted: true},loadList)
48
+ comment_span = document.getElementById('forum-comment-span')
49
+ comment_span.dataset.translating == 'false'
50
+ hideMe({obj: comment_span})
51
+ $.post('xforum/forum_ajax', {function:'categories', language: getLanguage(),list:'forum-category', hold_test: true, restricted: true},loadList)
52
+ $.post('xforum/forum_ajax', {function:'categories', language: getLanguage(),list:'forum-category-admin', hold_test: false, restricted: false},loadList)
53
+ $.post('xforum/forum_ajax', {function:'categories', language: getLanguage(),list:'forum-category-monitor', hold_test: false, restricted: false},loadList)
54
+ $.post('xforum/forum_ajax',{function:'get language set',list:'forum-language',active:true,by_name:false},loadList)
55
+ $.post('xforum/forum_ajax',{function:'get language set',list:'forum-translation-language',short:true,active:true},loadCustomList)
56
+ $.post('xforum/forum_ajax',{function:'get language set',list:'forum-translation-language',short:false,active:true},loadList)
57
+
58
+ closeForum = ->
59
+ hideMe({id: 'forum-page'})
60
+ blockMe({id: showPageName()})
61
+ clearSenate()
62
+ setCategory(0)
63
+ setTopic(0)
64
+ changeTopic()
65
+ cancelComment()
66
+ $('#forum-comment').val('')
67
+ if $('#comment-maybe')?
68
+ $('#comment-maybe').remove()
69
+ hideMe({id: 'comment-span'})
70
+ hideMe({id: 'forum-senate-admin-lists'})
71
+ hideMe({id: "forum-senate-admin-users"})
72
+ blockMe({id: 'forum-senate'})
73
+
74
+ window.showForumElements=->
75
+ showMe({id:'forum-topic'})
76
+ showMe({name:'review-forum'})
77
+ showMe({id:'forum-language'})
78
+ showMe({name:'forum-subscribe'})
79
+ showMe({id:'forum-category'})
80
+
81
+ window.hideForumElements=->
82
+ hideMe({id:'forum-topic'})
83
+ hideMe({name:'review-forum'})
84
+ hideMe({id:'forum-language'})
85
+ hideMe({name:'forum-subscribe'})
86
+ hideMe({id:'forum-category'})
87
+
88
+
89
+
90
+ loadCustomList=(params)->
91
+ if params? && params.list_data? && params.list_data.length>0
92
+ list_data = params.list_data
93
+ selector = document.getElementById('forum-translation-choices')
94
+ $(selector).children().remove()
95
+ for i in [0...list_data.length]
96
+ option = document.createElement('LI')
97
+ option.dataset.choice = list_data[i].item
98
+ option.dataset.display= list_data[i].value
99
+ option.innerHTML=list_data[i].value
100
+ selector.appendChild(option)
101
+ option.id='forum-translation-choice'
102
+ option.classList.add('drop-menu')
103
+
104
+ window.loadList = (params)->
105
+ if params? && params.list_data?
106
+ list_data = params.list_data
107
+ if params.name != undefined
108
+ selector= $("[name="+params.name+"]")
109
+ else if params.id !=undefined
110
+ selector = $(document.getElementById(params.id))
111
+ else if params.obj !=undefined
112
+ selector=$(params.obj)
113
+ selector.children().remove()
114
+ if list_data.length==0
115
+ hideMe({obj:selector})
116
+ else
117
+ for i in [0...list_data.length]
118
+ unless list_data[i].state == 'closed'
119
+ pushOption(selector,list_data[i], 0)
120
+
121
+ window.pushOption = (q_selector,data,offset)->
122
+ selector=q_selector.get()[0]
123
+ if selector?
124
+ option = document.createElement("option")
125
+ option.text = data.value
126
+ option.value = data.item
127
+ option.id = 'forum-admin-option'
128
+ ref = selector.children[selector.children.length - offset]
129
+ if ref==undefined
130
+ selector.appendChild(option)
131
+ else
132
+ selector.insertBefore(option,ref)
133
+ else
134
+ alert "#{q_selector} is not there"
135
+
136
+
137
+ window.getLanguage = ->
138
+ getSelectValues({id:'forum-language', ref:true})
139
+
140
+ window.getTopic = ->
141
+ document.getElementById('forum-topic').value
142
+
143
+ window.getCategory = ->
144
+ document.getElementById('forum-category').value
145
+
146
+ window.setTopic = (index)->
147
+ topic = $('select[id = forum-topic]').get()[0]
148
+ topic.selectedIndex= index
149
+
150
+ window.setCategory = (index)->
151
+ category = $('select[id = forum-category]').get()[0]
152
+ category.selectedIndex= index
153
+
154
+ window.clearSenate = ->
155
+ children = $('#just-a-comment')
156
+ if children?
157
+ $('span[id = just-a-comment]').remove()
158
+ deleteMyData(document.getElementById('forum-senate'))
159
+ hideMe({id: 'forum-voting-booth'})
160
+ hideMe({id: 'subscribe-forum'})
161
+ hideMe({id: 'unsubscribe-forum'})
162
+ hideMe({id: 'forum-add-new-thing-span'})
163
+ hideMe({id: 'forum-senate-admin'})
164
+ document.getElementById('forum-senate').dataset.admining = 'false'
165
+
166
+ window.setSenate = (params)->
167
+ page = document.getElementById('forum-senate')
168
+ showMe({id: '#forum-senate'})
169
+ document.getElementById('forum-comment-span').dataset.next_id = params.index
170
+ kids = $(page).children()
171
+ unless !params.the_list?
172
+ for i in [0...kids.length]
173
+ unless kids[i].id == 'forum-comment-span'
174
+ removeMe({obj:kids[i]})
175
+ unless params.the_list.length == 0
176
+ for i in [0...params.the_list.length]
177
+ buildSpan(page, i, params.the_list[i])
178
+
179
+ buildSpan = (page, index, params) ->
180
+ span = document.createElement('span')
181
+ if index == 0
182
+ span.classList.add('forum-topic' )
183
+ span.dataset.indent=0
184
+ page.dataset.moderator = params.moderator
185
+ if params.moderator then $.post('xforum/forum_ajax',{function:'get translations',topic:getTopic(),language:getTranslationLanguage()},saveTranslationSuggestions)
186
+ if params.subscribed? then setSubscriber(params.subscribed)
187
+ if params.vote then setUpVoting({vote: params.vote, votes: params.votes})
188
+ if params.moderator then showMe({id: 'review-forum-span'})
189
+ if params.review then page.dataset.review = true
190
+ if params.admin then page.dataset.admin=true
191
+ else span.className = "forum-comment"
192
+ span.id = "just-a-comment"
193
+ indexes=Object.keys(params)
194
+ for k in [0...indexes.length]
195
+ unless indexes[k]=='empty_list'
196
+ span.dataset[indexes[k]]=params[indexes[k]]
197
+ the_list=JSON.parse(params.empty_list)
198
+ span.dataset.needy_list= JSON.stringify(the_list) #convert to javascript friendly JSON
199
+ if page.dataset.moderator == 'true' && params.comment_state == 'new'
200
+ da_class = 'forum-comment-new'
201
+ else if page.dataset.moderator == 'true' && params.comment_state == 'reject'
202
+ da_class = 'forum-comment-reject'
203
+ else da_class = 'forum-comment'
204
+ span.innerHTML = '<p>' + params.content + '</p>'
205
+ page.appendChild(span)
206
+ paragraph=span.getElementsByTagName('p')[0]
207
+ paragraph.classList.add(da_class)
208
+ paragraph.style.marginLeft = "#{params.indent * 20}px" #why doesn't this make it out
209
+ putOwnerIn(span,params)
210
+ if params.has_photo
211
+ putPhotosIn(span,params.photos)
212
+ if params.hyperlinks?
213
+ hyperlinks=params.hyperlinks
214
+ for i in [0...hyperlinks.length]
215
+ writeLink(hyperlinks[i],span)
216
+
217
+
218
+ window.getSelectedId = ->
219
+ if window.getSelection != undefined
220
+ sel = window.getSelection()
221
+ unless sel== null
222
+ span = sel.anchorNode.parentNode.parentElement
223
+ if sel.rangeCount
224
+ container = document.createElement("div")
225
+ for i in [0...sel.rangeCount]
226
+ container.appendChild(sel.getRangeAt(i).cloneContents())
227
+ html = container.innerHTML
228
+ else if document.selection != undefined
229
+ if (document.selection.type == "Text")
230
+ html = document.selection.createRange().htmlText
231
+ unless span?
232
+ spans = $('#forum-senate-span')
233
+ if spans.length > 0
234
+ span = spans[spans.length - 1]
235
+ {selection: html, id: span.dataset.id}
236
+
237
+ putPhotosIn=(span,urls)->
238
+ span.dataset.already_has_photo=true
239
+ lineReturn=document.createElement('span')
240
+ lineReturn.innerHTML='<br>'
241
+ paragraph=span.getElementsByTagName('p')[0]
242
+ paragraph.appendChild(lineReturn)
243
+ for i in [0...urls.length]
244
+ img= new Image
245
+ img.src=urls[i]
246
+ img.className= 'forum-photo'
247
+ img.id='forum-photo'
248
+ paragraph.appendChild(img)
249
+
250
+ window.putOwnerIn=(span,params)->
251
+ paragraph=span.getElementsByTagName('p')[0]
252
+ newspan= document.createElement('span')
253
+ newspan.innerHTML = params.owner_name
254
+ newspan.classList.add('right')
255
+ newspan.style.position='relative'
256
+ paragraph.appendChild(newspan)
257
+
258
+ makePhotoBig=(photo,bigger)->
259
+ if bigger
260
+ photo.classList.add('forum-big-photo')
261
+ photo.classList.remove('forum-photo')
262
+ else
263
+ photo.classList.remove('forum-big-photo')
264
+ photo.classList.add('forum-photo')
265
+
266
+
267
+ activatePhoto=->
268
+ photos=$('[data-hold_tight=true]')
269
+ for i in [0...photos.length]
270
+ photos[i].dataset.free_photo = true
271
+
272
+
273
+ playPhoto=(photo)->
274
+ photo.src=photo.src
275
+ event.stopPropagation()
276
+
277
+ askForPhotAgain=(params)->
278
+ $.post('xforum/forum_ajax',{function:'get forum photo',tag:params.tag,edit:params.edit,count:params.count,id:params.id,parent:params.parent},needAPhoto)
279
+
280
+ window.needAPhoto=(params)->
281
+ if params.urls.length > 0
282
+ setMaybeId(params)
283
+ if params.edit=='true'
284
+ span=$('[data-id='+params.id+']').get()[0]
285
+ else
286
+ span=$("[data-tag=#{params.tag}]").get()[0]
287
+ putPhotosIn(span,params.urls)
288
+ else #if params.count < 20
289
+ setTimeout (-> askForPhotAgain(params)), 2000
290
+
291
+ getSenate = ->
292
+ clearSenate()
293
+ select = document.getElementById('forum-topic').value
294
+ if select == 'request new topic'
295
+ addNewThing({'forum-topic'})
296
+ else
297
+ document.getElementById('forum-senate').dataset.topic = select
298
+ $.post('xforum/forum_ajax', {function: 'get senate',language:getLanguage(), topic: select}, setSenate)
299
+
300
+ addNewThing = (select)->
301
+ $('#add-new-thing-input').val('')
302
+ showMe({id: 'forum-add-new-thing-span'})
303
+ hideMe({id: 'forum-senate'})
304
+ $('#forum-add-new-thing-span').data.thing = select
305
+
306
+ window.changeTopic = ->
307
+ setTopic(0)
308
+ select = document.getElementById('forum-category').value
309
+ hideMe({id: 'forum-senate-admin-lists'})
310
+ hideMe({id:'forum-senate-admin-users'})
311
+ clearSenate()
312
+ if select == 'request new category'
313
+ addNewThing('forum-category')
314
+ else if select == 'admin'
315
+ doAdminStuff()
316
+ else if select != 'select category'
317
+ blockMe({id: 'forum-senate'})
318
+ hideMe({id: 'forum-senate-admin'})
319
+ document.getElementById('forum-senate').dataset.category = select
320
+ $.post('xforum/forum_ajax', {function: 'get topics',list:'forum-topic', category: select, hold_test: true, restricted: true}, loadList)
321
+
@@ -0,0 +1,116 @@
1
+ jQuery ->
2
+ $('#forum-comment-span').delegate '[id = forum-translation-choice]','click', (evt) ->
3
+ setTranslationLanguage(event.target)
4
+ $('#forum-translation-language').click ->
5
+ showMe({id:'forum-translation-choices'})
6
+ $('#forum-translation-language').mouseleave ->
7
+ hideMe({id:'forum-translation-choices'})
8
+ $('#forum-translation-language').change ->
9
+ hideMe({id:'forum-translation-choices'})
10
+ $('#forum-comment-span').delegate 'textarea[id= forum-translation-suggestion]','dblclick', (evt) ->
11
+ makeThisTheTranslations(event.target)
12
+
13
+ makeThisTheTranslations=(which)->
14
+ $('#forum-comment-translation').val(which.value)
15
+
16
+ window.getTranslationLanguage=->
17
+ $('#forum-translation-language').val()
18
+
19
+ window.setTranslationState = ->
20
+ comment_span = document.getElementById('forum-comment-span')
21
+ the_span=$("[data-id="+comment_span.dataset.target+']').get()[0]
22
+ if comment_span.dataset.translating == 'true'
23
+ comment_span.dataset.translating = false
24
+ hideMe({id: 'forum-translation-span'})
25
+ document.getElementById('forum-comment-translation').innerHTML=''
26
+ document.getElementById('forum-comment').innerHTML=''
27
+ else
28
+ comment_span.dataset.translating = true
29
+ blockMe({id: 'forum-translation-span'})
30
+ if the_span.dataset.needs_translation =='true'
31
+ my_list=JSON.parse(the_span.dataset.needy_list )
32
+ $('[name=add-forum-translation]').get()[0].classList.add('hot')
33
+ colorList('forum-translation-choices',my_list)
34
+ setLinkTranslations()
35
+ if document.getElementById('forum-comment').value== ''
36
+ setCommentSpan()
37
+
38
+ setTranslationLanguage=(selected)->
39
+ document.getElementById('forum-translation-language').value= selected.dataset.display
40
+ hideMe(id:'forum-translation-choices')
41
+ if isModerator() then $.post('xforum/forum_ajax',{function:'get translations',topic:getTopic(),language:getTranslationLanguage()},saveTranslationSuggestions)
42
+
43
+ colorList=(the_list,data_list)->
44
+ items=document.getElementById(the_list).children
45
+ for i in [0...items.length]
46
+ if items[i].dataset.choice in data_list
47
+ items[i].classList.add('needy')
48
+ else
49
+ items[i].classList.remove('needy')
50
+
51
+ window.checkForSuggestedTranslations=(id)->
52
+ page=document.getElementById('forum-senate')
53
+ $('#forum-comment-translation').val(page.dataset["translation-"+id ] )
54
+ $('[id=forum-translation-suggestion]').remove()
55
+ suggestions =page.dataset['suggestedtranslation-'+id]
56
+ if suggestions != undefined
57
+ suggestion_list = JSON.parse(suggestions)
58
+ list_parent=document.getElementById('forum-translation-scroll')
59
+ for i in [0...suggestion_list.length]
60
+ suggestion = document.createElement('textarea')
61
+ suggestion.value = suggestion_list[i]
62
+ suggestion.id='forum-translation-suggestion'
63
+ suggestion.className='senate-new'
64
+ list_parent.appendChild(suggestion)
65
+
66
+ window.saveTranslationSuggestions=(params)->
67
+ if params? && params.length>0 && params[0].forum_id?
68
+ page = document.getElementById('forum-senate')
69
+ for i in [0...params.length]
70
+ if params[i].suggestion
71
+ if page.dataset['suggestedtranslation-' + params[i].forum_id] == undefined
72
+ temp=[params[i].translation]
73
+ else
74
+ temp=JSON.parse(page.dataset['suggestedtranslation-' + params[i].forum_id] )
75
+ temp.push(params[i].translation)
76
+ page.dataset['suggestedtranslation-' + params[i].forum_id]= JSON.stringify(temp)
77
+ else
78
+ page.dataset['translation-'+ params[i].forum_id]= params[i].translation
79
+
80
+ window.setLinkTranslations=->
81
+ hideMe({id:'forum-add-hyperlink-span'})
82
+ showMe({id:'forum-translate-hyperlink-span'})
83
+ comment_span=document.getElementById('forum-comment-span')
84
+ link_ref=comment_span.dataset.link_ref
85
+ unless link_ref == undefined
86
+ link_ref=parseInt(link_ref)
87
+ hyper=document.getElementById('forum-translate-hyperlink-span')
88
+ for i in [0...link_ref]
89
+ span= document.createElement('span')
90
+ span.id='translation-span-id-'+i
91
+ space= document.createElement('span')
92
+ space.innerHTML=' '
93
+ span.appendChild(space)
94
+ label_it=document.createElement('label')
95
+ label_it.innerHTML= comment_span.dataset['link_text-'+i]
96
+ span.appendChild(label_it)
97
+ text_in=document.createElement('input')
98
+ text_in.type='text'
99
+ text_in.id= 'hyperlink-translation-input'
100
+ text_in.name=i
101
+ text_in.className= "admin-edit-field"
102
+ span.appendChild(text_in)
103
+ hyper.appendChild(span)
104
+
105
+ window.addLinkTranslations=(params)->
106
+ comment_span=document.getElementById('forum-comment-span')
107
+ link_ref=comment_span.dataset.link_ref
108
+ translations= $('[id=hyperlink-translation-input]')
109
+ unless link_ref == undefined || translations.length == 0
110
+ link_ref=parseInt(link_ref)
111
+ for i in [0...link_ref]
112
+ data= params['link-'+i]
113
+ alert data
114
+ data['translation']= translations[i].value
115
+ params['link-'+i]=data
116
+ params
@@ -0,0 +1,403 @@
1
+ jQuery ->
2
+ $('#my-forum-photo').ajaxForm()
3
+ $('input[id = forum-user-button]').click ->
4
+ manageUserAction(event.target)
5
+ $('#forum-comment-span').click ->
6
+ event.stopPropagation()
7
+ $('input[id=photo_file]').change ->
8
+ unless $('input[id=photo_file]').val() == ''
9
+ document.getElementById('forum-comment-span').dataset.needs_photo = true
10
+ $('#forum-add-photo').click ->
11
+ $('input[id=photo_file]').click()
12
+ event.stopPropagation()
13
+ $('#forum-create-hyperlink').click ->
14
+ addHotLlink()
15
+ $('#forum-add-hyperlink').click ->
16
+ showHyperlinkInput()
17
+ #------------------------------------- this needs to be last binding ------------------------#
18
+ $('#forum-senate').click ->
19
+ checkPost()
20
+ event.stopPropagation()
21
+ $('button[id = forum-vote]').click ->
22
+ doForumVoting(event.target)
23
+
24
+ doForumVoting = (which)->
25
+ switch(which.parentNode.name)
26
+ when 'up'
27
+ voteUp()
28
+ when 'down'
29
+ voteDown()
30
+ else
31
+
32
+ manageUserAction = (which)->
33
+ switch(which.name)
34
+ when 'forum-edit-comment'
35
+ editComment()
36
+ when 'forum-accept-comment'
37
+ setCommentState('accept')
38
+ when 'forum-reject-rest'
39
+ setStateRest('reject')
40
+ when 'forum-accept-rest'
41
+ setStateRest('accept')
42
+ when 'forum-reject-comment'
43
+ setCommentState('reject')
44
+ when 'forum-cancel-comment'
45
+ cancelComment()
46
+ when 'forum-post-it'
47
+ setComment()
48
+ when 'forum-subscribe'
49
+ subscribe(true)
50
+ when 'forum-unsubscribe'
51
+ subscribe(false)
52
+ when 'add-forum-translation'
53
+ setTranslationState()
54
+ when 'add-forum-voting'
55
+ $.post('xforum/forum_ajax', {function: 'add voting', topic: getTopic()}, setUpVoting)
56
+ when 'forum-add-suggestion-submit'
57
+ sendNewThing()
58
+ when 'forum-restrict-comment'
59
+ checkRestriction(which)
60
+ when 'forum-invite-comment'
61
+ showMe({id: 'forum-invitation-span'})
62
+ when 'forum-invite-list-save'
63
+ saveInviteList()
64
+ else
65
+
66
+ checkRestriction = (which)->
67
+ comment_span = document.getElementById('forum-comment-span')
68
+ if comment_span.dataset.restricted == 'false'
69
+ which.value = which.dataset.unrestrict
70
+ comment_span.dataset.restricted = true
71
+ else
72
+ which.value = which.dataset.restrict
73
+ comment_span.dataset.restricted = false
74
+
75
+ setStateRest = (new_state)->
76
+ spans = $('span[data-state = new]')
77
+ for i in [0...spans.length]
78
+ setTheState([spans[i]], new_state)
79
+ $.post('xforum/forum_ajax', {function: 'set_the_rest', topic: getTopic(), state: new_state})
80
+ clearSenate()
81
+ setCategory(0)
82
+ setTopic(0)
83
+
84
+ subscribe = (subscribed)->
85
+ setSubscriber(subscribed)
86
+ $.post('xforum/forum_ajax', {function: 'subscribe', topic: getTopic()})
87
+
88
+ voteUp = ->
89
+ $.post('xforum/forum_ajax', {function: 'vote', vote: 1, topic: getTopic()}, refreshVote)
90
+ voteIt(1)
91
+
92
+ window.setCommentSpan=->
93
+ if $('#comment-maybe')? && $('#comment-maybe').length == 1
94
+ id = parseInt($('#comment-maybe').get()[0].dataset.parent)
95
+ span = $("span[data-id = #{id}]").get()[0]
96
+ comment_span = document.getElementById('forum-comment-span')
97
+ if span.dataset.owner == 'true' || isAdmin()
98
+ comment_span.dataset.editing = true
99
+ comment_span.dataset.edit=true
100
+ comment_span.dataset.target = id
101
+ comment_span.dataset.restricted = span.dataset.restricted
102
+ if span.dataset.already_has_photo=='true'
103
+ comment_span.dataset.already_has_photo=true
104
+ if span.dataset.restricted == 'true'
105
+ $('[name = forum-restrict-comment]').val($('[name = forum-restrict-comment]').get()[0].dataset.unrestrict)
106
+ else
107
+ $('[name = forum-restrict-comment]').val($('[name = forum-restrict-comment]').get()[0].dataset.restrict)
108
+ comment_data = span.childNodes[0].innerHTML.split('<span')
109
+ $('#forum-comment').val(comment_data[0])
110
+ if isModerator()
111
+ checkForSuggestedTranslations(id)
112
+
113
+ editComment = ->
114
+ setCommentSpan()
115
+
116
+ voteDown = ->
117
+ $.post('xforum/forum_ajax', {function: 'vote', vote: -1, topic: getTopic()}, refreshVote)
118
+ voteIt(-1)
119
+
120
+ voteIt = (vote)->
121
+ votes = parseInt(document.getElementById('forum-vote-count').innerHTML.split(' = ')[1])
122
+ document.getElementById('forum-vote-count').innerHTML = 'Vote = ' + (votes + vote)
123
+
124
+ refreshVote = (params)->
125
+ document.getElementById('forum-vote-count').innerHTML = 'Vote = ' + (params.votes)
126
+
127
+ window.setUpVoting = (params)->
128
+ if params.vote
129
+ showMe({id: 'forum-voting-booth'})
130
+ refreshVote({votes: params.votes})
131
+ else
132
+ hideMe({id: 'forum-voting-booth'})
133
+
134
+ setCommentState = (new_state)->
135
+ span = $('#comment-maybe').get()[0]
136
+ unless span == undefined
137
+ id = parseInt($('#comment-maybe').get()[0].dataset.parent)
138
+ setTheState($("span[data-id = #{id}]"), new_state)
139
+ resolution = getMyValue('forum-comment')
140
+ setMyValue('forum-comment', '')
141
+ hideMe({id: 'comment-span'})
142
+ $('#comment-maybe').remove()
143
+ $.post('xforum/forum_ajax', {function: new_state, id: id, resolution: resolution})
144
+
145
+ setTheState = (span, new_state)->
146
+ baby_span = span[0].children[0]
147
+ switch new_state
148
+ when 'accept'
149
+ baby_span.className = 'forum-comment'
150
+ when 'reject'
151
+ baby_span.className = 'comment-reject'
152
+ else
153
+ baby_span.parentNode.dataset.comment_state = new_state
154
+
155
+ window.cancelComment = ->
156
+ $('#forum-comment').val('')
157
+ $('#comment-maybe').remove()
158
+ hideMe({id: 'forum-comment-span'})
159
+
160
+ checkPost = ->
161
+ unless getSelectedId().id == undefined
162
+ page = document.getElementById('forum-senate')
163
+ if $('#comment-maybe')?
164
+ $('#comment-maybe').remove()
165
+ id = parseInt(getSelectedId().id)
166
+ if id?
167
+ offset = setNewComment(id)
168
+ if page.dataset.language
169
+ showMe({id: 'add-forum-translation'})
170
+ else hideMe({id: 'add-forum-translation'})
171
+ if isModerator()
172
+ moderatorOnOff(true)
173
+ else moderatorOnOff(false)
174
+ placeCommentSpan(offset, id)
175
+
176
+ window.isModerator =->
177
+ document.getElementById('forum-senate').dataset.moderator == 'true'
178
+
179
+ window.isAdmin =->
180
+ document.getElementById('forum-senate').dataset.admin == 'true'
181
+
182
+ setNewComment = (id)->
183
+ $('#forum-comment').val('')
184
+ $('#forum-comment-translation').val('')
185
+ $('[name=translation-suggestion]').remove
186
+ page = document.getElementById('forum-senate')
187
+ span = document.createElement('span')
188
+ span.classList.add('forum-comment-new')
189
+ span.id = 'comment-maybe'
190
+ parent_span = $("span[data-id = #{id}]").get()[0]
191
+ span.dataset.parent = id
192
+ span.innerHTML = "<p>your post </p>"
193
+ if page.dataset.review == 'true'
194
+ $("span[data-id = #{id}]").after(span)
195
+ else
196
+ $(lastChild(id)).after(span)
197
+ paragraph=span.getElementsByTagName('p')[0]
198
+ paragraph.classList.add('forum-comment-new')
199
+ paragraph.style.marginLeft = 20 + parseInt(parent_span.style.marginLeft) + 'px'
200
+
201
+ if parent_span.dataset.owner == 'true' || isAdmin() then showMe({name: 'forum-edit-comment'})
202
+ else hideMe({name: 'forum-edit-comment'})
203
+ if document.getElementById('forum-comment-span').dataset.translating == 'true'
204
+ editComment()
205
+ parseInt(span.offsetTop)
206
+
207
+ placeCommentSpan = (offset, id) ->
208
+ comment = document.getElementById('forum-comment-span')
209
+ comment.style.position = 'absolute'
210
+ comment.style.top = offset + 'px'
211
+ comment.style.left = '250px'
212
+ comment.dataset.restricted = false
213
+ comment.dataset.edit = false
214
+ comment.dataset.editing = false
215
+ hideMe({id:'forum-add-hyperlink-span'})
216
+ $('[name = forum-restrict-comment]').val($('[name = forum-restrict-comment]').get()[0].dataset.restrict)
217
+ comment.dataset.owner = $("span[data-id = #{id}]").get()[0].dataset.owner
218
+ comment.dataset.target=id
219
+ showMe({obj: comment})
220
+ $('#forum-comment').focus()
221
+ the_span=$("[data-id="+id+']').get()[0]
222
+ if the_span.dataset.needs_translation =='true'
223
+ $('[name=add-forum-translation]').get()[0].classList.add('hot')
224
+ else
225
+ $('[name=add-forum-translation]').get()[0].classList.remove('hot')
226
+
227
+ moderatorOnOff = (on_off)->
228
+ if on_off
229
+ showMe({name: 'forum-accept-comment'})
230
+ showMe({name: 'forum-reject-comment'})
231
+ showMe({name: 'add-forum-voting'})
232
+ else
233
+ hideMe({name: 'forum-accept-comment'})
234
+ hideMe({name: 'forum-reject-comment'})
235
+ hideMe({name: 'add-forum-voting'})
236
+
237
+ lastChild = (id)->
238
+ kids = $("span[data-parent = #{id}]")
239
+ if kids.length == 0
240
+ $("span[data-id = #{id}]")
241
+ else
242
+ lastChild(kids[kids.length - 1].dataset.id)
243
+
244
+ setComment = ->
245
+ request = {function: 'post'}
246
+ request.comment = $('#forum-comment').val().trim()
247
+ if request.comment == "" && $('#comment-maybe')?
248
+ $('#comment-maybe').remove()
249
+ else if $('#comment-maybe')?
250
+ sendPost(request)
251
+ hideMe({id: 'forum-comment-span'})
252
+ $('#forum-comment').val('')
253
+
254
+ window.sendPost = (request)->
255
+ comment_span = document.getElementById('forum-comment-span')
256
+ if comment_span.dataset.edit == 'true' || comment_span.dataset.translating == 'true'
257
+ id = parseInt($('#comment-maybe').get()[0].dataset.parent)
258
+ span = $("span[data-id = #{id}]").get()[0]
259
+ request.id = id #id is nil if new comment
260
+ $('#comment-maybe').remove()
261
+ else
262
+ span = document.getElementById('comment-maybe')
263
+ next_id = parseInt(comment_span.dataset.next_id)
264
+ comment_span.dataset.next_id = next_id+1
265
+ request.tag = next_id
266
+ span.dataset.id = 'new' + next_id
267
+ span.dataset.tag=next_id
268
+ parent=$('[data-id='+span.dataset.parent+']').get()[0]
269
+ span.dataset.indent= parseInt(parent.dataset.indent ) + 1
270
+ request.edit = comment_span.dataset.edit == 'true'
271
+ request.translation = $('#forum-comment-translation').val().trim()
272
+ request.language = getTranslationLanguage()
273
+ request.translating = comment_span.dataset.translating == 'true'
274
+ request.restricted = span.dataset.restricted
275
+ request.invitees = $('#forum-invite-list').val()
276
+ request.parent = span.dataset.parent
277
+ request.topic = getTopic()
278
+ request.category = getCategory()
279
+ request.needs_photo= comment_span.dataset.needs_photo == 'true'
280
+ request.already_has_photo=comment_span.dataset.already_has_photo
281
+ request.count=0
282
+ link_ref=comment_span.dataset.link_ref
283
+ unless link_ref == undefined
284
+ request= addLinks(request,parseInt(link_ref))
285
+ request= addLinkTranslations(request)
286
+ writeParagraph(span,request)
287
+ if request.needs_photo
288
+ document.getElementById('photo_data').value= JSON.stringify(request) #goes up in the submit
289
+ $('#my-forum-photo').submit()
290
+ document.getElementById('forum-comment-span').dataset.needs_photo =false
291
+ document.getElementById('photo_data').value=''
292
+ request.function='get forum photo'
293
+ $.post('xforum/forum_ajax', request, needAPhoto)
294
+ $('#photo_file').val('')
295
+ else
296
+ $.post('xforum/forum_ajax', request, setMaybeId)
297
+
298
+ window.setMaybeId = (params)->
299
+ unless params.edit
300
+ span = $("[data-tag=#{params.tag}]").get()[0]
301
+ span.id = 'just-a-comment'
302
+ span.dataset.id = params.id
303
+ span.dataset.parent = params.parent
304
+
305
+ writeParagraph=(span,params)->
306
+ comment_span = document.getElementById('forum-comment-span')
307
+ if comment_span.dataset.editing=='true'
308
+ the_html = span.innerHTML
309
+ comment_text =span.getElementsByTagName('p')[0].innerHTML.split('<span')[0]
310
+ span.innerHTML = the_html.replace(comment_text,params.comment)
311
+ else
312
+ span.innerHTML = "<p> " + params.comment + '</p>'
313
+ paragraph=span.getElementsByTagName('p')[0]
314
+ paragraph.classList.add('forum-comment-new')
315
+ paragraph.style={}
316
+ paragraph.style.marginLeft = 20 * parseInt(span.dataset.indent) + 'px'
317
+ span.dataset.restricted = comment_span.dataset.restricted
318
+ span.dataset.owner = true
319
+ link_refs=parseInt(comment_span.dataset.link_ref)
320
+ unless link_refs==undefined
321
+ for i in [0...link_refs]
322
+ writeLocalLink(span,i)
323
+
324
+ writeLocalLink=(span,link_ref)->
325
+ data= getLinkData(link_ref)
326
+ writeLink(data,span)
327
+
328
+ window.getLinkData=(link_ref)->
329
+ comment_span = document.getElementById('forum-comment-span')
330
+ data={}
331
+ data.link_address = comment_span.dataset['link_address-'+link_ref]
332
+ data.link_text= comment_span.dataset['link_text-'+link_ref]
333
+ data.link_id = comment_span.dataset['link_id-'+link_ref]
334
+ data
335
+
336
+ window.writeLink=(data,span)->
337
+ link=document.createElement('a')
338
+ link.href='http://'+data.link_address
339
+ link.innerHTML=data.link_text
340
+ link.id=data.link_id
341
+ link.className='external'
342
+ space1=document.createElement('span')
343
+ space1.innerHTML=' '
344
+ space2=document.createElement('span')
345
+ space2.innerHTML=' '
346
+ paragraph=span.children[0]
347
+ paragraph.appendChild((space1))
348
+ paragraph.appendChild(link)
349
+ paragraph.appendChild(space2)
350
+
351
+ sendNewThing = ->
352
+ $.post('xforum/forum_ajax',
353
+ {function: 'suggestion', suggestion:$('#forum-suggestion').val(), topic:getTopic(),language:getLanguage(),category: getCategory()})
354
+ $('#forum-suggestion').val('')
355
+ setCategory(0)
356
+ setTopic(0)
357
+ hideMe({id: 'forum-add-new-thing-span'})
358
+ showMe({id: 'forum-senate'})
359
+
360
+ window.setSubscriber = (subscribed)->
361
+ document.getElementById('forum-senate').dataset.subscribed = subscribed
362
+ if subscribed
363
+ hideMe({id: 'subscribe-forum'})
364
+ showMe({id: 'unsubscribe-forum'})
365
+ else
366
+ showMe({id: 'subscribe-forum'})
367
+ hideMe({id: 'unsubscribe-forum'})
368
+
369
+ addHotLlink=-> #to span.dataset
370
+ data={function:'add hot link'}
371
+ data.link_address= $('[id=forum-hyperlink-address]').val()
372
+ data.link_text=$('[id=forum-hyperlink-text]').val()
373
+ link_ref=document.getElementById('forum-comment-span').dataset.link_ref
374
+ if link_ref == undefined
375
+ data.link_id = 0
376
+ else
377
+ data.link_id = parseInt(link_ref)
378
+ sethyperlink(data)
379
+ clearhyperlink()
380
+
381
+ clearhyperlink=->
382
+ $('[id=forum-hyperlink-address]').val('')
383
+ $('[id=forum-hyperlink-text]').val('')
384
+ hideMe({id:'forum-hyperlink-span'})
385
+
386
+ showHyperlinkInput=->
387
+ showMe({id:'forum-add-hyperlink-span'})
388
+
389
+ sethyperlink=(params)-> #push data onto dataset
390
+ comment_span=document.getElementById('forum-comment-span')
391
+ link_ref=comment_span.dataset.link_ref
392
+ if link_ref == undefined then link_ref= 0
393
+ link_ref=parseInt(link_ref)
394
+ comment_span.dataset.link_ref = link_ref + 1
395
+ comment_span.dataset['link_address-'+link_ref]=params.link_address
396
+ comment_span.dataset['link_text-'+link_ref]=params.link_text
397
+ comment_span.dataset['link_id-'+link_ref]=params.link_id
398
+
399
+ window.addLinks=(request,link_ref)->
400
+ request.link_ref=link_ref
401
+ for i in [0...link_ref]
402
+ request['link-'+i]= getLinkData(i)
403
+ request