Commit 224dcf933fcf1abbbdd0e8f3cf1ce53715bc4385

Authored by Larissa Reis
2 parents d070f74a 43548e50

Merge branch 'stoa' of gitlab.com:colivre/noosfero into feedback

app/controllers/my_profile/cms_controller.rb
@@ -114,7 +114,7 @@ class CmsController < MyProfileController @@ -114,7 +114,7 @@ class CmsController < MyProfileController
114 @success_back_to = params[:success_back_to] 114 @success_back_to = params[:success_back_to]
115 # user must choose an article type first 115 # user must choose an article type first
116 116
117 - @parent = profile.articles.find(params[:parent_id]) if params && params[:parent_id] 117 + @parent = profile.articles.find(params[:parent_id]) if params && params[:parent_id].present?
118 record_coming 118 record_coming
119 @type = params[:type] 119 @type = params[:type]
120 if @type.blank? 120 if @type.blank?
@@ -159,7 +159,10 @@ class CmsController < MyProfileController @@ -159,7 +159,10 @@ class CmsController < MyProfileController
159 if continue 159 if continue
160 redirect_to :action => 'edit', :id => @article 160 redirect_to :action => 'edit', :id => @article
161 else 161 else
162 - success_redirect 162 + respond_to do |format|
  163 + format.html { success_redirect }
  164 + format.json { render :text => {:id => @article.id, :full_name => profile.identifier + '/' + @article.full_name}.to_json }
  165 + end
163 end 166 end
164 return 167 return
165 end 168 end
@@ -477,7 +480,7 @@ class CmsController < MyProfileController @@ -477,7 +480,7 @@ class CmsController < MyProfileController
477 files = profile.files 480 files = profile.files
478 end 481 end
479 482
480 - files = files.more_recent 483 + files = files.reorder('created_at DESC')
481 images = files.images 484 images = files.images
482 generics = files.no_images 485 generics = files.no_images
483 486
app/models/profile_suggestion.rb
@@ -157,4 +157,22 @@ class ProfileSuggestion < ActiveRecord::Base @@ -157,4 +157,22 @@ class ProfileSuggestion < ActiveRecord::Base
157 self.save 157 self.save
158 end 158 end
159 159
  160 + def self.generate_all_profile_suggestions
  161 + Delayed::Job.enqueue(ProfileSuggestion::GenerateAllJob.new) unless ProfileSuggestion::GenerateAllJob.exists?
  162 + end
  163 +
  164 + def self.generate_profile_suggestions(person_id)
  165 + Delayed::Job.enqueue ProfileSuggestionsJob.new(person_id) unless ProfileSuggestionsJob.exists?(person_id)
  166 + end
  167 +
  168 + class GenerateAllJob
  169 + def self.exists?
  170 + Delayed::Job.by_handler("--- !ruby/object:ProfileSuggestion::GenerateAllJob {}\n").count > 0
  171 + end
  172 +
  173 + def perform
  174 + Person.find_each {|person| ProfileSuggestion.generate_profile_suggestions(person.id) }
  175 + end
  176 + end
  177 +
