Commit 907bb8d2c28353bcbc14da35e6d26b5caa023ab2

Authored by Joenio Costa
Committed by Antonio Terceiro
1 parent 666aae2c

A profile can have multiple blogs

 - Ask confirmation before change blog address
 - Add cucumber tests for blog
 - Set icon to create blog in CMS
 - Choose a blog when edit blog archives block

(ActionItem1258)
Showing 38 changed files with 1221 additions and 905 deletions   Show diff stats
app/controllers/my_profile/cms_controller.rb
... ... @@ -275,7 +275,7 @@ class CmsController < MyProfileController
275 275 elsif @article.parent
276 276 redirect_to :action => 'view', :id => @article.parent
277 277 else
278   - redirect_to :action => 'index'
  278 + redirect_back_or_default :action => 'index'
279 279 end
280 280 end
281 281  
... ... @@ -286,6 +286,9 @@ class CmsController < MyProfileController
286 286 @back_to = 'public_view'
287 287 @back_url = @article.view_url
288 288 end
  289 + if !request.post? and @article.blog?
  290 + store_location(request.referer)
  291 + end
289 292 end
290 293  
291 294 def record_creating_from_public_view
... ... @@ -294,6 +297,9 @@ class CmsController < MyProfileController
294 297 @back_to = 'public_view'
295 298 @back_url = referer
296 299 end
  300 + if !request.post? and @article.blog?
  301 + store_location(request.referer)
  302 + end
297 303 end
298 304  
299 305 def maybe_ssl(url)
... ...
app/models/blog.rb
... ... @@ -11,12 +11,6 @@ class Blog < Folder
11 11 end
12 12  
13 13 settings_items :posts_per_page, :type => :integer, :default => 5
14   - settings_items :title, :type => :string, :default => N_('Blog')
15   -
16   - def initialize(*args)
17   - super(*args)
18   - self.name = 'blog'
19   - end
20 14  
21 15 def self.short_description
22 16 _('Blog')
... ... @@ -96,4 +90,13 @@ class Blog < Folder
96 90 end
97 91 end
98 92  
  93 + def name=(value)
  94 + self.set_name(value)
  95 + if self.slug.blank?
  96 + self.slug = self.name.to_slug
  97 + else
  98 + self.slug = self.slug.to_slug
  99 + end
  100 + end
  101 +
99 102 end
... ...
app/models/blog_archives_block.rb
... ... @@ -14,21 +14,27 @@ class BlogArchivesBlock < Block
14 14 _('Blog posts')
15 15 end
16 16  
  17 + settings_items :blog_id, Integer
  18 +
  19 + def blog
  20 + blog_id ? owner.blogs.find(blog_id) : owner.blog
  21 + end
  22 +
17 23 def content
18   - return nil unless owner.has_blog?
  24 + owner_blog = self.blog
  25 + return nil unless owner_blog
19 26 results = ''
20   - posts = owner.blog.posts
21   - posts.group_by {|i| i.published_at.year }.sort_by { |year,count| -year }.each do |year, results_by_year|
  27 + owner_blog.posts.group_by {|i| i.published_at.year }.sort_by { |year,count| -year }.each do |year, results_by_year|
22 28 results << content_tag('li', content_tag('strong', "#{year} (#{results_by_year.size})"))
23 29 results << "<ul class='#{year}-archive'>"
24 30 results_by_year.group_by{|i| [ ('%02d' % i.published_at.month()), gettext(MONTHS[i.published_at.month() - 1])]}.sort.reverse.each do |month, results_by_month|
25   - results << content_tag('li', link_to("#{month[1]} (#{results_by_month.size})", owner.blog.url.merge(:year => year, :month => month[0])))
  31 + results << content_tag('li', link_to("#{month[1]} (#{results_by_month.size})", owner_blog.url.merge(:year => year, :month => month[0])))
26 32 end
27 33 results << "</ul>"
28 34 end
29 35 block_title(title) +
30 36 content_tag('ul', results, :class => 'blog-archives') +
31   - content_tag('div', link_to(_('Subscribe RSS Feed'), owner.blog.feed.url), :class => 'subscribe-feed')
  37 + content_tag('div', link_to(_('Subscribe RSS Feed'), owner_blog.feed.url), :class => 'subscribe-feed')
32 38 end
33 39  
34 40 end
... ...
app/models/profile.rb
... ... @@ -590,14 +590,14 @@ private :generate_url, :url_options
590 590 LayoutTemplate.find(layout_template).number_of_boxes
591 591 end
592 592  
  593 + has_many :blogs, :source => 'articles', :class_name => 'Blog'
  594 +
593 595 def blog
594   - if self.has_blog?
595   - self.articles.find(:first, :conditions => {:type => 'Blog'})
596   - end
  596 + self.has_blog? ? self.blogs.first : nil
597 597 end
598 598  
599 599 def has_blog?
600   - !self.articles.count(:conditions => {:type => 'Blog'}).zero?
  600 + self.blogs.count.nonzero?
601 601 end
602 602  
603 603 def admins
... ...
app/views/box_organizer/_blog_archives_block.rhtml 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +<% blogs = @block.box.owner.blogs %>
  2 +<% if blogs.count > 1 %>
  3 + <%= labelled_form_field _('Choose a blog:'), select('block', 'blog_id', blogs.map {|item| [ item.path, item.id ]}, :selected => @block.blog.id) %>
  4 +<% end %>
