corn_js 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1,2 @@
1
- //= require corn_js/corn.js
1
+
2
+ //= require_tree .
@@ -1,236 +1,368 @@
1
- var Popcorn = function($element, defaults) {
2
- this.$element = $element;
3
- this.defaults = defaults;
4
- };
5
-
6
- Popcorn.prototype.decorateContainerWithHtml = function() {
7
- if (this.positionType) {
8
- throw "inferPositionType must be called after decorateContainerWithHtml";
1
+ var Popcorn = function($element, defaults) {
2
+ this.$element = $element;
3
+ this.$anchor = null;
4
+ this.defaults = defaults;
5
+ };
6
+
7
+ Popcorn.prototype.decorateContainerWithHtml = function() {
8
+ if (this.positionType) {
9
+ throw "inferPositionType must be called after decorateContainerWithHtml";
10
+ }
11
+ this.containerOf().hide().addClass('popcorn');
12
+ this.containerOf().contents().wrap("<div class='popcorn-body'/>");
13
+ this.containerOf().append("<div class='popcorn-tail'></div>");
14
+ };
15
+
16
+ Popcorn.prototype.inferPositionType = function() {
17
+ var self = this;
18
+ self.$anchor = self.$element;
19
+
20
+ function _createPositionType(defaults) {
21
+ if(self.$element.offset().left < 1){
22
+ self.$anchor = self.$element.parent();
23
+ }
24
+ if (self.collideLeft()) { return new LeftPosition(self); }
25
+ else if (self.collideRight()) { return new RightPosition(self); }
26
+ return new CenterPosition(self);
27
+ }
28
+
29
+ self.positionType = _createPositionType(self.defaults);
30
+ };
31
+
32
+ Popcorn.prototype.decorateContainerWithArrow = function() {
33
+ if (this.positionType == undefined) { throw "inferPositionType must be called in order to set up the arrows"; }
34
+
35
+ this.containerOf().find('.popcorn-tail').css('left', this.positionType.leftOffset());
36
+ };
37
+
38
+ var LeftPosition = function(popcorn) {
39
+ // TODO centrare la freccia sull'elemento puntato da fatpopcorn
40
+ // this.leftOffset = function() {return popcorn.$element.offset().left + (popcorn.$element.width() - popcorn.defaults.arrowWidth) / 2; }
41
+ this.leftOffset = function() { return popcorn.defaults.marginArrow; }
42
+ this.left = function() { return popcorn.defaults.marginBorder; }
43
+ this.top = function() { return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement };
44
+ };
45
+
46
+ var RightPosition = function(popcorn) {
47
+ this.leftOffset = function() { return popcorn.containerOf().width() - (popcorn.defaults.arrowWidth + popcorn.defaults.marginArrow); }
48
+ this.left = function() { return $('html').width() - popcorn.defaults.marginBorder - popcorn.containerOf().width(); }
49
+ this.top = function() { return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement };
50
+ };
51
+
52
+ var CenterPosition = function(popcorn) {
53
+ this.leftOffset = function() { return popcorn.containerOf().width() / 2 - Math.floor(popcorn.defaults.arrowWidth / 2); }
54
+ this.left = function() {
55
+ var middleOfElement = Popcorn.calculateMiddle(popcorn.$anchor.offset().left, popcorn.$anchor.width());
56
+ return Popcorn.calculateLeftOffset(middleOfElement, popcorn.containerOf().width());
57
+ }
58
+ this.top = function() { return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement };
59
+ };
60
+
61
+ Popcorn.containerOf = function($element) {
62
+ return $element.next();
9
63
  }
10
- this.containerOf().hide().addClass('popcorn');
11
- this.containerOf().contents().wrap("<div class='popcorn-body'/>");
12
- this.containerOf().append("<div class='popcorn-tail'></div>");
13
- };
14
-
15
- Popcorn.prototype.inferPositionType = function() {
16
- var self = this;
17
-
18
- function _createPositionType(defaults) {
19
- if (self.collideLeft()) { return new LeftPosition(self); }
20
- else if (self.collideRight()) { return new RightPosition(self); }
21
- return new CenterPosition(self);
64
+
65
+ Popcorn.prototype.containerOf = function() {
66
+ return Popcorn.containerOf(this.$element);
22
67
  }
23
-
24
- self.positionType = _createPositionType(self.defaults);
25
- };
26
-
27
- Popcorn.prototype.decorateContainerWithArrow = function() {
28
- if (this.positionType == undefined) { throw "inferPositionType must be called in order to set up the arrows"; }
29
-
30
- this.containerOf().find('.popcorn-tail').css('left', this.positionType.leftOffset());
31
- };
32
-
33
- var LeftPosition = function(popcorn) {
34
- // TODO centrare la freccia sull'elemento puntato da fatpopcorn
35
- // this.leftOffset = function() {return popcorn.$element.offset().left + (popcorn.$element.width() - popcorn.defaults.arrowWidth) / 2; }
36
- this.leftOffset = function() { return popcorn.defaults.marginArrow; }
37
- this.left = function() { return popcorn.defaults.marginBorder; }
38
- this.top = function() { return popcorn.$element.offset().top + popcorn.defaults.verticalOffsetFromElement };
39
- };
40
-
41
- var RightPosition = function(popcorn) {
42
- this.leftOffset = function() { return popcorn.containerOf().width() - (popcorn.defaults.arrowWidth + popcorn.defaults.marginArrow); }
43
- this.left = function() { return $('html').width() - popcorn.defaults.marginBorder - popcorn.containerOf().width(); }
44
- this.top = function() { return popcorn.$element.offset().top + popcorn.defaults.verticalOffsetFromElement };
45
- };
46
-
47
- var CenterPosition = function(popcorn) {
48
- this.leftOffset = function() { return popcorn.containerOf().width() / 2 - Math.floor(popcorn.defaults.arrowWidth / 2); }
49
- this.left = function() {
50
- var middleOfElement = Popcorn.calculateMiddle(popcorn.$element.offset().left, popcorn.$element.width());
51
- return Popcorn.calculateLeftOffset(middleOfElement, popcorn.containerOf().width());
68
+
69
+ Popcorn.prototype.setContainerPosition = function() {
70
+ this.containerOf().css('top', this.positionType.top());
71
+ this.containerOf().css('left', this.positionType.left());
72
+ }
73
+
74
+ Popcorn.prototype.collideRight = function() {
75
+ var middleOfElement = Popcorn.calculateMiddle(this.$anchor.offset().left, this.$anchor.width());
76
+ var rightOffset = middleOfElement + this.containerOf().width() / 2;
77
+ return ($('html').width() - (rightOffset + this.defaults.marginBorder)) < 0;
52
78
  }
53
- this.top = function() { return popcorn.$element.offset().top + popcorn.defaults.verticalOffsetFromElement };
54
- };
55
-
56
- Popcorn.containerOf = function($element) {
57
- return $element.next();
58
- }
59
-
60
- Popcorn.prototype.containerOf = function() {
61
- return Popcorn.containerOf(this.$element);
62
- }
63
-
64
- Popcorn.prototype.setContainerPosition = function() {
65
- this.containerOf().css('top', this.positionType.top());
66
- this.containerOf().css('left', this.positionType.left());
67
- }
68
-
69
- Popcorn.prototype.collideRight = function() {
70
- var middleOfElement = Popcorn.calculateMiddle(this.$element.offset().left, this.$element.width());
71
- var rightOffset = middleOfElement + this.containerOf().width() / 2;
72
- return ($('html').width() - (rightOffset + this.defaults.marginBorder)) < 0;
73
- }
74
-
75
- Popcorn.prototype.collideLeft = function() {
76
- return (Popcorn.calculateLeftOffset(this.middleOf(), this.containerOf().width()) - this.defaults.marginBorder) < 0;
77
- }
78
-
79
- Popcorn.prototype.middleOf = function() {
80
- return Popcorn.calculateMiddle(this.$element.offset().left, this.$element.width());
81
- }
82
-
83
- Popcorn.calculateMiddle = function(left, width) {
84
- return left + width / 2;
85
- }
86
-
87
- Popcorn.calculateRightOffset = function(middlePoint, width) {
88
- return middlePoint + width / 2;
89
- }
90
- Popcorn.calculateLeftOffset = function(middlePoint, width) {
91
- return middlePoint - width / 2;
92
- }
93
- Popcorn.containerOf = function(element) {
94
- return $(element).next();
95
- }
96
- Popcorn.hideAllContainers = function($elements) {
97
- $elements.each(function() {
98
- Popcorn.containerOf(this).hide();
99
- });
100
- }
101
- Popcorn.hideAllContainersExcept = function($elements, element) {
102
- $elements.not(element).each(function() {
103
- Popcorn.containerOf(this).hide()
104
- });
105
- };
106
-
107
- var FatPopcorn = function($element, defaults) {
108
- function _checkOptions(options) {
109
- return typeof options.modelName === undefined ||
110
- options.modelId === undefined ||
111
- options.token === undefined ||
112
- options.current_user === undefined;
113
- };
114
- var self = this;
115
-
116
- self.$element = $element;
117
- self.defaults = defaults;
118
- self.attributes = defaults;
119
- this.get = function(option) {
120
- return self.defaults[option];
79
+
80
+ Popcorn.prototype.collideLeft = function() {
81
+ return (Popcorn.calculateLeftOffset(this.middleOf(), this.containerOf().width()) - this.defaults.marginBorder) < 0;
121
82
  }
122
-
123
- if (_checkOptions(self.defaults)){
124
- throw("parameters [modelName], [modelId], [token], [current_user] are required");
83
+
84
+ Popcorn.prototype.middleOf = function() {
85
+ return Popcorn.calculateMiddle(this.$anchor.offset().left, this.$anchor.width());
125
86
  }
126
- };
127
- FatPopcorn.prototype = new Popcorn();
128
-
129
- // // all'inizializzazione dello stream fa una richiesta e mostra la rotella di caricamento
130
- // // all'arrivo della risposta toglie la rotella di caricamento e mostra lo stream arrivato
131
- // FatPopcorn.prototype.initStream = function() {
132
- // this.requestStream(onArrivedStream);
133
- // this.showSpinner();
134
- // };
135
- // FatPopcorn.prototype.onArrivedStream = function() {
136
- // this.hideSpinner();
137
- // this.showStream();
138
- // };
139
- // FatPopcorn.prototype.initEdit = function() {
140
- //
141
- // };
142
- // FatPopcorn.prototype.initHistory = function() {
143
- //
144
- // };
145
-
146
- FatPopcorn.prototype.initEdit = function() {
147
- this.setupFormAction();
148
- this.setupFormToken();
149
-
150
- };
151
- FatPopcorn.prototype.actionUrl = function() {
152
- return '/active_metadata/' + this.get('modelName') + '/' + this.get('modelId') + '/' + this.currentLabel() + '/notes';
153
- };
154
- FatPopcorn.prototype.setupFormAction = function() {
155
- $('.fatpopcorn #notes_form').attr('action', this.actionUrl());
156
- };
157
- FatPopcorn.prototype.setupFormToken = function() {
158
- $('.fatpopcorn #notes_form input[name="authenticity_token"]').val(this.get('token'));
159
- };
160
- FatPopcorn.prototype.currentLabel = function() {
161
- return this.$element.attr('data-label');
162
- };
163
- FatPopcorn.hideContainer = function() {
164
- $(window).off('resize');
165
- return FatPopcorn.container().hide();
166
- }
167
- FatPopcorn.container = function() {
168
- return $('.fatpopcorn').first();
169
- }
170
- FatPopcorn.prototype.containerOf = function() {
171
- return $('.fatpopcorn').first();
172
- }
173
-
174
- FatPopcorn.decorateContainerWithHtml = function() {
175
- var self = this;
176
- function _html() {
177
- return '<div class="fatpopcorn"><div class="popcorn-body"><div class="header"><ul><li class="stream-tab active"><div>stream</div></li>' +
178
- '<li class="edit-tab"><div>edit</div></li><li class="history-tab"><div>history</div></li></ul></div>' +
179
- '<div class="stream"><div class="content"></div></div><div class="history"><div class="content"></div></div>' +
180
- '<div class="edit"><div class="watchlist"><h1>Watchlist</h1><div class="on-off _23states"><input type="radio" ' +
181
- 'name="on" value="on" id="on"><label for="on" class="true"><span class="true">On</span></label><input type="radio" name="off" value="off" id="off"><label for="off" class="false">' +
182
- '<span class="false">Off</span></label></div></div><hr/><div class="note"><h1>Nota</h1><form form action="" method="post" id="notes_form"><div style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8"><input type="hidden" value="' + self['token'] + '" name="authenticity_token"></div>' +
183
- '<textarea name="note" rows="4"></textarea><a id="send_note" href="#">Inserisci</a></form></div><hr/>' +
184
- '<div class="attachment"><h1>Allegati</h1><a href="#">Inserisci</a></div><div class="info"><h1>Info</h1><p>Lorem ipsum...</p></div></div></div><div class="popcorn-tail"></div><span class="loader"></span></div>';
87
+
88
+ Popcorn.calculateMiddle = function(left, width) {
89
+ return left + width / 2;
90
+ }
91
+
92
+ Popcorn.calculateRightOffset = function(middlePoint, width) {
93
+ return middlePoint + width / 2;
94
+ }
95
+ Popcorn.calculateLeftOffset = function(middlePoint, width) {
96
+ return middlePoint - width / 2;
97
+ }
98
+ Popcorn.containerOf = function(element) {
99
+ return $(element).next();
100
+ }
101
+ Popcorn.hideAllContainers = function($elements) {
102
+ $elements.each(function() {
103
+ Popcorn.containerOf(this).hide();
104
+ });
105
+ }
106
+ Popcorn.hideAllContainersExcept = function($elements, element) {
107
+ $elements.not(element).each(function() {
108
+ Popcorn.containerOf(this).hide()
109
+ });
185
110
  };
186
-
187
- if (FatPopcorn.container().size() == 0) {
188
- $('body').append(_html());
111
+
112
+ var FatPopcorn = function($element, defaults) {
113
+ function _checkOptions(options) {
114
+ return typeof options.modelId === undefined ||
115
+ options.token === undefined ||
116
+ options.current_user === undefined;
117
+ };
118
+ var self = this;
119
+
120
+ self.$element = $element;
121
+
122
+ self.defaults = defaults;
123
+ self.attributes = defaults;
124
+ this.get = function(option) {
125
+ return self.defaults[option];
126
+ }
127
+
128
+ self.defaults['modelName'] = self.$element.attr('data-model');
129
+
130
+ if (_checkOptions(self.defaults)){
131
+ throw("parameters [modelId], [token], [current_user] are required");
132
+ }
133
+ };
134
+ FatPopcorn.prototype = new Popcorn();
135
+
136
+ FatPopcorn.prototype.init = function() {
137
+ this.setupFormAction();
138
+ this.setupFormToken();
139
+ this.setupStreamUrl();
140
+ this.setupHistoryUrl();
141
+ this.setupAttachmentsUrl();
142
+ this.setupWatchlistUrl();
143
+
144
+ if (this.hasStream()) {
145
+ $('.fatpopcorn .stream-tab').click();
146
+ }
147
+ else {
148
+ $('.fatpopcorn .edit-tab').click();
149
+ }
150
+ };
151
+
152
+ FatPopcorn.prototype.setupStreamUrl = function() {
153
+ $('.fatpopcorn .stream').attr('data-url', this.streamUrl());
154
+ };
155
+ FatPopcorn.prototype.setupAttachmentsUrl = function() {
156
+ FatPopcorn.createAttachmentButton(this.attachmentsUrl());
157
+ $('.fatpopcorn .edit').attr('data-attach-url', this.attachmentsUrl());
158
+ };
159
+ FatPopcorn.prototype.setupWatchlistUrl = function() {
160
+ $('.fatpopcorn .edit').attr('data-url', this.watchlistUrl());
161
+ };
162
+ FatPopcorn.prototype.setupHistoryUrl = function() {
163
+ $('.fatpopcorn .history').attr('data-url', this.historyUrl());
164
+ };
165
+ FatPopcorn.prototype.setupFormAction = function() {
166
+ $('.fatpopcorn #notes_form').attr('action', this.actionUrl());
167
+ $('.fatpopcorn .edit').attr('data-note-url', this.actionUrl());
168
+ };
169
+ FatPopcorn.prototype.setupFormToken = function() {
170
+ $('.fatpopcorn #notes_form input[name="authenticity_token"]').val(FatPopcorn.formToken());
171
+ };
172
+ FatPopcorn.prototype.actionUrl = function() {
173
+ return this.urlPrefix() + '/notes';
174
+ };
175
+ FatPopcorn.prototype.streamUrl = function() {
176
+ return this.urlPrefix() + '/stream';
177
+ };
178
+ FatPopcorn.prototype.attachmentsUrl = function() {
179
+ return this.urlPrefix() + '/attachments';
180
+ };
181
+ FatPopcorn.prototype.watchlistUrl = function() {
182
+ return this.urlPrefix() + '/watchers/' + this.defaults.current_user;
183
+ };
184
+ FatPopcorn.prototype.historyUrl = function() {
185
+ return this.urlPrefix() + '/histories';
186
+ };
187
+ FatPopcorn.prototype.urlPrefix = function() {
188
+ return '/active_metadata/' + this.get('modelName') + '/' + this.get('modelId') + '/' + this.currentLabel();
189
+ };
190
+ FatPopcorn.prototype.currentLabel = function() {
191
+ return this.$element.attr('data-label');
192
+ };
193
+ FatPopcorn.prototype.hasStream = function() {
194
+ return this.$element.attr('data-stream') === 'true';
195
+ };
196
+ FatPopcorn.hideContainer = function() {
197
+ $(window).off('resize');
198
+ return FatPopcorn.container().hide();
189
199
  }
190
- FatPopcorn.container().hide();
191
- }
192
- FatPopcorn.prototype.addGripToElement = function($element) {
193
- return $element.wrap('<span class="fatpopcorn_grip"/>');
194
- };
195
- FatPopcorn.prototype.gripOf = function($element) {
196
- return $element.parent();
197
- };
198
-
199
- FatPopcorn.activateTheClickedTab = function() {
200
- function _tabBodyName(tabName) { return '.' + tabName.split('-')[0].trim(); }
201
- $('.fatpopcorn .header > ul > li').click(function(e){
202
- e.stopPropagation();
203
- e.preventDefault();
204
- $('.fatpopcorn .active').removeClass('active');
205
- $('.fatpopcorn .popcorn-body > div:not(.header)').hide();
206
- $(_tabBodyName($(this).attr('class'))).show();
207
- $(this).addClass('active');
208
- });
209
- };
210
-
211
- FatPopcorn.containerVisible = function () {
212
- return FatPopcorn.container().is(':visible');
213
- };
214
-
215
- FatPopcorn.bindRemoteEvents = function() {
216
- $('.fatpopcorn').on('click', function(e) {
217
- e.stopPropagation();
218
- e.preventDefault();
219
- });
220
- $('#send_note').on('click',function() {
221
- $.post($('form#notes_form').attr('action'), $('form#notes_form').serialize())
222
- .success(FatPopcorn.newNoteSuccess);
223
- });
224
- $('.loader').ajaxSend(function(e) {
225
- $(this).show();
226
- });
227
- $('.loader').ajaxComplete(function() {
228
- $(this).hide();
229
- });
230
- };
231
-
232
- FatPopcorn.prototype.newNoteSuccess = function() { $('.stream-tab').click(); };
200
+ FatPopcorn.container = function() {
201
+ return $('.fatpopcorn').first();
202
+ }
203
+ FatPopcorn.prototype.containerOf = function() {
204
+ return $('.fatpopcorn').first();
205
+ }
206
+ FatPopcorn.onCompleteUpload = function(id, fileName, response, qq) {
207
+ if(qq.getQueue().length == 1) {
208
+ $('.qq-upload-list').empty();
209
+ }
210
+ if(!response.success){
211
+ K.message.error(K.message.buildListOfErrors(response.errors));
212
+ return;
213
+ }
214
+
215
+ $('.stream-tab').click();
216
+ }
217
+ FatPopcorn.decorateContainerWithHtml = function() {
218
+ var self = this;
219
+ function _html() {
220
+ return '<div class="fatpopcorn"><div class="popcorn-body"><div class="header"><ul><li class="stream-tab"><div>stream</div></li>' +
221
+ '<li class="edit-tab"><div>edit</div></li><li class="history-tab"><div>history</div></li></ul></div>' +
222
+ '<div class="stream"><div class="content"></div></div><div class="history"><div class="content"></div></div>' +
223
+ '<div class="edit"><div class="watchlist"><h1>Watchlist</h1><div class="on-off _23states"><input name="watchlist" id="watchlist_true" value="true" type="radio"><label class="true" for="watchlist_true"><span>On</span></label><input checked="checked" name="watchlist" id="watchlist_false" value="false" type="radio"><label class="false" for="watchlist_false"><span>Off</span></label></div></div><hr/>' +
224
+ '<div class="note"><h1>Nota</h1><form form action="" method="post" id="notes_form"><div style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8"><input type="hidden" value="' + self['token'] + '" name="authenticity_token"></div>' +
225
+ '<textarea id="note_text" name="note" rows="4"></textarea><a id="send_note" href="#">Inserisci</a></form></div><hr/>' +
226
+ '<div class="attachment"><h1>Allegati</h1><div id="fatpopcorn_attach"></div><div id="attach_output"></div></div>' +
227
+ '<div class="info"><h1>Info</h1><p>Lorem ipsum...</p></div></div></div><div class="popcorn-tail"></div><span class="loader"></span></div>';
228
+ };
229
+
230
+ if (FatPopcorn.container().size() == 0) {
231
+ $('body').append(_html());
232
+ }
233
+ FatPopcorn.container().hide();
234
+ }
235
+
236
+ FatPopcorn.prototype.addGripToElement = function($element) {
237
+ if (!$element.parent().is('span.fatpopcorn_grip') && this.defaults.autoWrap) {
238
+ $element.wrap('<span class="fatpopcorn_grip"/>')
239
+ }
240
+ return $element.parent();
241
+ };
242
+ FatPopcorn.prototype.gripOf = function($element) {
243
+ return $element.parent();
244
+ };
245
+
246
+ FatPopcorn.activateTheClickedTab = function() {
247
+ $('.fatpopcorn .header > ul > li').click(function(e){
248
+ var self = this;
249
+
250
+ function _tabBodyName(tabName) { return tabName.split('-')[0].trim(); };
251
+ function _currentTabName() { return _tabBodyName($(self).attr('class')); };
252
+ function _currentTab() { return $('.' + _currentTabName()); };
253
+ function _currentTabMethod() { return _currentTabName() + "Event"; }
254
+
255
+ e.stopPropagation();
256
+ e.preventDefault();
257
+
258
+ $('.fatpopcorn .active').removeClass('active');
259
+ $('.fatpopcorn .popcorn-body > div:not(.header)').hide();
260
+
261
+ _currentTab().show();
233
262
 
263
+ $(this).addClass('active');
264
+
265
+ FatPopcorn[_currentTabMethod()].call();
266
+ });
267
+ };
268
+ FatPopcorn.streamEvent = function() {
269
+ $.ajax($('.fatpopcorn .stream').attr('data-url'))
270
+ .success(FatPopcorn.getStreamSuccess);
271
+ };
272
+ FatPopcorn.editEvent = function() {
273
+ // should do something?
274
+ };
275
+ FatPopcorn.historyEvent = function() {
276
+ $.ajax($('.fatpopcorn .history').attr('data-url'))
277
+ .success(FatPopcorn.getHistorySuccess);
278
+ };
279
+ FatPopcorn.containerVisible = function () {
280
+ return FatPopcorn.container().is(':visible');
281
+ };
282
+ FatPopcorn.formToken = function() {
283
+ return $('meta[name="csrf-token"]').attr('content');
284
+ };
285
+ FatPopcorn.createAttachmentButton = function(actionUrl) {
286
+ delete FatPopcorn.uploader;
287
+ FatPopcorn.uploader = new qq.FileUploader({
288
+ element: document.getElementById('fatpopcorn_attach'),
289
+ allowedExtensions: [],
290
+ params: { authenticity_token: FatPopcorn.formToken(), target: "attach_output"},
291
+ uploadButtonText: 'Inserisci',
292
+ action: actionUrl,
293
+ multiple: true,
294
+ onComplete: FatPopcorn.onCompleteUpload
295
+ });
296
+ };
297
+
298
+ FatPopcorn.bindRemoteEvents = function() {
299
+
300
+ function _startWatching() {
301
+ _callWatchlistService({authenticity_token: FatPopcorn.formToken() });
302
+ };
303
+ function _stopWatching() {
304
+ _callWatchlistService({_method: 'delete', authenticity_token: FatPopcorn.formToken() });
305
+ };
306
+ function _callWatchlistService(data) {
307
+ $.post($('.fatpopcorn .edit').attr('data-url'), data).success(function() {console.log("watchlist success")});
308
+ };
309
+
310
+ $('.fatpopcorn').on('click', function(e) {
311
+ e.stopPropagation();
312
+ });
313
+ $('.fatpopcorn #watchlist_true').click(function() {
314
+ _startWatching()
315
+ });
316
+ $('.fatpopcorn #watchlist_false').click(function() {
317
+ _stopWatching();
318
+ });
319
+
320
+ $('#send_note').click(function() {
321
+ if ($('#note_text').val() == '') return false;
322
+
323
+ $.post($('form#notes_form').attr('action'), $('form#notes_form').serialize()).success('success.rails', FatPopcorn.newNoteSuccess);
324
+ });
325
+ $('.loader').ajaxSend(function(e) { $(this).show(); });
326
+ $('.loader').ajaxComplete(function() { $(this).hide(); });
327
+ };
328
+
329
+ FatPopcorn.newNoteSuccess = function(data) {
330
+ $('.fatpopcorn textarea#note_text').val('');
331
+ $('.fatpopcorn .stream-tab').click();
332
+ };
333
+
334
+ FatPopcorn.getStreamSuccess = function(data) {
335
+ $('.fatpopcorn .stream .content').empty();
336
+ $('.fatpopcorn .stream .content').append(data);
337
+ $('.fatpopcorn .stream .attachment span.delete').click(FatPopcorn.deleteAttachment);
338
+ $('.fatpopcorn .stream .note span.delete').click(FatPopcorn.deleteNote);
339
+ };
340
+ FatPopcorn.deleteAttachment = function(e) {
341
+ FatPopcorn.deleteStream(e, $('.fatpopcorn .edit').attr('data-attach-url'));
342
+ };
343
+ FatPopcorn.deleteNote = function(e) {
344
+ FatPopcorn.deleteStream(e, $('.fatpopcorn .edit').attr('data-note-url'));
345
+ };
346
+ FatPopcorn.deleteStream = function(e, urlPrefix) {
347
+ function _url() {
348
+ return urlPrefix + '/' + $(e.target).parent().attr('data-id');
349
+ }
350
+
351
+ $.post(_url(), {_method: 'delete'}).
352
+ success('success.rails', FatPopcorn.deleteSuccess).
353
+ fail(FatPopcorn.deleteFailure);
354
+ };
355
+ FatPopcorn.deleteSuccess = function() {
356
+ $('.fatpopcorn .stream-tab').click();
357
+ console.log('deleted attach success');
358
+ };
359
+ FatPopcorn.deleteFailure = function() {
360
+ console.log('deleted attach failure');
361
+ };
362
+ FatPopcorn.getHistorySuccess = function(data) {
363
+ $('.fatpopcorn .history .content').empty();
364
+ $('.fatpopcorn .history .content').append(data);
365
+ };
234
366
  (function($) {
235
367
  $.fn.fatpopcorn = function(options) {
236
368
 
@@ -252,15 +384,22 @@ FatPopcorn.prototype.newNoteSuccess = function() { $('.stream-tab').click(); };
252
384
  FatPopcorn.decorateContainerWithHtml();
253
385
  FatPopcorn.activateTheClickedTab();
254
386
  FatPopcorn.bindRemoteEvents();
255
-
387
+ FatPopcorn.createAttachmentButton();
388
+
256
389
  function _setUpElement() {
257
390
  var $element = $(this), fatpopcorn = new FatPopcorn($element, defaults);
258
391
  fatpopcorn.addGripToElement($element);
259
-
392
+
393
+ fatpopcorn.gripOf($element).children().click(function(e) {
394
+ $(e.target).data('elementMatched', true);
395
+ });
396
+
260
397
  fatpopcorn.gripOf($element).click(function(e) {
398
+ if ($(e.target).data('elementMatched')) return;
399
+
261
400
  e.stopPropagation();
262
401
  e.preventDefault();
263
- fatpopcorn.initEdit();
402
+ fatpopcorn.init();
264
403
 
265
404
  if (FatPopcorn.containerVisible()) {
266
405
  FatPopcorn.hideContainer();
@@ -272,7 +411,6 @@ FatPopcorn.prototype.newNoteSuccess = function() { $('.stream-tab').click(); };
272
411
  fatpopcorn.decorateContainerWithArrow();
273
412
  fatpopcorn.containerOf().show();
274
413
 
275
-
276
414
  $(window).on('resize',function() {
277
415
  if (FatPopcorn.containerVisible()) fatpopcorn.setContainerPosition();
278
416
  });