Commit 580afdd731e1b392e145e7878fec549406c4cde4
1 parent
3db199c7
Exists in
master
and in
21 other branches
[media-panel-improvements] View all
Showing
10 changed files
with
140 additions
and
43 deletions
Show diff stats
app/controllers/my_profile/cms_controller.rb
| ... | ... | @@ -334,6 +334,12 @@ class CmsController < MyProfileController |
| 334 | 334 | render :partial => 'published_media_items' |
| 335 | 335 | end |
| 336 | 336 | |
| 337 | + def view_all_media | |
| 338 | + paginate_options = {:page => 1} | |
| 339 | + @key = params[:key].to_sym | |
| 340 | + load_recent_files(params[:parent_id], params[:q], paginate_options) | |
| 341 | + end | |
| 342 | + | |
| 337 | 343 | protected |
| 338 | 344 | |
| 339 | 345 | include CmsHelper |
| ... | ... | @@ -430,7 +436,7 @@ class CmsController < MyProfileController |
| 430 | 436 | {:images => _('Images'), :generics => _('Files')} |
| 431 | 437 | end |
| 432 | 438 | |
| 433 | - def load_recent_files(parent_id = nil, q = nil) | |
| 439 | + def load_recent_files(parent_id = nil, q = nil, paginate_options = {:page => 1, :per_page => 6}) | |
| 434 | 440 | #TODO Since we only have special support for images, I'm limiting myself to |
| 435 | 441 | # consider generic files as non-images. In the future, with more supported |
| 436 | 442 | # file types we'll need to have a smart way to fetch from the database |
| ... | ... | @@ -446,15 +452,15 @@ class CmsController < MyProfileController |
| 446 | 452 | end |
| 447 | 453 | |
| 448 | 454 | files = files.more_recent |
| 449 | - images = files.images.limit(6) | |
| 450 | - generics = files.no_images.limit(6) | |
| 455 | + images = files.images | |
| 456 | + generics = files.no_images | |
| 451 | 457 | |
| 452 | 458 | if q.present? |
| 453 | - @recent_files[:images] = find_by_contents(:images, images, q)[:results] | |
| 454 | - @recent_files[:generics] = find_by_contents(:generics, generics, q)[:results] | |
| 459 | + @recent_files[:images] = find_by_contents(:images, images, q, paginate_options)[:results] | |
| 460 | + @recent_files[:generics] = find_by_contents(:generics, generics, q, paginate_options)[:results] | |
| 455 | 461 | else |
| 456 | - @recent_files[:images] = images | |
| 457 | - @recent_files[:generics] = generics | |
| 462 | + @recent_files[:images] = images.paginate(paginate_options) | |
| 463 | + @recent_files[:generics] = generics.paginate(paginate_options) | |
| 458 | 464 | end |
| 459 | 465 | end |
| 460 | 466 | ... | ... |
app/views/cms/_published_media_items.html.erb
| 1 | -<div class='items'> | |
| 2 | - <% file_types.each do |key, header| %> | |
| 3 | - <% display = @recent_files[key].present? ? '' : 'none' %> | |
| 4 | - <div class='<%= key.to_s %>' style='display: <%= display%>;'> | |
| 1 | +<% file_types.each do |key, header| %> | |
| 2 | + <% display = @recent_files[key].present? ? '' : 'none' %> | |
| 3 | + <div class='<%= key.to_s %>' style='display: <%= display%>;'> | |
| 4 | + <div class='section-title'> | |
| 5 | 5 | <h3><%= header %></h3> |
| 6 | - <% @recent_files[key].each do |file| %> | |
| 7 | - <% @file = file %> | |
| 8 | - <%= render :partial => "cms/media_panel/#{key.to_s.singularize}" %> | |
| 6 | + <% if @recent_files[key].total_pages > 1 %> | |
| 7 | + <%= link_to(_('View all'), {:controller => 'cms', :action => 'view_all_media', :profile => profile.identifier, :key => key}, :class => 'view-all colorbox', 'data-key' => key) %> | |
| 9 | 8 | <% end %> |
| 10 | 9 | </div> |
| 11 | - <% end %> | |
| 12 | -</div> | |
| 10 | + <% @recent_files[key].each do |file| %> | |
| 11 | + <% @file = file %> | |
| 12 | + <%= render :partial => "cms/media_panel/#{key.to_s.singularize}" %> | |
| 13 | + <% end %> | |
| 14 | + </div> | |
| 15 | +<% end %> | ... | ... |
app/views/cms/_text_editor_sidebar.html.erb
| ... | ... | @@ -23,7 +23,9 @@ |
| 23 | 23 | "type='Folder' or type='Gallery'", {:root_label => _('Recent media')}) %> |
| 24 | 24 | <%= labelled_form_field _('Search'), text_field_tag('q') %> |
| 25 | 25 | <%= render :partial => 'drag_and_drop_note' %> |
| 26 | - <%= render :partial => 'published_media_items' %> | |
| 26 | + <div class='items'> | |
| 27 | + <%= render :partial => 'published_media_items' %> | |
| 28 | + </div> | |
| 27 | 29 | </div> |
| 28 | 30 | </div> |
| 29 | 31 | ... | ... |
app/views/cms/media_panel/_generic.html.erb
| 1 | 1 | <div class="item file <%= icon_for_article(@file) %>" data-item="div"> |
| 2 | 2 | <div> |
| 3 | - <a class="add-to-text" href="<%= url_for(@file.url) %>"><%= @file.title %></a> | |
| 3 | + <a class="add-to-text" href="<%= url_for(@file.url) %>" title="<%= @file.title %>"><%= @file.title %></a> | |
| 4 | 4 | </div> |
| 5 | 5 | </div> | ... | ... |
app/views/cms/media_panel/_image.html.erb
app/views/cms/media_upload.js.erb
| 1 | 1 | <% if @file.valid? %> |
| 2 | 2 | <% klass = @file.class.name.split('::').last.to_css_class %> |
| 3 | - jQuery("#published-media #recent-media .<%= klass.pluralize %> h3").after("<%= j render :partial => "cms/media_panel/#{klass}" %>"); | |
| 4 | - jQuery("#published-media #recent-media .<%= klass.pluralize %>").show(); | |
| 3 | + jQuery("#published-media .items .<%= klass.pluralize %> .section-title").after("<%= j render :partial => "cms/media_panel/#{klass}" %>"); | |
| 4 | + jQuery("#published-media .items .<%= klass.pluralize %>").show(); | |
| 5 | 5 | <% else %> |
| 6 | 6 | alert("Failed to upload file: <%= j @file.errors.full_messages.join(', ').html_safe %>"); |
| 7 | 7 | <% end %> | ... | ... |
public/javascripts/article.js
| ... | ... | @@ -79,6 +79,11 @@ jQuery(function($) { |
| 79 | 79 | return '<div class="item" data-item="div"><div><img src="' + img + '" style="max-width: 640px; max-height: 480px"/></div>' + '<div class="button-bar">' + add_to_text_button('with-text') + ' ' + close_button('with-text') + '</div></div>' |
| 80 | 80 | } |
| 81 | 81 | |
| 82 | + $('.view-all-images .item').live('click', function(){ | |
| 83 | + insert_item_in_text(jQuery(this).find('span')); | |
| 84 | + $.colorbox.close(); | |
| 85 | + }); | |
| 86 | + | |
| 82 | 87 | $('a.add-to-text').live('click', function() { |
| 83 | 88 | var $item = $(this).closest('.item'); |
| 84 | 89 | var html_selector = $item.attr('data-item'); | ... | ... |
public/javascripts/media-panel.js
| ... | ... | @@ -26,6 +26,7 @@ function loadPublishedMedia() { |
| 26 | 26 | success: function(response) { |
| 27 | 27 | jQuery("#published-media .items").html(response); |
| 28 | 28 | jQuery('#published-media').removeClass('fetching'); |
| 29 | + updateViewAllLinks(); | |
| 29 | 30 | }, |
| 30 | 31 | error: function(response, textStatus, xhr) { |
| 31 | 32 | console.log(response); |
| ... | ... | @@ -34,6 +35,18 @@ function loadPublishedMedia() { |
| 34 | 35 | }); |
| 35 | 36 | } |
| 36 | 37 | |
| 38 | +function updateViewAllLinks() { | |
| 39 | + var parent_id = jQuery('#published-media #parent_id').val(); | |
| 40 | + var q = jQuery('#published-media #q').val(); | |
| 41 | + jQuery('#published-media .view-all').each(function(){ | |
| 42 | + var key = jQuery(this).data('key'); | |
| 43 | + var params = {parent_id: parent_id, q: q, key: key} | |
| 44 | + var href = jQuery(this).attr('href'); | |
| 45 | + href = href.replace(/\?.*/, '?'+jQuery.param(params)); | |
| 46 | + jQuery(this).attr('href', href); | |
| 47 | + }); | |
| 48 | +} | |
| 49 | + | |
| 37 | 50 | jQuery('#published-media #parent_id').change(function(){ loadPublishedMedia() }); |
| 38 | 51 | |
| 39 | 52 | jQuery("#published-media #q").typeWatch({ | ... | ... |
public/stylesheets/application.css
| ... | ... | @@ -3415,7 +3415,7 @@ div.with_media_panel .formfield input[type="checkbox"] { |
| 3415 | 3415 | .text-editor-sidebar-box { |
| 3416 | 3416 | background: #fcfcf9; |
| 3417 | 3417 | border: 1px solid #d3d7cf; |
| 3418 | - padding: 10px 10px 0px 10px; | |
| 3418 | + padding: 10px; | |
| 3419 | 3419 | margin-bottom: 10px; |
| 3420 | 3420 | } |
| 3421 | 3421 | |
| ... | ... | @@ -3441,11 +3441,53 @@ div.with_media_panel .formfield input[type="checkbox"] { |
| 3441 | 3441 | margin-bottom: 10px; |
| 3442 | 3442 | } |
| 3443 | 3443 | |
| 3444 | -.text-editor-sidebar .items .file { | |
| 3444 | +.text-editor-sidebar .image, | |
| 3445 | +.view-all-media .image { | |
| 3446 | + display: inline-block; | |
| 3447 | + vertical-align: top; | |
| 3448 | + text-align: center; | |
| 3449 | + position: relative; | |
| 3450 | +} | |
| 3451 | + | |
| 3452 | +.text-editor-sidebar .image { | |
| 3453 | + width: 80px; | |
| 3454 | + margin: 2px; | |
| 3455 | + height: 80px; | |
| 3456 | + line-height: 80px; | |
| 3457 | +} | |
| 3458 | + | |
| 3459 | +.view-all-media .image { | |
| 3460 | + width: 150px; | |
| 3461 | + margin: 3px; | |
| 3462 | + height: 125px; | |
| 3463 | + line-height: 125px; | |
| 3464 | +} | |
| 3465 | + | |
| 3466 | +.view-all-images .image:hover { | |
| 3467 | + cursor: pointer; | |
| 3468 | + background-color: #EEE; | |
| 3469 | +} | |
| 3470 | + | |
| 3471 | +.text-editor-sidebar img, | |
| 3472 | +.view-all-media img { | |
| 3473 | + vertical-align: middle; | |
| 3474 | + max-height: 100%; | |
| 3475 | + max-width: 100%; | |
| 3476 | +} | |
| 3477 | + | |
| 3478 | +.view-all-images { | |
| 3479 | + text-align: center; | |
| 3480 | +} | |
| 3481 | + | |
| 3482 | +.text-editor-sidebar .file, | |
| 3483 | +.view-all-media .file { | |
| 3445 | 3484 | background-repeat: no-repeat; |
| 3446 | 3485 | background-position: 0px 0px; |
| 3447 | 3486 | border: none; |
| 3448 | 3487 | margin-bottom: 12px; |
| 3488 | + padding-left: 20px; | |
| 3489 | + overflow: hidden; | |
| 3490 | + text-align: left; | |
| 3449 | 3491 | } |
| 3450 | 3492 | |
| 3451 | 3493 | .text-editor-sidebar select, |
| ... | ... | @@ -3453,37 +3495,36 @@ div.with_media_panel .formfield input[type="checkbox"] { |
| 3453 | 3495 | width: 100%; |
| 3454 | 3496 | } |
| 3455 | 3497 | |
| 3456 | -.text-editor-sidebar .items .image { | |
| 3457 | - display: inline-block; | |
| 3458 | - vertical-align: middle; | |
| 3459 | - margin: 5px; | |
| 3460 | - position: relative; | |
| 3461 | -} | |
| 3462 | - | |
| 3463 | -.text-editor-sidebar .items .file { | |
| 3464 | - padding-left: 20px; | |
| 3465 | -} | |
| 3466 | - | |
| 3467 | -.text-editor-sidebar .items :hover { | |
| 3498 | +.text-editor-sidebar .items :hover, | |
| 3499 | +.view-all-media :hover { | |
| 3468 | 3500 | background-color: transparent; |
| 3469 | 3501 | } |
| 3470 | 3502 | |
| 3471 | -.text-editor-sidebar .items .image-controls { | |
| 3503 | +.text-editor-sidebar .items .image-controls, | |
| 3504 | +.view-all-media .image-controls { | |
| 3472 | 3505 | display: none; |
| 3473 | 3506 | position: absolute; |
| 3474 | 3507 | top: 5px; |
| 3475 | 3508 | left: 5px; |
| 3509 | + line-height: 16px; | |
| 3476 | 3510 | } |
| 3477 | 3511 | |
| 3478 | -.text-editor-sidebar .items .item:hover .image-controls { | |
| 3512 | +.text-editor-sidebar .items .item:hover .image-controls, | |
| 3513 | +.view-all-media .item:hover .image-controls { | |
| 3479 | 3514 | display: block; |
| 3480 | 3515 | } |
| 3481 | 3516 | |
| 3482 | -.text-editor-sidebar .items .file-controls { | |
| 3517 | +.view-all-images .item:hover .image-controls { | |
| 3518 | + display: none; | |
| 3519 | +} | |
| 3520 | + | |
| 3521 | +.text-editor-sidebar .items .file-controls, | |
| 3522 | +.view-all-media .file-controls { | |
| 3483 | 3523 | margin-top: 5px; |
| 3484 | 3524 | } |
| 3485 | 3525 | |
| 3486 | -.text-editor-sidebar .items .image-controls .icon-zoom { | |
| 3526 | +.text-editor-sidebar .items .image-controls .icon-zoom, | |
| 3527 | +.view-all-media .image-controls .icon-zoom { | |
| 3487 | 3528 | background-image: url(../images/zoom-dark.png); |
| 3488 | 3529 | display: block; |
| 3489 | 3530 | width: 0px; |
| ... | ... | @@ -3494,10 +3535,6 @@ div.with_media_panel .formfield input[type="checkbox"] { |
| 3494 | 3535 | background-repeat: no-repeat; |
| 3495 | 3536 | background-position: 98% 10px; |
| 3496 | 3537 | } |
| 3497 | -.text-editor-sidebar img { | |
| 3498 | - max-height: 70px; | |
| 3499 | - max-width: 74px; | |
| 3500 | -} | |
| 3501 | 3538 | .text-editor-sidebar .media-upload-error { |
| 3502 | 3539 | color: red; |
| 3503 | 3540 | } |
| ... | ... | @@ -3505,6 +3542,29 @@ div.with_media_panel .formfield input[type="checkbox"] { |
| 3505 | 3542 | max-width: 355px; |
| 3506 | 3543 | } |
| 3507 | 3544 | |
| 3545 | +.view-all-media { | |
| 3546 | + max-width: 830px; | |
| 3547 | + max-height: 600px; | |
| 3548 | +} | |
| 3549 | + | |
| 3550 | +.view-all-media a.button { | |
| 3551 | + background-color: #EEE; | |
| 3552 | +} | |
| 3553 | + | |
| 3554 | +#published-media .section-title { | |
| 3555 | + width: 100%; | |
| 3556 | + height: 40px; | |
| 3557 | +} | |
| 3558 | + | |
| 3559 | +#published-media .section-title h3 { | |
| 3560 | + float: left; | |
| 3561 | +} | |
| 3562 | + | |
| 3563 | +#published-media .section-title a.view-all { | |
| 3564 | + float: right; | |
| 3565 | + line-height: 40px | |
| 3566 | +} | |
| 3567 | + | |
| 3508 | 3568 | /* ==> public/stylesheets/controller_contact.css <== */ |
| 3509 | 3569 | /*** SELECT CITY ***/ |
| 3510 | 3570 | ... | ... |