... ...
app/views/cms/_blog.rhtml
... ... @@ -4,7 +4,51 @@
4 4  
5 5 <%= render :file => 'shared/tiny_mce' %>
6 6  
7   -<%= f.text_field('title', :size => '64') %>
  7 +<%= required f.text_field(:name, :size => '64', :onchange => "updateUrlField(this, 'article_slug')") %>
  8 +
  9 +<script type="text/javascript">
  10 + function submit_button(index) {
  11 + return $("article_slug").form.select("input.submit")[index];
  12 + }
  13 + function warn_value_change() {
  14 + show_warning('article-formitem', "slug-change-confirmation");
  15 + disable_button(submit_button(0));
  16 + disable_button(submit_button(1));
  17 + }
  18 + function confirm_change() {
  19 + enable_button(submit_button(0));
  20 + enable_button(submit_button(1));
  21 + hide_warning('slug-change-confirmation');
  22 + }
  23 + function no_change() {
  24 + $("article_slug").value = $("old_article_slug").value;
  25 + enable_button(submit_button(0));
  26 + enable_button(submit_button(1));
  27 + hide_warning('slug-change-confirmation');
  28 + }
  29 +</script>
  30 +
  31 +<%= hidden_field_tag 'old_article_slug', @article.slug %>
  32 +<div id="article-formitem">
  33 + <%= labelled_form_field( _('Address'),
  34 + content_tag('code',
  35 + url_for(@article.url).gsub(/#{@article.slug}$/, '') +
  36 + text_field(:article, :slug, :onchange => "warn_value_change()", :size => 25)
  37 + ) +
  38 + content_tag('div',
  39 + content_tag('strong', _('WARNING!')) + '&nbsp;' +
  40 + _("You are about to change the address, and this will break external links to this blog or to posts inside it. Do you really want to change?") +
  41 + content_tag('div',
  42 + button_to_function(:ok, _("Yes"), "confirm_change()") + ' ' +
  43 + button_to_function(:cancel, _('No'), 'no_change()')
  44 + ),
  45 + :id => 'slug-change-confirmation',
  46 + :class => 'change-confirmation',
  47 + :style => 'display: none;'
  48 + )
  49 + )
  50 + %>
  51 +</div>
8 52  
9 53 <%= labelled_form_field(_('Description:'), text_area(:article, :body, :cols => 64, :rows => 10)) %>
10 54  
... ... @@ -34,5 +78,3 @@
34 78 </div>
35 79 </div>
36 80 <% end %>
37   -
38   -<%= javascript_tag "$('back_to').value = 'control_panel'" %>
... ...
app/views/cms/edit.rhtml
... ... @@ -37,7 +37,9 @@
37 37  
38 38 <% button_bar do %>
39 39 <%= submit_button :save, _('Save') %>
40   - <% if @back_url %>
  40 + <% if @return_to %>
  41 + <%= button :cancel, _('Cancel'), @return_to %>
  42 + <% elsif @back_url %>
41 43 <%= button :cancel, _('Cancel'), @back_url %>
42 44 <% elsif @parent_id || @article.parent %>
43 45 <%= button :cancel, _('Cancel'), :action => 'view', :id => @parent_id || @article.parent %>
... ...
app/views/cms/view.rhtml
... ... @@ -7,6 +7,7 @@
7 7  
8 8 <% if !@article or !@article.blog? %>
9 9 <%= button :newfolder, _('New folder'), :action => 'new', :type => 'Folder', :parent_id => parent_id %>
  10 + <%= button :newblog, _('New Blog'), :action => 'new', :type => 'Blog', :parent_id => parent_id %>
10 11 <%= button('upload-file', _('Upload files'), :action => 'upload_files', :parent_id => parent_id) %>
11 12 <% end %>
12 13 <%= lightbox_button('new', label_for_new_article(@article), :action => 'new', :parent_id => parent_id) %>
... ...
app/views/profile_editor/_organization.rhtml
... ... @@ -2,16 +2,6 @@
2 2  
3 3 <%= required_fields_message if @profile.required_fields.any? %>
4 4  
5   -<% if @environment.enabled?('enable_organization_url_change') %>
6   - <script type="text/javascript">
7   - function updateUrlField(name_field, id) {
8   - url_field = $(id);
9   - url_field.value = convToValidIdentifier(name_field.value, "-");
10   - warn_value_change(url_field);
11   - }
12   - </script>
13   -<% end %>
14   -
15 5 <div class="formfieldline">
16 6 <label class="formlabel" for="profile_data_nickname"><%= _('Display name') %></label>
17 7 <div class="formfield type-text">
... ... @@ -23,33 +13,42 @@
23 13 <% if @environment.enabled?('enable_organization_url_change') %>
24 14 <script type="text/javascript">
25 15 function submit_button() {
26   - return $("profile_data_identifier").form.select("input.submit")[0];
  16 + return $("profile_data_identifier").form.select("input.submit")[0];
27 17 }
28   -
29   - function warn_value_change(field) {
30   - new Effect.Highlight($("profile-identifier-formitem"), {duration:3});
31   - $("identifier-change-confirmation").show();
32   - submit_button().disable();
33   - submit_button().addClassName("disabled");
  18 + function warn_value_change() {
  19 + show_warning('profile-identifier-formitem', "identifier-change-confirmation");
  20 + disable_button(submit_button());
34 21 }
35   -
36   - function hide_warning() {
37   - submit_button().enable();
38   - submit_button().removeClassName("disabled");
39   - $("identifier-change-confirmation").hide()
  22 + function confirm_change() {
  23 + enable_button(submit_button());
  24 + hide_warning('identifier-change-confirmation');
40 25 }
  26 + function no_change() {
  27 + $("profile_data_identifier").value = $("old_profile_identifier").value;
  28 + enable_button(submit_button());
  29 + hide_warning('identifier-change-confirmation');
  30 + }
  31 +
41 32 </script>
42 33  
43 34 <%= hidden_field_tag 'old_profile_identifier', @profile.identifier %>
44 35 <div id="profile-identifier-formitem">
45 36 <%= labelled_form_field( _('Address'),
46   - '<code>' + url_for(profile.url).gsub(/#{profile.identifier}$/, '') +
47   - text_field(:profile_data, :identifier, :onchange => "warn_value_change(this)", :size => 15) + '</code>' +
48   - content_tag('div', '<strong>' + _('WARNING!') + '</strong> ' + _("You are about to change the address, and this will break external links to the homepage or to content inside it. Do you really want to change? ") +
49   - '<div>' + button_to_function(:ok, _("Yes"), 'hide_warning()') + ' ' +
50   - button_to_function(:cancel, _('No'), '$("profile_data_identifier").value = $("old_profile_identifier").value; hide_warning()') + '</div>',
51   - :id => 'identifier-change-confirmation', :style => 'display: none;'
52   - )
  37 + content_tag('code',
  38 + url_for(profile.url).gsub(/#{profile.identifier}$/, '') +
  39 + text_field(:profile_data, :identifier, :onchange => "warn_value_change()", :size => 25)
  40 + ) +
  41 + content_tag('div',
  42 + content_tag('strong', _('WARNING!')) + '&nbsp;' +
  43 + _("You are about to change the address, and this will break external links to the homepage or to content inside it. Do you really want to change?") +
  44 + content_tag('div',
  45 + button_to_function(:ok, _("Yes"), "confirm_change()") + ' ' +
  46 + button_to_function(:cancel, _('No'), 'no_change()')
  47 + ),
  48 + :id => 'identifier-change-confirmation',
  49 + :class => 'change-confirmation',
  50 + :style => 'display: none;'
  51 + )
53 52 )
54 53 %>
55 54 </div>
... ...
app/views/profile_editor/index.rhtml
... ... @@ -27,11 +27,14 @@
27 27 <%= control_panel_button(_('Manage Content'), 'cms', :controller => 'cms') if !environment.enabled?('disable_cms') || profile.community? %>
28 28  
29 29 <% unless profile.enterprise? %>
30   - <% if profile.has_blog? %>
31   - <%= control_panel_button(_('Configure blog'), 'blog', :controller => 'cms', :action => 'edit', :id => profile.blog) %>
32   - <% else %>
33   - <%= control_panel_button(_('Create blog'), 'blog-disabled', :controller => 'cms', :action => 'new', :type => 'Blog') %>
34   - <% end %>
  30 + <%= case profile.blogs.count
  31 + when 0
  32 + control_panel_button(_('Create blog'), 'blog-disabled', :controller => 'cms', :action => 'new', :type => 'Blog')
  33 + when 1
  34 + control_panel_button(_('Configure blog'), 'blog', :controller => 'cms', :action => 'edit', :id => profile.blog)
  35 + else
  36 + control_panel_button(_('Configure blog'), 'blog', :controller => 'cms')
  37 + end %>
35 38 <% end %>
36 39  
37 40 <%= control_panel_button(_('Change Password'), 'change-password', :controller => 'account', :action => 'change_password') if profile.person? %>
... ...
db/migrate/074_move_title_to_name_from_blogs.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +class MoveTitleToNameFromBlogs < ActiveRecord::Migration
  2 + def self.up
  3 + Blog.find(:all).each do |blog|
  4 + blog.name = blog.title
  5 + blog.save
  6 + end
  7 + end
  8 +
  9 + def self.down
  10 + Blog.find(:all).each do |blog|
  11 + blog.title = blog.name
  12 + blog.save
  13 + end
  14 + end
  15 +end
... ...
db/schema.rb
... ... @@ -9,7 +9,7 @@
9 9 #
10 10 # It's strongly recommended to check this file into your version control system.
11 11  
12   -ActiveRecord::Schema.define(:version => 73) do
  12 +ActiveRecord::Schema.define(:version => 74) do
13 13  
14 14 create_table "article_versions", :force => true do |t|
15 15 t.integer "article_id"
... ...
features/blog.feature 0 → 100644
... ... @@ -0,0 +1,89 @@
  1 +Feature: blog
  2 + As a noosfero user
  3 + I want to have one or mutiple blogs
  4 +
  5 + Background:
  6 + Given I am on the homepage
  7 + And the following users
  8 + | login | name |
  9 + | joaosilva | Joao Silva |
  10 + And I am logged in as "joaosilva"
  11 +
  12 + Scenario: create a blog
  13 + Given I follow "Control panel"
  14 + And I follow "Create blog"
  15 + Then I should see "My Blog"
  16 + When I fill in "Title" with "My Blog"
  17 + And I press "Save"
  18 + And I follow "Control panel"
  19 + Then I should see "Configure blog"
  20 +
  21 + Scenario: redirect to control panel after create blog
  22 + Given I follow "Control panel"
  23 + And I follow "Create blog"
  24 + Then I should see "My Blog"
  25 + When I fill in "Title" with "My Blog"
  26 + And I press "Save"
  27 + Then I should be on /myprofile/joaosilva
  28 +
  29 + Scenario: redirect to cms after create blog
  30 + Given I follow "Control panel"
  31 + And I follow "Manage Content"
  32 + When I follow "New Blog"
  33 + Then I should see "My Blog"
  34 + When I fill in "Title" with "My Blog"
  35 + And I press "Save"
  36 + Then I should be on /myprofile/joaosilva/cms
  37 +
  38 + Scenario: create multiple blogs
  39 + Given I follow "Control panel"
  40 + And I follow "Manage Content"
  41 + And I follow "New Blog"
  42 + And I fill in "Title" with "Blog One"
  43 + And I press "Save"
  44 + And I follow "New Blog"
  45 + And I fill in "Title" with "Blog Two"
  46 + And I press "Save"
  47 + Then I should not see "error"
  48 + And I should be on /myprofile/joaosilva/cms
  49 +
  50 + Scenario: cancel button back to cms
  51 + Given I follow "Control panel"
  52 + And I follow "Manage Content"
  53 + And I follow "New Blog"
  54 + When I follow "Cancel"
  55 + Then I should be on /myprofile/joaosilva/cms
  56 +
  57 + Scenario: cancel button back to myprofile
  58 + Given I follow "Control panel"
  59 + And I follow "Create blog"
  60 + When I follow "Cancel"
  61 + Then I should be on /myprofile/joaosilva
  62 +
  63 + Scenario: configure blog link to cms
  64 + Given the following blogs
  65 + | owner | name |
  66 + | joaosilva | Blog One |
  67 + | joaosilva | Blog Two |
  68 + And I follow "Control panel"
  69 + When I follow "Configure blog"
  70 + Then I should be on /myprofile/joaosilva/cms
  71 +
  72 + Scenario: configure blog link to edit blog
  73 + Given the following blogs
  74 + | owner | name |
  75 + | joaosilva | Blog One |
  76 + And I follow "Control panel"
  77 + When I follow "Configure blog"
  78 + Then I should be on edit "Blog One" by joaosilva
  79 +
  80 + Scenario: change address of blog
  81 + Given the following blogs
  82 + | owner | name |
  83 + | joaosilva | Blog One |
  84 + And I follow "Control panel"
  85 + And I follow "Configure blog"
  86 + And I fill in "Address" with "blog-two"
  87 + And I press "Save"
  88 + When I am on /joaosilva/blog-two
  89 + Then I should see "Blog One"
... ...
features/edit_blog_archives_block.feature 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +Feature: edit_blog_archives_block
  2 + As a blog owner
  3 + I want to edit a Blog Archive Block
  4 +
  5 + Scenario: not offer to select blog when I have once blog
  6 + Given I am on the homepage
  7 + And the following users
  8 + | login | name |
  9 + | joaosilva | Joao Silva |
  10 + And the following blogs
  11 + | owner | name |
  12 + | joaosilva | Blog One |
  13 + And the following blocks
  14 + | owner | type |
  15 + | joaosilva | BlogArchivesBlock |
  16 + And I am logged in as "joaosilva"
  17 + When I go to edit BlogArchivesBlock of joaosilva
  18 + Then I should not see "Choose a blog:"
  19 +
  20 + Scenario: offer to select blog when I have multiple blogs
  21 + Given I am on the homepage
  22 + And the following users
  23 + | login | name |
  24 + | joaosilva | Joao Silva |
  25 + And the following blogs
  26 + | owner | name |
  27 + | joaosilva | Blog One |
  28 + | joaosilva | Blog Two |
  29 + And the following blocks
  30 + | owner | type |
  31 + | joaosilva | BlogArchivesBlock |
  32 + And I am logged in as "joaosilva"
  33 + When I go to edit BlogArchivesBlock of joaosilva
  34 + Then I should see "Choose a blog:"
... ...
features/step_definitions/noosfero_steps.rb
... ... @@ -19,16 +19,37 @@ Given /^the following enterprises$/ do |table|
19 19 end
20 20 end
21 21  
22   -Given /^the following (articles|events)$/ do |content, table|
  22 +Given /^the following blocks$/ do |table|
  23 + table.hashes.map{|item| item.dup}.each do |item|
  24 + klass = item.delete('type')
  25 + owner = Profile[item.delete('owner')]
  26 + box_id = owner.boxes.last.id
  27 + klass.constantize.create!(item.merge(:box_id => box_id))
  28 + end
  29 +end
  30 +
  31 +Given /^the following (articles|events|blogs)$/ do |content, table|
23 32 klass = {
24 33 'articles' => TextileArticle,
25 34 'events' => Event,
  35 + 'blogs' => Blog,
26 36 }[content] || raise("Don't know how to build %s" % content)
27   - table.hashes.each do |item|
28   - data = item.dup
29   - owner_identifier = data.delete("owner")
  37 + table.hashes.map{|item| item.dup}.each do |item|
  38 + owner_identifier = item.delete("owner")
30 39 owner = Profile[owner_identifier]
31   - TextileArticle.create!(data.merge(:profile => owner))
  40 + klass.create!(item.merge(:profile => owner))
  41 + end
  42 +end
  43 +
  44 +Given /^the following files$/ do |table|
  45 + table.hashes.each do |item|
  46 + owner = Profile[item[:owner]]
  47 + file = "/files/#{item[:file]}"
  48 + article = UploadedFile.create!(:profile => owner, :uploaded_data => fixture_file_upload(file, item[:mime]))
  49 + if item[:homepage]
  50 + owner.home_page = article
  51 + owner.save!
  52 + end
32 53 end
33 54 end
34 55  
... ... @@ -40,3 +61,8 @@ Given /^the following products$/ do |table|
40 61 end
41 62 end
42 63  
  64 +Given /^I am logged in as "(.+)"$/ do |username|
  65 + fill_in("Username", :with => username)
  66 + fill_in("Password", :with => '123456')
  67 + click_button("Log in")
  68 +end
... ...
features/step_definitions/webrat_steps.rb
... ... @@ -186,4 +186,8 @@ end
186 186  
187 187 Then /^show me the page$/ do
188 188 save_and_open_page
189   -end
190 189 \ No newline at end of file
  190 +end
  191 +
  192 +Then /^the source should contain tag ([^\"]+)$/ do |tag|
  193 + response_body.should have_tag(tag, {id => 10})
  194 +end
... ...
features/support/paths.rb
... ... @@ -13,7 +13,16 @@ module NavigationHelpers
13 13  
14 14 when /^\//
15 15 page_name
  16 +
  17 + when /edit "(.+)" by (.+)/
  18 + article_id = Person[$2].articles.find_by_slug($1.to_slug).id
  19 + "/myprofile/#{$2}/cms/edit/#{article_id}"
16 20  
  21 + when /edit BlogArchivesBlock of (.+)/
  22 + owner = Profile[$1]
  23 + block = BlogArchivesBlock.find(:all).select{|i| i.owner == owner}.first
  24 + "/myprofile/#{$1}/profile_design/edit/#{block.id}"
  25 +
17 26 # Add more mappings here.
18 27 # Here is a more fancy example:
19 28 #
... ...
lib/acts_as_filesystem.rb
... ... @@ -97,13 +97,16 @@ module ActsAsFileSystem
97 97 self.children.empty?
98 98 end
99 99  
100   - # sets the name of the category. Also sets #slug accordingly.
101   - def name=(value)
  100 + def set_name(value)
102 101 if self.name != value
103 102 self.recalculate_path = true
104 103 end
105   -
106 104 self[:name] = value
  105 + end
  106 +
  107 + # sets the name of the category. Also sets #slug accordingly.
  108 + def name=(value)
  109 + self.set_name(value)
107 110 unless self.name.blank?
108 111 self.slug = self.name.to_slug
109 112 end
... ...
lib/authenticated_system.rb
... ... @@ -80,7 +80,7 @@ module AuthenticatedSystem
80 80 #
81 81 # We can return to this location by calling #redirect_back_or_default.
82 82 def store_location(location = request.request_uri)
83   - session[:return_to] = location
  83 + @return_to = session[:return_to] = location
84 84 end
85 85  
86 86 # Redirect to the URI stored by the most recent store_location call or
... ...
public/designs/icons/tango/Tango-mod/16x16/apps/text-editor.png 0 → 100644

724 Bytes

public/designs/icons/tango/Tango-mod/32x32/apps/text-editor.png 0 → 100644

1.63 KB

public/designs/icons/tango/Tango-mod/48x48/apps/text-editor.png 0 → 100644

2.47 KB

public/designs/icons/tango/Tango-mod/scalable/apps/text-editor.svg 0 → 100644
... ... @@ -0,0 +1,799 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
  3 +<svg
  4 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  5 + xmlns:cc="http://creativecommons.org/ns#"
  6 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  7 + xmlns:svg="http://www.w3.org/2000/svg"
  8 + xmlns="http://www.w3.org/2000/svg"
  9 + xmlns:xlink="http://www.w3.org/1999/xlink"
  10 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  11 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  12 + inkscape:export-ydpi="90.000000"
  13 + inkscape:export-xdpi="90.000000"
  14 + inkscape:export-filename="text-editor.png"
  15 + width="48px"
  16 + height="48px"
  17 + id="svg11300"
  18 + sodipodi:version="0.32"
  19 + inkscape:version="0.46"
  20 + sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
  21 + sodipodi:docname="text-editor.svg"
  22 + inkscape:output_extension="org.inkscape.output.svg.inkscape">
  23 + <sodipodi:namedview
  24 + stroke="#c4a000"
  25 + fill="#edd400"
  26 + id="base"
  27 + pagecolor="#ffffff"
  28 + bordercolor="#666666"
  29 + borderopacity="0.25490196"
  30 + inkscape:pageopacity="0.0"
  31 + inkscape:pageshadow="2"
  32 + inkscape:zoom="11.229167"
  33 + inkscape:cx="24"
  34 + inkscape:cy="24"
  35 + inkscape:current-layer="layer1"
  36 + showgrid="false"
  37 + inkscape:grid-bbox="true"
  38 + inkscape:document-units="px"
  39 + inkscape:showpageshadow="false"
  40 + inkscape:window-width="1276"
  41 + inkscape:window-height="745"
  42 + inkscape:window-x="0"
  43 + inkscape:window-y="19" />
  44 + <defs
  45 + id="defs3">
  46 + <inkscape:perspective
  47 + id="perspective85"
  48 + inkscape:persp3d-origin="24 : 16 : 1"
  49 + inkscape:vp_z="48 : 24 : 1"
  50 + inkscape:vp_y="0 : 1000 : 0"
  51 + inkscape:vp_x="0 : 24 : 1"
  52 + sodipodi:type="inkscape:persp3d" />
  53 + <radialGradient
  54 + r="117.14286"
  55 + fy="486.64789"
  56 + fx="605.71429"
  57 + cy="486.64789"
  58 + cx="605.71429"
  59 + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
  60 + gradientUnits="userSpaceOnUse"
  61 + id="radialGradient6719"
  62 + xlink:href="#linearGradient5060"
  63 + inkscape:collect="always" />
  64 + <linearGradient
  65 + id="linearGradient5060"
  66 + inkscape:collect="always">
  67 + <stop
  68 + id="stop5062"
  69 + offset="0"
  70 + style="stop-color:#000000;stop-opacity:1;" />
  71 + <stop
  72 + id="stop5064"
  73 + offset="1"
  74 + style="stop-color:#000000;stop-opacity:0;" />
  75 + </linearGradient>
  76 + <radialGradient
  77 + r="117.14286"
  78 + fy="486.64789"
  79 + fx="605.71429"
  80 + cy="486.64789"
  81 + cx="605.71429"
  82 + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
  83 + gradientUnits="userSpaceOnUse"
  84 + id="radialGradient6717"
  85 + xlink:href="#linearGradient5060"
  86 + inkscape:collect="always" />
  87 + <linearGradient
  88 + id="linearGradient5048">
  89 + <stop
  90 + id="stop5050"
  91 + offset="0"
  92 + style="stop-color:#000000;stop-opacity:0;" />
  93 + <stop
  94 + style="stop-color:#000000;stop-opacity:1;"
  95 + offset="0.5"
  96 + id="stop5056" />
  97 + <stop
  98 + id="stop5052"
  99 + offset="1"
  100 + style="stop-color:#000000;stop-opacity:0;" />
  101 + </linearGradient>
  102 + <linearGradient
  103 + y2="609.50507"
  104 + x2="302.85715"
  105 + y1="366.64789"
  106 + x1="302.85715"
  107 + gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
  108 + gradientUnits="userSpaceOnUse"
  109 + id="linearGradient6715"
  110 + xlink:href="#linearGradient5048"
  111 + inkscape:collect="always" />
  112 + <linearGradient
  113 + id="linearGradient2994">
  114 + <stop
  115 + id="stop2996"
  116 + offset="0"
  117 + style="stop-color:#000000;stop-opacity:1;" />
  118 + <stop
  119 + id="stop2998"
  120 + offset="1"
  121 + style="stop-color:#c9c9c9;stop-opacity:1;" />
  122 + </linearGradient>
  123 + <linearGradient
  124 + id="linearGradient2984"
  125 + inkscape:collect="always">
  126 + <stop
  127 + id="stop2986"
  128 + offset="0"
  129 + style="stop-color:#cfcfcf;stop-opacity:1;" />
  130 + <stop
  131 + id="stop2988"
  132 + offset="1"
  133 + style="stop-color:#cfcfcf;stop-opacity:0;" />
  134 + </linearGradient>
  135 + <linearGradient
  136 + id="linearGradient2974">
  137 + <stop
  138 + id="stop2976"
  139 + offset="0"
  140 + style="stop-color:#c1c1c1;stop-opacity:1;" />
  141 + <stop
  142 + id="stop2978"
  143 + offset="1"
  144 + style="stop-color:#acacac;stop-opacity:1;" />
  145 + </linearGradient>
  146 + <linearGradient
  147 + id="linearGradient2966">
  148 + <stop
  149 + id="stop2968"
  150 + offset="0"
  151 + style="stop-color:#e8e8e8;stop-opacity:1;" />
  152 + <stop
  153 + style="stop-color:#8e8e8e;stop-opacity:1;"
  154 + offset="0.5"
  155 + id="stop3006" />
  156 + <stop
  157 + id="stop2970"
  158 + offset="1"
  159 + style="stop-color:#373737;stop-opacity:1;" />
  160 + </linearGradient>
  161 + <linearGradient
  162 + id="linearGradient2919">
  163 + <stop
  164 + id="stop2921"
  165 + offset="0"
  166 + style="stop-color:#a2a2a2;stop-opacity:1;" />
  167 + <stop
  168 + id="stop2923"
  169 + offset="1"
  170 + style="stop-color:#878787;stop-opacity:1;" />
  171 + </linearGradient>
  172 + <linearGradient
  173 + id="linearGradient2873">
  174 + <stop
  175 + id="stop2875"
  176 + offset="0"
  177 + style="stop-color:#939393;stop-opacity:1;" />
  178 + <stop
  179 + id="stop2877"
  180 + offset="1"
  181 + style="stop-color:#424242;stop-opacity:1;" />
  182 + </linearGradient>
  183 + <linearGradient
  184 + id="linearGradient2865"
  185 + inkscape:collect="always">
  186 + <stop
  187 + id="stop2867"
  188 + offset="0"
  189 + style="stop-color:#000000;stop-opacity:1;" />
  190 + <stop
  191 + id="stop2869"
  192 + offset="1"
  193 + style="stop-color:#000000;stop-opacity:0;" />
  194 + </linearGradient>
  195 + <linearGradient
  196 + id="linearGradient2855">
  197 + <stop
  198 + id="stop2857"
  199 + offset="0"
  200 + style="stop-color:#dfdfdf;stop-opacity:1;" />
  201 + <stop
  202 + id="stop2859"
  203 + offset="1"
  204 + style="stop-color:#ffffff;stop-opacity:1;" />
  205 + </linearGradient>
  206 + <linearGradient
  207 + gradientTransform="matrix(1.137871,0.000000,0.000000,1.000000,-2.660884,0.000000)"
  208 + gradientUnits="userSpaceOnUse"
  209 + y2="6.8333683"
  210 + x2="14.283642"
  211 + y1="42.83337"
  212 + x1="21.043484"
  213 + id="linearGradient2861"
  214 + xlink:href="#linearGradient2855"
  215 + inkscape:collect="always" />
  216 + <radialGradient
  217 + gradientUnits="userSpaceOnUse"
  218 + gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,0.000000,26.35543)"
  219 + r="19.5625"
  220 + fy="40.4375"
  221 + fx="23.5625"
  222 + cy="40.4375"
  223 + cx="23.5625"
  224 + id="radialGradient2871"
  225 + xlink:href="#linearGradient2865"
  226 + inkscape:collect="always" />
  227 + <linearGradient
  228 + gradientUnits="userSpaceOnUse"
  229 + y2="42.83337"
  230 + x2="26.228401"
  231 + y1="28.083368"
  232 + x1="26.612417"
  233 + id="linearGradient2879"
  234 + xlink:href="#linearGradient2873"
  235 + inkscape:collect="always" />
  236 + <linearGradient
  237 + gradientUnits="userSpaceOnUse"
  238 + y2="7.5624999"
  239 + x2="40.984375"
  240 + y1="7.5624999"
  241 + x1="6"
  242 + id="linearGradient2925"
  243 + xlink:href="#linearGradient2919"
  244 + inkscape:collect="always" />
  245 + <linearGradient
  246 + gradientTransform="translate(-5.669292,0.000000)"
  247 + gradientUnits="userSpaceOnUse"
  248 + y2="22.250591"
  249 + x2="50.988335"
  250 + y1="17.376184"
  251 + x1="48.90625"
  252 + id="linearGradient2972"
  253 + xlink:href="#linearGradient2966"
  254 + inkscape:collect="always" />
  255 + <linearGradient
  256 + gradientTransform="translate(-5.669292,0.000000)"
  257 + gradientUnits="userSpaceOnUse"
  258 + y2="22.625"
  259 + x2="47.6875"
  260 + y1="19.8125"
  261 + x1="46"
  262 + id="linearGradient2980"
  263 + xlink:href="#linearGradient2974"
  264 + inkscape:collect="always" />
  265 + <radialGradient
  266 + gradientUnits="userSpaceOnUse"
  267 + gradientTransform="matrix(2.923565,-3.911409e-24,2.471769e-23,2.029717,-61.55532,-27.88417)"
  268 + r="3.2408544"
  269 + fy="27.640751"
  270 + fx="29.053354"
  271 + cy="27.640751"
  272 + cx="29.053354"
  273 + id="radialGradient2990"
  274 + xlink:href="#linearGradient2984"
  275 + inkscape:collect="always" />
  276 + <linearGradient
  277 + gradientTransform="translate(-5.825542,0.125000)"
  278 + gradientUnits="userSpaceOnUse"
  279 + y2="30.703125"
  280 + x2="25.514589"
  281 + y1="31.046875"
  282 + x1="25.71875"
  283 + id="linearGradient3000"
  284 + xlink:href="#linearGradient2994"
  285 + inkscape:collect="always" />
  286 + <radialGradient
  287 + r="19.5625"
  288 + fy="40.4375"
  289 + fx="23.5625"
  290 + cy="40.4375"
  291 + cx="23.5625"
  292 + gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,1.439818e-16,26.35543)"
  293 + gradientUnits="userSpaceOnUse"
  294 + id="radialGradient3010"
  295 + xlink:href="#linearGradient2865"
  296 + inkscape:collect="always" />
  297 + <linearGradient
  298 + y2="609.50507"
  299 + x2="302.85715"
  300 + y1="366.64789"
  301 + x1="302.85715"
  302 + gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
  303 + gradientUnits="userSpaceOnUse"
  304 + id="linearGradient6715-635"
  305 + xlink:href="#linearGradient5048-282"
  306 + inkscape:collect="always" />
  307 + <linearGradient
  308 + id="linearGradient5048-282">
  309 + <stop
  310 + id="stop2506"
  311 + offset="0"
  312 + style="stop-color:#000000;stop-opacity:0;" />
  313 + <stop
  314 + style="stop-color:#000000;stop-opacity:1;"
  315 + offset="0.5"
  316 + id="stop2508" />
  317 + <stop
  318 + id="stop2510"
  319 + offset="1"
  320 + style="stop-color:#000000;stop-opacity:0;" />
  321 + </linearGradient>
  322 + <radialGradient
  323 + r="117.14286"
  324 + fy="486.64789"
  325 + fx="605.71429"
  326 + cy="486.64789"
  327 + cx="605.71429"
  328 + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
  329 + gradientUnits="userSpaceOnUse"
  330 + id="radialGradient6717-944"
  331 + xlink:href="#linearGradient5060-14"
  332 + inkscape:collect="always" />
  333 + <linearGradient
  334 + id="linearGradient5060-14"
  335 + inkscape:collect="always">
  336 + <stop
  337 + id="stop2514"
  338 + offset="0"
  339 + style="stop-color:#000000;stop-opacity:1;" />
  340 + <stop
  341 + id="stop2516"
  342 + offset="1"
  343 + style="stop-color:#000000;stop-opacity:0;" />
  344 + </linearGradient>
  345 + <radialGradient
  346 + r="117.14286"
  347 + fy="486.64789"
  348 + fx="605.71429"
  349 + cy="486.64789"
  350 + cx="605.71429"
  351 + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
  352 + gradientUnits="userSpaceOnUse"
  353 + id="radialGradient6719-778"
  354 + xlink:href="#linearGradient5060-358"
  355 + inkscape:collect="always" />
  356 + <linearGradient
  357 + id="linearGradient5060-358"
  358 + inkscape:collect="always">
  359 + <stop
  360 + id="stop2520"
  361 + offset="0"
  362 + style="stop-color:#000000;stop-opacity:1;" />
  363 + <stop
  364 + id="stop2522"
  365 + offset="1"
  366 + style="stop-color:#000000;stop-opacity:0;" />
  367 + </linearGradient>
  368 + <linearGradient
  369 + gradientTransform="matrix(1.137871,0.000000,0.000000,1.000000,-2.660884,0.000000)"
  370 + gradientUnits="userSpaceOnUse"
  371 + y2="6.8333683"
  372 + x2="14.283642"
  373 + y1="42.83337"
  374 + x1="21.043484"
  375 + id="linearGradient2861-627"
  376 + xlink:href="#linearGradient2855-316"
  377 + inkscape:collect="always" />
  378 + <linearGradient
  379 + id="linearGradient2855-316">
  380 + <stop
  381 + id="stop2526"
  382 + offset="0"
  383 + style="stop-color:#dfdfdf;stop-opacity:1;" />
  384 + <stop
  385 + id="stop2528"
  386 + offset="1"
  387 + style="stop-color:#ffffff;stop-opacity:1;" />
  388 + </linearGradient>
  389 + <linearGradient
  390 + gradientUnits="userSpaceOnUse"
  391 + y2="42.83337"
  392 + x2="26.228401"
  393 + y1="28.083368"
  394 + x1="26.612417"
  395 + id="linearGradient2879-751"
  396 + xlink:href="#linearGradient2873-629"
  397 + inkscape:collect="always" />
  398 + <linearGradient
  399 + id="linearGradient2873-629">
  400 + <stop
  401 + id="stop2532"
  402 + offset="0"
  403 + style="stop-color:#939393;stop-opacity:1;" />
  404 + <stop
  405 + id="stop2534"
  406 + offset="1"
  407 + style="stop-color:#424242;stop-opacity:1;" />
  408 + </linearGradient>
  409 + <radialGradient
  410 + r="19.5625"
  411 + fy="40.4375"
  412 + fx="23.5625"
  413 + cy="40.4375"
  414 + cx="23.5625"
  415 + gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,1.439818e-16,26.35543)"
  416 + gradientUnits="userSpaceOnUse"
  417 + id="radialGradient3010-591"
  418 + xlink:href="#linearGradient2865-708"
  419 + inkscape:collect="always" />
  420 + <linearGradient
  421 + id="linearGradient2865-708"
  422 + inkscape:collect="always">
  423 + <stop
  424 + id="stop2538"
  425 + offset="0"
  426 + style="stop-color:#000000;stop-opacity:1;" />
  427 + <stop
  428 + id="stop2540"
  429 + offset="1"
  430 + style="stop-color:#000000;stop-opacity:0;" />
  431 + </linearGradient>
  432 + <linearGradient
  433 + gradientUnits="userSpaceOnUse"
  434 + y2="7.5624999"
  435 + x2="40.984375"
  436 + y1="7.5624999"
  437 + x1="6"
  438 + id="linearGradient2925-565"
  439 + xlink:href="#linearGradient2919-578"
  440 + inkscape:collect="always" />
  441 + <linearGradient
  442 + id="linearGradient2919-578">
  443 + <stop
  444 + id="stop2544"
  445 + offset="0"
  446 + style="stop-color:#a2a2a2;stop-opacity:1;" />
  447 + <stop
  448 + id="stop2546"
  449 + offset="1"
  450 + style="stop-color:#878787;stop-opacity:1;" />
  451 + </linearGradient>
  452 + <linearGradient
  453 + gradientTransform="translate(-5.669292,0.000000)"
  454 + gradientUnits="userSpaceOnUse"
  455 + y2="22.250591"
  456 + x2="50.988335"
  457 + y1="17.376184"
  458 + x1="48.90625"
  459 + id="linearGradient2972-839"
  460 + xlink:href="#linearGradient2966-498"
  461 + inkscape:collect="always" />
  462 + <linearGradient
  463 + id="linearGradient2966-498">
  464 + <stop
  465 + id="stop2550"
  466 + offset="0"
  467 + style="stop-color:#e8e8e8;stop-opacity:1;" />
  468 + <stop
  469 + style="stop-color:#8e8e8e;stop-opacity:1;"
  470 + offset="0.5"
  471 + id="stop2552" />
  472 + <stop
  473 + id="stop2554"
  474 + offset="1"
  475 + style="stop-color:#373737;stop-opacity:1;" />
  476 + </linearGradient>
  477 + <linearGradient
  478 + gradientTransform="translate(-5.669292,0.000000)"
  479 + gradientUnits="userSpaceOnUse"
  480 + y2="22.625"
  481 + x2="47.6875"
  482 + y1="19.8125"
  483 + x1="46"
  484 + id="linearGradient2980-769"
  485 + xlink:href="#linearGradient2974-591"
  486 + inkscape:collect="always" />
  487 + <linearGradient
  488 + id="linearGradient2974-591">
  489 + <stop
  490 + id="stop2558"
  491 + offset="0"
  492 + style="stop-color:#c1c1c1;stop-opacity:1;" />
  493 + <stop
  494 + id="stop2560"
  495 + offset="1"
  496 + style="stop-color:#acacac;stop-opacity:1;" />
  497 + </linearGradient>
  498 + <radialGradient
  499 + gradientUnits="userSpaceOnUse"
  500 + gradientTransform="matrix(2.923565,-3.911409e-24,2.471769e-23,2.029717,-61.55532,-27.88417)"
  501 + r="3.2408544"
  502 + fy="27.640751"
  503 + fx="29.053354"
  504 + cy="27.640751"
  505 + cx="29.053354"
  506 + id="radialGradient2990-357"
  507 + xlink:href="#linearGradient2984-123"
  508 + inkscape:collect="always" />
  509 + <linearGradient
  510 + id="linearGradient2984-123"
  511 + inkscape:collect="always">
  512 + <stop
  513 + id="stop2564"
  514 + offset="0"
  515 + style="stop-color:#cfcfcf;stop-opacity:1;" />
  516 + <stop
  517 + id="stop2566"
  518 + offset="1"
  519 + style="stop-color:#cfcfcf;stop-opacity:0;" />
  520 + </linearGradient>
  521 + <linearGradient
  522 + gradientTransform="translate(-5.825542,0.125000)"
  523 + gradientUnits="userSpaceOnUse"
  524 + y2="30.703125"
  525 + x2="25.514589"
  526 + y1="31.046875"
  527 + x1="25.71875"
  528 + id="linearGradient3000-327"
  529 + xlink:href="#linearGradient2994-689"
  530 + inkscape:collect="always" />
  531 + <linearGradient
  532 + id="linearGradient2994-689">
  533 + <stop
  534 + id="stop2570"
  535 + offset="0"
  536 + style="stop-color:#000000;stop-opacity:1;" />
  537 + <stop
  538 + id="stop2572"
  539 + offset="1"
  540 + style="stop-color:#c9c9c9;stop-opacity:1;" />
  541 + </linearGradient>
  542 + </defs>
  543 + <metadata
  544 + id="metadata4">
  545 + <rdf:RDF>
  546 + <cc:Work
  547 + rdf:about="">
  548 + <dc:format>image/svg+xml</dc:format>
  549 + <dc:type
  550 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  551 + <dc:creator>
  552 + <cc:Agent>
  553 + <dc:title>Jakub Steiner</dc:title>
  554 + </cc:Agent>
  555 + </dc:creator>
  556 + <dc:source>http://jimmac.musichall.cz</dc:source>
  557 + <cc:license
  558 + rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
  559 + <dc:title>Text Editor</dc:title>
  560 + </cc:Work>
  561 + <cc:License
  562 + rdf:about="http://creativecommons.org/licenses/publicdomain/">
  563 + <cc:permits
  564 + rdf:resource="http://creativecommons.org/ns#Reproduction" />
  565 + <cc:permits
  566 + rdf:resource="http://creativecommons.org/ns#Distribution" />
  567 + <cc:permits
  568 + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
  569 + </cc:License>
  570 + </rdf:RDF>
  571 + </metadata>
  572 + <g
  573 + inkscape:groupmode="layer"
  574 + inkscape:label="Layer 1"
  575 + id="layer1">
  576 + <g
  577 + id="g6707"
  578 + transform="matrix(2.417561e-2,0,0,2.086758e-2,45.12765,40.1536)">
  579 + <rect
  580 + y="-150.69685"
  581 + x="-1559.2523"
  582 + height="478.35718"
  583 + width="1339.6335"
  584 + id="rect6709"
  585 + style="opacity:0.40206185;color:black;fill:url(#linearGradient6715-635);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  586 + <path
  587 + sodipodi:nodetypes="cccc"
  588 + id="path6711"
  589 + d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
  590 + style="opacity:0.40206185;color:black;fill:url(#radialGradient6717-944);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  591 + <path
  592 + style="opacity:0.40206185;color:black;fill:url(#radialGradient6719-778);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  593 + d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
  594 + id="path6713"
  595 + sodipodi:nodetypes="cccc" />
  596 + </g>
  597 + <path
  598 + sodipodi:nodetypes="ccccccccccc"
  599 + id="rect1975"
  600 + d="M 7.1638699,4.5063726 L 39.813122,4.5063726 C 40.575699,4.5063726 41.189615,5.0388241 41.189615,5.7002099 C 41.189615,5.7002099 43.590945,39.868907 43.590945,39.868907 C 43.590945,39.868907 43.603403,42.216529 43.603403,42.216529 C 43.603403,42.877915 42.989488,43.410366 42.226911,43.410366 L 4.750081,43.410366 C 3.9875042,43.410366 3.3735887,42.877915 3.3735887,42.216529 L 3.3624173,40.049613 L 5.7873775,5.7002099 C 5.7873775,5.0388241 6.4012931,4.5063726 7.1638699,4.5063726 z "
  601 + style="color:#000000;fill:url(#linearGradient2861-627);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2879-751);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  602 + <path
  603 + sodipodi:type="arc"
  604 + style="opacity:0.31578944;color:#000000;fill:url(#radialGradient3010-591);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  605 + id="path3008"
  606 + sodipodi:cx="23.5625"
  607 + sodipodi:cy="40.4375"
  608 + sodipodi:rx="19.5625"
  609 + sodipodi:ry="6.8125"
  610 + d="M 43.125 40.4375 A 19.5625 6.8125 0 1 1 4,40.4375 A 19.5625 6.8125 0 1 1 43.125 40.4375 z"
  611 + transform="matrix(0.616613,0.000000,0.000000,0.440367,10.61425,13.94266)" />
  612 + <rect
  613 + ry="0.67937863"
  614 + rx="0.67937863"
  615 + y="39.868271"
  616 + x="3.9770372"
  617 + height="3.0714951"
  618 + width="39.048077"
  619 + id="rect2851"
  620 + style="opacity:1;color:#000000;fill:#a4a4a4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  621 + <path
  622 + sodipodi:nodetypes="ccccccc"
  623 + id="path2853"
  624 + d="M 3.9267507,40.442796 C 3.9267507,40.442796 4.0776125,39.912466 4.6307727,39.868272 L 42.195375,39.868272 C 42.949684,39.868272 42.999971,40.619573 42.999971,40.619573 C 42.999971,40.619573 43.02357,39 41.7161,39 L 5.3042159,39 C 4.2984702,39.088388 3.9267507,39.779883 3.9267507,40.442796 z "
  625 + style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  626 + <path
  627 + sodipodi:nodetypes="ccccccccc"
  628 + id="path2915"
  629 + d="M 6.25,5.7343749 L 6,10.125 C 6,10.125 6.3125,8.9999999 7,8.9999999 L 40.125,8.9999999 C 40.828125,8.9843749 40.859375,9.3124999 40.984375,9.8281249 C 40.984375,9.8281249 40.734375,5.9531249 40.734375,5.9531249 C 40.703125,5.4062499 40.515625,4.9999999 39.953125,4.9999999 L 7.0625,4.9999999 C 6.609375,4.9999999 6.296875,5.3437499 6.25,5.7343749 z "
  630 + style="opacity:1;color:#000000;fill:url(#linearGradient2925-565);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  631 + <path
  632 + style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.43859649"
  633 + d="M 7.8126474,5.5404503 L 38.944983,5.5404503 C 39.66702,5.5404503 40.2483,5.3883462 40.2483,6.014572 C 40.2483,6.014572 42.521973,39.023077 42.521973,39.023077 C 42.521973,39.023077 42.622156,41.732033 42.622156,41.732033 C 42.622156,42.358259 42.48282,42.376269 41.760782,42.376269 L 4.8620444,42.376269 C 4.4493662,42.376269 4.4426114,42.269871 4.4426114,41.864615 L 4.4320338,39.194177 L 6.7280807,6.045822 C 6.7280807,5.4195962 7.09061,5.5404503 7.8126474,5.5404503 z "
  634 + id="path2917"
  635 + sodipodi:nodetypes="ccccccccccc" />
  636 + <g
  637 + id="g2950">
  638 + <rect
  639 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  640 + id="rect2899"
  641 + width="2"
  642 + height="5"
  643 + x="8.5"
  644 + y="2.5"
  645 + rx="1"
  646 + ry="1" />
  647 + <rect
  648 + ry="1"
  649 + rx="1"
  650 + y="2.5"
  651 + x="12.5"
  652 + height="5"
  653 + width="2"
  654 + id="rect2901"
  655 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  656 + <rect
  657 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  658 + id="rect2903"
  659 + width="2"
  660 + height="5"
  661 + x="16.5"
  662 + y="2.5"
  663 + rx="1"
  664 + ry="1" />
  665 + <rect
  666 + ry="1"
  667 + rx="1"
  668 + y="2.5"
  669 + x="20.5"
  670 + height="5"
  671 + width="2"
  672 + id="rect2905"
  673 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  674 + <rect
  675 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  676 + id="rect2907"
  677 + width="2"
  678 + height="5"
  679 + x="24.5"
  680 + y="2.5"
  681 + rx="1"
  682 + ry="1" />
  683 + <rect
  684 + ry="1"
  685 + rx="1"
  686 + y="2.5"
  687 + x="28.5"
  688 + height="5"
  689 + width="2"
  690 + id="rect2909"
  691 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  692 + <rect
  693 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  694 + id="rect2911"
  695 + width="2"
  696 + height="5"
  697 + x="32.5"
  698 + y="2.5"
  699 + rx="1"
  700 + ry="1" />
  701 + <rect
  702 + ry="1"
  703 + rx="1"
  704 + y="2.5"
  705 + x="36.5"
  706 + height="5"
  707 + width="2"
  708 + id="rect2913"
  709 + style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  710 + </g>
  711 + <g
  712 + id="g2941">
  713 + <rect
  714 + style="opacity:0.28070175;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  715 + id="rect2927"
  716 + width="29"
  717 + height="1"
  718 + x="9"
  719 + y="12" />
  720 + <rect
  721 + y="14.981792"
  722 + x="9"
  723 + height="1"
  724 + width="29"
  725 + id="rect2929"
  726 + style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  727 + <rect
  728 + style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  729 + id="rect2931"
  730 + width="13"
  731 + height="1"
  732 + x="9"
  733 + y="18.003939" />
  734 + <rect
  735 + y="22.985731"
  736 + x="9"
  737 + height="1"
  738 + width="29"
  739 + id="rect2933"
  740 + style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  741 + <rect
  742 + style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  743 + id="rect2935"
  744 + width="29"
  745 + height="1"
  746 + x="9"
  747 + y="26.007877" />
  748 + <rect
  749 + y="29.030024"
  750 + x="9"
  751 + height="1"
  752 + width="29"
  753 + id="rect2937"
  754 + style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  755 + <rect
  756 + style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  757 + id="rect2939"
  758 + width="8"
  759 + height="1"
  760 + x="9"
  761 + y="32.05217" />
  762 + </g>
  763 + <path
  764 + sodipodi:nodetypes="cccccc"
  765 + id="path2960"
  766 + d="M 17.34116,32.5 L 22.96616,26.875 L 43.059909,17.125 C 46.309909,15.875 48.247409,20.5 45.372409,22.125 L 25.34116,31.5 L 17.34116,32.5 z "
  767 + style="opacity:1;color:#000000;fill:#767676;fill-opacity:1;fill-rule:evenodd;stroke:#343434;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  768 + <path
  769 + style="opacity:1;color:#000000;fill:url(#linearGradient2972-839);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
  770 + d="M 38.330708,20 C 38.330708,20 39.768208,20.09375 40.330708,21.34375 C 40.910201,22.631511 40.330708,24 40.330708,24 L 45.361958,21.53125 C 45.361958,21.53125 46.81399,20.649883 46.018208,18.6875 C 45.233296,16.751923 43.330708,17.53125 43.330708,17.53125 L 38.330708,20 z "
  771 + id="path2964"
  772 + sodipodi:nodetypes="czcczcc" />
  773 + <path
  774 + sodipodi:nodetypes="czcczcc"
  775 + id="path2962"
  776 + d="M 38.330708,20 C 38.330708,20 39.768208,20.09375 40.330708,21.34375 C 40.910201,22.631511 40.330708,24 40.330708,24 L 42.330708,23 C 42.330708,23 43.15774,21.681133 42.549458,20.3125 C 41.924458,18.90625 40.330708,19 40.330708,19 L 38.330708,20 z "
  777 + style="opacity:1;color:#000000;fill:url(#linearGradient2980-769);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  778 + <path
  779 + sodipodi:nodetypes="cccc"
  780 + id="path2982"
  781 + d="M 18.768208,31.78125 L 23.268208,27.28125 C 24.768208,28.09375 25.549458,29.4375 25.143208,31 L 18.768208,31.78125 z "
  782 + style="opacity:1;color:#000000;fill:url(#radialGradient2990-357);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  783 + <path
  784 + sodipodi:nodetypes="cccc"
  785 + id="path2992"
  786 + d="M 20.111958,30.375 L 18.486958,31.96875 L 20.830708,31.65625 C 21.049458,30.9375 20.643208,30.59375 20.111958,30.375 z "
  787 + style="opacity:1;color:#000000;fill:url(#linearGradient3000-327);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  788 + <path
  789 + sodipodi:nodetypes="ccccc"
  790 + id="path3002"
  791 + d="M 23.268208,27.25 L 24.830708,28.5 L 40.218048,21.18133 C 39.773616,20.325286 38.976281,20.096733 38.314669,20.019068 L 23.268208,27.25 z "
  792 + style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.36363639;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  793 + <path
  794 + sodipodi:nodetypes="ccccc"
  795 + id="path3004"
  796 + d="M 25.143208,31.0625 L 25.330708,30.3125 L 40.561798,23.1829 C 40.561798,23.1829 40.451638,23.796527 40.345919,23.93225 L 25.143208,31.0625 z "
  797 + style="opacity:1;color:#000000;fill:#000000;fill-opacity:0.36363639;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
  798 + </g>
  799 +</svg>
... ...
public/designs/icons/tango/style.css
... ... @@ -5,6 +5,7 @@
5 5 .icon-new { background-image: url(Tango/16x16/actions/filenew.png) }
6 6 .icon-close { background-image: url(Tango/16x16/actions/gtk-cancel.png) }
7 7 .icon-newfolder { background-image: url(Tango/16x16/actions/folder-new.png) }
  8 +.icon-newblog { background-image: url(Tango-mod/16x16/apps/text-editor.png) }
8 9 /*.icon-open { background-image: url(folder-open.gif) } UNUSED*/
9 10 /*.icon-cms { background-image: url(abiword_48.png) } UNUSED*/
10 11 .icon-save { background-image: url(Tango/16x16/actions/filesave.png) }
... ...
public/images/control-panel/text-editor-disabled.png
1 1 Binary files a/public/images/control-panel/text-editor-disabled.png and /dev/null differ
... ...
public/images/control-panel/text-editor-disabled.png 0 → 120000
... ... @@ -0,0 +1 @@
  1 +../../designs/icons/tango/Tango-mod/48x48/apps/text-editor.png
0 2 \ No newline at end of file
... ...
public/images/control-panel/text-editor-disabled.svg
... ... @@ -1,799 +0,0 @@
1   -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2   -<!-- Created with Inkscape (http://www.inkscape.org/) -->
3   -<svg
4   - xmlns:dc="http://purl.org/dc/elements/1.1/"
5   - xmlns:cc="http://creativecommons.org/ns#"
6   - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7   - xmlns:svg="http://www.w3.org/2000/svg"
8   - xmlns="http://www.w3.org/2000/svg"
9   - xmlns:xlink="http://www.w3.org/1999/xlink"
10   - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11   - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12   - inkscape:export-ydpi="90.000000"
13   - inkscape:export-xdpi="90.000000"
14   - inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
15   - width="48px"
16   - height="48px"
17   - id="svg11300"
18   - sodipodi:version="0.32"
19   - inkscape:version="0.46"
20   - sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
21   - sodipodi:docname="text-editor-disabled.svg"
22   - inkscape:output_extension="org.inkscape.output.svg.inkscape">
23   - <sodipodi:namedview
24   - stroke="#c4a000"
25   - fill="#edd400"
26   - id="base"
27   - pagecolor="#ffffff"
28   - bordercolor="#666666"
29   - borderopacity="0.25490196"
30   - inkscape:pageopacity="0.0"
31   - inkscape:pageshadow="2"
32   - inkscape:zoom="11.229167"
33   - inkscape:cx="24"
34   - inkscape:cy="24"
35   - inkscape:current-layer="layer1"
36   - showgrid="false"
37   - inkscape:grid-bbox="true"
38   - inkscape:document-units="px"
39   - inkscape:showpageshadow="false"
40   - inkscape:window-width="1276"
41   - inkscape:window-height="745"
42   - inkscape:window-x="0"
43   - inkscape:window-y="19" />
44   - <defs
45   - id="defs3">
46   - <inkscape:perspective
47   - id="perspective85"
48   - inkscape:persp3d-origin="24 : 16 : 1"
49   - inkscape:vp_z="48 : 24 : 1"
50   - inkscape:vp_y="0 : 1000 : 0"
51   - inkscape:vp_x="0 : 24 : 1"
52   - sodipodi:type="inkscape:persp3d" />
53   - <radialGradient
54   - r="117.14286"
55   - fy="486.64789"
56   - fx="605.71429"
57   - cy="486.64789"
58   - cx="605.71429"
59   - gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
60   - gradientUnits="userSpaceOnUse"
61   - id="radialGradient6719"
62   - xlink:href="#linearGradient5060"
63   - inkscape:collect="always" />
64   - <linearGradient
65   - id="linearGradient5060"
66   - inkscape:collect="always">
67   - <stop
68   - id="stop5062"
69   - offset="0"
70   - style="stop-color:#000000;stop-opacity:1;" />
71   - <stop
72   - id="stop5064"
73   - offset="1"
74   - style="stop-color:#000000;stop-opacity:0;" />
75   - </linearGradient>
76   - <radialGradient
77   - r="117.14286"
78   - fy="486.64789"
79   - fx="605.71429"
80   - cy="486.64789"
81   - cx="605.71429"
82   - gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
83   - gradientUnits="userSpaceOnUse"
84   - id="radialGradient6717"
85   - xlink:href="#linearGradient5060"
86   - inkscape:collect="always" />
87   - <linearGradient
88   - id="linearGradient5048">
89   - <stop
90   - id="stop5050"
91   - offset="0"
92   - style="stop-color:#000000;stop-opacity:0;" />
93   - <stop
94   - style="stop-color:#000000;stop-opacity:1;"
95   - offset="0.5"
96   - id="stop5056" />
97   - <stop
98   - id="stop5052"
99   - offset="1"
100   - style="stop-color:#000000;stop-opacity:0;" />
101   - </linearGradient>
102   - <linearGradient
103   - y2="609.50507"
104   - x2="302.85715"
105   - y1="366.64789"
106   - x1="302.85715"
107   - gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
108   - gradientUnits="userSpaceOnUse"
109   - id="linearGradient6715"
110   - xlink:href="#linearGradient5048"
111   - inkscape:collect="always" />
112   - <linearGradient
113   - id="linearGradient2994">
114   - <stop
115   - id="stop2996"
116   - offset="0"
117   - style="stop-color:#000000;stop-opacity:1;" />
118   - <stop
119   - id="stop2998"
120   - offset="1"
121   - style="stop-color:#c9c9c9;stop-opacity:1;" />
122   - </linearGradient>
123   - <linearGradient
124   - id="linearGradient2984"
125   - inkscape:collect="always">
126   - <stop
127   - id="stop2986"
128   - offset="0"
129   - style="stop-color:#cfcfcf;stop-opacity:1;" />
130   - <stop
131   - id="stop2988"
132   - offset="1"
133   - style="stop-color:#cfcfcf;stop-opacity:0;" />
134   - </linearGradient>
135   - <linearGradient
136   - id="linearGradient2974">
137   - <stop
138   - id="stop2976"
139   - offset="0"
140   - style="stop-color:#c1c1c1;stop-opacity:1;" />
141   - <stop
142   - id="stop2978"
143   - offset="1"
144   - style="stop-color:#acacac;stop-opacity:1;" />
145   - </linearGradient>
146   - <linearGradient
147   - id="linearGradient2966">
148   - <stop
149   - id="stop2968"
150   - offset="0"
151   - style="stop-color:#e8e8e8;stop-opacity:1;" />
152   - <stop
153   - style="stop-color:#8e8e8e;stop-opacity:1;"
154   - offset="0.5"
155   - id="stop3006" />
156   - <stop
157   - id="stop2970"
158   - offset="1"
159   - style="stop-color:#373737;stop-opacity:1;" />
160   - </linearGradient>
161   - <linearGradient
162   - id="linearGradient2919">
163   - <stop
164   - id="stop2921"
165   - offset="0"
166   - style="stop-color:#a2a2a2;stop-opacity:1;" />
167   - <stop
168   - id="stop2923"
169   - offset="1"
170   - style="stop-color:#878787;stop-opacity:1;" />
171   - </linearGradient>
172   - <linearGradient
173   - id="linearGradient2873">
174   - <stop
175   - id="stop2875"
176   - offset="0"
177   - style="stop-color:#939393;stop-opacity:1;" />
178   - <stop
179   - id="stop2877"
180   - offset="1"
181   - style="stop-color:#424242;stop-opacity:1;" />
182   - </linearGradient>
183   - <linearGradient
184   - id="linearGradient2865"
185   - inkscape:collect="always">
186   - <stop
187   - id="stop2867"
188   - offset="0"
189   - style="stop-color:#000000;stop-opacity:1;" />
190   - <stop
191   - id="stop2869"
192   - offset="1"
193   - style="stop-color:#000000;stop-opacity:0;" />
194   - </linearGradient>
195   - <linearGradient
196   - id="linearGradient2855">
197   - <stop
198   - id="stop2857"
199   - offset="0"
200   - style="stop-color:#dfdfdf;stop-opacity:1;" />
201   - <stop
202   - id="stop2859"
203   - offset="1"
204   - style="stop-color:#ffffff;stop-opacity:1;" />
205   - </linearGradient>
206   - <linearGradient
207   - gradientTransform="matrix(1.137871,0.000000,0.000000,1.000000,-2.660884,0.000000)"
208   - gradientUnits="userSpaceOnUse"
209   - y2="6.8333683"
210   - x2="14.283642"
211   - y1="42.83337"
212   - x1="21.043484"
213   - id="linearGradient2861"
214   - xlink:href="#linearGradient2855"
215   - inkscape:collect="always" />
216   - <radialGradient
217   - gradientUnits="userSpaceOnUse"
218   - gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,0.000000,26.35543)"
219   - r="19.5625"
220   - fy="40.4375"
221   - fx="23.5625"
222   - cy="40.4375"
223   - cx="23.5625"
224   - id="radialGradient2871"
225   - xlink:href="#linearGradient2865"
226   - inkscape:collect="always" />
227   - <linearGradient
228   - gradientUnits="userSpaceOnUse"
229   - y2="42.83337"
230   - x2="26.228401"
231   - y1="28.083368"
232   - x1="26.612417"
233   - id="linearGradient2879"
234   - xlink:href="#linearGradient2873"
235   - inkscape:collect="always" />
236   - <linearGradient
237   - gradientUnits="userSpaceOnUse"
238   - y2="7.5624999"
239   - x2="40.984375"
240   - y1="7.5624999"
241   - x1="6"
242   - id="linearGradient2925"
243   - xlink:href="#linearGradient2919"
244   - inkscape:collect="always" />
245   - <linearGradient
246   - gradientTransform="translate(-5.669292,0.000000)"
247   - gradientUnits="userSpaceOnUse"
248   - y2="22.250591"
249   - x2="50.988335"
250   - y1="17.376184"
251   - x1="48.90625"
252   - id="linearGradient2972"
253   - xlink:href="#linearGradient2966"
254   - inkscape:collect="always" />
255   - <linearGradient
256   - gradientTransform="translate(-5.669292,0.000000)"
257   - gradientUnits="userSpaceOnUse"
258   - y2="22.625"
259   - x2="47.6875"
260   - y1="19.8125"
261   - x1="46"
262   - id="linearGradient2980"
263   - xlink:href="#linearGradient2974"
264   - inkscape:collect="always" />
265   - <radialGradient
266   - gradientUnits="userSpaceOnUse"
267   - gradientTransform="matrix(2.923565,-3.911409e-24,2.471769e-23,2.029717,-61.55532,-27.88417)"
268   - r="3.2408544"
269   - fy="27.640751"
270   - fx="29.053354"
271   - cy="27.640751"
272   - cx="29.053354"
273   - id="radialGradient2990"
274   - xlink:href="#linearGradient2984"
275   - inkscape:collect="always" />
276   - <linearGradient
277   - gradientTransform="translate(-5.825542,0.125000)"
278   - gradientUnits="userSpaceOnUse"
279   - y2="30.703125"
280   - x2="25.514589"
281   - y1="31.046875"
282   - x1="25.71875"
283   - id="linearGradient3000"
284   - xlink:href="#linearGradient2994"
285   - inkscape:collect="always" />
286   - <radialGradient
287   - r="19.5625"
288   - fy="40.4375"
289   - fx="23.5625"
290   - cy="40.4375"
291   - cx="23.5625"
292   - gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,1.439818e-16,26.35543)"
293   - gradientUnits="userSpaceOnUse"
294   - id="radialGradient3010"
295   - xlink:href="#linearGradient2865"
296   - inkscape:collect="always" />
297   - <linearGradient
298   - y2="609.50507"
299   - x2="302.85715"
300   - y1="366.64789"
301   - x1="302.85715"
302   - gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
303   - gradientUnits="userSpaceOnUse"
304   - id="linearGradient6715-635"
305   - xlink:href="#linearGradient5048-282"
306   - inkscape:collect="always" />
307   - <linearGradient
308   - id="linearGradient5048-282">
309   - <stop
310   - id="stop2506"
311   - offset="0"
312   - style="stop-color:#000000;stop-opacity:0;" />
313   - <stop
314   - style="stop-color:#000000;stop-opacity:1;"
315   - offset="0.5"
316   - id="stop2508" />
317   - <stop
318   - id="stop2510"
319   - offset="1"
320   - style="stop-color:#000000;stop-opacity:0;" />
321   - </linearGradient>
322   - <radialGradient
323   - r="117.14286"
324   - fy="486.64789"
325   - fx="605.71429"
326   - cy="486.64789"
327   - cx="605.71429"
328   - gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
329   - gradientUnits="userSpaceOnUse"
330   - id="radialGradient6717-944"
331   - xlink:href="#linearGradient5060-14"
332   - inkscape:collect="always" />
333   - <linearGradient
334   - id="linearGradient5060-14"
335   - inkscape:collect="always">
336   - <stop
337   - id="stop2514"
338   - offset="0"
339   - style="stop-color:#000000;stop-opacity:1;" />
340   - <stop
341   - id="stop2516"
342   - offset="1"
343   - style="stop-color:#000000;stop-opacity:0;" />
344   - </linearGradient>
345   - <radialGradient
346   - r="117.14286"
347   - fy="486.64789"
348   - fx="605.71429"
349   - cy="486.64789"
350   - cx="605.71429"
351   - gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
352   - gradientUnits="userSpaceOnUse"
353   - id="radialGradient6719-778"
354   - xlink:href="#linearGradient5060-358"
355   - inkscape:collect="always" />
356   - <linearGradient
357   - id="linearGradient5060-358"
358   - inkscape:collect="always">
359   - <stop
360   - id="stop2520"
361   - offset="0"
362   - style="stop-color:#000000;stop-opacity:1;" />
363   - <stop
364   - id="stop2522"
365   - offset="1"
366   - style="stop-color:#000000;stop-opacity:0;" />
367   - </linearGradient>
368   - <linearGradient
369   - gradientTransform="matrix(1.137871,0.000000,0.000000,1.000000,-2.660884,0.000000)"
370   - gradientUnits="userSpaceOnUse"
371   - y2="6.8333683"
372   - x2="14.283642"
373   - y1="42.83337"
374   - x1="21.043484"
375   - id="linearGradient2861-627"
376   - xlink:href="#linearGradient2855-316"
377   - inkscape:collect="always" />
378   - <linearGradient
379   - id="linearGradient2855-316">
380   - <stop
381   - id="stop2526"
382   - offset="0"
383   - style="stop-color:#dfdfdf;stop-opacity:1;" />
384   - <stop
385   - id="stop2528"
386   - offset="1"
387   - style="stop-color:#ffffff;stop-opacity:1;" />
388   - </linearGradient>
389   - <linearGradient
390   - gradientUnits="userSpaceOnUse"
391   - y2="42.83337"
392   - x2="26.228401"
393   - y1="28.083368"
394   - x1="26.612417"
395   - id="linearGradient2879-751"
396   - xlink:href="#linearGradient2873-629"
397   - inkscape:collect="always" />
398   - <linearGradient
399   - id="linearGradient2873-629">
400   - <stop
401   - id="stop2532"
402   - offset="0"
403   - style="stop-color:#939393;stop-opacity:1;" />
404   - <stop
405   - id="stop2534"
406   - offset="1"
407   - style="stop-color:#424242;stop-opacity:1;" />
408   - </linearGradient>
409   - <radialGradient
410   - r="19.5625"
411   - fy="40.4375"
412   - fx="23.5625"
413   - cy="40.4375"
414   - cx="23.5625"
415   - gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,1.439818e-16,26.35543)"
416   - gradientUnits="userSpaceOnUse"
417   - id="radialGradient3010-591"
418   - xlink:href="#linearGradient2865-708"
419   - inkscape:collect="always" />
420   - <linearGradient
421   - id="linearGradient2865-708"
422   - inkscape:collect="always">
423   - <stop
424   - id="stop2538"
425   - offset="0"
426   - style="stop-color:#000000;stop-opacity:1;" />
427   - <stop
428   - id="stop2540"
429   - offset="1"
430   - style="stop-color:#000000;stop-opacity:0;" />
431   - </linearGradient>
432   - <linearGradient
433   - gradientUnits="userSpaceOnUse"
434   - y2="7.5624999"
435   - x2="40.984375"
436   - y1="7.5624999"
437   - x1="6"
438   - id="linearGradient2925-565"
439   - xlink:href="#linearGradient2919-578"
440   - inkscape:collect="always" />
441   - <linearGradient
442   - id="linearGradient2919-578">
443   - <stop
444   - id="stop2544"
445   - offset="0"
446   - style="stop-color:#a2a2a2;stop-opacity:1;" />
447   - <stop
448   - id="stop2546"
449   - offset="1"
450   - style="stop-color:#878787;stop-opacity:1;" />
451   - </linearGradient>
452   - <linearGradient
453   - gradientTransform="translate(-5.669292,0.000000)"
454   - gradientUnits="userSpaceOnUse"
455   - y2="22.250591"
456   - x2="50.988335"
457   - y1="17.376184"
458   - x1="48.90625"
459   - id="linearGradient2972-839"
460   - xlink:href="#linearGradient2966-498"
461   - inkscape:collect="always" />
462   - <linearGradient
463   - id="linearGradient2966-498">
464   - <stop
465   - id="stop2550"
466   - offset="0"
467   - style="stop-color:#e8e8e8;stop-opacity:1;" />
468   - <stop
469   - style="stop-color:#8e8e8e;stop-opacity:1;"
470   - offset="0.5"
471   - id="stop2552" />
472   - <stop
473   - id="stop2554"
474   - offset="1"
475   - style="stop-color:#373737;stop-opacity:1;" />
476   - </linearGradient>
477   - <linearGradient
478   - gradientTransform="translate(-5.669292,0.000000)"
479   - gradientUnits="userSpaceOnUse"
480   - y2="22.625"
481   - x2="47.6875"
482   - y1="19.8125"
483   - x1="46"
484   - id="linearGradient2980-769"
485   - xlink:href="#linearGradient2974-591"
486   - inkscape:collect="always" />
487   - <linearGradient
488   - id="linearGradient2974-591">
489   - <stop
490   - id="stop2558"
491   - offset="0"
492   - style="stop-color:#c1c1c1;stop-opacity:1;" />
493   - <stop
494   - id="stop2560"
495   - offset="1"
496   - style="stop-color:#acacac;stop-opacity:1;" />
497   - </linearGradient>
498   - <radialGradient
499   - gradientUnits="userSpaceOnUse"
500   - gradientTransform="matrix(2.923565,-3.911409e-24,2.471769e-23,2.029717,-61.55532,-27.88417)"
501   - r="3.2408544"
502   - fy="27.640751"
503   - fx="29.053354"
504   - cy="27.640751"
505   - cx="29.053354"
506   - id="radialGradient2990-357"
507   - xlink:href="#linearGradient2984-123"
508   - inkscape:collect="always" />
509   - <linearGradient
510   - id="linearGradient2984-123"
511   - inkscape:collect="always">
512   - <stop
513   - id="stop2564"
514   - offset="0"
515   - style="stop-color:#cfcfcf;stop-opacity:1;" />
516   - <stop
517   - id="stop2566"
518   - offset="1"
519   - style="stop-color:#cfcfcf;stop-opacity:0;" />
520   - </linearGradient>
521   - <linearGradient
522   - gradientTransform="translate(-5.825542,0.125000)"
523   - gradientUnits="userSpaceOnUse"
524   - y2="30.703125"
525   - x2="25.514589"
526   - y1="31.046875"
527   - x1="25.71875"
528   - id="linearGradient3000-327"
529   - xlink:href="#linearGradient2994-689"
530   - inkscape:collect="always" />
531   - <linearGradient
532   - id="linearGradient2994-689">
533   - <stop
534   - id="stop2570"
535   - offset="0"
536   - style="stop-color:#000000;stop-opacity:1;" />
537   - <stop
538   - id="stop2572"
539   - offset="1"
540   - style="stop-color:#c9c9c9;stop-opacity:1;" />
541   - </linearGradient>
542   - </defs>
543   - <metadata
544   - id="metadata4">
545   - <rdf:RDF>
546   - <cc:Work
547   - rdf:about="">
548   - <dc:format>image/svg+xml</dc:format>
549   - <dc:type
550   - rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
551   - <dc:creator>
552   - <cc:Agent>
553   - <dc:title>Jakub Steiner</dc:title>
554   - </cc:Agent>
555   - </dc:creator>
556   - <dc:source>http://jimmac.musichall.cz</dc:source>
557   - <cc:license
558   - rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
559   - <dc:title>Text Editor</dc:title>
560   - </cc:Work>
561   - <cc:License
562   - rdf:about="http://creativecommons.org/licenses/publicdomain/">
563   - <cc:permits
564   - rdf:resource="http://creativecommons.org/ns#Reproduction" />
565   - <cc:permits
566   - rdf:resource="http://creativecommons.org/ns#Distribution" />
567   - <cc:permits
568   - rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
569   - </cc:License>
570   - </rdf:RDF>
571   - </metadata>
572   - <g
573   - inkscape:groupmode="layer"
574   - inkscape:label="Layer 1"
575   - id="layer1">
576   - <g
577   - id="g6707"
578   - transform="matrix(2.417561e-2,0,0,2.086758e-2,45.12765,40.1536)">
579   - <rect
580   - y="-150.69685"
581   - x="-1559.2523"
582   - height="478.35718"
583   - width="1339.6335"
584   - id="rect6709"
585   - style="opacity:0.40206185;color:black;fill:url(#linearGradient6715-635);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
586   - <path
587   - sodipodi:nodetypes="cccc"
588   - id="path6711"
589   - d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
590   - style="opacity:0.40206185;color:black;fill:url(#radialGradient6717-944);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
591   - <path
592   - style="opacity:0.40206185;color:black;fill:url(#radialGradient6719-778);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
593   - d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
594   - id="path6713"
595   - sodipodi:nodetypes="cccc" />
596   - </g>
597   - <path
598   - sodipodi:nodetypes="ccccccccccc"
599   - id="rect1975"
600   - d="M 7.1638699,4.5063726 L 39.813122,4.5063726 C 40.575699,4.5063726 41.189615,5.0388241 41.189615,5.7002099 C 41.189615,5.7002099 43.590945,39.868907 43.590945,39.868907 C 43.590945,39.868907 43.603403,42.216529 43.603403,42.216529 C 43.603403,42.877915 42.989488,43.410366 42.226911,43.410366 L 4.750081,43.410366 C 3.9875042,43.410366 3.3735887,42.877915 3.3735887,42.216529 L 3.3624173,40.049613 L 5.7873775,5.7002099 C 5.7873775,5.0388241 6.4012931,4.5063726 7.1638699,4.5063726 z "
601   - style="color:#000000;fill:url(#linearGradient2861-627);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2879-751);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
602   - <path
603   - sodipodi:type="arc"
604   - style="opacity:0.31578944;color:#000000;fill:url(#radialGradient3010-591);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
605   - id="path3008"
606   - sodipodi:cx="23.5625"
607   - sodipodi:cy="40.4375"
608   - sodipodi:rx="19.5625"
609   - sodipodi:ry="6.8125"
610   - d="M 43.125 40.4375 A 19.5625 6.8125 0 1 1 4,40.4375 A 19.5625 6.8125 0 1 1 43.125 40.4375 z"
611   - transform="matrix(0.616613,0.000000,0.000000,0.440367,10.61425,13.94266)" />
612   - <rect
613   - ry="0.67937863"
614   - rx="0.67937863"
615   - y="39.868271"
616   - x="3.9770372"
617   - height="3.0714951"
618   - width="39.048077"
619   - id="rect2851"
620   - style="opacity:1;color:#000000;fill:#a4a4a4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
621   - <path
622   - sodipodi:nodetypes="ccccccc"
623   - id="path2853"
624   - d="M 3.9267507,40.442796 C 3.9267507,40.442796 4.0776125,39.912466 4.6307727,39.868272 L 42.195375,39.868272 C 42.949684,39.868272 42.999971,40.619573 42.999971,40.619573 C 42.999971,40.619573 43.02357,39 41.7161,39 L 5.3042159,39 C 4.2984702,39.088388 3.9267507,39.779883 3.9267507,40.442796 z "
625   - style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
626   - <path
627   - sodipodi:nodetypes="ccccccccc"
628   - id="path2915"
629   - d="M 6.25,5.7343749 L 6,10.125 C 6,10.125 6.3125,8.9999999 7,8.9999999 L 40.125,8.9999999 C 40.828125,8.9843749 40.859375,9.3124999 40.984375,9.8281249 C 40.984375,9.8281249 40.734375,5.9531249 40.734375,5.9531249 C 40.703125,5.4062499 40.515625,4.9999999 39.953125,4.9999999 L 7.0625,4.9999999 C 6.609375,4.9999999 6.296875,5.3437499 6.25,5.7343749 z "
630   - style="opacity:1;color:#000000;fill:url(#linearGradient2925-565);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
631   - <path
632   - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.43859649"
633   - d="M 7.8126474,5.5404503 L 38.944983,5.5404503 C 39.66702,5.5404503 40.2483,5.3883462 40.2483,6.014572 C 40.2483,6.014572 42.521973,39.023077 42.521973,39.023077 C 42.521973,39.023077 42.622156,41.732033 42.622156,41.732033 C 42.622156,42.358259 42.48282,42.376269 41.760782,42.376269 L 4.8620444,42.376269 C 4.4493662,42.376269 4.4426114,42.269871 4.4426114,41.864615 L 4.4320338,39.194177 L 6.7280807,6.045822 C 6.7280807,5.4195962 7.09061,5.5404503 7.8126474,5.5404503 z "
634   - id="path2917"
635   - sodipodi:nodetypes="ccccccccccc" />
636   - <g
637   - id="g2950">
638   - <rect
639   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
640   - id="rect2899"
641   - width="2"
642   - height="5"
643   - x="8.5"
644   - y="2.5"
645   - rx="1"
646   - ry="1" />
647   - <rect
648   - ry="1"
649   - rx="1"
650   - y="2.5"
651   - x="12.5"
652   - height="5"
653   - width="2"
654   - id="rect2901"
655   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
656   - <rect
657   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
658   - id="rect2903"
659   - width="2"
660   - height="5"
661   - x="16.5"
662   - y="2.5"
663   - rx="1"
664   - ry="1" />
665   - <rect
666   - ry="1"
667   - rx="1"
668   - y="2.5"
669   - x="20.5"
670   - height="5"
671   - width="2"
672   - id="rect2905"
673   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
674   - <rect
675   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
676   - id="rect2907"
677   - width="2"
678   - height="5"
679   - x="24.5"
680   - y="2.5"
681   - rx="1"
682   - ry="1" />
683   - <rect
684   - ry="1"
685   - rx="1"
686   - y="2.5"
687   - x="28.5"
688   - height="5"
689   - width="2"
690   - id="rect2909"
691   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
692   - <rect
693   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
694   - id="rect2911"
695   - width="2"
696   - height="5"
697   - x="32.5"
698   - y="2.5"
699   - rx="1"
700   - ry="1" />
701   - <rect
702   - ry="1"
703   - rx="1"
704   - y="2.5"
705   - x="36.5"
706   - height="5"
707   - width="2"
708   - id="rect2913"
709   - style="opacity:1;color:#000000;fill:#a5a5a5;fill-opacity:1;fill-rule:evenodd;stroke:#444444;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
710   - </g>
711   - <g
712   - id="g2941">
713   - <rect
714   - style="opacity:0.28070175;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
715   - id="rect2927"
716   - width="29"
717   - height="1"
718   - x="9"
719   - y="12" />
720   - <rect
721   - y="14.981792"
722   - x="9"
723   - height="1"
724   - width="29"
725   - id="rect2929"
726   - style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
727   - <rect
728   - style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
729   - id="rect2931"
730   - width="13"
731   - height="1"
732   - x="9"
733   - y="18.003939" />
734   - <rect
735   - y="22.985731"
736   - x="9"
737   - height="1"
738   - width="29"
739   - id="rect2933"
740   - style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
741   - <rect
742   - style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
743   - id="rect2935"
744   - width="29"
745   - height="1"
746   - x="9"
747   - y="26.007877" />
748   - <rect
749   - y="29.030024"
750   - x="9"
751   - height="1"
752   - width="29"
753   - id="rect2937"
754   - style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
755   - <rect
756   - style="opacity:0.28070176;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
757   - id="rect2939"
758   - width="8"
759   - height="1"
760   - x="9"
761   - y="32.05217" />
762   - </g>
763   - <path
764   - sodipodi:nodetypes="cccccc"
765   - id="path2960"
766   - d="M 17.34116,32.5 L 22.96616,26.875 L 43.059909,17.125 C 46.309909,15.875 48.247409,20.5 45.372409,22.125 L 25.34116,31.5 L 17.34116,32.5 z "
767   - style="opacity:1;color:#000000;fill:#767676;fill-opacity:1;fill-rule:evenodd;stroke:#343434;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
768   - <path
769   - style="opacity:1;color:#000000;fill:url(#linearGradient2972-839);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
770   - d="M 38.330708,20 C 38.330708,20 39.768208,20.09375 40.330708,21.34375 C 40.910201,22.631511 40.330708,24 40.330708,24 L 45.361958,21.53125 C 45.361958,21.53125 46.81399,20.649883 46.018208,18.6875 C 45.233296,16.751923 43.330708,17.53125 43.330708,17.53125 L 38.330708,20 z "
771   - id="path2964"
772   - sodipodi:nodetypes="czcczcc" />
773   - <path
774   - sodipodi:nodetypes="czcczcc"
775   - id="path2962"
776   - d="M 38.330708,20 C 38.330708,20 39.768208,20.09375 40.330708,21.34375 C 40.910201,22.631511 40.330708,24 40.330708,24 L 42.330708,23 C 42.330708,23 43.15774,21.681133 42.549458,20.3125 C 41.924458,18.90625 40.330708,19 40.330708,19 L 38.330708,20 z "
777   - style="opacity:1;color:#000000;fill:url(#linearGradient2980-769);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
778   - <path
779   - sodipodi:nodetypes="cccc"
780   - id="path2982"
781   - d="M 18.768208,31.78125 L 23.268208,27.28125 C 24.768208,28.09375 25.549458,29.4375 25.143208,31 L 18.768208,31.78125 z "
782   - style="opacity:1;color:#000000;fill:url(#radialGradient2990-357);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
783   - <path
784   - sodipodi:nodetypes="cccc"
785   - id="path2992"
786   - d="M 20.111958,30.375 L 18.486958,31.96875 L 20.830708,31.65625 C 21.049458,30.9375 20.643208,30.59375 20.111958,30.375 z "
787   - style="opacity:1;color:#000000;fill:url(#linearGradient3000-327);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
788   - <path
789   - sodipodi:nodetypes="ccccc"
790   - id="path3002"
791   - d="M 23.268208,27.25 L 24.830708,28.5 L 40.218048,21.18133 C 39.773616,20.325286 38.976281,20.096733 38.314669,20.019068 L 23.268208,27.25 z "
792   - style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.36363639;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
793   - <path
794   - sodipodi:nodetypes="ccccc"
795   - id="path3004"
796   - d="M 25.143208,31.0625 L 25.330708,30.3125 L 40.561798,23.1829 C 40.561798,23.1829 40.451638,23.796527 40.345919,23.93225 L 25.143208,31.0625 z "
797   - style="opacity:1;color:#000000;fill:#000000;fill-opacity:0.36363639;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
798   - </g>
799   -</svg>
public/images/control-panel/text-editor-disabled.svg 0 → 120000
... ... @@ -0,0 +1 @@
  1 +../../designs/icons/tango/Tango-mod/scalable/apps/text-editor.svg
0 2 \ No newline at end of file
... ...
public/javascripts/application.js
... ... @@ -45,3 +45,28 @@ function convToValidIdentifier( str, sep ) {
45 45 .replace( /ç/g, "c" )
46 46 .replace( /[^-_a-z0-9.]+/g, sep )
47 47 }
  48 +
  49 +function updateUrlField(name_field, id) {
  50 + url_field = $(id);
  51 + url_field.value = convToValidIdentifier(name_field.value, "-");
  52 + warn_value_change(url_field);
  53 +}
  54 +
  55 +function show_warning(field, message) {
  56 + new Effect.Highlight(field, {duration:3});
  57 + $(message).show();
  58 +}
  59 +
  60 +function hide_warning(field) {
  61 + $(field).hide();
  62 +}
  63 +
  64 +function enable_button(button) {
  65 + button.enable();
  66 + button.removeClassName("disabled");
  67 +}
  68 +
  69 +function disable_button(button) {
  70 + button.disable();
  71 + button.addClassName("disabled");
  72 +}
... ...
public/stylesheets/common.css
... ... @@ -577,3 +577,21 @@ div.pending-tasks {
577 577 .post-date {
578 578 color: #E68A00;
579 579 }
  580 +
  581 +/**** Change confirmation message ****/
  582 +
  583 +.change-confirmation {
  584 + background-color: #ef2929;
  585 + border: 6px solid #a40000;
  586 + padding: 20px;
  587 + margin: 5px 30px 10px 30px;
  588 +}
  589 +
  590 +.change-confirmation div {
  591 + text-align: right;
  592 + padding: 20px 10px 0px 0px;
  593 +}
  594 +
  595 +code input {
  596 + font-family: monospace;
  597 +}
... ...
public/stylesheets/controller_profile_editor.css
... ... @@ -31,22 +31,6 @@
31 31 -moz-border-radius: 3px;
32 32 }
33 33  
34   -#identifier-change-confirmation {
35   - background-color: #ef2929;
36   - border: 6px solid #a40000;
37   - padding: 20px;
38   - margin: 5px 30px 10px 30px;
39   -}
40   -
41   -#identifier-change-confirmation div {
42   - text-align: right;
43   - padding: 20px 10px 0px 0px;
44   -}
45   -
46   -code input {
47   - font-family: monospace;
48   -}
49   -
50 34 a.control-panel-groups { background-image: url(../images/control-panel/system-users.png) }
51 35 .msie6 a.control-panel-groups { background-image: url(../images/control-panel/system-users.gif) }
52 36  
... ...
test/functional/cms_controller_test.rb
... ... @@ -583,7 +583,7 @@ class CmsControllerTest &lt; Test::Unit::TestCase
583 583 should 'record when coming from public view on edit' do
584 584 article = @profile.articles.create!(:name => 'myarticle')
585 585  
586   - @request.expects(:referer).returns('http://colivre.net/testinguser/myarticle')
  586 + @request.expects(:referer).returns('http://colivre.net/testinguser/myarticle').at_least_once
