skinny_forum 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +92 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +29 -0
  7. data/README.rdoc +3 -0
  8. data/Rakefile +34 -0
  9. data/app/assets/images/.keep +0 -0
  10. data/app/assets/images/skinny_forum/.keep +0 -0
  11. data/app/assets/images/skinny_forum/internet.png +0 -0
  12. data/app/assets/images/skinny_forum/myphoto.jpg +0 -0
  13. data/app/assets/images/skinny_forum/silver_selector.png +0 -0
  14. data/app/assets/javascripts/skinnyforum/application.js +22 -0
  15. data/app/assets/javascripts/skinnyforum/forum_admin.js.coffee +433 -0
  16. data/app/assets/javascripts/skinnyforum/forum_basic.js.coffee +269 -0
  17. data/app/assets/javascripts/skinnyforum/forum_translator.js.coffee +113 -0
  18. data/app/assets/javascripts/skinnyforum/forum_user.js.coffee +394 -0
  19. data/app/assets/javascripts/skinnyforum/global_java.js +141 -0
  20. data/app/assets/stylesheets/skinnyforum/application.css.scss +25 -0
  21. data/app/assets/stylesheets/skinnyforum/custom.css.scss +289 -0
  22. data/app/controllers/skinnyforum/application_controller.rb +24 -0
  23. data/app/controllers/skinnyforum/forums_controller.rb +130 -0
  24. data/app/helpers/skinnyforum/application_helper.rb +4 -0
  25. data/app/mailers/.keep +0 -0
  26. data/app/mailers/skinnyforum/user_mailer.rb +13 -0
  27. data/app/models/.keep +0 -0
  28. data/app/models/skinnyforum/forum.rb +251 -0
  29. data/app/models/skinnyforum/forum_category.rb +70 -0
  30. data/app/models/skinnyforum/forum_hyperlink.rb +50 -0
  31. data/app/models/skinnyforum/forum_language.rb +86 -0
  32. data/app/models/skinnyforum/forum_people_list.rb +183 -0
  33. data/app/models/skinnyforum/forum_photo.rb +62 -0
  34. data/app/models/skinnyforum/forum_topic.rb +137 -0
  35. data/app/models/skinnyforum/forum_translation.rb +109 -0
  36. data/app/views/layouts/skinnyforum/application.html.erb +14 -0
  37. data/app/views/skinnyforum/forums/_dummy.html.erb +0 -0
  38. data/app/views/skinnyforum/forums/_forum.html.erb +107 -0
  39. data/app/views/skinnyforum/forums/_forum_admin.html.erb +133 -0
  40. data/app/views/skinnyforum/forums/newforum_photo.js.erb +1 -0
  41. data/app/views/skinnyforum/user_mailer/note_to_forum_users.html.erb +32 -0
  42. data/app_data/forum_base.csv +8 -0
  43. data/app_data/forum_help.csv +24 -0
  44. data/app_data/reset cmds +13 -0
  45. data/config/locales/skinnyforum/forum_de.yml +88 -0
  46. data/config/locales/skinnyforum/forum_en.yml +88 -0
  47. data/config/locales/skinnyforum/forum_es.yml +88 -0
  48. data/config/locales/skinnyforum/forum_fr.yml +88 -0
  49. data/config/routes.rb +2 -0
  50. data/db/migrate/20130100_add_users.rb +11 -0
  51. data/db/migrate/20140601_add_forums.rb +164 -0
  52. data/lib/skinny_forum.rb +4 -0
  53. data/lib/skinny_forum/engine.rb +5 -0
  54. data/lib/skinny_forum/forum_shared_code.rb +94 -0
  55. data/lib/skinny_forum/version.rb +3 -0
  56. data/lib/tasks/forum_tasks.rake +52 -0
  57. data/lib/tasks/skinny_forum_tasks.rake +4 -0
  58. data/skinny_forum.gemspec +28 -0
  59. data/test/dummy/README.rdoc +28 -0
  60. data/test/dummy/Rakefile +6 -0
  61. data/test/dummy/app/assets/images/.keep +0 -0
  62. data/test/dummy/app/assets/javascripts/application.js +13 -0
  63. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  64. data/test/dummy/app/controllers/application_controller.rb +5 -0
  65. data/test/dummy/app/controllers/concerns/.keep +0 -0
  66. data/test/dummy/app/helpers/application_helper.rb +2 -0
  67. data/test/dummy/app/mailers/.keep +0 -0
  68. data/test/dummy/app/models/.keep +0 -0
  69. data/test/dummy/app/models/concerns/.keep +0 -0
  70. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  71. data/test/dummy/bin/bundle +3 -0
  72. data/test/dummy/bin/rails +4 -0
  73. data/test/dummy/bin/rake +4 -0
  74. data/test/dummy/config.ru +4 -0
  75. data/test/dummy/config/application.rb +23 -0
  76. data/test/dummy/config/boot.rb +5 -0
  77. data/test/dummy/config/database.yml +25 -0
  78. data/test/dummy/config/environment.rb +5 -0
  79. data/test/dummy/config/environments/development.rb +37 -0
  80. data/test/dummy/config/environments/production.rb +83 -0
  81. data/test/dummy/config/environments/test.rb +39 -0
  82. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  83. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  84. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  85. data/test/dummy/config/initializers/inflections.rb +16 -0
  86. data/test/dummy/config/initializers/mime_types.rb +4 -0
  87. data/test/dummy/config/initializers/session_store.rb +3 -0
  88. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  89. data/test/dummy/config/locales/en.yml +23 -0
  90. data/test/dummy/config/routes.rb +4 -0
  91. data/test/dummy/config/secrets.yml +22 -0
  92. data/test/dummy/lib/assets/.keep +0 -0
  93. data/test/dummy/public/404.html +67 -0
  94. data/test/dummy/public/422.html +67 -0
  95. data/test/dummy/public/500.html +66 -0
  96. data/test/dummy/public/favicon.ico +0 -0
  97. data/test/integration/navigation_test.rb +10 -0
  98. data/test/skinny_forum_test.rb +7 -0
  99. data/test/test_helper.rb +15 -0
  100. metadata +234 -0