160 end 178 end
app/views/admin_panel/_signup_welcome_screen.html.erb
1 <div class='description'> 1 <div class='description'>
2 - <%= _('This text will be showed as a welcome message to users after signup.') %><br/><br/> 2 + <%= _('If you enable this feature on the "Features" section of the Administration Panel, this text will be shown as a welcome message to users after signup.') %><br/><br/>
3 </div> 3 </div>
4 <%= labelled_form_field(_('Body'), text_area(:environment, :signup_welcome_screen_body, :cols => 40, :style => 'width: 100%', :class => 'mceEditor')) %> 4 <%= labelled_form_field(_('Body'), text_area(:environment, :signup_welcome_screen_body, :cols => 40, :style => 'width: 100%', :class => 'mceEditor')) %>
5 5
@@ -8,4 +8,4 @@ @@ -8,4 +8,4 @@
8 <%= _('If this content is left blank, the following page will be displayed to the user:') %><br/><br/> 8 <%= _('If this content is left blank, the following page will be displayed to the user:') %><br/><br/>
9 </div> 9 </div>
10 <p> 10 <p>
11 -<%= render :file => 'home/welcome' %> 11 +<%= render :file => 'home/welcome', :locals => {:default_message => true} %>
app/views/cms/_media_new_folder.html.erb 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +<%= form_tag({:action => 'new', :profile => profile.identifier}, :id => 'new-folder-dialog', :title => _('Create new folder'), :style => 'display: none;') do %>
  2 + <%= select_profile_folder(
  3 + _('Choose parent folder:'),
  4 + :parent_id, profile, default_folder, {}, {},
  5 + "type='Folder' or type='Gallery'")
  6 + %>
  7 +
  8 + <%= content_tag(:label, radio_button_tag(:folder_type, 'Gallery', true) + _('Gallery')) %>
  9 + <%= content_tag(:label, radio_button_tag(:folder_type, 'Folder', false) + _('Folder')) %>
  10 +
  11 + <%= labelled_form_field _('Name:'), text_field_tag(:new_folder, nil, 'data-url' => url_for({:action => 'new', :profile => profile.identifier})) %>
  12 + <% button_bar do %>
  13 + <%= submit_button(:newfolder, _('Create')) %>
  14 + <% end %>
  15 +<% end %>
app/views/cms/_text_editor_sidebar.html.erb
  1 +<% default_folder = content_id_to_str default_folder_for_image_upload(profile) %>
  2 +
1 <div class='text-editor-sidebar'> 3 <div class='text-editor-sidebar'>
2 <span class='button-add' data-value='<%= _('Add to the text') %>'></span> 4 <span class='button-add' data-value='<%= _('Add to the text') %>'></span>
3 <span class='button-zoom' data-value='<%= _('Zoom in') %>'></span> 5 <span class='button-zoom' data-value='<%= _('Zoom in') %>'></span>
4 <span class='button-close' data-value='<%= _('Close') %>'></span> 6 <span class='button-close' data-value='<%= _('Close') %>'></span>
5 7
  8 + <div class='header'><strong><%= _('Insert media') %></strong><%= button('vertical-toggle', _('Show/Hide'), '#') %></div>
  9 +
6 <%= render(:partial => 'textile_quick_reference') if @article.is_a?(TextileArticle) %> 10 <%= render(:partial => 'textile_quick_reference') if @article.is_a?(TextileArticle) %>
7 <div class='text-editor-sidebar-box' id='media-upload-box'> 11 <div class='text-editor-sidebar-box' id='media-upload-box'>
8 - <div class='header'><strong><%= _('Insert media') %></strong></div>  
9 <div id='media-upload-form'> 12 <div id='media-upload-form'>
10 <%= form_tag({ :action => 'media_upload' }, :multipart => true) do %> 13 <%= form_tag({ :action => 'media_upload' }, :multipart => true) do %>
11 <div class='formfield'> 14 <div class='formfield'>
12 - <% default_folder = content_id_to_str default_folder_for_image_upload(profile) %>  
13 <%= select_profile_folder( 15 <%= select_profile_folder(
14 _('Choose folder to upload files:'), 16 _('Choose folder to upload files:'),
15 :parent_id, profile, default_folder, {}, {}, 17 :parent_id, profile, default_folder, {}, {},
16 "type='Folder' or type='Gallery'" 18 "type='Folder' or type='Gallery'"
17 ) %> 19 ) %>
18 </div> 20 </div>
  21 + <%= button(:newfolder, _('New folder'), '#', :id => 'new-folder-button') %>