587 587  
588 588 get :edit, :profile => 'testinguser', :id => article.id
589 589 assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => 'public_view' }
... ... @@ -591,7 +591,7 @@ class CmsControllerTest &lt; Test::Unit::TestCase
591 591 end
592 592  
593 593 should 'detect when comming from home page' do
594   - @request.expects(:referer).returns('http://colivre.net/testinguser')
  594 + @request.expects(:referer).returns('http://colivre.net/testinguser').at_least_once
595 595 get :edit, :profile => 'testinguser', :id => @profile.home_page.id
596 596 assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => 'public_view' }
597 597 assert_tag :tag => 'a', :descendant => { :content => 'Cancel' }, :attributes => { :href => /^https?:\/\/colivre.net\/testinguser\/#{@profile.home_page.slug}$/ }
... ... @@ -605,7 +605,7 @@ class CmsControllerTest &lt; Test::Unit::TestCase
605 605 end
606 606  
607 607 should 'record as coming from public view when creating article' do
608   - @request.expects(:referer).returns('http://colivre.net/testinguser/testingusers-home-page')
  608 + @request.expects(:referer).returns('http://colivre.net/testinguser/testingusers-home-page').at_least_once
609 609 get :new, :profile => 'testinguser', :type => 'TextileArticle'
610 610 assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => 'public_view' }
611 611 assert_tag :tag => 'a', :descendant => { :content => 'Cancel' }, :attributes => { :href => 'http://colivre.net/testinguser/testingusers-home-page' }
... ... @@ -712,11 +712,6 @@ class CmsControllerTest &lt; Test::Unit::TestCase
712 712 assert_no_tag :tag => 'div', :descendant => { :tag => 'h4', :content => 'Categorize your article' }
713 713 end
714 714  
715   - should 'not display input name on create blog' do
716   - get :new, :profile => profile.identifier, :type => 'Blog'
717   - assert_no_tag :tag => 'input', :attributes => { :name => 'article[name]', :type => 'text' }
718   - end
719   -
720 715 should 'display posts per page input with default value on edit blog' do
721 716 n = Blog.new.posts_per_page.to_s
722 717 get :new, :profile => profile.identifier, :type => 'Blog'
... ... @@ -789,11 +784,6 @@ class CmsControllerTest &lt; Test::Unit::TestCase
789 784 assert_equal 5, profile.blog.posts_per_page
790 785 end
791 786  
792   - should 'display input title on create blog' do
793   - get :new, :profile => profile.identifier, :type => 'Blog'
794   - assert_tag :tag => 'input', :attributes => { :name => 'article[title]', :type => 'text' }
795   - end
796   -
797 787 should "display 'New article' when create children of folder" do
798 788 a = Folder.new(:name => 'article folder'); profile.articles << a; a.save!
799 789 Article.stubs(:short_description).returns('bli')
... ... @@ -868,7 +858,7 @@ class CmsControllerTest &lt; Test::Unit::TestCase
868 858 should 'record when coming from public view on upload files' do
869 859 folder = Folder.create!(:name => 'testfolder', :profile => profile)
870 860  
871   - @request.expects(:referer).returns("http://colivre.net/#{profile.identifier}/#{folder.slug}")
  861 + @request.expects(:referer).returns("http://colivre.net/#{profile.identifier}/#{folder.slug}").at_least_once