@@ -0,0 +1,269 @@
1
+ jQuery ->
2
+ unless checkPage(getHomeName()) then return
3
+ $('#gotoforum').click ->
4
+ startForum()
5
+ $('#close-forum').click ->
6
+ closeForum()
7
+ $('#forum-senate').delegate 'img[id = forum-photo]','click', (evt) ->
8
+ playPhoto(event.target)
9
+ $('#forum-senate').delegate 'img[id = forum-photo]','mouseenter', (evt) ->
10
+ makePhotoBig(event.target,true)
11
+ $('#forum-senate').delegate 'img[id = forum-photo]','mouseleave', (evt) ->
12
+ makePhotoBig(event.target,false)
13
+ $('#forum-topic').change ->
14
+ getSenate()
15
+ $('#forum-language').change ->
16
+ getSenate()
17
+ $('#forum-category').change ->
18
+ changeTopic()
19
+
20
+ window.startForum = ->
21
+ hideMe({id: showPageName()})
22
+ blockMe({id: 'forum-page'})
23
+ clearSenate()
24
+ showMe({id:'forum-category'})
25
+ $.post('forum_ajax', {function: 'get topics', category: 'select category', hold_test: true, restricted: true},loadList)
26
+ comment_span = document.getElementById('forum-comment-span')
27
+ comment_span.dataset.translating == 'false'
28
+ hideMe({obj: comment_span})
29
+ $.post('forum_ajax', {function:'categories', language: getLanguage(),list:'forum-category', hold_test: true, restricted: true},loadList)
30
+ $.post('forum_ajax', {function:'categories', language: getLanguage(),list:'forum-category-admin', hold_test: false, restricted: false},loadList)
31
+ $.post('forum_ajax', {function:'categories', language: getLanguage(),list:'forum-category-monitor', hold_test: false, restricted: false},loadList)
32
+ $.post('forum_ajax',{function:'get language set',list:'forum-language',active:true,by_name:false},loadList)
33
+ $.post('forum_ajax',{function:'get language set',list:'forum-translation-language',active:true},loadCustomList)
34
+
35
+ closeForum = ->
36
+ hideMe({id: 'forum-page'})
37
+ blockMe({id: showPageName()})
38
+ clearSenate()
39
+ setCategory(0)
40
+ setTopic(0)
41
+ changeTopic()
42
+ cancelComment()
43
+ $('#forum-comment').val('')
44
+ if $('#comment-maybe')?
45
+ $('#comment-maybe').remove()
46
+ hideMe({id: 'comment-span'})
47
+ hideMe({id: 'forum-senate-admin-lists'})
48
+ hideMe({id: "forum-senate-admin-users"})
49
+ blockMe({id: 'forum-senate'})
50
+
51
+ loadCustomList=(params)->
52
+ if params?
53
+ list_data = params.list_data
54
+ selector = document.getElementById('forum-translation-choices')
55
+ $(selector).children().remove()
56
+ for i in [0...list_data.length]
57
+ option = document.createElement('LI')
58
+ option.dataset.choice = list_data[i].item
59
+ option.dataset.display= list_data[i].value
60
+ option.innerHTML=list_data[i].value
61
+ selector.appendChild(option)
62
+ option.id='forum-translation-choice'
63
+ option.classList.add('drop-menu')
64
+
65
+ window.loadList = (params)->
66
+ if params? && params.list_data?
67
+ list_data = params.list_data
68
+ if params.name != undefined
69
+ selector= $("[name="+params.name+"]")
70
+ else if params.id !=undefined
71
+ selector = $(document.getElementById(params.id))
72
+ else if params.obj !=undefined
73
+ selector=$(params.obj)
74
+ selector.children().remove()
75
+ for i in [0...list_data.length]
76
+ unless list_data[i].state == 'closed'
77
+ pushOption(selector,list_data[i], 0)
78
+
79
+ window.pushOption = (q_selector,data,offset)->
80
+ selector=q_selector.get()[0]
81
+ if selector?
82
+ option = document.createElement("option")
83
+ option.text = data.value
84
+ option.value = data.item
85
+ option.id = 'forum-admin-option'
86
+ ref = selector.children[selector.children.length - offset]
87
+ if ref==undefined
88
+ selector.appendChild(option)
89
+ else
90
+ selector.insertBefore(option,ref)
91
+ else
92
+ alert "#{params.list} #{params.by_name} is not there"
93
+
94
+
95
+ window.getLanguage = ->
96
+ getSelectValues({id:'forum-language', ref:true})
97
+
98
+ window.getTopic = ->
99
+ document.getElementById('forum-topic').value
100
+
101
+ window.getCategory = ->
102
+ document.getElementById('forum-category').value
103
+
104
+ window.setTopic = (index)->
105
+ topic = $('select[id = forum-topic]').get()[0]
106
+ topic.selectedIndex= index
107
+
108
+ window.setCategory = (index)->
109
+ category = $('select[id = forum-category]').get()[0]
110
+ category.selectedIndex= index
111
+
112
+ window.clearSenate = ->
113
+ children = $('#just-a-comment')
114
+ if children?
115
+ $('span[id = just-a-comment]').remove()
116
+ deleteMyData(document.getElementById('forum-senate'))
117
+ hideMe({id: 'forum-voting-booth'})
118
+ hideMe({id: 'subscribe-forum'})
119
+ hideMe({id: 'unsubscribe-forum'})
120
+ hideMe({id: 'add-new-thing-span'})
121
+ hideMe({id: 'forum-senate-admin'})
122
+ document.getElementById('forum-senate').dataset.admining = 'false'
123
+
124
+ window.setSenate = (params)->
125
+ page = document.getElementById('forum-senate')
126
+ showMe({id: '#forum-senate'})
127
+ document.getElementById('forum-comment-span').dataset.next_id = params.index
128
+ kids = $(page).children()
129
+ unless !params.the_list?
130
+ for i in [0...kids.length]
131
+ unless kids[i].id == 'forum-comment-span'
132
+ removeMe({obj:kids[i]})
133
+ unless params.the_list.length == 0
134
+ for i in [0...params.the_list.length]
135
+ buildSpan(page, i, params.the_list[i])
136
+
137
+ buildSpan = (page, index, params) ->
138
+ span = document.createElement('span')
139
+ if index == 0
140
+ span.className = 'forum-topic'
141
+ page.dataset.moderator = params.moderator
142
+ if params.moderator then $.post('forum_ajax',{function:'get translations',topic:getTopic(),language:getTranslationLanguage()},saveTranslationSuggestions)
143
+ if params.subscribed? then setSubscriber(params.subscribed)
144
+ if params.vote then setUpVoting({vote: params.vote, votes: params.votes})
145
+ if params.moderator then showMe({id: 'review-forum-span'})
146
+ if params.review then page.dataset.review = true
147
+ else span.className = "forum-comment"
148
+ span.id = "just-a-comment"
149
+ indexes=Object.keys(params)
150
+ for k in [0...indexes.length]
151
+ unless indexes[k]=='empty_list'
152
+ span.dataset[indexes[k]]=params[indexes[k]]
153
+ the_list=JSON.parse(params.empty_list)
154
+ span.dataset.needy_list= JSON.stringify(the_list) #convert to javascript friendly JSON
155
+ span.style.textIndent = "#{params.indent * 20}px"
156
+ if page.dataset.moderator == 'true' && params.comment_state == 'new'
157
+ da_class = 'comment-new'
158
+ else if page.dataset.moderator == 'true' && params.comment_state == 'reject'
159
+ da_class = 'comment-reject'
160
+ else da_class = 'forum-comment'
161
+ span.innerHTML = "<p class = '#{da_class}'>" + params.content + '<span name = owner-of-record class = right>' + params.owner_name + '</span></p>'
162
+ page.appendChild(span)
163
+ if params.has_photo
164
+ putPhotoIn(span,params.photos)
165
+ if params.hyperlinks?
166
+ hyperlinks=params.hyperlinks
167
+ for i in [0...hyperlinks.length]
168
+ writeLink(hyperlinks[i],span)
169
+
170
+ window.getSelectedId = ->
171
+ if window.getSelection != undefined
172
+ sel = window.getSelection()
173
+ unless sel== null
174
+ span = sel.anchorNode.parentNode.parentElement
175
+ if sel.rangeCount
176
+ container = document.createElement("div")
177
+ for i in [0...sel.rangeCount]
178
+ container.appendChild(sel.getRangeAt(i).cloneContents())
179
+ html = container.innerHTML
180
+ else if document.selection != undefined
181
+ if (document.selection.type == "Text")
182
+ html = document.selection.createRange().htmlText
183
+ unless span?
184
+ spans = $('#forum-senate span')
185
+ if spans.length > 0
186
+ span = spans[spans.length - 1]
187
+ {selection: html, id: span.dataset.id}
188
+
189
+ putPhotoIn=(span,urls)->
190
+ span.dataset.already_has_photo=true
191
+ for i in [0...urls.length]
192
+ img= new Image
193
+ img.src=urls[i]
194
+ img.className= 'forum-photo'
195
+ img.id='forum-photo'
196
+ paragraph=span.children[0]
197
+ paragraph.appendChild(img)
198
+
199
+ makePhotoBig=(photo,bigger)->
200
+ if bigger
201
+ x=photo.x
202
+ ref=photo.width+x
203
+ photo.classList.add('forum-big-photo')
204
+ photo.classList.remove('forum-photo')
205
+ photo.style.position='relative'
206
+ photo.style.left=x+'px'
207
+ b=-113
208
+ m=0.16129
209
+ error=$(window).width()*m+b
210
+ new_left= ref-photo.width-error
211
+ if new_left<40 then new_left=40
212
+ photo.style.left= new_left+'px'
213
+
214
+ else
215
+ photo.classList.remove('forum-big-photo')
216
+ photo.classList.add('forum-photo')
217
+ photo.style.left=''
218
+ photo.style.position=''
219
+
220
+ playPhoto=(photo)->
221
+ photo.src=photo.src
222
+ event.stopPropagation()
223
+
224
+ askForPhotAgain=(params)->
225
+ $.post('forum_ajax',{function:'get forum photo',tag:params.tag,edit:params.edit,count:params.count,id:params.id,parent:params.parent},needAPhoto)
226
+
227
+ window.needAPhoto=(params)->
228
+ if params.urls.length > 0
229
+ setMaybeId(params)
230
+ if params.edit=='true'
231
+ span=$('[data-id='+params.id+']').get()[0]
232
+ else
233
+ span=$("[data-tag=#{params.tag}]").get()[0]
234
+ putPhotoIn(span,params.urls)
235
+ else #if params.count < 20
236
+ setTimeout (-> askForPhotAgain(params)), 2000
237
+
238
+ getSenate = ->
239
+ clearSenate()
240
+ select = document.getElementById('forum-topic').value
241
+ if select == 'request new topic'
242
+ addNewThing({'forum-topic'})
243
+ else
244
+ document.getElementById('forum-senate').dataset.topic = select
245
+ $.post('forum_ajax', {function: 'get senate',language:getLanguage(), topic: select}, setSenate)
246
+
247
+
248
+ addNewThing = (select)->
249
+ $('#add-new-thing-input').val('')
250
+ showMe({id: 'add-new-thing-span'})
251
+ hideMe({id: 'forum-senate'})
252
+ $('#add-new-thing-span').data.thing = select
253
+
254
+ window.changeTopic = ->
255
+ setTopic(0)
256
+ select = document.getElementById('forum-category').value
257
+ hideMe({id: 'forum-senate-admin-lists'})
258
+ hideMe({id:'forum-senate-admin-users'})
259
+ clearSenate()
260
+ if select == 'request new category'
261
+ addNewThing('forum-category')
262
+ else if select == 'admin'
263
+ doAdminStuff()
264
+ else if select != 'select category'
265
+ blockMe({id: 'forum-senate'})
266
+ hideMe({id: 'forum-senate-admin'})
267
+ document.getElementById('forum-senate').dataset.category = select
268
+ $.post('forum_ajax', {function: 'get topics',list:'forum-topic', category: select, hold_test: true, restricted: true}, loadList)
269
+
@@ -0,0 +1,113 @@
1
+ jQuery ->
2
+ unless checkPage(getHomeName()) then return
3
+ $('#forum-comment-span').delegate '[id = forum-translation-choice]','click', (evt) ->
4
+ setTranslationLanguage(event.target)
5
+ $('#forum-translation-language').click ->
6
+ showMe({id:'forum-translation-choices'})
7
+ $('#forum-comment-span').delegate 'textarea[id= forum-translation-suggestion]','dblclick', (evt) ->
8
+ makeThisTheTranslations(event.target)
9
+
10
+ makeThisTheTranslations=(which)->
11
+ $('#forum-comment-translation').val(which.value)
12
+
13
+ window.getTranslationLanguage=->
14
+ $('#forum-translation-language').val()
15
+
16
+ window.setTranslationState = ->
17
+ comment_span = document.getElementById('forum-comment-span')
18
+ the_span=$("[data-id="+comment_span.dataset.target+']').get()[0]
19
+ if comment_span.dataset.translating == 'true'
20
+ comment_span.dataset.translating = false
21
+ hideMe({id: 'forum-translation-span'})
22
+ document.getElementById('forum-comment-translation').innerHTML=''
23
+ document.getElementById('forum-comment').innerHTML=''
24
+ else
25
+ comment_span.dataset.translating = true
26
+ blockMe({id: 'forum-translation-span'})
27
+ if the_span.dataset.needs_translation =='true'
28
+ my_list=JSON.parse(the_span.dataset.needy_list )
29
+ $('[name=add-forum-translation]').get()[0].classList.add('hot')
30
+ colorList('forum-translation-choices',my_list)
31
+ setLinkTranslations()
32
+ if document.getElementById('forum-comment').value== ''
33
+ setCommentSpan()
34
+
35
+ setTranslationLanguage=(selected)->
36
+ document.getElementById('forum-translation-language').value= selected.dataset.display
37
+ hideMe(id:'forum-translation-choices')
38
+ if isModerator() then $.post('forum_ajax',{function:'get translations',topic:getTopic(),language:getTranslationLanguage()},saveTranslationSuggestions)
39
+
40
+ colorList=(the_list,data_list)->
41
+ items=document.getElementById(the_list).children
42
+ for i in [0...items.length]
43
+ if items[i].dataset.choice in data_list
44
+ items[i].classList.add('needy')
45
+ else
46
+ items[i].classList.remove('needy')
47
+
48
+ window.checkForSuggestedTranslations=(id)->
49
+ page=document.getElementById('forum-senate')
50
+ $('#forum-comment-translation').val(page.dataset["translation-"+id ] )
51
+ $('[id=forum-translation-suggestion]').remove()
52
+ suggestions =page.dataset['suggestedtranslation-'+id]
53
+ if suggestions != undefined
54
+ suggestion_list = JSON.parse(suggestions)
55
+ list_parent=document.getElementById('forum-translation-scroll')
56
+ for i in [0...suggestion_list.length]
57
+ suggestion = document.createElement('textarea')
58
+ suggestion.value = suggestion_list[i]
59
+ suggestion.id='forum-translation-suggestion'
60
+ suggestion.className='senate-new'
61
+ list_parent.appendChild(suggestion)
62
+
63
+ window.saveTranslationSuggestions=(params)->
64
+ if params? && params.length>0 && params[0].forum_id?
65
+ page = document.getElementById('forum-senate')
66
+ for i in [0...params.length]
67
+ if params[i].suggestion
68
+ if page.dataset['suggestedtranslation-' + params[i].forum_id] == undefined
69
+ temp=[params[i].translation]
70
+ else
71
+ temp=JSON.parse(page.dataset['suggestedtranslation-' + params[i].forum_id] )
72
+ temp.push(params[i].translation)
73
+ page.dataset['suggestedtranslation-' + params[i].forum_id]= JSON.stringify(temp)
74
+ else
75
+ page.dataset['translation-'+ params[i].forum_id]= params[i].translation
76
+
77
+ window.setLinkTranslations=->
78
+ hideMe({id:'forum-add-hyperlink-span'})
79
+ showMe({id:'forum-translate-hyperlink-span'})
80
+ comment_span=document.getElementById('forum-comment-span')
81
+ link_ref=comment_span.dataset.link_ref
82
+ unless link_ref == undefined
83
+ link_ref=parseInt(link_ref)
84
+ hyper=document.getElementById('forum-translate-hyperlink-span')
85
+ for i in [0...link_ref]
86
+ span= document.createElement('span')
87
+ span.id='translation-span-id-'+i
88
+ space= document.createElement('span')
89
+ space.innerHTML=' '
90
+ span.appendChild(space)
91
+ label_it=document.createElement('label')
92
+ label_it.innerHTML= comment_span.dataset['link_text-'+i]
93
+ span.appendChild(label_it)
94
+ text_in=document.createElement('input')
95
+ text_in.type='text'
96
+ text_in.id= 'hyperlink-translation-input'
97
+ text_in.name=i
98
+ text_in.className= "admin-edit-field"
99
+ span.appendChild(text_in)
100
+ hyper.appendChild(span)
101
+
102
+ window.addLinkTranslations=(params)->
103
+ comment_span=document.getElementById('forum-comment-span')
104
+ link_ref=comment_span.dataset.link_ref
105
+ translations= $('[id=hyperlink-translation-input]')
106
+ unless link_ref == undefined || translations.length == 0
107
+ link_ref=parseInt(link_ref)
108
+ for i in [0...link_ref]
109
+ data= params['link-'+i]
110
+ alert data
111
+ data['translation']= translations[i].value
112
+ params['link-'+i]=data
113
+ params
@@ -0,0 +1,394 @@
1
+ jQuery ->
2
+ unless checkPage(getHomeName()) then return
3
+ $('#my-forum-photo').ajaxForm()
4
+ $('input[id = forum-user-button]').click ->
5
+ manageUserAction(event.target)
6
+ $('#forum-comment-span').click ->
7
+ event.stopPropagation()
8
+ $('input[id=forum_photo_file]').change ->
9
+ unless $('input[id=forum_photo_file]').val() == ''
10
+ document.getElementById('forum-comment-span').dataset.photo = true
11
+ $('#forum-add-photo').click ->
12
+ $('input[id=forum_photo_file]').click()
13
+ event.stopPropagation()
14
+ $('#forum-create-hyperlink').click ->
15
+ addHotLlink()
16
+ $('#forum-add-hyperlink').click ->
17
+ showHyperlinkInput()
18
+ #------------------------------------- this needs to be last binding ------------------------#
19
+ $('#forum-senate').click ->
20
+ checkPost()
21
+ event.stopPropagation()
22
+ $('button[id = forum-vote]').click ->
23
+ doForumVoting(event.target)
24
+
25
+ doForumVoting = (which)->
26
+ switch(which.parentNode.name)
27
+ when 'up'
28
+ voteUp()
29
+ when 'down'
30
+ voteDown()
31
+ else
32
+
33
+ manageUserAction = (which)->
34
+ switch(which.name)
35
+ when 'forum-edit-comment'
36
+ editComment()
37
+ when 'forum-accept-comment'
38
+ setCommentState('accept')
39
+ when 'forum-reject-rest'
40
+ setStateRest('reject')
41
+ when 'forum-accept-rest'
42
+ setStateRest('accept')
43
+ when 'forum-reject-comment'
44
+ setCommentState('reject')
45
+ when 'forum-cancel-comment'
46
+ cancelComment()
47
+ when 'forum-post-it'
48
+ setComment()
49
+ when 'forum-subscribe'
50
+ subscribe(true)
51
+ when 'forum-unsubscribe'
52
+ subscribe(false)
53
+ when 'add-forum-translation'
54
+ setTranslationState()
55
+ when 'add-forum-voting'
56
+ $.post('forum_ajax', {function: 'add voting', topic: getTopic()}, setUpVoting)
57
+ when 'forum-add-suggestion-submit'
58
+ sendNewThing()
59
+ when 'forum-restrict-comment'
60
+ checkRestriction(which)
61
+ when 'forum-invite-comment'
62
+ showMe({id: 'forum-invitation-span'})
63
+ when 'forum-invite-list-save'
64
+ saveInviteList()
65
+ else
66
+
67
+ checkRestriction = (which)->
68
+ comment_span = document.getElementById('forum-comment-span')
69
+ if comment_span.dataset.restricted == 'false'
70
+ which.value = which.dataset.unrestrict
71
+ comment_span.dataset.restricted = true
72
+ else
73
+ which.value = which.dataset.restrict
74
+ comment_span.dataset.restricted = false
75
+
76
+ setStateRest = (new_state)->
77
+ spans = $('span[data-state = new]')
78
+ for i in [0...spans.length]
79
+ setTheState([spans[i]], new_state)
80
+ $.post('forum_ajax', {function: 'set_the_rest', topic: getTopic(), state: new_state})
81
+ clearSenate()
82
+ setCategory(0)
83
+ setTopic(0)
84
+
85
+ subscribe = (subscribed)->
86
+ setSubscriber(subscribed)
87
+ $.post('forum_ajax', {function: 'subscribe', topic: getTopic()})
88
+
89
+ voteUp = ->
90
+ $.post('forum_ajax', {function: 'vote', vote: 1, topic: getTopic()}, refreshVote)
91
+ voteIt(1)
92
+
93
+ window.setCommentSpan=->
94
+ if $('#comment-maybe')? && $('#comment-maybe').length == 1
95
+ id = parseInt($('#comment-maybe').get()[0].dataset.parent)
96
+ span = $("span[data-id = #{id}]").get()[0]
97
+ comment_span = document.getElementById('forum-comment-span')
98
+ if span.dataset.owner == 'true'
99
+ comment_span.dataset.editing = true
100
+ comment_span.dataset.edit=true
101
+ comment_span.dataset.target = id
102
+ comment_span.dataset.restricted = span.dataset.restricted
103
+ if span.dataset.already_has_photo=='true'
104
+ comment_span.dataset.already_has_photo=true
105
+ if span.dataset.restricted == 'true'
106
+ $('[name = forum-restrict-comment]').val($('[name = forum-restrict-comment]').get()[0].dataset.unrestrict)
107
+ else
108
+ $('[name = forum-restrict-comment]').val($('[name = forum-restrict-comment]').get()[0].dataset.restrict)
109
+ comment_data = span.childNodes[0].innerHTML.split('<span')
110
+ $('#forum-comment').val(comment_data[0])
111
+ if isModerator()
112
+ checkForSuggestedTranslations(id)
113
+
114
+ editComment = ->
115
+ setCommentSpan()
116
+
117
+ voteDown = ->
118
+ $.post('forum_ajax', {function: 'vote', vote: -1, topic: getTopic()}, refreshVote)
119
+ voteIt(-1)
120
+
121
+ voteIt = (vote)->
122
+ votes = parseInt(document.getElementById('forum-vote-count').innerHTML.split(' = ')[1])
123
+ document.getElementById('forum-vote-count').innerHTML = 'Vote = ' + (votes + vote)
124
+
125
+ refreshVote = (params)->
126
+ document.getElementById('forum-vote-count').innerHTML = 'Vote = ' + (params.votes)
127
+
128
+ setUpVoting = (params)->
129
+ if params.vote
130
+ showMe({id: 'forum-voting-booth'})
131
+ refreshVote({votes: params.votes})
132
+ else
133
+ hideMe({id: 'forum-voting-booth'})
134
+
135
+ setCommentState = (new_state)->
136
+ span = $('#comment-maybe').get()[0]
137
+ unless span == undefined
138
+ id = parseInt($('#comment-maybe').get()[0].dataset.parent)
139
+ setTheState($("span[data-id = #{id}]"), new_state)
140
+ resolution = getMyValue('forum-comment')
141
+ setMyValue('forum-comment', '')
142
+ hideMe({id: 'comment-span'})
143
+ $('#comment-maybe').remove()
144
+ $.post('forum_ajax', {function: new_state, id: id, resolution: resolution})
145
+
146
+ setTheState = (span, new_state)->
147
+ baby_span = span[0].children[0]
148
+ switch new_state
149
+ when 'accept'
150
+ baby_span.className = 'forum-comment'
151
+ when 'reject'
152
+ baby_span.className = 'comment-reject'
153
+ else
154
+ baby_span.parentNode.dataset.comment_state = new_state
155
+
156
+ window.cancelComment = ->
157
+ $('#forum-comment').val('')
158
+ $('#comment-maybe').remove()
159
+ hideMe({id: 'forum-comment-span'})
160
+
161
+ checkPost = ->
162
+ unless getSelectedId().id == undefined
163
+ page = document.getElementById('forum-senate')
164
+ if $('#comment-maybe')?
165
+ $('#comment-maybe').remove()
166
+ id = parseInt(getSelectedId().id)
167
+ if id?
168
+ offset = setNewComment(id)
169
+ if page.dataset.language
170
+ showMe({id: 'add-forum-translation'})
171
+ else hideMe({id: 'add-forum-translation'})
172
+ if isModerator()
173
+ moderatorOnOff(true)
174
+ else moderatorOnOff(false)
175
+ placeCommentSpan(offset, id)
176
+
177
+ window.isModerator =->
178
+ page = document.getElementById('forum-senate')
179
+ page.dataset.moderator == 'true'
180
+
181
+ setNewComment = (id)->
182
+ $('#forum-comment').val('')
183
+ $('#forum-comment-translation').val('')
184
+ $('[name=translation-suggestion]').remove
185
+ page = document.getElementById('forum-senate')
186
+ span = document.createElement('span')
187
+ span.className = "forum-comment-new"
188
+ span.id = "comment-maybe"
189
+ parent_span = $("span[data-id = #{id}]").get()[0]
190
+ span.style.textIndent = 20 + parseInt(parent_span.style.textIndent) + 'px'
191
+ span.dataset.parent = id
192
+ span.innerHTML = "<p class = 'forum-comment'>your post </p>"
193
+ if page.dataset.review == 'true'
194
+ $("span[data-id = #{id}]").after(span)
195
+ else
196
+ $(lastChild(id)).after(span)
197
+ if parent_span.dataset.owner == 'true' then showMe({name: 'forum-edit-comment'})
198
+ else hideMe({name: 'forum-edit-comment'})
199
+ if document.getElementById('forum-comment-span').dataset.translating == 'true'
200
+ editComment()
201
+ parseInt(span.offsetTop)
202
+
203
+ placeCommentSpan = (offset, id) ->
204
+ comment = document.getElementById('forum-comment-span')
205
+ comment.style.position = 'absolute'
206
+ comment.style.top = offset + 'px'
207
+ comment.style.left = '250px'
208
+ comment.dataset.restricted = false
209
+ hideMe({id:'forum-add-hyperlink-span'})
210
+ $('[name = forum-restrict-comment]').val($('[name = forum-restrict-comment]').get()[0].dataset.restrict)
211
+ comment.dataset.owner = $("span[data-id = #{id}]").get()[0].dataset.owner
212
+ comment.dataset.target=id
213
+ showMe({obj: comment})
214
+ $('#forum-comment').focus()
215
+ the_span=$("[data-id="+id+']').get()[0]
216
+ if the_span.dataset.needs_translation =='true'
217
+ $('[name=add-forum-translation]').get()[0].classList.add('hot')
218
+ else
219
+ $('[name=add-forum-translation]').get()[0].classList.remove('hot')
220
+
221
+ moderatorOnOff = (on_off)->
222
+ if on_off
223
+ showMe({name: 'forum-accept-comment'})
224
+ showMe({name: 'forum-reject-comment'})
225
+ showMe({name: 'add-forum-voting'})
226
+ else
227
+ hideMe({name: 'forum-accept-comment'})
228
+ hideMe({name: 'forum-reject-comment'})
229
+ hideMe({name: 'add-forum-voting'})
230
+
231
+ lastChild = (id)->
232
+ kids = $("span[data-parent = #{id}]")
233
+ if kids.length == 0
234
+ $("span[data-id = #{id}]")
235
+ else
236
+ lastChild(kids[kids.length - 1].dataset.id)
237
+
238
+ setComment = ->
239
+ request = {function: 'post'}
240
+ request.comment = $('#forum-comment').val().trim()
241
+ if request.comment == "" && $('#comment-maybe')?
242
+ $('#comment-maybe').remove()
243
+ else if $('#comment-maybe')?
244
+ sendPost(request)
245
+ hideMe({id: 'forum-comment-span'})
246
+ $('#forum-comment').val('')
247
+
248
+ window.sendPost = (request)->
249
+ comment_span = document.getElementById('forum-comment-span')
250
+ if comment_span.dataset.edit == 'true' || comment_span.dataset.translating == 'true'
251
+ id = parseInt($('#comment-maybe').get()[0].dataset.parent)
252
+ span = $("span[data-id = #{id}]").get()[0]
253
+ request.id = id #id is nil if new comment
254
+ $('#comment-maybe').remove()
255
+ else
256
+ span = document.getElementById('comment-maybe')
257
+ next_id = parseInt(comment_span.dataset.next_id)
258
+ comment_span.dataset.next_id = next_id+1
259
+ request.tag = next_id
260
+ span.dataset.id = 'new' + next_id
261
+ span.dataset.tag=next_id
262
+ request.edit = comment_span.dataset.edit == 'true'
263
+ request.translation = $('#forum-comment-translation').val().trim()
264
+ request.language = getTranslationLanguage()
265
+ request.translating = comment_span.dataset.translating == 'true'
266
+ request.restricted = span.dataset.restricted
267
+ request.invitees = $('#forum-invite-list').val()
268
+ request.parent = span.dataset.parent
269
+ request.topic = getTopic()
270
+ request.category = getCategory()
271
+ request.needs_photo= comment_span.dataset.needs_photo == 'true'
272
+ request.already_has_photo=comment_span.dataset.already_has_photo
273
+ request.count=0
274
+ link_ref=comment_span.dataset.link_ref
275
+ unless link_ref == undefined
276
+ request= addLinks(request,parseInt(link_ref))
277
+ request= addLinkTranslations(request)
278
+ writeParagraph(span,request)
279
+ if request.needs_photo
280
+ document.getElementById('forum_photo_data').value= JSON.stringify(request) #goes up in the submit
281
+ $('#my-forum-photo').submit()
282
+ document.getElementById('forum-comment-span').dataset.needs_photo =false
283
+ document.getElementById('forum_photo_data').value=''
284
+ request.function='get forum photo'
285
+ $.post('forum_ajax', request, needAPhoto)
286
+ $('#forum_photo_file').val('')
287
+ else
288
+ $.post('forum_ajax', request, setMaybeId)
289
+
290
+ window.setMaybeId = (params)->
291
+ unless params.edit
292
+ span = $("[data-tag=#{params.tag}]").get()[0]
293
+ span.id = 'just-a-comment'
294
+ span.dataset.id = params.id
295
+ span.dataset.parent = params.parent
296
+
297
+ writeParagraph=(span,params)->
298
+ comment_span = document.getElementById('forum-comment-span')
299
+ if comment_span.dataset.editing=='true'
300
+ the_html = span.children[0].innerHTML
301
+ paragraph = the_html.split('owner-of-record')[0]
302
+ comment_text = paragraph.split('<')[0]
303
+ span.innerHTML = the_html.replace(comment_text,params.comment)
304
+ else
305
+ span.innerHTML = "<p class = 'comment'> " + params.comment + '</p>'
306
+ span.dataset.restricted = comment_span.dataset.restricted
307
+ span.dataset.owner = true
308
+ link_refs=parseInt(comment_span.dataset.link_ref)
309
+ unless link_refs==undefined
310
+ for i in [0...link_refs]
311
+ writeLocalLink(span,i)
312
+
313
+ writeLocalLink=(span,link_ref)->
314
+ data= getLinkData(link_ref)
315
+ writeLink(data,span)
316
+
317
+ window.getLinkData=(link_ref)->
318
+ comment_span = document.getElementById('forum-comment-span')
319
+ data={}
320
+ data.link_address = comment_span.dataset['link_address-'+link_ref]
321
+ data.link_text= comment_span.dataset['link_text-'+link_ref]
322
+ data.link_id = comment_span.dataset['link_id-'+link_ref]
323
+ data
324
+
325
+ window.writeLink=(data,span)->
326
+ link=document.createElement('a')
327
+ link.href='http://'+data.link_address
328
+ link.innerHTML=data.link_text
329
+ link.id=data.link_id
330
+ link.className='external'
331
+ space1=document.createElement('span')
332
+ space1.innerHTML=' '
333
+ space2=document.createElement('span')
334
+ space2.innerHTML=' '
335
+ paragraph=span.children[0]
336
+ paragraph.appendChild((space1))
337
+ paragraph.appendChild(link)
338
+ paragraph.appendChild(space2)
339
+
340
+ sendNewThing = ->
341
+ hideMe([
342
+ ID: 'add-new-thing-span'
343
+ ])
344
+ showMe({id: 'forum-senate'})
345
+ $.post('forum_ajax',
346
+ {function: 'topic suggestion', suggestion: $('#forum-suggestion').val(), category: getCategory()})
347
+ $('#forum-suggestion').val('')
348
+ setCategory(0)
349
+ setTopic(0)
350
+
351
+ window.setSubscriber = (subscribed)->
352
+ document.getElementById('forum-senate').dataset.subscribed = subscribed
353
+ if subscribed
354
+ hideMe({id: 'subscribe-forum'})
355
+ showMe({id: 'unsubscribe-forum'})
356
+ else
357
+ showMe({id: 'subscribe-forum'})
358
+ hideMe({id: 'unsubscribe-forum'})
359
+
360
+ addHotLlink=-> #to span.dataset
361
+ data={function:'add hot link'}
362
+ data.link_address= $('[id=forum-hyperlink-address]').val()
363
+ data.link_text=$('[id=forum-hyperlink-text]').val()
364
+ link_ref=document.getElementById('forum-comment-span').dataset.link_ref
365
+ if link_ref == undefined
366
+ data.link_id = 0
367
+ else
368
+ data.link_id = parseInt(link_ref)
369
+ sethyperlink(data)
370
+ clearhyperlink()
371
+
372
+ clearhyperlink=->
373
+ $('[id=forum-hyperlink-address]').val('')
374
+ $('[id=forum-hyperlink-text]').val('')
375
+ hideMe({id:'forum-hyperlink-span'})
376
+
377
+ showHyperlinkInput=->
378
+ showMe({id:'forum-add-hyperlink-span'})
379
+
380
+ sethyperlink=(params)-> #push data onto dataset
381
+ comment_span=document.getElementById('forum-comment-span')
382
+ link_ref=comment_span.dataset.link_ref
383
+ if link_ref == undefined then link_ref= 0
384
+ link_ref=parseInt(link_ref)
385
+ comment_span.dataset.link_ref = link_ref + 1
386
+ comment_span.dataset['link_address-'+link_ref]=params.link_address
387
+ comment_span.dataset['link_text-'+link_ref]=params.link_text
388
+ comment_span.dataset['link_id-'+link_ref]=params.link_id
389
+
390
+ window.addLinks=(request,link_ref)->
391
+ request.link_ref=link_ref
392
+ for i in [0...link_ref]
393
+ request['link-'+i]= getLinkData(i)
394
+ request