imaginable 0.1.5 → 0.1.6
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.
- data/lib/generators/templates/javascripts/imaginable.js +142 -133
- data/lib/imaginable/version.rb +1 -1
- metadata +2 -2
@@ -1,10 +1,10 @@
|
|
1
1
|
(function($){
|
2
|
-
|
2
|
+
|
3
3
|
var Imaginable = function(element, options) {
|
4
4
|
// CONSTRANTS
|
5
5
|
var ASPECT_RATIOS = {square: '1:1', tv: '3:2', wide: '5:2', portrait: '13:20'}
|
6
6
|
var ASPECT_RATIO_IDS = {original: 0, square: 1, tv: 2, wide: 3, portrait: 4}
|
7
|
-
|
7
|
+
|
8
8
|
// ELEMENTS - Main
|
9
9
|
var main_elem = $(element);
|
10
10
|
var uploader_elem;
|
@@ -16,15 +16,15 @@
|
|
16
16
|
var crop_image_elem;
|
17
17
|
var save_crop_button_elem;
|
18
18
|
var cancel_crop_button_elem;
|
19
|
-
|
19
|
+
|
20
20
|
// FORM ELEMENTS
|
21
21
|
var uuid_field;
|
22
22
|
var token_field;
|
23
23
|
var version_field;
|
24
|
-
|
24
|
+
|
25
25
|
// SETTINGS
|
26
26
|
var settings = $.extend({
|
27
|
-
prefix: main_elem.data('imaginable-prefix'),
|
27
|
+
prefix: main_elem.data('imaginable-prefix'),
|
28
28
|
scaleServer: main_elem.data('imaginable-scale-server') || 'http://127.0.0.1:3333',
|
29
29
|
uploadServer: main_elem.data('imaginable-upload-server') || 'http://127.0.0.1:3001',
|
30
30
|
preview_width: main_elem.data('imaginable-preview-width') || 250,
|
@@ -32,66 +32,99 @@
|
|
32
32
|
force_crop: main_elem.data('imaginable-force-crop') || false,
|
33
33
|
format: main_elem.data('imaginable-format') || 'original',
|
34
34
|
new_version: main_elem.data('imaginable-new-version') + '' || '0',
|
35
|
-
|
35
|
+
|
36
36
|
force_crop: main_elem.data('imaginable-force-crop') || false,
|
37
|
-
|
37
|
+
|
38
38
|
runtimes: 'flash',
|
39
39
|
max_file_size: '10mb',
|
40
40
|
file_data_name: 'image_file',
|
41
41
|
multipart: true,
|
42
42
|
auto_start: true,
|
43
43
|
flash_swf_url: '/javascripts/plupload.flash.swf',
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
silverlight_xap_url: '/javascripts/plupload.silverlight.xap',
|
45
|
+
filters: [
|
46
|
+
{title: "Image files", extensions: "jpg,gif,png,jpeg"},
|
47
|
+
]
|
48
48
|
}, options || {});
|
49
|
-
|
49
|
+
|
50
50
|
// INSTANCE
|
51
51
|
var obj = this;
|
52
|
-
|
52
|
+
|
53
53
|
// INSTANCE VARIABLES - Shared
|
54
54
|
var existing_image = false;
|
55
55
|
var image_version;
|
56
|
-
|
56
|
+
|
57
57
|
// INSTANCE VARIABLES - Uploader
|
58
58
|
var uploader;
|
59
59
|
var current_image_uuid;
|
60
60
|
var current_image_token;
|
61
61
|
var current_image_width;
|
62
62
|
var current_image_height;
|
63
|
-
|
63
|
+
|
64
64
|
// INSTANCE VARIABLES - Cropper
|
65
65
|
var cropper;
|
66
66
|
var current_crop_points = null;
|
67
|
-
|
67
|
+
|
68
68
|
// Public methods
|
69
69
|
this.refreshPreviewImage = function() {
|
70
70
|
var preview_url = settings.scaleServer + '/image/' + current_image_uuid + '-' + image_version + '-' + settings.format + '-' + settings.preview_width + '.jpg';
|
71
|
-
|
71
|
+
|
72
72
|
preview_image_elem.attr('src', preview_url).load(function() {
|
73
|
-
|
74
|
-
|
73
|
+
preview_image_elem.fadeIn();
|
74
|
+
uploader.refresh();
|
75
75
|
});
|
76
76
|
}
|
77
|
-
|
77
|
+
|
78
78
|
this.refreshCroppingPreviewImage = function() {
|
79
79
|
var crop_preview_url = settings.scaleServer + '/image/' + current_image_uuid + '-' + image_version + '-original-600-600.jpg';
|
80
|
-
|
80
|
+
|
81
81
|
crop_image_elem.attr('src', crop_preview_url).load(function() {
|
82
82
|
if (settings.force_crop == true)
|
83
83
|
obj.showCropDialog();
|
84
84
|
});
|
85
85
|
}
|
86
|
-
|
86
|
+
|
87
87
|
this.showCropDialog = function() {
|
88
|
-
|
89
|
-
|
88
|
+
var crop_container = main_elem.find('.imaginable_crop_container').first();
|
89
|
+
var crop_content = main_elem.find('.imaginable_crop_content').first();
|
90
|
+
|
91
|
+
$.fancybox({
|
92
|
+
content: crop_content.html(),
|
93
|
+
modal: false,
|
94
|
+
width: 600,
|
95
|
+
height: 670,
|
96
|
+
autoSize: false,
|
97
|
+
afterShow: function() {
|
98
|
+
var crop_points = getCropPoints();
|
99
|
+
var img_elm = $('.fancybox-wrap .imaginable_crop_image');
|
100
|
+
|
101
|
+
cropper = img_elm.imgAreaSelect({
|
102
|
+
handles: true,
|
103
|
+
instance: true,
|
104
|
+
imageHeight: current_image_height,
|
105
|
+
imageWidth: current_image_width,
|
106
|
+
onSelectEnd: onAreaSelectorSelectEnd
|
107
|
+
});
|
108
|
+
|
109
|
+
if (settings.format != 'original')
|
110
|
+
cropper.setOptions({aspectRatio: ASPECT_RATIOS[settings.format]});
|
111
|
+
|
112
|
+
cropper.setSelection(crop_points['x1'],crop_points['y1'],crop_points['x2'],crop_points['y2'],false);
|
113
|
+
cropper.setOptions({ show: true });
|
114
|
+
cropper.update();
|
115
|
+
},
|
116
|
+
afterClose: function() {
|
117
|
+
var img_elm = $('.fancybox-wrap .imaginable_crop_image');
|
118
|
+
img_elm.imgAreaSelect({
|
119
|
+
remove: true
|
120
|
+
});
|
121
|
+
}
|
122
|
+
});
|
90
123
|
};
|
91
|
-
|
124
|
+
|
92
125
|
this.saveCropping = function() {
|
93
126
|
var crop_points = getCropPoints();
|
94
|
-
|
127
|
+
|
95
128
|
var prefix = 'crop' + ASPECT_RATIO_IDS[settings.format] + '_';
|
96
129
|
var x = crop_points['x1'];
|
97
130
|
var y = crop_points['y1'];
|
@@ -101,17 +134,15 @@
|
|
101
134
|
image_data[prefix + 'y'] = y
|
102
135
|
image_data[prefix + 'width'] = width;
|
103
136
|
var data = {_method: 'PUT', image: image_data, callback: '?', auth_token: current_image_token};
|
104
|
-
|
137
|
+
|
105
138
|
var url = settings.uploadServer + '/images/' + current_image_uuid;
|
106
|
-
|
107
|
-
console.log(data);
|
108
|
-
|
139
|
+
|
109
140
|
$.ajaxSetup({
|
110
141
|
headers: {
|
111
142
|
"X-CSRF-Token": $("meta[name='csrf-token']").attr('content')
|
112
143
|
}
|
113
144
|
});
|
114
|
-
|
145
|
+
|
115
146
|
$.ajax({
|
116
147
|
type: 'POST',
|
117
148
|
url: url,
|
@@ -119,10 +150,10 @@
|
|
119
150
|
dataType: 'json',
|
120
151
|
success: onCroppingSaved
|
121
152
|
});
|
122
|
-
|
153
|
+
|
123
154
|
writeToFormFields();
|
124
155
|
};
|
125
|
-
|
156
|
+
|
126
157
|
// Private methods
|
127
158
|
var initialize = function() {
|
128
159
|
initializeElements();
|
@@ -131,40 +162,40 @@
|
|
131
162
|
initializeUploader();
|
132
163
|
initializeCropper();
|
133
164
|
};
|
134
|
-
|
165
|
+
|
135
166
|
var initializeElements = function() {
|
136
167
|
// Form Fields
|
137
168
|
uuid_field = $('#' + settings.prefix + '_uuid');
|
138
169
|
token_field = $('#' + settings.prefix + '_token');
|
139
170
|
version_field = $('#' + settings.prefix + '_version');
|
140
|
-
|
171
|
+
|
141
172
|
if (uuid_field.val() != null && uuid_field.val() != "") {
|
142
173
|
existing_image = true;
|
143
174
|
current_image_uuid = uuid_field.val();
|
144
175
|
current_image_token = token_field.val();
|
145
176
|
downloadImageMetadata();
|
146
177
|
}
|
147
|
-
|
178
|
+
|
148
179
|
// Uploader
|
149
180
|
uploader_elem = main_elem.find('.imaginable_browse_files_button').first();
|
150
181
|
file_list_elem = main_elem.find('.imaginable_file_list').first();
|
151
182
|
preview_image_elem = main_elem.find('.imaginable_preview_image').first();
|
152
|
-
|
183
|
+
|
153
184
|
// Cropper
|
154
185
|
cropper_elem = main_elem.find('.imaginable_crop_button').first();
|
155
|
-
|
186
|
+
|
156
187
|
crop_image_elem = main_elem.find('.imaginable_crop_image').first();
|
157
188
|
save_crop_button_elem = main_elem.find('.imaginable_save_crop_button').first();
|
158
189
|
cancel_crop_button_elem = main_elem.find('.imaginable_cancel_crop_button').first();
|
159
190
|
}
|
160
|
-
|
191
|
+
|
161
192
|
var initializeImageVersion = function() {
|
162
193
|
image_version = settings.new_version.replace(/'/, "").replace(/'/, "");
|
163
|
-
|
194
|
+
|
164
195
|
form_value = version_field.val();
|
165
196
|
if (form_value != null && form_value.length > 0)
|
166
197
|
obj.refreshPreviewImage();
|
167
|
-
|
198
|
+
|
168
199
|
//form_value = version_field.val();
|
169
200
|
//
|
170
201
|
//if (form_value != null && form_value.length > 0) {
|
@@ -173,13 +204,13 @@
|
|
173
204
|
// image_version = settings.new_version;
|
174
205
|
//}
|
175
206
|
};
|
176
|
-
|
207
|
+
|
177
208
|
var initializeButtons = function() {
|
178
209
|
// Cropper
|
179
|
-
|
180
|
-
|
210
|
+
$('.imaginable_save_crop_button').live('click', onSaveCropButtonClick);
|
211
|
+
$('.imaginable_cancel_crop_button').live('click', onCancelCropButtonClick);
|
181
212
|
};
|
182
|
-
|
213
|
+
|
183
214
|
var initializeUploader = function() {
|
184
215
|
uploader = new plupload.Uploader({
|
185
216
|
runtimes: settings['runtimes'],
|
@@ -193,9 +224,9 @@
|
|
193
224
|
silverlight_xap_url: settings['silverlight_xap_url'],
|
194
225
|
filters: settings['filters']
|
195
226
|
});
|
196
|
-
|
227
|
+
|
197
228
|
uploader.init();
|
198
|
-
|
229
|
+
|
199
230
|
uploader.bind('FilesAdded', onUploaderFilesAdded);
|
200
231
|
uploader.bind('FilesRemoved', onUploaderFilesRemoved);
|
201
232
|
uploader.bind('UploadProgress', onUploaderUploadProgress);
|
@@ -203,47 +234,27 @@
|
|
203
234
|
uploader.bind('FileUploaded', onUploaderFileUploaded);
|
204
235
|
uploader.bind('UploadComplete', onUploaderUploadComplete);
|
205
236
|
};
|
206
|
-
|
237
|
+
|
207
238
|
var initializeCropper = function() {
|
208
|
-
|
209
|
-
'modal' : true,
|
210
|
-
onComplete: function() {
|
211
|
-
var crop_points = getCropPoints();
|
212
|
-
|
213
|
-
cropper = crop_image_elem.imgAreaSelect({
|
214
|
-
handles: true,
|
215
|
-
instance: true,
|
216
|
-
imageHeight: current_image_height,
|
217
|
-
imageWidth: current_image_width,
|
218
|
-
onSelectEnd: onAreaSelectorSelectEnd
|
219
|
-
});
|
220
|
-
|
221
|
-
if (settings.format != 'original')
|
222
|
-
cropper.setOptions({aspectRatio: ASPECT_RATIOS[settings.format]});
|
223
|
-
|
224
|
-
cropper.setSelection(crop_points['x1'],crop_points['y1'],crop_points['x2'],crop_points['y2'],false);
|
225
|
-
cropper.setOptions({ show: true });
|
226
|
-
cropper.update();
|
227
|
-
},
|
228
|
-
onCleanup: function() {
|
229
|
-
crop_image_elem.imgAreaSelect({
|
230
|
-
remove: true
|
231
|
-
});
|
232
|
-
}
|
233
|
-
});
|
239
|
+
main_elem.find('.imaginable_crop_button').first().bind('click', onCropperElemClick);
|
234
240
|
};
|
235
|
-
|
241
|
+
|
242
|
+
var onCropperElemClick = function(event) {
|
243
|
+
event.preventDefault();
|
244
|
+
obj.showCropDialog();
|
245
|
+
};
|
246
|
+
|
236
247
|
var changeImageVersion = function(version) {
|
237
248
|
image_version = version;
|
238
249
|
writeToFormFields();
|
239
250
|
};
|
240
|
-
|
251
|
+
|
241
252
|
var getCropPoints = function() {
|
242
253
|
if (current_crop_points != null)
|
243
254
|
return current_crop_points;
|
244
|
-
|
255
|
+
|
245
256
|
current_crop_points = {x1: 0, x2: current_image_width, y1: 0, y2: current_image_height, width: current_image_width, height: current_image_height};
|
246
|
-
|
257
|
+
|
247
258
|
if (settings.format != 'original') {
|
248
259
|
var numeric_aspect_ratio = numericAspectRatio();
|
249
260
|
if (numeric_aspect_ratio > 1) {
|
@@ -258,22 +269,22 @@
|
|
258
269
|
current_crop_points['width'] = current_crop_points['x2'];
|
259
270
|
}
|
260
271
|
}
|
261
|
-
|
272
|
+
|
262
273
|
return current_crop_points;
|
263
274
|
};
|
264
|
-
|
275
|
+
|
265
276
|
var resetCropPoints = function() {
|
266
277
|
current_crop_points = null;
|
267
278
|
current_scaled_crop_points = null;
|
268
279
|
};
|
269
|
-
|
280
|
+
|
270
281
|
var showCropButton = function() {
|
271
282
|
cropper_elem.fadeIn();
|
272
283
|
};
|
273
|
-
|
284
|
+
|
274
285
|
var numericAspectRatio = function() {
|
275
286
|
var format = settings.format;
|
276
|
-
|
287
|
+
|
277
288
|
if (format != 'original') {
|
278
289
|
var aspect_ratio = ASPECT_RATIOS[format];
|
279
290
|
return (d = (aspect_ratio || '').split(/:/))[0] / d[1];
|
@@ -281,78 +292,76 @@
|
|
281
292
|
return 0;
|
282
293
|
}
|
283
294
|
};
|
284
|
-
|
295
|
+
|
285
296
|
var writeToFormFields = function() {
|
286
297
|
uuid_field.val(current_image_uuid);
|
298
|
+
uuid_field.trigger('change');
|
287
299
|
token_field.val(current_image_token);
|
288
300
|
version_field.val(image_version);
|
289
301
|
};
|
290
|
-
|
302
|
+
|
291
303
|
var downloadImageMetadata = function() {
|
292
304
|
var url = settings.uploadServer + '/images/' + current_image_uuid + '?callback=?';
|
293
305
|
$.getJSON(url, onDownloadImageMetadataComplete);
|
294
306
|
};
|
295
|
-
|
307
|
+
|
296
308
|
var onDownloadImageMetadataComplete = function(data) {
|
297
|
-
console.log(data);
|
298
|
-
|
299
309
|
current_image_width = data.image.width;
|
300
310
|
current_image_height = data.image.height;
|
301
|
-
|
311
|
+
|
302
312
|
// Make sure that crop points are initialized
|
303
313
|
getCropPoints();
|
304
|
-
|
314
|
+
|
305
315
|
var prefix = 'crop' + ASPECT_RATIO_IDS[settings.format] + '_';
|
306
|
-
|
316
|
+
|
307
317
|
current_crop_points.x1 = parseInt(data.image[prefix + 'x']);
|
308
318
|
current_crop_points.y1 = parseInt(data.image[prefix + 'y']);
|
309
319
|
current_crop_points.width = parseInt(data.image[prefix + 'width']);
|
310
320
|
current_crop_points.x2 = current_crop_points.x1 + current_crop_points.width;
|
311
|
-
|
321
|
+
|
312
322
|
var numeric_aspect_ratio = settings.format != 'original' ? numericAspectRatio() : current_image_width / current_image_height
|
313
323
|
|
314
324
|
current_crop_points.height = Math.round(parseFloat(current_crop_points.width) / numeric_aspect_ratio);
|
315
325
|
current_crop_points.y2 = current_crop_points.y1 + current_crop_points.height;
|
316
|
-
|
326
|
+
|
317
327
|
showCropButton();
|
318
|
-
console.log(current_crop_points);
|
319
328
|
};
|
320
|
-
|
329
|
+
|
321
330
|
var onUploaderFilesAdded = function(up, files) {
|
322
331
|
$.each(files, function(i, file) {
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
+
file_list_elem.append(
|
333
|
+
'<div id="' + file.id + '">' +
|
334
|
+
file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>' +
|
335
|
+
'</div>');
|
336
|
+
});
|
337
|
+
|
338
|
+
up.refresh(); // Reposition Flash/Silverlight
|
339
|
+
|
340
|
+
if (settings.auto_start == true) up.start();
|
332
341
|
};
|
333
|
-
|
342
|
+
|
334
343
|
var onUploaderFilesRemoved = function(up, files) {
|
335
344
|
$.each(files, function(i, file) {
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
345
|
+
$('#' + file.id).remove();
|
346
|
+
});
|
347
|
+
|
348
|
+
up.refresh(); // Reposition Flash/Silverlight
|
340
349
|
};
|
341
|
-
|
350
|
+
|
342
351
|
var onUploaderUploadProgress = function(up, file) {
|
343
352
|
$('#' + file.id + " b").html(file.percent + "%");
|
344
353
|
};
|
345
|
-
|
354
|
+
|
346
355
|
var onUploaderError = function(up, err) {
|
347
356
|
file_list_elem.append("<div>Error: " + err.code +
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
357
|
+
", Message: " + err.message +
|
358
|
+
(err.file ? ", File: " + err.file.name : "") +
|
359
|
+
"</div>"
|
360
|
+
);
|
361
|
+
|
362
|
+
up.refresh(); // Reposition Flash/Silverlight
|
354
363
|
};
|
355
|
-
|
364
|
+
|
356
365
|
var onUploaderFileUploaded = function(up, file, response) {
|
357
366
|
$('#' + file.id + " b").html("Done");
|
358
367
|
responseData = jQuery.parseJSON(response.response);
|
@@ -363,7 +372,7 @@
|
|
363
372
|
resetCropPoints();
|
364
373
|
existing_image = false;
|
365
374
|
};
|
366
|
-
|
375
|
+
|
367
376
|
var onUploaderUploadComplete = function(up, files) {
|
368
377
|
writeToFormFields();
|
369
378
|
obj.refreshPreviewImage();
|
@@ -371,20 +380,20 @@
|
|
371
380
|
showCropButton();
|
372
381
|
up.splice();
|
373
382
|
};
|
374
|
-
|
383
|
+
|
375
384
|
var onCancelCropButtonClick = function(event) {
|
376
385
|
event.preventDefault();
|
377
386
|
$.fancybox.close();
|
378
387
|
};
|
379
|
-
|
388
|
+
|
380
389
|
var onSaveCropButtonClick = function(event) {
|
381
390
|
event.preventDefault();
|
382
391
|
obj.saveCropping();
|
383
392
|
}
|
384
|
-
|
393
|
+
|
385
394
|
var onAreaSelectorSelectEnd = function(img, selection) {
|
386
395
|
selection = cropper.getSelection(false);
|
387
|
-
|
396
|
+
|
388
397
|
current_crop_points['x1'] = selection['x1'];
|
389
398
|
current_crop_points['y1'] = selection['y1'];
|
390
399
|
current_crop_points['x2'] = selection['x2'];
|
@@ -392,38 +401,38 @@
|
|
392
401
|
current_crop_points['width'] = selection['width'];
|
393
402
|
current_crop_points['height'] = selection['height'];
|
394
403
|
};
|
395
|
-
|
404
|
+
|
396
405
|
var onCroppingSaved = function(response) {
|
397
406
|
changeImageVersion(response.new_version);
|
398
407
|
obj.refreshPreviewImage();
|
399
408
|
$.fancybox.close();
|
400
409
|
};
|
401
|
-
|
410
|
+
|
402
411
|
// Get it all rolling
|
403
412
|
initialize();
|
404
413
|
};
|
405
|
-
|
414
|
+
|
406
415
|
$.fn.imaginable = function(options) {
|
407
416
|
return this.each(function() {
|
408
417
|
var element = $(this);
|
409
|
-
|
418
|
+
|
410
419
|
// Return early if this element already has a plugin instance
|
411
420
|
if (element.data('imaginable')) return;
|
412
|
-
|
421
|
+
|
413
422
|
var imaginable = new Imaginable(this, options);
|
414
|
-
|
423
|
+
|
415
424
|
// Store plugin object in this element's data
|
416
425
|
element.data('imaginable', imaginable);
|
417
426
|
});
|
418
427
|
};
|
419
|
-
|
428
|
+
|
420
429
|
})(jQuery);
|
421
430
|
|
422
431
|
$(function() {
|
423
|
-
|
432
|
+
|
424
433
|
$('.imaginable').each(function(){
|
425
434
|
var el = $(this);
|
426
435
|
el.imaginable();
|
427
436
|
});
|
428
|
-
|
429
|
-
});
|
437
|
+
|
438
|
+
});
|
data/lib/imaginable/version.rb
CHANGED