872 862  
873 863 get :upload_files, :profile => profile.identifier, :parent_id => folder.id
874 864 assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => 'public_view' }
... ... @@ -931,14 +921,14 @@ class CmsControllerTest &lt; Test::Unit::TestCase
931 921 end
932 922  
933 923 should "display 'Fetch posts from an external feed' checked if blog has enabled external feed" do
934   - profile.articles << Blog.new(:title => 'test blog', :profile => profile)
  924 + profile.articles << Blog.new(:name => 'test blog', :profile => profile)
935 925 profile.blog.create_external_feed(:address => 'address', :enabled => true)
936 926 get :edit, :profile => profile.identifier, :id => profile.blog.id
937 927 assert_tag :tag => 'input', :attributes => { :name => 'article[external_feed_builder][enabled]', :checked => 'checked' }
938 928 end
939 929  
940 930 should "display 'Fetch posts from an external feed' unchecked if blog has disabled external feed" do
941   - profile.articles << Blog.new(:title => 'test blog', :profile => profile)
  931 + profile.articles << Blog.new(:name => 'test blog', :profile => profile)
942 932 profile.blog.create_external_feed(:address => 'address', :enabled => false)
943 933 get :edit, :profile => profile.identifier, :id => profile.blog.id
944 934 assert_tag :tag => 'input', :attributes => { :name => 'article[external_feed_builder][enabled]', :checked => nil }
... ...
test/functional/content_viewer_controller_test.rb
... ... @@ -719,14 +719,14 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
719 719  
720 720 should 'add meta tag to rss feed on view blog' do
721 721 login_as(profile.identifier)
722   - profile.articles << Blog.new(:title => 'article blog', :profile => profile)
  722 + profile.articles << Blog.new(:name => 'Blog', :profile => profile)