19 <p><%= file_field_tag('file', :multiple => true) %></p> 22 <p><%= file_field_tag('file', :multiple => true) %></p>
20 <% end %> 23 <% end %>
21 </div> 24 </div>
@@ -26,7 +29,6 @@ @@ -26,7 +29,6 @@
26 </div> 29 </div>
27 30
28 <div id='published-media' class='text-editor-sidebar-box' data-url='<%= url_for({:controller => 'cms', :action => 'published_media_items', :profile => profile.identifier}) %>'> 31 <div id='published-media' class='text-editor-sidebar-box' data-url='<%= url_for({:controller => 'cms', :action => 'published_media_items', :profile => profile.identifier}) %>'>
29 - <div class='header'><strong><%= _('Published media') %></strong></div>  
30 <%= select_profile_folder(nil, :parent_id, profile, 'recent-media', {}, {}, 32 <%= select_profile_folder(nil, :parent_id, profile, 'recent-media', {}, {},
31 "type='Folder' or type='Gallery'", {:root_label => _('Recent media')}) %> 33 "type='Folder' or type='Gallery'", {:root_label => _('Recent media')}) %>
32 <%= labelled_form_field _('Search'), text_field_tag('q') %> 34 <%= labelled_form_field _('Search'), text_field_tag('q') %>
@@ -45,4 +47,5 @@ @@ -45,4 +47,5 @@
45 </div> 47 </div>
46 </script> 48 </script>
47 49
  50 +<%= render :partial => 'media_new_folder', :locals => {:default_folder => default_folder} %>
48 <%= javascript_include_tag 'jquery.fileupload.js', 'tmpl.js', 'media-panel.js' %> 51 <%= javascript_include_tag 'jquery.fileupload.js', 'tmpl.js', 'media-panel.js' %>
app/views/cms/media_upload.js.erb
1 -<% klass = @file.class.name.split('::').last.to_css_class %>  
2 -jQuery("#published-media .items .<%= klass.pluralize %> .section-title").after("<%= j render :partial => "cms/media_panel/#{klass}" %>");  
3 -jQuery("#published-media .items .<%= klass.pluralize %>").show(); 1 +loadPublishedMedia();
app/views/enterprise_registration/creation.html.erb
1 -<h1><%= __('Enterprise registration completed') %></h1>  
2 -<p><%= __("Your enterprise (%s) was successfully registered.") % @enterprise.name %></p>  
3 -<p><%= link_to __('You can manage your enterprise now.'), @enterprise.admin_url %></p> 1 +<h1><%= _('Enterprise registration completed') %></h1>
  2 +<p><%= _("Your enterprise (%s) was successfully registered.") % @enterprise.name %></p>
  3 +<p><%= link_to _('You can manage your enterprise now.'), @enterprise.admin_url %></p>
4 4
5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @enterprise.template, :header => _("What can I do with a %s?")} %> 5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @enterprise.template, :header => _("What can I do with a %s?")} %>
6 6
app/views/home/welcome.html.erb
  1 +<% default_message = defined?(default_message) ? default_message : false %>
  2 +
1 <div id='thanks-for-signing'> 3 <div id='thanks-for-signing'>
2 <h1><%= _("Welcome to %s!") % environment.name %></h1> 4 <h1><%= _("Welcome to %s!") % environment.name %></h1>
3 - <% if environment.has_custom_welcome_screen? %> 5 + <% if environment.has_custom_welcome_screen? && !default_message %>
4 <%= environment.settings[:signup_welcome_screen_body].html_safe %> 6 <%= environment.settings[:signup_welcome_screen_body].html_safe %>
5 <% else %> 7 <% else %>
6 <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> 8 <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3>
app/views/memberships/welcome.html.erb
1 -<h1><%= __('Community created') %></h1>  
2 -<p><%= __("Your community (%s) was successfully created.") % @community.name %></p>  
3 -<p><%= link_to __('You can manage your community now.'), @community.admin_url %></p> 1 +<h1><%= _('Community created') %></h1>
  2 +<p><%= _("Your community (%s) was successfully created.") % @community.name %></p>
  3 +<p><%= link_to _('You can manage your community now.'), @community.admin_url %></p>
