corn_js 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,368 +1,461 @@
1
- var Popcorn = function($element, defaults) {
1
+ var Popcorn = function ($element, defaults) {
2
2
  this.$element = $element;
3
3
  this.$anchor = this.$element;
4
- this.defaults = defaults;
5
- };
4
+ this.defaults = defaults;
5
+ };
6
6
 
7
- Popcorn.prototype.decorateContainerWithHtml = function() {
7
+ Popcorn.prototype.decorateContainerWithHtml = function () {
8
8
  if (this.positionType) {
9
- throw "inferPositionType must be called after decorateContainerWithHtml";
9
+ throw "inferPositionType must be called after decorateContainerWithHtml";
10
10
  }
11
11
  this.containerOf().hide().addClass('popcorn');
12
- if(!this.containerOf().find('.popcorn-body').length){
12
+ if (!this.containerOf().find('.popcorn-body').length) {
13
13
  this.containerOf().contents().wrap("<div class='popcorn-body'/>");
14
14
  }
15
15
  this.containerOf().append("<div class='popcorn-tail'></div>");
16
- };
16
+ };
17
17
 
18
- Popcorn.prototype.inferPositionType = function() {
18
+ Popcorn.prototype.inferPositionType = function () {
19
19
  var self = this;
20
20
  this.$anchor = this.$element;
21
-
21
+
22
22
  function _createPositionType(defaults) {
23
23
 
24
- if(self.$element.offset().left < 1) {
25
- self.$anchor = self.$element.parent();
26
- }
24
+ if (self.$element.offset().left < 1) {
25
+ self.$anchor = self.$element.parent();
26
+ }
27
27
 
28
- if (self.collideLeft()) { return new LeftPosition(self); }
29
- else if (self.collideRight()) { return new RightPosition(self); }
30
- return new CenterPosition(self);
28
+ if (self.collideLeft()) {
29
+ return new LeftPosition(self);
30
+ }
31
+ else if (self.collideRight()) {
32
+ return new RightPosition(self);
33
+ }
34
+ return new CenterPosition(self);
31
35
  }
32
-
36
+
33
37
  self.positionType = _createPositionType(self.defaults);
34
- };
35
-
36
- Popcorn.prototype.decorateContainerWithArrow = function() {
37
- if (this.positionType == undefined) { throw "inferPositionType must be called in order to set up the arrows"; }
38
+ };
39
+
40
+ Popcorn.prototype.decorateContainerWithArrow = function () {
41
+ if (this.positionType == undefined) {
42
+ throw "inferPositionType must be called in order to set up the arrows";
43
+ }
38
44
 
39
45
  this.containerOf().find('.popcorn-tail').css('left', this.positionType.leftOffset());
40
- };
46
+ };
41
47
 
42
- var LeftPosition = function(popcorn) {
48
+ var LeftPosition = function (popcorn) {
43
49
  // TODO centrare la freccia sull'elemento puntato da fatpopcorn
44
50
  // this.leftOffset = function() {return popcorn.$element.offset().left + (popcorn.$element.width() - popcorn.defaults.arrowWidth) / 2; }
45
- this.leftOffset = function() { return popcorn.defaults.marginArrow; }
46
- this.left = function() { return popcorn.defaults.marginBorder; }
47
- this.top = function() { return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement };
48
- };
49
-
50
- var RightPosition = function(popcorn) {
51
- this.leftOffset = function() { return popcorn.containerOf().width() - (popcorn.defaults.arrowWidth + popcorn.defaults.marginArrow); }
52
- this.left = function() { return $('html').width() - popcorn.defaults.marginBorder - popcorn.containerOf().width(); }
53
- this.top = function() { return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement };
54
- };
55
-
56
- var CenterPosition = function(popcorn) {
57
- this.leftOffset = function() { return popcorn.containerOf().width() / 2 - Math.floor(popcorn.defaults.arrowWidth / 2); }
58
- this.left = function() {
59
- var middleOfElement = Popcorn.calculateMiddle(popcorn.$anchor.offset().left, popcorn.$anchor.width());
60
- return Popcorn.calculateLeftOffset(middleOfElement, popcorn.containerOf().width());
51
+ this.leftOffset = function () {
52
+ return popcorn.defaults.marginArrow;
53
+ }
54
+ this.left = function () {
55
+ return popcorn.defaults.marginBorder;
56
+ }
57
+ this.top = function () {
58
+ return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement
59
+ };
60
+ };
61
+
62
+ var RightPosition = function (popcorn) {
63
+ this.leftOffset = function () {
64
+ return popcorn.containerOf().width() - (popcorn.defaults.arrowWidth + popcorn.defaults.marginArrow);
65
+ }
66
+ this.left = function () {
67
+ return $('html').width() - popcorn.defaults.marginBorder - popcorn.containerOf().width();
61
68
  }
62
- this.top = function() { return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement };
63
- };
69
+ this.top = function () {
70
+ return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement
71
+ };
72
+ };
73
+
74
+ var CenterPosition = function (popcorn) {
75
+ this.leftOffset = function () {
76
+ return popcorn.containerOf().width() / 2 - Math.floor(popcorn.defaults.arrowWidth / 2);
77
+ }
78
+ this.left = function () {
79
+ var middleOfElement = Popcorn.calculateMiddle(popcorn.$anchor.offset().left, popcorn.$anchor.width());
80
+ return Popcorn.calculateLeftOffset(middleOfElement, popcorn.containerOf().width());
81
+ }
82
+ this.top = function () {
83
+ return popcorn.$anchor.offset().top + popcorn.defaults.verticalOffsetFromElement
84
+ };
85
+ };
64
86
 
65
- Popcorn.containerOf = function($element) {
87
+ Popcorn.containerOf = function ($element) {
66
88
  return $element.next();
67
- }
89
+ }
68
90
 
69
- Popcorn.prototype.containerOf = function() {
91
+ Popcorn.prototype.containerOf = function () {
70
92
  return Popcorn.containerOf(this.$element);
71
- }
93
+ }
72
94
 
73
- Popcorn.prototype.setContainerPosition = function() {
95
+ Popcorn.prototype.setContainerPosition = function () {
74
96
  this.containerOf().css('top', this.positionType.top());
75
97
  this.containerOf().css('left', this.positionType.left());
76
- }
98
+ }
77
99
 
78
- Popcorn.prototype.collideRight = function() {
100
+ Popcorn.prototype.collideRight = function () {
79
101
  var middleOfElement = Popcorn.calculateMiddle(this.$anchor.offset().left, this.$anchor.width());
80
102
  var rightOffset = middleOfElement + this.containerOf().width() / 2;
81
103
  return ($('html').width() - (rightOffset + this.defaults.marginBorder)) < 0;
82
- }
104
+ }
83
105
 
84
- Popcorn.prototype.collideLeft = function() {
106
+ Popcorn.prototype.collideLeft = function () {
85
107
  return (Popcorn.calculateLeftOffset(this.middleOf(), this.containerOf().width()) - this.defaults.marginBorder) < 0;
86
- }
108
+ }
87
109
 
88
- Popcorn.prototype.middleOf = function() {
110
+ Popcorn.prototype.middleOf = function () {
89
111
  return Popcorn.calculateMiddle(this.$anchor.offset().left, this.$anchor.width());
90
- }
112
+ }
91
113
 
92
- Popcorn.calculateMiddle = function(left, width) {
114
+ Popcorn.calculateMiddle = function (left, width) {
93
115
  return left + width / 2;
94
- }
116
+ }
95
117
 
96
- Popcorn.calculateRightOffset = function(middlePoint, width) {
118
+ Popcorn.calculateRightOffset = function (middlePoint, width) {
97
119
  return middlePoint + width / 2;
98
- }
99
- Popcorn.calculateLeftOffset = function(middlePoint, width) {
120
+ }
121
+ Popcorn.calculateLeftOffset = function (middlePoint, width) {
100
122
  return middlePoint - width / 2;
101
- }
102
- Popcorn.containerOf = function(element) {
123
+ }
124
+ Popcorn.containerOf = function (element) {
103
125
  return $(element).next();
104
- }
105
- Popcorn.hideAllContainers = function($elements) {
106
- $elements.each(function() {
107
- Popcorn.containerOf(this).hide();
126
+ }
127
+ Popcorn.hideAllContainers = function ($elements) {
128
+ $elements.each(function () {
129
+ Popcorn.containerOf(this).hide();
108
130
  });
109
- }
110
- Popcorn.hideAllContainersExcept = function($elements, element) {
111
- $elements.not(element).each(function() {
112
- Popcorn.containerOf(this).hide()
131
+ }
132
+ Popcorn.hideAllContainersExcept = function ($elements, element) {
133
+ $elements.not(element).each(function () {
134
+ Popcorn.containerOf(this).hide()
113
135
  });
114
- };
136
+ };
115
137
 
116
- var FatPopcorn = function($element, defaults) {
138
+ var FatPopcorn = function ($element, defaults) {
117
139
  function _checkOptions(options) {
118
- if (!options.autoWrap) options.autoWrap = false;
140
+ if (!options.autoWrap) options.autoWrap = false;
119
141
 
120
- return typeof options.modelId === undefined ||
121
- options.token === undefined ||
122
- options.current_user === undefined;
123
- };
142
+ return typeof options.modelId === undefined ||
143
+ options.token === undefined ||
144
+ options.current_user === undefined;
145
+ }
146
+
147
+ ;
124
148
  var self = this;
125
149
 
126
150
  if (_checkOptions(defaults)) throw("parameters [token], [current_user] are required");
127
151
 
128
152
  self.$element = $element;
129
153
  self.defaults = defaults;
130
-
154
+
131
155
 
132
156
  self.defaults.modelName = "#"
133
- };
134
- FatPopcorn.prototype = new Popcorn();
135
-
136
- FatPopcorn.prototype.init = function() {
157
+ };
158
+ FatPopcorn.prototype = new Popcorn();
159
+
160
+ FatPopcorn.prototype.init = function () {
137
161
  this.setupFormAction();
138
162
  this.setupFormToken();
139
163
  this.setupStreamUrl();
140
164
  this.setupHistoryUrl();
141
165
  this.setupEditForm();
142
166
  this.setupWatchlistUrl();
143
-
167
+
144
168
  if (this.hasStream()) {
145
- $('.fatpopcorn .stream-tab').click();
169
+ $('.fatpopcorn .stream-tab').click();
146
170
  }
147
171
  else {
148
- $('.fatpopcorn .edit-tab').click();
172
+ $('.fatpopcorn .edit-tab').click();
149
173
  }
150
- };
151
-
152
- FatPopcorn.prototype.setupStreamUrl = function() {
174
+ };
175
+
176
+ FatPopcorn.prototype.setupStreamUrl = function () {
153
177
  $('.fatpopcorn .stream').attr('data-url', this.streamUrl());
154
- };
155
- FatPopcorn.prototype.setupEditForm = function() {
178
+ };
179
+ FatPopcorn.prototype.setupEditForm = function () {
156
180
  FatPopcorn.createAttachmentButton(this.attachmentsUrl());
157
- $('.fatpopcorn .edit').attr('data-attach-url', this.attachmentsUrl());
181
+ $('.fatpopcorn .edit').attr('data-attach-url', this.attachmentsUrl());
158
182
  $('.on-off label.' + this.$element.attr('data-watching')).click();
159
- };
160
- FatPopcorn.prototype.setupWatchlistUrl = function() {
183
+ };
184
+ FatPopcorn.prototype.setupWatchlistUrl = function () {
161
185
  $('.fatpopcorn .edit').attr('data-url', this.watchlistUrl());
162
- };
163
- FatPopcorn.prototype.setupHistoryUrl = function() {
186
+ };
187
+ FatPopcorn.prototype.setupHistoryUrl = function () {
164
188
  $('.fatpopcorn .history').attr('data-url', this.historyUrl());
165
- };
166
- FatPopcorn.prototype.setupFormAction = function() {
189
+ };
190
+ FatPopcorn.prototype.setupFormAction = function () {
167
191
  $('.fatpopcorn #notes_form').attr('action', this.actionUrl());
168
192
  $('.fatpopcorn .edit').attr('data-note-url', this.actionUrl());
169
- };
170
- FatPopcorn.prototype.setupFormToken = function() {
193
+ };
194
+ FatPopcorn.prototype.setupFormToken = function () {
171
195
  $('.fatpopcorn #notes_form input[name="authenticity_token"]').val(FatPopcorn.formToken());
172
- };
173
- FatPopcorn.prototype.actionUrl = function() {
196
+ };
197
+ FatPopcorn.prototype.actionUrl = function () {
174
198
  return this.urlPrefix() + '/notes';
175
- };
176
- FatPopcorn.prototype.streamUrl = function() {
199
+ };
200
+ FatPopcorn.prototype.streamUrl = function () {
177
201
  return this.urlPrefix() + '/stream';
178
- };
179
- FatPopcorn.prototype.attachmentsUrl = function() {
202
+ };
203
+ FatPopcorn.prototype.attachmentsUrl = function () {
180
204
  return this.urlPrefix() + '/attachments';
181
- };
182
- FatPopcorn.prototype.watchlistUrl = function() {
205
+ };
206
+ FatPopcorn.prototype.watchlistUrl = function () {
183
207
  return this.urlPrefix() + '/watchers/' + this.defaults.current_user;
184
- };
185
- FatPopcorn.prototype.historyUrl = function() {
208
+ };
209
+ FatPopcorn.prototype.historyUrl = function () {
186
210
  return this.urlPrefix() + '/histories';
187
- };
188
- FatPopcorn.prototype.urlPrefix = function() {
211
+ };
212
+ FatPopcorn.prototype.urlPrefix = function () {
189
213
  return '/active_metadata/' + this.$element.attr('data-model') + '/' + this.$element.attr('data-model-id') + '/' + this.$element.attr('data-label');
190
- };
191
- FatPopcorn.prototype.currentLabel = function() {
214
+ };
215
+ FatPopcorn.prototype.currentLabel = function () {
192
216
  return this.$element.attr('data-label');
193
- };
194
- FatPopcorn.prototype.hasStream = function() {
217
+ };
218
+ FatPopcorn.prototype.hasStream = function () {
195
219
  return parseInt(this.$element.attr('data-stream')) > 0;
196
- };
197
- FatPopcorn.hideContainer = function() {
220
+ };
221
+ FatPopcorn.hideContainer = function () {
198
222
  $(window).off('resize');
199
223
  return FatPopcorn.container().hide();
200
- }
201
- FatPopcorn.container = function() {
224
+ }
225
+ FatPopcorn.container = function () {
202
226
  return $('.fatpopcorn').first();
203
- }
204
- FatPopcorn.prototype.containerOf = function() {
227
+ }
228
+ FatPopcorn.prototype.containerOf = function () {
205
229
  return $('.fatpopcorn').first();
206
- }
207
- FatPopcorn.onCompleteUpload = function(id, fileName, response, qq) {
208
- console.log('FatPopcorn.onCompleteUpload');
209
- if(qq.getQueue().length == 1) {
210
- $('.qq-upload-list').empty();
211
- }
212
- if(!response.success){
230
+ }
231
+ FatPopcorn.onCompleteUpload = function (id, fileName, response, qq) {
232
+ console.log('FatPopcorn.onCompleteUpload');
233
+ if (qq.getQueue().length == 1) {
234
+ $('.qq-upload-list').empty();
235
+ }
236
+ if (!response.success) {
213
237
  console.log(response);
214
- K.message.error(K.message.buildListOfErrors(response.errors));
215
- return;
216
- }
217
- FatPopcorn.newNoteOrAttachmentSuccess(response);
218
- }
219
- FatPopcorn.decorateContainerWithHtml = function() {
238
+ FatPopcorn.displayFailure("Si è verificato un errore.");
239
+ return;
240
+ }
241
+ FatPopcorn.newNoteOrAttachmentSuccess(response);
242
+ }
243
+ FatPopcorn.decorateContainerWithHtml = function () {
220
244
  var self = this;
245
+
221
246
  function _html() {
222
- return '<div class="fatpopcorn"><div class="popcorn-body"><div class="header"><ul><li class="stream-tab"><div>stream</div></li>' +
223
- '<li class="edit-tab"><div>edit</div></li><li class="history-tab"><div>history</div></li></ul></div>' +
224
- '<div class="stream"><div class="content"></div></div><div class="history"><div class="content"></div></div>' +
225
- '<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/>' +
226
- '<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>' +
227
- '<textarea id="note_text" name="note" rows="4"></textarea><a id="send_note" href="#">Inserisci</a></form></div><hr/>' +
228
- '<div class="attachment"><h1>Allegati</h1><div id="fatpopcorn_attach"></div><div id="attach_output"></div></div>' +
229
- '<div class="info"><h1>Info</h1><p>Lorem ipsum...</p></div></div></div><div class="popcorn-tail"></div><span class="loader"></span></div>';
230
- };
231
-
247
+ return '<div class="fatpopcorn"><div class="popcorn-body"><div class="header"><ul><li class="stream-tab"><div>stream</div></li>' +
248
+ '<li class="edit-tab"><div>edit</div></li><li class="history-tab"><div>history</div></li></ul></div>' +
249
+ '<div class="stream"><div class="content"></div></div><div class="history"><div class="content"></div></div>' +
250
+ '<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/>' +
251
+ '<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>' +
252
+ '<textarea id="note_text" name="note" rows="4"></textarea><a id="send_note">Inserisci</a></form></div><hr/>' +
253
+ '<div class="attachment"><h1>Allegati</h1><div id="fatpopcorn_attach"></div><div id="attach_output"></div></div>' +
254
+ '<div class="info"><h1>Info</h1><p>Lorem ipsum...</p></div></div></div><div class="popcorn-tail"></div><span class="loader"></span></div>';
255
+ }
256
+
257
+ ;
258
+
232
259
  if (FatPopcorn.container().size() == 0) {
233
- $('body').append(_html());
260
+ $('body').append(_html());
234
261
  }
235
262
  FatPopcorn.container().hide();
236
- }
263
+ }
237
264
 
238
- FatPopcorn.prototype.addGripToElement = function($element) {
265
+ FatPopcorn.prototype.addGripToElement = function ($element) {
239
266
  if (!$element.parent().is('span.fatpopcorn_grip') && this.defaults.autoWrap) {
240
- $element.wrap('<span class="fatpopcorn_grip"/>')
267
+ $element.wrap('<span class="fatpopcorn_grip"/>')
241
268
  }
242
269
  return $element.parent();
243
- };
244
- FatPopcorn.prototype.gripOf = function($element) {
270
+ };
271
+ FatPopcorn.prototype.gripOf = function ($element) {
245
272
  return $element.parent();
246
- };
273
+ };
274
+
275
+ FatPopcorn.activateTheClickedTab = function () {
276
+ $('.fatpopcorn .header > ul > li').unbind('click').click(function (e) {
277
+ var self = this;
278
+
279
+ function _tabBodyName(tabName) {
280
+ return tabName.split('-')[0].trim();
281
+ }
282
+
283
+ ;
284
+ function _currentTabName() {
285
+ return _tabBodyName($(self).attr('class'));
286
+ }
247
287
 
248
- FatPopcorn.activateTheClickedTab = function() {
249
- $('.fatpopcorn .header > ul > li').unbind('click').click(function(e){
250
- var self = this;
288
+ ;
289
+ function _currentTab() {
290
+ return $('.' + _currentTabName());
291
+ }
292
+
293
+ ;
294
+ function _currentTabMethod() {
295
+ return _currentTabName() + "Event";
296
+ }
251
297
 
252
- function _tabBodyName(tabName) { return tabName.split('-')[0].trim(); };
253
- function _currentTabName() { return _tabBodyName($(self).attr('class')); };
254
- function _currentTab() { return $('.' + _currentTabName()); };
255
- function _currentTabMethod() { return _currentTabName() + "Event"; }
298
+ e.stopPropagation();
299
+ e.preventDefault();
256
300
 
257
- e.stopPropagation();
258
- e.preventDefault();
301
+ $('.fatpopcorn .active').removeClass('active');
302
+ $('.fatpopcorn .popcorn-body > div:not(.header)').hide();
259
303
 
260
- $('.fatpopcorn .active').removeClass('active');
261
- $('.fatpopcorn .popcorn-body > div:not(.header)').hide();
262
-
263
- _currentTab().show();
304
+ _currentTab().show();
264
305
 
265
- $(this).addClass('active');
306
+ $(this).addClass('active');
266
307
 
267
- FatPopcorn[_currentTabMethod()].call();
308
+ FatPopcorn[_currentTabMethod()].call();
268
309
  });
269
- };
270
- FatPopcorn.streamEvent = function() {
310
+ };
311
+ FatPopcorn.streamEvent = function () {
271
312
  $.ajax($('.fatpopcorn .stream').attr('data-url'))
272
- .success(FatPopcorn.getStreamSuccess);
273
- };
274
- FatPopcorn.editEvent = function() {
313
+ .success(FatPopcorn.getStreamSuccess);
314
+ };
315
+ FatPopcorn.editEvent = function () {
275
316
  // should do something?
276
- };
277
- FatPopcorn.historyEvent = function() {
317
+ };
318
+ FatPopcorn.historyEvent = function () {
278
319
  $.ajax($('.fatpopcorn .history').attr('data-url'))
279
- .success(FatPopcorn.getHistorySuccess);
280
- };
281
- FatPopcorn.containerVisible = function () {
320
+ .success(FatPopcorn.getHistorySuccess);
321
+ };
322
+ FatPopcorn.containerVisible = function () {
282
323
  return FatPopcorn.container().is(':visible');
283
- };
284
- FatPopcorn.formToken = function() {
324
+ };
325
+ FatPopcorn.formToken = function () {
285
326
  return $('meta[name="csrf-token"]').attr('content');
286
- };
287
- FatPopcorn.createAttachmentButton = function(actionUrl) {
327
+ };
328
+ FatPopcorn.createAttachmentButton = function (actionUrl) {
288
329
  delete FatPopcorn.uploader;
289
330
  FatPopcorn.uploader = new qq.FileUploader({
290
- element: document.getElementById('fatpopcorn_attach'),
291
- allowedExtensions: [],
292
- params: { authenticity_token: FatPopcorn.formToken(), target: "attach_output"},
293
- uploadButtonText: 'Inserisci',
294
- action: actionUrl,
295
- multiple: true,
296
- onComplete: FatPopcorn.onCompleteUpload
297
- });
298
- };
299
-
300
- FatPopcorn.bindRemoteEvents = function() {
301
-
302
- function _startWatching() {
303
- _callWatchlistService({authenticity_token: FatPopcorn.formToken() });
304
- };
331
+ element:document.getElementById('fatpopcorn_attach'),
332
+ allowedExtensions:[],
333
+ params:{ authenticity_token:FatPopcorn.formToken(), target:"attach_output"},
334
+ uploadButtonText:'Inserisci',
335
+ action:actionUrl,
336
+ multiple:true,
337
+ onComplete:FatPopcorn.onCompleteUpload
338
+ });
339
+ };
340
+
341
+ FatPopcorn.bindRemoteEvents = function () {
342
+
343
+ function _startWatching() {
344
+ _callWatchlistService({authenticity_token:FatPopcorn.formToken() });
345
+ }
346
+
347
+ ;
305
348
  function _stopWatching() {
306
- _callWatchlistService({_method: 'delete', authenticity_token: FatPopcorn.formToken() });
307
- };
349
+ _callWatchlistService({_method:'delete', authenticity_token:FatPopcorn.formToken() });
350
+ }
351
+
352
+ ;
308
353
  function _callWatchlistService(data) {
309
- var url = $('.fatpopcorn .edit').attr('data-url');
354
+ var url = $('.fatpopcorn .edit').attr('data-url');
355
+ $.post(url, data, {dataType:'script'}).done(FatPopcorn.watchingServiceSuccess).error(FatPopcorn.watchingServiceFail);
356
+ }
310
357
 
311
- $.post(url, data, {dataType: 'script'}).done(FatPopcorn.watchingServiceSuccess).error(FatPopcorn.watchingServiceFail);
312
- };
313
- $('.fatpopcorn').unbind('click').click(function(e) {
314
- e.stopPropagation();
358
+ ;
359
+ $('.fatpopcorn').unbind('click').click(function (e) {
360
+ e.stopPropagation();
315
361
  });
316
- $('.fatpopcorn #watchlist_true').unbind('click').click(function() {
317
- _startWatching()
362
+ $('.fatpopcorn #watchlist_true').unbind('click').click(function () {
363
+ _startWatching()
318
364
  });
319
- $('.fatpopcorn #watchlist_false').unbind('click').click(function() {
320
- _stopWatching();
365
+ $('.fatpopcorn #watchlist_false').unbind('click').click(function () {
366
+ _stopWatching();
321
367
  });
322
368
 
323
- $('#send_note').unbind('click').click(function() {
324
- if ($('#note_text').val() == '') return false;
369
+ $('#send_note').unbind('click').click(function () {
370
+ if ($('#note_text').val() == '') return false;
325
371
 
326
- $.post($('form#notes_form').attr('action'), $('form#notes_form').serialize())
327
- .success('success.rails', FatPopcorn.newNoteOrAttachmentSuccess)
328
- .fail(function(e){console.log('request failed')});
372
+ $.post($('form#notes_form').attr('action'), $('form#notes_form').serialize())
373
+ .success('success.rails', FatPopcorn.newNoteOrAttachmentSuccess)
374
+ .fail(function () {
375
+ FatPopcorn.displayFailure("Si è verificato un errore.")
376
+ });
377
+ });
378
+ $('.loader').ajaxSend(function (e) {
379
+ $(this).show();
329
380
  });
330
- $('.loader').ajaxSend(function(e) { $(this).show(); });
331
- $('.loader').ajaxComplete(function() { $(this).hide(); });
332
- };
381
+ $('.loader').ajaxComplete(function () {
382
+ $(this).hide();
383
+ });
384
+ };
385
+
386
+ /******
387
+ Notifier
388
+ *******/
389
+ FatPopcorn.notifier = {
390
+
391
+ notify: function (type, message) {
392
+ type = type || "notice";
393
+ this.removeBox();
394
+ var $messageBox = $('.fatpopcorn .info h1').after('<p class="' + type + ' messageBox">' + message + '</p>').next();
395
+ var self = this;
396
+ $messageBox.bind('click', function () {
397
+ self.removeBox();
398
+ });
399
+ },
400
+
401
+ notice : function(message){
402
+ this.notify("notice",message);
403
+ },
404
+
405
+ error : function(message){
406
+ this.notify("error",message);
407
+ },
408
+
409
+ removeBox : function(){
410
+ $('.fatpopcorn .info p.messageBox').remove();
411
+ }
333
412
 
334
- /* ajax callbacks */
335
- FatPopcorn.watchingServiceSuccess = function(jqxhr) {
413
+ };
414
+
415
+ /*****
416
+ * Error Handling
417
+ *****/
418
+ FatPopcorn.displayFailure = function (message) {
419
+ FatPopcorn.notifier.error(message);
420
+ };
421
+
422
+ /* ajax callbacks */
423
+ FatPopcorn.watchingServiceSuccess = function (jqxhr) {
336
424
  var data = eval(jqxhr);
425
+ //remove the error/notice messageBox
426
+ FatPopcorn.notifier.removeBox();
337
427
  FatPopcorn.item(data).attr('data-watching', data.watching);
338
- }
339
- FatPopcorn.watchingServiceFail = function(data) {
428
+ }
429
+ FatPopcorn.watchingServiceFail = function (data) {
430
+ FatPopcorn.displayFailure("Si è verificato un errore.")
340
431
  console.log('Watchlist service request failed');
341
432
  console.log(data);
342
433
  console.log(data.state());
343
434
  console.log(data.statusCode());
344
435
  console.log(data.getAllResponseHeaders());
345
-
346
- }
347
436
 
348
- FatPopcorn.item = function(data) {
437
+ }
438
+
439
+ FatPopcorn.item = function (data) {
349
440
  return $('[data-model="' + data.modelName + '"][data-label="' + data.fieldName + '"]');
350
- }
441
+ }
351
442
 
352
- FatPopcorn.newNoteOrAttachmentSuccess = function(dataString) {
443
+ FatPopcorn.newNoteOrAttachmentSuccess = function (dataString) {
353
444
  var data = eval(dataString)
445
+ //remove the error/notice messageBox
446
+ FatPopcorn.notifier.removeBox();
354
447
  FatPopcorn.item(data).attr('data-stream', data.streamItemsCount);
355
-
448
+
356
449
  if (data.streamItemsCount > 0) {
357
- FatPopcorn.item(data).parents('.fatpopcorn_grip').addClass('has-stream');
358
- FatPopcorn.item(data).siblings('.stream-items-count').text(data.streamItemsCount);
359
- if (data.streamItemsCount > 9)
360
- FatPopcorn.item(data).siblings('.stream-items-count').addClass('two-digits')
361
- else
362
- FatPopcorn.item(data).siblings('.stream-items-count').removeClass('two-digits')
450
+ FatPopcorn.item(data).parents('.fatpopcorn_grip').addClass('has-stream');
451
+ FatPopcorn.item(data).siblings('.stream-items-count').text(data.streamItemsCount);
452
+ if (data.streamItemsCount > 9)
453
+ FatPopcorn.item(data).siblings('.stream-items-count').addClass('two-digits')
454
+ else
455
+ FatPopcorn.item(data).siblings('.stream-items-count').removeClass('two-digits')
363
456
  } else {
364
- FatPopcorn.item(data).parents('.fatpopcorn_grip').removeClass('has-stream');
365
- FatPopcorn.item(data).siblings('.stream-items-count').empty();
457
+ FatPopcorn.item(data).parents('.fatpopcorn_grip').removeClass('has-stream');
458
+ FatPopcorn.item(data).siblings('.stream-items-count').empty();
366
459
  }
367
460
  $('.fatpopcorn textarea#note_text').val('');
368
461
  $('.fatpopcorn .active').removeClass('active');
@@ -371,147 +464,161 @@
371
464
  $(".fatpopcorn .stream-tab").addClass('active');
372
465
  FatPopcorn.getStreamSuccess(data.streamBody);
373
466
 
374
- };
467
+ };
375
468
 
376
- FatPopcorn.getStreamSuccess = function(data) {
469
+ FatPopcorn.getStreamSuccess = function (data) {
377
470
  $('.fatpopcorn .stream .content').html(data);
378
471
  $('.fatpopcorn .stream .attachment span.delete').click(FatPopcorn.deleteAttachment);
379
472
  $('.fatpopcorn .stream .note span.delete').click(FatPopcorn.deleteNote);
380
473
  $('.fatpopcorn .stream span.star').click(FatPopcorn.starUnstar);
381
- };
382
- FatPopcorn.deleteAttachment = function(e) {
474
+ };
475
+
476
+ FatPopcorn.deleteAttachment = function (e) {
383
477
  FatPopcorn.deleteStream(e, $('.fatpopcorn .edit').attr('data-attach-url'));
384
- };
385
- FatPopcorn.deleteNote = function(e) {
478
+ };
479
+
480
+ FatPopcorn.deleteNote = function (e) {
386
481
  FatPopcorn.deleteStream(e, $('.fatpopcorn .edit').attr('data-note-url'));
387
- };
388
- FatPopcorn.deleteStream = function(e, urlPrefix) {
482
+ };
483
+
484
+ FatPopcorn.deleteStream = function (e, urlPrefix) {
389
485
  function _url() {
390
- return urlPrefix + '/' + $(e.target).parent().attr('data-id');
486
+ return urlPrefix + '/' + $(e.target).parent().attr('data-id');
391
487
  }
392
488
 
393
- $.post(_url(), {_method: 'delete'}).
394
- success('success.rails', FatPopcorn.newNoteOrAttachmentSuccess).
395
- fail(FatPopcorn.deleteFailure);
396
- };
397
- FatPopcorn.starUnstar = function(e, urlPrefix) {
398
- var url = $(e.target).attr('data-url');
399
- $.post(url, {_method: 'put'}).
400
- success('success.rails', function(data){
401
- FatPopcorn.getStreamSuccess(data.streamBody)
402
- }).
403
- fail(FatPopcorn.deleteFailure);
404
- };
405
-
406
- FatPopcorn.deleteSuccess = function() {
489
+ $.post(_url(), {_method:'delete'}).
490
+ success('success.rails', FatPopcorn.newNoteOrAttachmentSuccess).
491
+ fail(FatPopcorn.deleteFailure);
492
+ };
493
+
494
+ FatPopcorn.starUnstar = function (e, urlPrefix) {
495
+ var url = $(e.target).attr('data-url');
496
+ $.post(url, {_method:'put'}).
497
+ success('success.rails',
498
+ function (data) {
499
+ FatPopcorn.getStreamSuccess(data.streamBody)
500
+ }).
501
+ fail(FatPopcorn.deleteFailure);
502
+ };
503
+
504
+ FatPopcorn.deleteSuccess = function () {
407
505
  $('.fatpopcorn .stream-tab').click();
408
- };
409
- FatPopcorn.deleteFailure = function() {
410
- };
411
- FatPopcorn.getHistorySuccess = function(data) {
506
+ };
507
+
508
+ FatPopcorn.deleteFailure = function () {
509
+ };
510
+
511
+ FatPopcorn.getHistorySuccess = function (data) {
412
512
  $('.fatpopcorn .history .content').empty();
413
513
  $('.fatpopcorn .history .content').append(data);
414
- };
415
- (function($) {
416
- $.fn.fatpopcorn = function(options) {
417
-
418
- // plugin default options
419
- var self = this, defaults = {
420
- marginBorder: 4,
421
- arrowWidth: 24,
422
- marginArrow: 11,
423
- verticalOffsetFromElement: 26
424
- };
514
+ };
515
+
516
+ (function ($) {
517
+ $.fn.fatpopcorn = function (options) {
518
+
519
+ // plugin default options
520
+ var self = this, defaults = {
521
+ marginBorder:4,
522
+ arrowWidth:24,
523
+ marginArrow:11,
524
+ verticalOffsetFromElement:26
525
+ };
526
+
527
+ // extends defaults with options provided
528
+ if (options) {
529
+ $.extend(defaults, options);
530
+ }
425
531
 
426
- // extends defaults with options provided
427
- if (options) {
428
- $.extend(defaults, options);
429
- }
430
-
431
- $(window).click(function() { FatPopcorn.hideContainer(); });
432
-
433
- FatPopcorn.decorateContainerWithHtml();
434
- FatPopcorn.activateTheClickedTab();
435
- FatPopcorn.bindRemoteEvents();
436
- FatPopcorn.createAttachmentButton();
437
-
438
- function _setUpElement() {
439
- var $element = $(this), fatpopcorn = new FatPopcorn($element, defaults);
440
- fatpopcorn.addGripToElement($element);
441
-
442
- fatpopcorn.gripOf($element).children().click(function(e) {
443
- $(e.target).data('elementMatched', true);
444
- });
445
-
446
- $('.fatpopcorn_grip .stream-items-count').click(function(e) {
447
- $(e.target).data('elementMatched', false);
448
- });
449
-
450
- fatpopcorn.gripOf($element).click(function(e) {
451
- if ($(e.target).data('elementMatched')) return;
532
+ $(window).click(function () {
533
+ FatPopcorn.hideContainer();
534
+ FatPopcorn.notifier.removeBox();
535
+ });
452
536
 
453
- e.stopPropagation();
454
- e.preventDefault();
455
- fatpopcorn.init();
456
-
457
- if (FatPopcorn.containerVisible()) {
458
- FatPopcorn.hideContainer();
459
- return;
537
+ FatPopcorn.decorateContainerWithHtml();
538
+ FatPopcorn.activateTheClickedTab();
539
+ FatPopcorn.bindRemoteEvents();
540
+ FatPopcorn.createAttachmentButton();
541
+
542
+ function _setUpElement() {
543
+ var $element = $(this), fatpopcorn = new FatPopcorn($element, defaults);
544
+ fatpopcorn.addGripToElement($element);
545
+
546
+ fatpopcorn.gripOf($element).children().click(function (e) {
547
+ $(e.target).data('elementMatched', true);
548
+ });
549
+
550
+ $('.fatpopcorn_grip .stream-items-count').click(function (e) {
551
+ $(e.target).data('elementMatched', false);
552
+ });
553
+
554
+ fatpopcorn.gripOf($element).click(function (e) {
555
+ if ($(e.target).data('elementMatched')) return;
556
+
557
+ e.stopPropagation();
558
+ e.preventDefault();
559
+ fatpopcorn.init();
560
+
561
+ if (FatPopcorn.containerVisible()) {
562
+ FatPopcorn.hideContainer();
563
+ return;
564
+ }
565
+
566
+ fatpopcorn.inferPositionType();
567
+ fatpopcorn.setContainerPosition();
568
+ fatpopcorn.decorateContainerWithArrow();
569
+ fatpopcorn.containerOf().show();
570
+
571
+ $(window).on('resize', function () {
572
+ if (FatPopcorn.containerVisible()) fatpopcorn.setContainerPosition();
573
+ });
574
+ });
575
+
576
+ return this;
460
577
  }
461
578
 
462
- fatpopcorn.inferPositionType();
463
- fatpopcorn.setContainerPosition();
464
- fatpopcorn.decorateContainerWithArrow();
465
- fatpopcorn.containerOf().show();
466
-
467
- $(window).on('resize',function() {
468
- if (FatPopcorn.containerVisible()) fatpopcorn.setContainerPosition();
469
- });
470
- });
471
-
472
- return this;
579
+ return self.each(_setUpElement);
473
580
  }
474
- return self.each(_setUpElement);
475
- }
476
-
477
- $.fn.popcorn = function(options) {
478
-
479
- // plugin default options
480
- var elements = this, defaults = {
481
- marginBorder: 4,
482
- arrowWidth: 19,
483
- marginArrow: 10,
484
- verticalOffsetFromElement: 20
485
- };
486
581
 
487
- // extends defaults with options provided
488
- if (options) {
489
- $.extend(delfaults, options);
490
- }
582
+ $.fn.popcorn = function (options) {
491
583
 
492
- $(window).unbind('click').click(function() { Popcorn.hideAllContainers(elements); });
584
+ // plugin default options
585
+ var elements = this, defaults = {
586
+ marginBorder:4,
587
+ arrowWidth:19,
588
+ marginArrow:10,
589
+ verticalOffsetFromElement:20
590
+ };
493
591
 
494
- function _setUpElement(){
495
- var $element = $(this), popcorn = new Popcorn($element, defaults);
592
+ // extends defaults with options provided
593
+ if (options) {
594
+ $.extend(delfaults, options);
595
+ }
496
596
 
497
- popcorn.decorateContainerWithHtml();
498
- popcorn.inferPositionType();
499
- popcorn.decorateContainerWithArrow();
500
- popcorn.setContainerPosition();
597
+ $(window).unbind('click').click(function () {
598
+ Popcorn.hideAllContainers(elements);
599
+ });
501
600
 
502
- $element.click(function(e) {
503
- e.stopPropagation();
504
- e.preventDefault();
505
- Popcorn.hideAllContainersExcept(elements, this);
506
- Popcorn.containerOf($element).show();
507
- });
601
+ function _setUpElement() {
602
+ var $element = $(this), popcorn = new Popcorn($element, defaults);
508
603
 
509
- $(window).resize(function() {
510
- popcorn.setContainerPosition();
511
- });
512
- }
604
+ popcorn.decorateContainerWithHtml();
605
+ popcorn.inferPositionType();
606
+ popcorn.decorateContainerWithArrow();
607
+ popcorn.setContainerPosition();
608
+
609
+ $element.click(function (e) {
610
+ e.stopPropagation();
611
+ e.preventDefault();
612
+ Popcorn.hideAllContainersExcept(elements, this);
613
+ Popcorn.containerOf($element).show();
614
+ });
513
615
 
514
- return this.each(_setUpElement);
616
+ $(window).resize(function () {
617
+ popcorn.setContainerPosition();
618
+ });
619
+ }
620
+
621
+ return this.each(_setUpElement);
515
622
 
516
- };
623
+ };
517
624
  })(jQuery);
@@ -281,6 +281,7 @@ div > h1 > span.delete:hover {
281
281
  }
282
282
  .fatpopcorn .edit #send_note {
283
283
  padding-right: 6px;
284
+ cursor: pointer;
284
285
  }
285
286
  .fatpopcorn .edit .attachment {
286
287
  margin: 10px 10px 26px 10px;
@@ -322,11 +323,14 @@ div > h1 > span.delete:hover {
322
323
  }
323
324
  .fatpopcorn .edit .info p {
324
325
  color: #626262;
325
- display: table-cell;
326
326
  padding-left: 10px;
327
327
  /* overflow: hidden; TODO Controllare cosa succede quando il testo va in overflow
328
328
  text-overflow: ellipsis;*/
329
329
  }
330
+ .fatpopcorn .edit .info p.error {
331
+ color: red;
332
+ }
333
+
330
334
  .fatpopcorn .edit textarea {
331
335
  width: 98%;
332
336
  margin-left: 2px;
@@ -1,3 +1,3 @@
1
1
  module CornJs
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corn_js
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-23 00:00:00.000000000Z
12
+ date: 2012-03-30 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70172745645660 !ruby/object:Gem::Requirement
16
+ requirement: &70109275728320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.2.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70172745645660
24
+ version_requirements: *70109275728320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jquery-rails
27
- requirement: &70172745645020 !ruby/object:Gem::Requirement
27
+ requirement: &70109275727160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70172745645020
35
+ version_requirements: *70109275727160
36
36
  description: It's possible to use the generic popcorn and the app specific fat popcorn
37
37
  plugin
38
38
  email:
@@ -69,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
69
  version: '0'
70
70
  segments:
71
71
  - 0
72
- hash: -4464394558573821260
72
+ hash: 597681471737756081
73
73
  required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  version: '0'
79
79
  segments:
80
80
  - 0
81
- hash: -4464394558573821260
81
+ hash: 597681471737756081
82
82
  requirements: []
83
83
  rubyforge_project:
84
84
  rubygems_version: 1.8.10