723 723 get :view_page, :profile => profile.identifier, :page => ['blog']
724 724 assert_tag :tag => 'link', :attributes => { :rel => 'alternate', :type => 'application/rss+xml', :title => 'feed', :href => "http://#{environment.default_hostname}/testinguser/blog/feed" }
725 725 end
726 726  
727 727 should 'add meta tag to rss feed on view post blog' do
728 728 login_as(profile.identifier)
729   - profile.articles << Blog.new(:name => 'article folder', :profile => profile)
  729 + profile.articles << Blog.new(:name => 'Blog', :profile => profile)
730 730 profile.blog.posts << TextileArticle.new(:name => 'first post', :parent => profile.blog, :profile => profile)
731 731 get :view_page, :profile => profile.identifier, :page => ['blog', 'first-post']
732 732 assert_tag :tag => 'link', :attributes => { :rel => 'alternate', :type => 'application/rss+xml', :title => 'feed', :href => "http://#{environment.default_hostname}/testinguser/blog/feed" }
... ...
test/functional/tasks_controller_test.rb
... ... @@ -208,8 +208,8 @@ class TasksControllerTest &lt; Test::Unit::TestCase
208 208 @controller.stubs(:profile).returns(c)
209 209 c.affiliate(profile, Profile::Roles.all_roles(c.environment))
210 210 person = create_user('test_user').person
211   - p_blog = Blog.create!(:profile => person)
212   - c_blog1 = Blog.create!(:profile => c)
  211 + p_blog = Blog.create!(:profile => person, :name => 'Blog')
  212 + c_blog1 = Blog.create!(:profile => c, :name => 'Blog')