4 4
5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @community.template, :header => _("What can I do with a %s?")} %> 5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @community.template, :header => _("What can I do with a %s?")} %>
6 6
app/views/profile_editor/welcome_page.html.erb
1 <h1><%= _('Edit welcome page') %></h1> 1 <h1><%= _('Edit welcome page') %></h1>
2 2
3 -<% labelled_form_for :welcome_page, @welcome_page do |f| %> 3 +<%= labelled_form_for :welcome_page do |f| %>
4 <%= error_messages_for :welcome_page %> 4 <%= error_messages_for :welcome_page %>
5 5
6 <%= f.check_box(:published) %> 6 <%= f.check_box(:published) %>
app/views/shared/_lead_and_body.html.erb
@@ -20,16 +20,16 @@ @@ -20,16 +20,16 @@
20 <div class='article-lead' id="article-lead-<%=lead_id.to_s%>"> 20 <div class='article-lead' id="article-lead-<%=lead_id.to_s%>">
21 21
22 <% if f %> 22 <% if f %>
23 - <%= labelled_form_field(_(abstract_label), f.text_area(abstract_method, :style => 'width: 98%; height: 200px;', :class => editor_type)) %> 23 + <%= labelled_form_field(_(abstract_label), f.text_area(abstract_method, :style => 'width: 100%; height: 200px;', :class => editor_type)) %>
24 <% else %> 24 <% else %>
25 - <%= labelled_form_field(_(abstract_label), text_area(object, abstract_method, :style => 'width: 98%; height: 200px;', :class => editor_type)) %> 25 + <%= labelled_form_field(_(abstract_label), text_area(object, abstract_method, :style => 'width: 100%; height: 200px;', :class => editor_type)) %>
26 <% end %> 26 <% end %>
27 </div> 27 </div>
28 <div style="margin-top: 10px;"> 28 <div style="margin-top: 10px;">
29 <% if f %> 29 <% if f %>
30 - <%= labelled_form_field(_(body_label), f.text_area(body_method, :style => 'width: 98%; height: 400px;', :class => editor_type)) %> 30 + <%= labelled_form_field(_(body_label), f.text_area(body_method, :style => 'width: 100%; height: 400px;', :class => editor_type)) %>
31 <% else %> 31 <% else %>
32 - <%= labelled_form_field(_(body_label), text_area(object, body_method, :style => 'width: 98%; height: 400px;', :class => editor_type)) %> 32 + <%= labelled_form_field(_(body_label), text_area(object, body_method, :style => 'width: 100%; height: 400px;', :class => editor_type)) %>
33 <% end %> 33 <% end %>
34 </div> 34 </div>
35 35
config/schedule.rb
@@ -26,3 +26,7 @@ set :output, &quot;log/cron.log&quot; @@ -26,3 +26,7 @@ set :output, &quot;log/cron.log&quot;
26 every 1.minute do 26 every 1.minute do
27 runner "SearchTerm.calculate_scores" 27 runner "SearchTerm.calculate_scores"
28 end 28 end
  29 +
  30 +every 90.days do
  31 + runner "ProfileSuggestion.generate_all_profile_suggestions"
  32 +end
lib/profile_suggestions_job.rb
1 class ProfileSuggestionsJob < Struct.new(:person_id) 1 class ProfileSuggestionsJob < Struct.new(:person_id)
2 2
  3 + def self.exists?(person_id)
  4 + !find(person_id).empty?
  5 + end
  6 +
  7 + def self.find(person_id)
  8 + Delayed::Job.by_handler("--- !ruby/struct:ProfileSuggestionsJob\nperson_id: #{person_id}\n")
  9 + end
  10 +
