Skip to content

Commit

Permalink
[#1273] Add javascript to resource uploads
Browse files Browse the repository at this point in the history
  • Loading branch information
kindly committed Nov 12, 2013
1 parent 4913975 commit 2ec5fcf
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 55 deletions.
2 changes: 1 addition & 1 deletion ckan/logic/action/update.py
Expand Up @@ -233,7 +233,7 @@ def resource_update(context, data_dict):
raise ValidationError(errors)

resource = pkg_dict['resources'][n]
upload.upload(resource)
upload.upload(resource['id'])
model.repo.commit()
return resource

Expand Down
30 changes: 17 additions & 13 deletions ckan/public/base/javascript/modules/image-upload.js
Expand Up @@ -6,16 +6,16 @@ this.ckan.module('image-upload', function($, _) {
/* options object can be extended using data-module-* attributes */
options: {
is_url: true,
has_image: false,
field_upload: 'input[name="image_upload"]',
field_url: 'input[name="image_url"]',
field_clear: 'input[name="clear_upload"]',
is_upload: false,
field_upload: 'image_upload',
field_url: 'image_url',
field_clear: 'clear_upload',
upload_label: '',
i18n: {
upload: _('From computer'),
url: _('From web'),
remove: _('Remove'),
label: _('Upload image'),
label_url: _('Image URL'),
upload_label: _('Upload image'),
remove_tooltip: _('Reset this')
},
template: [
Expand All @@ -38,14 +38,18 @@ this.ckan.module('image-upload', function($, _) {
var options = this.options;

// firstly setup the fields
this.input = $(options.field_upload, this.el);
this.field_url = $(options.field_url, this.el).parents('.control-group');
var field_upload = 'input[name="' + options.field_upload + '"]';
var field_url = 'input[name="' + options.field_url + '"]';
var field_clear = 'input[name="' + options.field_clear + '"]';

this.input = $(field_upload, this.el);
this.field_url = $(field_url, this.el).parents('.control-group');
this.field_image = this.input.parents('.control-group');

// Is there a clear checkbox on the form already?
var checkbox = $(options.field_clear, this.el);
var checkbox = $(field_clear, this.el);
if (checkbox.length > 0) {
options.has_image = true;
options.is_upload = true;
checkbox.parents('.control-group').remove();
}

Expand Down Expand Up @@ -75,7 +79,7 @@ this.ckan.module('image-upload', function($, _) {
.insertBefore($('input', this.field_url));

// Update the main label
$('label[for="field-image-upload"]').text(this.i18n('label'));
$('label[for="field-image-upload"]').text(options.upload_label || this.i18n('upload_label'));

// Setup the file input
this.input
Expand All @@ -96,7 +100,7 @@ this.ckan.module('image-upload', function($, _) {
// Setup the initial state
if (options.is_url) {
this.changeState(this.state.web);
} else if (options.has_image) {
} else if (options.is_upload) {
this.changeState(this.state.attached);
} else {
this.changeState(this.state.blank);
Expand Down Expand Up @@ -139,7 +143,7 @@ this.ckan.module('image-upload', function($, _) {
_onFromWeb: function() {
this.changeState(this.state.web);
$('input', this.field_url).focus();
if (this.options.has_image) {
if (this.options.is_upload) {
this.field_clear.val('true');
}
},
Expand Down
8 changes: 6 additions & 2 deletions ckan/templates/group/snippets/group_form.html
Expand Up @@ -19,7 +19,10 @@

{{ form.markdown('description', label=_('Description'), id='field-description', placeholder=_('A little information about my group...'), value=data.description, error=errors.description) }}

{{ form.image_upload(data, errors, image_url=c.group_dict.image_display_url, is_upload_enabled=h.uploads_enabled()) }}
{% set is_upload = data.image_url and not data.image_url.startswith('http') %}
{% set is_url = data.image_url and data.image_url.startswith('http') %}

{{ form.image_upload(data, errors, is_upload_enabled=h.uploads_enabled(), is_url=is_url, is_upload=is_upload) }}

{% endblock %}

Expand Down Expand Up @@ -48,6 +51,8 @@
) }}
{% endfor %}
{% endblock %}

{{ form.required_message() }}
{# Do not update datasets here
{% block dataset_fields %}
{% if data.packages %}
Expand All @@ -70,7 +75,6 @@
#}

<div class="form-actions">
{{ form.required_message() }}
{% block delete_button %}
{% if h.check_access('group_delete', {'id': data.id}) %}
{% set locale = h.dump_json({'content': _('Are you sure you want to delete this Group?')}) %}
Expand Down
19 changes: 12 additions & 7 deletions ckan/templates/macros/form.html
Expand Up @@ -403,18 +403,23 @@
{{ form.image_upload(data, errors, is_upload_enabled=true) }}

#}
{% macro image_upload(data, errors, field_url='image_url', field_upload='image_upload', field_clear='clear_upload', image_url=false, is_upload_enabled=false, placeholder=false) %}
{% macro image_upload(data, errors, field_url='image_url', field_upload='image_upload', field_clear='clear_upload',
is_url=false, is_upload=false, is_upload_enabled=false, placeholder=false,
url_label='', upload_label='') %}
{% set placeholder = placeholder if placeholder else _('http://example.com/my-image.jpg') %}
{% set has_uploaded_data = data.get(field_url) and not data[field_url].startswith('http') %}
{% set is_url = data.get(field_url) and data[field_url].startswith('http') %}
{% set url_label = url_label or _('Image URL') %}
{% set upload_label = upload_label or _('Upload Image') %}

{% if is_upload_enabled %}<div class="image-upload" data-module="image-upload" data-module-is_url="{{ 'true' if is_url else 'false' }}" data-module-image_url="{{ image_url }}">{% endif %}
{% if is_upload_enabled %}
<div class="image-upload" data-module="image-upload" data-module-is_url="{{ 'true' if is_url else 'false' }}" data-module-is_upload="{{ 'true' if is_upload else 'false' }}"
data-module-field_url="{{ field_url }}" data-module-field_upload="{{ field_upload }}" data-module-field_clear="{{ field_clear }}" data-module-upload_label="{{ upload_label }}">
{% endif %}

{{ input(field_url, label=_('Image URL'), id='field-image-url', placeholder=placeholder, value=data.get(field_url), error=errors.get(field_url), classes=['control-full']) }}
{{ input(field_url, label=url_label, id='field-image-url', placeholder=placeholder, value=data.get(field_url), error=errors.get(field_url), classes=['control-full']) }}

{% if is_upload_enabled %}
{{ input(field_upload, label=_('Image Upload'), id='field-image-upload', type='file', placeholder='', value='', error='', classes=['control-full']) }}
{% if has_uploaded_data %}
{{ input(field_upload, label=upload_label, id='field-image-upload', type='file', placeholder='', value='', error='', classes=['control-full']) }}
{% if is_uploadu%}
{{ checkbox(field_clear, label=_('Clear Upload'), id='field-clear-upload', value='true', error='', classes=['control-full']) }}
{% endif %}
{% endif %}
Expand Down
5 changes: 4 additions & 1 deletion ckan/templates/organization/snippets/organization_form.html
Expand Up @@ -19,7 +19,10 @@

{{ form.markdown('description', label=_('Description'), id='field-description', placeholder=_('A little information about my organization...'), value=data.description, error=errors.description) }}

{{ form.image_upload(data, errors, image_url=c.group_dict.image_display_url, is_upload_enabled=h.uploads_enabled()) }}
{% set is_upload = data.image_url and not data.image_url.startswith('http') %}
{% set is_url = data.image_url and data.image_url.startswith('http') %}

{{ form.image_upload(data, errors, is_upload_enabled=h.uploads_enabled(), is_url=is_url, is_upload=is_upload) }}

{% endblock %}

Expand Down
35 changes: 4 additions & 31 deletions ckan/templates/package/snippets/resource_form.html
Expand Up @@ -16,38 +16,12 @@

<input name="id" value="{{ data.id }}" type="hidden"/>

<div class="control-group dataset-form-resource-types">
{% block basic_fields %}

{% block basic_fields_data %}
<div class="controls"{% if allow_upload %} data-module="resource-upload-field"{% endif %}>
{#
This block uses a slightly odd pattern. Unlike the rest of the radio
buttons which are wrapped _inside_ the labels here we place the label
after the input. This enables us to style the label based on the state
of the radio using css. eg. input[type=radio]+label {}
#}
<i class="ckan-icon ckan-icon-link-file"></i>
<input id="field-resource-type-file" type="radio" name="resource_type" checked="checked" value="file" />
<label class="radio inline" for="field-resource-type-file">{{ _('Link to a file') }}</label>
<i class="ckan-icon ckan-icon-link-plugin"></i>
<input id="field-resource-type-api" type="radio" name="resource_type" value="api" />
<label class="radio inline" for="field-resource-type-api">{{ _('Link to an API') }}</label>
</div>
</div>
{% endblock %}

{% block basic_fields_url %}
{{ form.input('url', id='field-url', label=_('Resource'), placeholder=_('eg. http://example.com/gold-prices-jan-2011.json'), value=data.url, error=errors.url, classes=['control-full', 'control-large'], is_required=true) }}
{% endblock %}

{% block basic_fields_upload %}
{% if h.uploads_enabled() %}
{{ form.input('upload', label=_('Resource Upload'), id='field-upload', type='file', placeholder='', error='', classes=['control-full']) }}
{% if data.url_type == 'upload' %}
{{ form.checkbox('clear_upload', label=_('Clear Upload'), id='field-clear-upload', value='true', error='', classes=['control-full']) }}
{% endif %}
{% endif %}
{% set is_upload = (data.url_type == 'upload') %}
{{ form.image_upload(data, errors, field_url='url', field_upload='upload', field_clear='clear_upload',
is_upload_enabled=h.uploads_enabled(), is_url=data.url and not is_upload, is_upload=is_upload,
upload_label=_('File Upload'), url_label=_('URL')) }}
{% endblock %}

{% block basic_fields_name %}
Expand All @@ -70,7 +44,6 @@

{{ form.required_message() }}

{% endblock %}

{% block metadata_fields %}
{% if include_metadata %}
Expand Down

0 comments on commit 2ec5fcf

Please sign in to comment.