213 213 c_blog2 = Blog.new(:profile => c); c_blog2.name = 'blog2'; c_blog2.save!
214 214  
215 215 article = person.articles.create!(:name => 'test article', :parent => p_blog)
... ...
test/unit/article_test.rb
... ... @@ -794,4 +794,11 @@ class ArticleTest &lt; Test::Unit::TestCase
794 794 assert a.allow_post_content?(p)
795 795 end
796 796  
  797 + should 'update slug from name' do
  798 + article = Article.create!(:name => 'A test article', :profile => profile)
  799 + assert_equal 'a-test-article', article.slug
  800 + article.name = 'Changed name'
  801 + assert_equal 'changed-name', article.slug
  802 + end
  803 +
797 804 end
... ...
test/unit/blog_archives_block_test.rb
... ... @@ -4,7 +4,7 @@ class BlogArchivesBlockTest &lt; ActiveSupport::TestCase
4 4  
5 5 def setup
6 6 @profile = create_user('flatline').person
7   - @profile.articles << Blog.new(:name => 'blog-test', :profile => @profile)
  7 + @profile.articles << Blog.new(:name => 'Blog One', :profile => @profile)
8 8 end
9 9 attr_reader :profile
10 10  
... ... @@ -34,11 +34,11 @@ class BlogArchivesBlockTest &lt; ActiveSupport::TestCase
34 34 blog = profile.blog
35 35 for i in 1..10 do
36 36 post = TextileArticle.create!(:name => "post #{i} test", :profile => profile, :parent => blog)
37   - post.update_attribute(:published_at, date)
  37 + assert post.update_attribute(:published_at, date)