3 def perform 11 def perform
  12 + logger = Delayed::Worker.logger
4 begin 13 begin
5 person = Person.find(person_id) 14 person = Person.find(person_id)
6 15
7 ProfileSuggestion::RULES.each do |rule| 16 ProfileSuggestion::RULES.each do |rule|
8 ProfileSuggestion.send(rule, person) 17 ProfileSuggestion.send(rule, person)
9 end 18 end
10 -  
11 UserMailer.profiles_suggestions_email(person).deliver 19 UserMailer.profiles_suggestions_email(person).deliver
12 rescue Exception => exception 20 rescue Exception => exception
13 - Rails.logger.warn("Error with suggestions for person ID %d\n%s" % [person_id, exception.to_s]) 21 + logger.warn("Error with suggestions for person ID %d: %s" % [person_id, exception.to_s])
14 end 22 end
15 end 23 end
16 24
public/designs/icons/tango/style.css
@@ -72,6 +72,7 @@ @@ -72,6 +72,7 @@
72 .icon-newupload-file { background-image: url(Tango/16x16/actions/filesave.png) } 72 .icon-newupload-file { background-image: url(Tango/16x16/actions/filesave.png) }
73 .icon-slideshow { background-image: url(Tango/16x16/mimetypes/x-office-presentation.png) } 73 .icon-slideshow { background-image: url(Tango/16x16/mimetypes/x-office-presentation.png) }
74 .icon-photos { background-image: url(Tango/16x16/devices/camera-photo.png) } 74 .icon-photos { background-image: url(Tango/16x16/devices/camera-photo.png) }
  75 +.icon-vertical-toggle { background-image: url(Tango/16x16/actions/mail-send-receive.png) }
