Files
Pinry/pinry/static/js/pin-form.js

199 lines
7.2 KiB
JavaScript
Raw Normal View History

/**
* Pin Form for Pinry
* Descrip: This is for creation new pins on everything, the bookmarklet, on the
* site and even editing pins in some limited situations.
* Authors: Pinry Contributors
2013-03-03 14:30:06 +00:00
* Updated: March 3rd, 2013
* Require: jQuery, Pinry JavaScript Helpers
*/
2013-02-26 01:54:02 +00:00
$(window).load(function() {
2016-02-25 02:26:45 +00:00
var uploadedImage = false;
2013-03-12 06:12:09 +00:00
var editedPin = null;
// Start Helper Functions
function getFormData() {
return {
submitter: currentUser,
url: $('#pin-form-image-url').val(),
description: $('#pin-form-description').val(),
tags: cleanTags($('#pin-form-tags').val())
}
}
function createPinPreviewFromForm() {
var context = {pins: [{
submitter: currentUser,
image: {thumbnail: {image: $('#pin-form-image-url').val()}},
description: $('#pin-form-description').val(),
tags: cleanTags($('#pin-form-tags').val())
}]},
html = renderTemplate('#pins-template', context),
preview = $('#pin-form-image-preview');
preview.html(html);
preview.find('.pin').width(240);
preview.find('.pin').fadeIn(300);
2013-03-05 22:02:35 +00:00
if (getFormData().url == "")
preview.find('.image-wrapper').height(255);
preview.find('.image-wrapper img').fadeIn(300);
2013-03-05 22:02:35 +00:00
setTimeout(function() {
if (preview.find('.pin').height() > 305) {
$('#pin-form .modal-body').animate({
'height': preview.find('.pin').height()+25
2013-03-05 22:02:35 +00:00
}, 300);
}
}, 300);
}
function dismissModal(modal) {
modal.modal('hide');
modal.on('hidden.bs.modal', function() {
modal.remove();
});
}
// End Helper Functions
// Start View Functions
2013-03-12 06:12:09 +00:00
function createPinForm(editPinId) {
$('body').append(renderTemplate('#pin-form-template', ''));
var modal = $('#pin-form'),
formFields = [$('#pin-form-image-url'), $('#pin-form-description'),
$('#pin-form-tags')],
pinFromUrl = getUrlParameter('pin-image-url');
2013-03-12 06:12:09 +00:00
// If editable grab existing data
if (editPinId) {
var promise = getPinData(editPinId);
promise.success(function(data) {
editedPin = data;
$('#pin-form-image-url').val(editedPin.image.thumbnail.image);
$('#pin-form-image-url').parent().hide();
2016-02-25 02:26:45 +00:00
$('#pin-form-image-upload').parent().hide();
2013-03-12 06:12:09 +00:00
$('#pin-form-description').val(editedPin.description);
$('#pin-form-tags').val(editedPin.tags);
createPinPreviewFromForm();
});
}
modal.modal('show');
// Auto update preview on field changes
2013-03-05 22:02:35 +00:00
var timer;
for (var i in formFields) {
formFields[i].bind('propertychange keyup input paste', function() {
2013-03-05 22:02:35 +00:00
clearTimeout(timer);
timer = setTimeout(function() {
createPinPreviewFromForm()
}, 700);
2016-02-25 02:26:45 +00:00
if (!uploadedImage)
$('#pin-form-image-upload').parent().fadeOut(300);
});
}
2016-02-25 02:26:45 +00:00
// Drag and drop upload
$('#pin-form-image-upload').dropzone({
url: '/pins/create-image/',
paramName: 'qqfile',
parallelUploads: 1,
uploadMultiple: false,
maxFiles: 1,
acceptedFiles: 'image/*',
success: function(file, resp) {
$('#pin-form-image-url').parent().fadeOut(300);
var promise = getImageData(resp.success.id);
uploadedImage = resp.success.id;
promise.success(function(image) {
$('#pin-form-image-url').val(image.thumbnail.image);
createPinPreviewFromForm();
});
promise.error(function() {
message('Problem uploading image.', 'alert alert-error');
});
}
});
// If bookmarklet submit
if (pinFromUrl) {
2016-02-25 02:26:45 +00:00
$('#pin-form-image-upload').parent().css('display', 'none');
$('#pin-form-image-url').val(pinFromUrl);
$('.navbar').css('display', 'none');
modal.css({
'margin-top': -35,
'margin-left': -281
});
}
// Submit pin on post click
2013-02-26 01:54:02 +00:00
$('#pin-form-submit').click(function(e) {
e.preventDefault();
$(this).off('click');
$(this).addClass('disabled');
2013-03-12 06:12:09 +00:00
if (editedPin) {
var apiUrl = '/api/v1/pin/'+editedPin.id+'/?format=json';
var data = {
description: $('#pin-form-description').val(),
tags: cleanTags($('#pin-form-tags').val())
}
var promise = $.ajax({
type: "put",
url: apiUrl,
contentType: 'application/json',
data: JSON.stringify(data)
});
promise.success(function(pin) {
pin.editable = true;
var renderedPin = renderTemplate('#pins-template', {
pins: [
pin
]
});
$('#pins').find('.pin[data-id="'+pin.id+'"]').replaceWith(renderedPin);
tileLayout();
lightbox();
2013-03-12 06:12:09 +00:00
dismissModal(modal);
editedPin = null;
});
promise.error(function() {
2016-02-04 19:29:48 +00:00
message('Problem updating image.', 'alert alert-danger');
2013-03-12 06:12:09 +00:00
});
} else {
var data = {
submitter: '/api/v1/user/'+currentUser.id+'/',
description: $('#pin-form-description').val(),
tags: cleanTags($('#pin-form-tags').val())
};
2016-02-25 02:26:45 +00:00
if (uploadedImage) data.image = '/api/v1/image/'+uploadedImage+'/';
else data.url = $('#pin-form-image-url').val();
2013-03-12 06:12:09 +00:00
var promise = postPinData(data);
promise.success(function(pin) {
if (pinFromUrl) return window.close();
pin.editable = true;
pin = renderTemplate('#pins-template', {pins: [pin]});
$('#pins').prepend(pin);
2013-03-12 15:01:22 -07:00
tileLayout();
lightbox();
2013-03-12 06:12:09 +00:00
dismissModal(modal);
2016-02-25 02:26:45 +00:00
uploadedImage = false;
2013-03-12 06:12:09 +00:00
});
promise.error(function() {
2016-02-04 19:29:48 +00:00
message('Problem saving image.', 'alert alert-danger');
2013-03-12 06:12:09 +00:00
});
}
2013-02-26 01:54:02 +00:00
});
$('#pin-form-close').click(function() {
if (pinFromUrl) return window.close();
dismissModal(modal);
2013-02-26 01:54:02 +00:00
});
createPinPreviewFromForm();
2013-02-26 01:54:02 +00:00
}
// End View Functions
2013-02-26 01:54:02 +00:00
// Start Init
2013-03-12 06:12:09 +00:00
window.pinForm = function(editPinId) {
editPinId = typeof editPinId !== 'undefined' ? editPinId : null;
createPinForm(editPinId);
}
if (getUrlParameter('pin-image-url')) {
2013-02-26 01:54:02 +00:00
createPinForm();
}
// End Init
2013-02-26 01:54:02 +00:00
});