38 38 end
39 39 block = BlogArchivesBlock.new
40 40 block.stubs(:owner).returns(profile)
41   - assert_tag_in_string block.content, :tag => 'a', :content => 'January (10)', :attributes => {:href => /^http:\/\/.*\/flatline\/blog\?month=01&year=2008$/ }
  41 + assert_tag_in_string block.content, :tag => 'a', :content => 'January (10)', :attributes => {:href => /^http:\/\/.*\/flatline\/blog-one\?month=01&year=2008$/ }
42 42 end
43 43  
44 44 should 'order list of amount posts' do
... ... @@ -77,11 +77,29 @@ class BlogArchivesBlockTest &lt; ActiveSupport::TestCase
77 77 end
78 78  
79 79 should 'not display any content if has no blog' do
80   - profile.stubs(:has_blog?).returns(false)
81   - assert !profile.has_blog?
  80 + profile.blogs.destroy_all
82 81 block = BlogArchivesBlock.new
83 82 block.stubs(:owner).returns(profile)
84 83 assert_nil block.content
85 84 end
86 85  
  86 + should 'has field to configure blog' do
  87 + b = BlogArchivesBlock.new
  88 + assert b.respond_to?(:blog_id)
  89 + assert b.respond_to?(:blog_id=)
  90 + end
  91 +
  92 + should 'show posts from first blog' do
  93 + (blog_one, blog_two) = profile.blogs
  94 + profile.articles << Blog.new(:name => 'Blog Two', :profile => profile)
  95 + for month in 1..3
  96 + TextileArticle.create!(:name => "blog one - post #{month}", :profile => profile, :parent => blog_one)
  97 + TextileArticle.create!(:name => "blog two - post #{month}", :profile => profile, :parent => blog_two)
  98 + end
  99 + block = BlogArchivesBlock.new
  100 + block.stubs(:owner).returns(profile)
  101 + assert_match(/blog-one/m, block.content)
  102 + assert_no_match(/blog-two/m, block.content)
  103 + end
  104 +