75 76
76 .icon-text-html { background-image: url(Tango/16x16/mimetypes/text-html.png) } 77 .icon-text-html { background-image: url(Tango/16x16/mimetypes/text-html.png) }
77 .icon-text-plain { background-image: url(Tango/16x16/mimetypes/text-x-generic.png) } 78 .icon-text-plain { background-image: url(Tango/16x16/mimetypes/text-x-generic.png) }
public/javascripts/article.js
@@ -74,9 +74,9 @@ jQuery(function($) { @@ -74,9 +74,9 @@ jQuery(function($) {
74 } 74 }
75 } 75 }
76 76
77 - function zoom_dialog_html(img) { 77 + function zoom_dialog_html(name, img) {
78 // FIXME organize this code better 78 // FIXME organize this code better
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') + '&nbsp;&nbsp;&nbsp;' + close_button('with-text') + '</div></div>' 79 + return '<h3 style="text-align: center;">'+ name +'</h3><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') + '&nbsp;&nbsp;&nbsp;' + close_button('with-text') + '</div></div>'
80 } 80 }
81 81
82 $('.view-all-images .item').live('click', function(){ 82 $('.view-all-images .item').live('click', function(){
@@ -94,9 +94,10 @@ jQuery(function($) { @@ -94,9 +94,10 @@ jQuery(function($) {
94 $('a.zoom').live('click', function() { 94 $('a.zoom').live('click', function() {
95 var $item = $(this).closest('.item'); 95 var $item = $(this).closest('.item');
96 var html_selector = $item.attr('data-item'); 96 var html_selector = $item.attr('data-item');
  97 + var name = $item.attr('title');
97 var img = $item.find(html_selector).find('img').attr('src'); 98 var img = $item.find(html_selector).find('img').attr('src');
98 $.colorbox({ 99 $.colorbox({
99 - html: zoom_dialog_html(img), 100 + html: zoom_dialog_html(name, img),
100 scrolling: false 101 scrolling: false
101 }); 102 });
102 return false; 103 return false;
public/javascripts/media-panel.js
@@ -84,3 +84,45 @@ jQuery(&quot;#published-media #q&quot;).typeWatch({ @@ -84,3 +84,45 @@ jQuery(&quot;#published-media #q&quot;).typeWatch({
84 }); 84 });
85 85
86 jQuery("#published-media #q").bind('notext', function(){ loadPublishedMedia() }); 86 jQuery("#published-media #q").bind('notext', function(){ loadPublishedMedia() });
  87 +
  88 +jQuery("#new-folder-dialog").submit(function( event ) {
  89 + var name = jQuery('#new_folder').val();
  90 + var parent_id = jQuery("#new-folder-dialog #parent_id").val();
  91 + jQuery("#media-upload-box #parent_id").val();
  92 + jQuery.ajax({
  93 + url: this.action,
  94 + type: 'POST',
  95 + data: {
  96 + 'parent_id': parent_id,
  97 + 'article': {'name': name, 'published': true},
  98 + 'type': jQuery('input[name=folder_type]:checked').val() },
  99 + dataType: 'json',
  100 + beforeSend: function(){jQuery("#new-folder-dialog").addClass('fetching')},
  101 + success: function(response) {
  102 + var option_selected = "<option value='"+ response.id +"' selected='selected'>"+ response.full_name +"</options>"
  103 + var option = "<option value='"+ response.id +"'>"+ response.full_name +"</options>"
  104 + jQuery('#media-upload-form #parent_id').append(option_selected);
  105 + jQuery('#published-media #parent_id').append(option);
  106 + jQuery('#new_folder').val('');
  107 + },
  108 + error: function(response, textStatus, xhr) {
  109 + console.log(response);
  110 + console.log(textStatus);
  111 + },
  112 + complete: function(response){
  113 + jQuery("#new-folder-dialog").removeClass('fetching');
  114 + jQuery("#new-folder-dialog").dialog('close');
  115 + }
  116 + });
  117 + return false;
  118 +});
  119 +
  120 +jQuery('.text-editor-sidebar .header .icon-vertical-toggle').click(function(){
  121 + jQuery('#content').toggleClass('show-media-panel');
  122 + return false;
  123 +});
  124 +
  125 +jQuery('#new-folder-button').click(function(){
  126 + jQuery('#new-folder-dialog').dialog({modal: true});
  127 + return false;
  128 +});
public/stylesheets/application.css
@@ -3443,11 +3443,18 @@ table.cms-articles .icon:hover { @@ -3443,11 +3443,18 @@ table.cms-articles .icon:hover {
3443 3443
3444 /* Text editors sidebar */ 3444 /* Text editors sidebar */
3445 3445
3446 -.controller-cms div.with_media_panel { 3446 +.controller-cms .with_media_panel {
3447 float: left; 3447 float: left;
  3448 + width: 900px;
  3449 + transition: 1s 0.5s;
  3450 +}
  3451 +
  3452 +.controller-cms .show-media-panel .with_media_panel {
3448 width: 600px; 3453 width: 600px;
  3454 + transition: 1s;
3449 } 3455 }
3450 -div.with_media_panel .formfield input[type="checkbox"] { 3456 +
  3457 +.with_media_panel .formfield input[type="checkbox"] {
3451 width: auto; 3458 width: auto;
3452 } 3459 }
3453 3460
@@ -3466,6 +3473,11 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] { @@ -3466,6 +3473,11 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] {
3466 float: right; 3473 float: right;
3467 } 3474 }
3468 3475
  3476 +#media-upload-form .progress {
  3477 + background-color: #ddd;
  3478 + border-radius: 3px;
  3479 +}
  3480 +
3469 #media-upload-form .bar { 3481 #media-upload-form .bar {
3470 height: 10px; 3482 height: 10px;
3471 background: #729fcf; 3483 background: #729fcf;
@@ -3496,13 +3508,14 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] { @@ -3496,13 +3508,14 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] {
3496 } 3508 }
3497 3509
3498 #media-upload-box .upload .file-name{ 3510 #media-upload-box .upload .file-name{
3499 - width: 87%; 3511 + width: 86%;
3500 white-space: nowrap; 3512 white-space: nowrap;
3501 overflow: hidden; 3513 overflow: hidden;
3502 text-overflow: ellipsis; 3514 text-overflow: ellipsis;
3503 } 3515 }
3504 3516
3505 #media-upload-box .upload .percentage { 3517 #media-upload-box .upload .percentage {
  3518 + text-align: right;
3506 width: 12%; 3519 width: 12%;
3507 } 3520 }
3508 3521
@@ -3512,6 +3525,14 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] { @@ -3512,6 +3525,14 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] {
3512 width: 280px; 3525 width: 280px;
3513 right: 20px; 3526 right: 20px;
3514 top: 70px; 3527 top: 70px;
  3528 + max-height: 45px;
  3529 + overflow: hidden;
  3530 + transition: 1s;
  3531 +}
  3532 +
  3533 +.show-media-panel .text-editor-sidebar {
  3534 + max-height: 1200px;
  3535 + transition: 1s 0.5s;
3515 } 3536 }
3516 3537
3517 .text-editor-sidebar-box { 3538 .text-editor-sidebar-box {
@@ -3521,12 +3542,23 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] { @@ -3521,12 +3542,23 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] {
3521 margin-bottom: 10px; 3542 margin-bottom: 10px;
3522 } 3543 }
3523 3544
3524 -.text-editor-sidebar-box .header {  
3525 - margin: -10px -10px 0px -10px;  
3526 - padding: 10px;  
3527 - font-weight: bold;  
3528 - border-bottom: 1px solid #d3d7cf;  
3529 - background-color: #eeeeec; 3545 +.text-editor-sidebar .header {
  3546 + margin: 0 0 10px 0;
  3547 + padding: 10px;
  3548 + font-weight: bold;
  3549 + border: 1px solid #d3d7cf;
  3550 + background-color: #eeeeec;
  3551 + background-repeat: no-repeat;
  3552 + background-position: 98% 10px;
  3553 + position: relative;
  3554 +}
  3555 +
  3556 +.text-editor-sidebar .header .icon-vertical-toggle {
  3557 + position: absolute;
  3558 + right: 6px;
  3559 + top: 6px;
  3560 + padding-top: 0px;
  3561 + padding-bottom: 0px;
3530 } 3562 }
3531 3563
3532 .text-editor-sidebar code, 3564 .text-editor-sidebar code,
@@ -3601,6 +3633,7 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] { @@ -3601,6 +3633,7 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] {
3601 .text-editor-sidebar select, 3633 .text-editor-sidebar select,
3602 .text-editor-sidebar input { 3634 .text-editor-sidebar input {
3603 width: 100%; 3635 width: 100%;
  3636 + margin-bottom: 5px;
3604 } 3637 }
3605 3638
3606 .text-editor-sidebar .items :hover, 3639 .text-editor-sidebar .items :hover,
@@ -3639,10 +3672,6 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] { @@ -3639,10 +3672,6 @@ div.with_media_panel .formfield input[type=&quot;checkbox&quot;] {
3639 margin-top: 4px; 3672 margin-top: 4px;
3640 } 3673 }
3641 3674
3642 -.text-editor-sidebar .header {  
3643 - background-repeat: no-repeat;  
3644 - background-position: 98% 10px;  
3645 -}  
3646 .text-editor-sidebar .media-upload-error { 3675 .text-editor-sidebar .media-upload-error {
3647 color: red; 3676 color: red;
3648 } 3677 }
@@ -6918,3 +6947,7 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img { @@ -6918,3 +6947,7 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img {
6918 .fetching { 6947 .fetching {
6919 opacity: 0.3; 6948 opacity: 0.3;
6920 } 6949 }
  6950 +
  6951 +body .ui-widget-overlay {
  6952 + background: #000;
  6953 +}