87 105 end
... ...
test/unit/blog_test.rb
... ... @@ -139,4 +139,20 @@ class BlogTest &lt; ActiveSupport::TestCase
139 139 end
140 140 end
141 141  
  142 + should 'profile has more then one blog' do
  143 + p = create_user('testuser').person
  144 + Blog.create!(:name => 'Blog test', :profile => p)
  145 + assert_nothing_raised ActiveRecord::RecordInvalid do
  146 + Blog.create!(:name => 'Another Blog', :profile => p)
  147 + end
  148 + end
  149 +
  150 + should 'not update slug from name for existing blog' do
  151 + p = create_user('testuser').person
  152 + blog = Blog.create!(:name => 'Blog test', :profile => p)
  153 + assert_equal 'blog-test', blog.slug
  154 + blog.name = 'Changed name'
  155 + assert_not_equal 'changed-name', blog.slug
  156 + end
  157 +
142 158 end
... ...
test/unit/profile_test.rb
... ... @@ -1393,6 +1393,15 @@ class ProfileTest &lt; Test::Unit::TestCase
1393 1393 assert_equal [c], profile.categories
1394 1394 end
1395 1395  
  1396 + should 'get first blog when has multiple blogs' do
  1397 + p = create_user('testuser').person
  1398 + p.blogs << Blog.new(:profile => p, :name => 'Blog one')
  1399 + p.blogs << Blog.new(:profile => p, :name => 'Blog two')
  1400 + p.blogs << Blog.new(:profile => p, :name => 'Blog three')
  1401 + assert_equal 'Blog one', p.blog.name
  1402 + assert_equal 3, p.blogs.count
  1403 + end
  1404 +
1396 1405 private
1397 1406  
1398 1407 def assert_invalid_identifier(id)
... ...