olelo 0.9.4 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +0 -1
- data/.travis.yml +8 -0
- data/README.creole +31 -11
- data/Rakefile +46 -21
- data/config/aspects.rb +19 -15
- data/lib/olelo/application.rb +2 -3
- data/lib/olelo/extensions.rb +3 -0
- data/lib/olelo/helper.rb +7 -5
- data/lib/olelo/locale.rb +1 -1
- data/lib/olelo/locale.yml +298 -204
- data/lib/olelo/page.rb +9 -1
- data/lib/olelo/plugin.rb +1 -1
- data/lib/olelo/repository.rb +1 -1
- data/lib/olelo/util.rb +3 -0
- data/lib/olelo/version.rb +1 -1
- data/olelo.gemspec +1 -1
- data/plugins/aspects/changelog.rb +7 -4
- data/plugins/aspects/locale.yml +69 -47
- data/plugins/blog/locale.yml +13 -9
- data/plugins/editor/locale.yml +16 -11
- data/plugins/filters/creole.rb +3 -6
- data/plugins/filters/fix_image_links.rb +20 -0
- data/plugins/filters/locale.yml +18 -13
- data/plugins/filters/s5/main.rb +2 -0
- data/plugins/login/locale.yml +6 -4
- data/plugins/repositories/gitrb_repository.rb +1 -1
- data/plugins/repositories/locale.yml +14 -10
- data/plugins/repositories/rugged_repository.rb +2 -3
- data/plugins/security/locale.yml +19 -13
- data/plugins/tags/math.rb +2 -1
- data/plugins/treeview/script.js +2 -2
- data/plugins/treeview/script/init.js +4 -0
- data/plugins/utils/xml.rb +14 -0
- data/static/script.js +296 -256
- data/static/script/02-history.js +1943 -0
- data/static/script/03-history.adapter.jquery.js +77 -0
- data/static/script/{03-jquery.ui.core.js → 04-jquery.ui.core.js} +0 -0
- data/static/script/{04-jquery.ui.widget.js → 05-jquery.ui.widget.js} +0 -0
- data/static/script/{05-jquery.ui.position.js → 06-jquery.ui.position.js} +0 -0
- data/static/script/{06-jquery.ui.menu.js → 07-jquery.ui.menu.js} +0 -0
- data/static/script/{07-jquery.ui.autocomplete.js → 08-jquery.ui.autocomplete.js} +0 -0
- data/static/script/{02-olelo.storage.js → 09-olelo.storage.js} +0 -0
- data/static/script/{08-olelo.i18n.js → 10-olelo.i18n.js} +0 -0
- data/static/script/{09-olelo.unsaved.js → 11-olelo.unsaved.js} +6 -2
- data/static/script/{10-olelo.historytable.js → 12-olelo.historytable.js} +0 -0
- data/static/script/13-olelo.pagination.js +30 -0
- data/static/script/{13-olelo.tabwidget.js → 14-olelo.tabwidget.js} +0 -0
- data/static/script/{14-olelo.timeago.js → 15-olelo.timeago.js} +14 -1
- data/static/script/{15-olelo.underliner.js → 16-olelo.underliner.js} +0 -0
- data/static/script/{16-olelo.ui.combobox.js → 17-olelo.ui.combobox.js} +0 -0
- data/static/script/init.js +10 -10
- data/static/themes/atlantis/screen.scss +11 -10
- data/static/themes/atlantis/style.css +1 -1
- data/test/config_test.rb +9 -0
- data/test/factory_test.rb +1 -1
- data/test/hash_extensions_test.rb +1 -1
- data/test/helper.rb +0 -1
- data/test/hooks_test.rb +1 -2
- data/test/object_extensions_test.rb +1 -2
- data/test/run.rb +12 -0
- data/test/string_extensions_test.rb +1 -1
- data/test/templates_test.rb +1 -3
- data/test/util_test.rb +1 -6
- data/views/compare.slim +4 -5
- data/views/edit.slim +2 -2
- data/views/history.slim +1 -1
- data/views/layout.slim +1 -2
- data/views/not_found.slim +2 -2
- data/views/show.slim +3 -4
- metadata +47 -44
- data/plugins/filters/fix_img_tag.rb +0 -16
- data/static/script/11-olelo.pagination.js +0 -18
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,4 +1,12 @@ | |
| 1 1 | 
             
            rvm:
         | 
| 2 | 
            +
              - 1.9.2
         | 
| 2 3 | 
             
              - 1.9.3
         | 
| 3 4 | 
             
              - ruby-head
         | 
| 4 5 | 
             
              - rbx-19mode
         | 
| 6 | 
            +
            matrix:
         | 
| 7 | 
            +
              allow_failures:
         | 
| 8 | 
            +
                - rvm: rbx-19mode
         | 
| 9 | 
            +
            # HACK: Fix problems with native libraries on ruby-head
         | 
| 10 | 
            +
            before_install:
         | 
| 11 | 
            +
              - gem install rugged -v 0.17.0.b7 -- --with-cflags='--std=gnu99'
         | 
| 12 | 
            +
              - gem install nokogiri redcarpet -- --with-cflags='--std=gnu99'
         | 
    
        data/README.creole
    CHANGED
    
    | @@ -1,5 +1,9 @@ | |
| 1 1 | 
             
            = Ōlelo Wiki
         | 
| 2 2 |  | 
| 3 | 
            +
            [[https://travis-ci.org/minad/olelo|{{https://secure.travis-ci.org/minad/olelo.png?branch=master|Build Status}}]]
         | 
| 4 | 
            +
            [[https://gemnasium.com/minad/olelo|{{https://gemnasium.com/minad/olelo.png?travis|Dependency Status}}]]
         | 
| 5 | 
            +
            [[https://codeclimate.com/github/minad/olelo|{{https://codeclimate.com/badge.png|Code Climate}}]]
         | 
| 6 | 
            +
             | 
| 3 7 | 
             
            Ōlelo is a wiki that stores pages in a [[http://git-scm.org/|Git]] repository, supports many markup styles and has an extensible, hackable architecture!
         | 
| 4 8 | 
             
            If you want to see a demo installation go to http://www.gitwiki.org/.
         | 
| 5 9 |  | 
| @@ -13,6 +17,7 @@ Core features: | |
| 13 17 | 
             
            * Support for hierarchical wikis (directory structure)
         | 
| 14 18 | 
             
            * File upload
         | 
| 15 19 | 
             
            * History, commit and diff view
         | 
| 20 | 
            +
            * Locales, currently supported languages Czech, English, French, German
         | 
| 16 21 |  | 
| 17 22 | 
             
            Features, implemented by plugins:
         | 
| 18 23 | 
             
            * Support for many markup languages (Creole, Markdown, Textile, ...)
         | 
| @@ -22,7 +27,7 @@ Features, implemented by plugins: | |
| 22 27 | 
             
            * Syntax highlighted embedded code blocks
         | 
| 23 28 | 
             
            * Image resizing, SVG to PNG/JPEG conversion
         | 
| 24 29 | 
             
            * Auto-generated table of contents
         | 
| 25 | 
            -
            * Wiki syntax can be extended with tags
         | 
| 30 | 
            +
            * Wiki syntax can be extended with tags (gist, math, footnotes, ...)
         | 
| 26 31 | 
             
            * Editor preview
         | 
| 27 32 | 
             
            * View pages as S5 presentation
         | 
| 28 33 | 
             
            * Privacy features: Access control lists, Private wiki which needs login, readonly wiki
         | 
| @@ -41,7 +46,7 @@ Go to a git repository via command line and start the Ōlelo webserver. | |
| 41 46 | 
             
            $ olelo
         | 
| 42 47 | 
             
            }}}
         | 
| 43 48 |  | 
| 44 | 
            -
            Point your web browser at http://localhost:8080/.
         | 
| 49 | 
            +
            Point your web browser at http://localhost:8080/. This is all you have to do, now you are good to go to use your wiki!
         | 
| 45 50 |  | 
| 46 51 | 
             
            == Installation from source
         | 
| 47 52 |  | 
| @@ -74,25 +79,22 @@ For production purposes, I recommend that you deploy the wiki with [[http://unic | |
| 74 79 | 
             
            $ unicorn path-to/config.ru
         | 
| 75 80 | 
             
            }}}
         | 
| 76 81 |  | 
| 77 | 
            -
            Unicorn is a very flexible ruby application server and Ōlelo runs very well on it. You can adapt the number of Unicorn workers depending on the load you expect. It is
         | 
| 78 | 
            -
            a good idea to observe the Unicorn workers as described in https://github.com/blog/519-unicorn-god and kill missbehaving workers if necessary.
         | 
| 82 | 
            +
            Unicorn is a very flexible ruby application server and Ōlelo runs very well on it. You can adapt the number of Unicorn workers depending on the load you expect. It is a good idea to observe the Unicorn workers as described in https://github.com/blog/519-unicorn-god and kill missbehaving workers if necessary.
         | 
| 79 83 |  | 
| 80 84 | 
             
            == Configuration
         | 
| 81 85 |  | 
| 82 | 
            -
            For deployment you might want to tweak some settings. Ōlelo reads the files config/config.yml.default and config/config.yml in that order.
         | 
| 83 | 
            -
            So just copy the default configuration config/config.yml.default to config/config.yml and make your modifications. If you installed Ōlelo
         | 
| 84 | 
            -
            as gem this is not a good idea since you don't want to fiddle in the gem directory. For this purpose exists the environment variable OLELO_CONFIG which
         | 
| 86 | 
            +
            For deployment you might want to tweak some settings. Ōlelo reads the files 'config/config.yml.default' and 'config/config.yml' in that order. So just copy the default configuration 'config/config.yml.default' to 'config/config.yml' and make your modifications. If you installed Ōlelo as gem this is not a good idea since you don't want to fiddle in the gem directory. For this purpose the environment variable '$OLELO_CONFIG' exists which
         | 
| 85 87 | 
             
            can point to the configuration file that you want to use.
         | 
| 86 88 |  | 
| 87 89 | 
             
            {{{
         | 
| 88 90 | 
             
            export OLELO_CONFIG=/home/olelo/olelo_config.yml
         | 
| 89 91 | 
             
            }}}
         | 
| 90 92 |  | 
| 91 | 
            -
            You can also use the OLELO_CONFIG environment variable if you want to run multiple Ōlelo instances with different configurations.
         | 
| 93 | 
            +
            You can also use the '$OLELO_CONFIG' environment variable if you want to run multiple Ōlelo instances with different configurations, for example to serve different pages from different repositories.
         | 
| 92 94 |  | 
| 93 95 | 
             
            == Dependencies
         | 
| 94 96 |  | 
| 95 | 
            -
            If you  | 
| 97 | 
            +
            If you installed Ōlelo as gem or used Bundler you don't really have to care about the dependencies. The standard installation provides the core dependencies and a good selection of optional dependencies.
         | 
| 96 98 |  | 
| 97 99 | 
             
            Core dependencies:
         | 
| 98 100 | 
             
            * [[http://www.git-scm.com|Git]]
         | 
| @@ -109,15 +111,33 @@ Some dependencies are optional, for example depending on the markup you want to | |
| 109 111 | 
             
            * [[http://nokogiri.org/|Nokogiri for auto-generated table of contents]]
         | 
| 110 112 | 
             
            * [[http://pygments.org/|Pygments for syntax highlighting of code blocks]]
         | 
| 111 113 |  | 
| 114 | 
            +
            == Development
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            === Important concepts
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            * Plugin architecture
         | 
| 119 | 
            +
            * Aspects under 'plugins/aspects' which provide different 'views' for a page
         | 
| 120 | 
            +
            * Filters under 'plugins/filters' which make it possible to build up aspects from a filter chain.
         | 
| 121 | 
            +
              These aspects are configured under 'config/aspects.rb'
         | 
| 122 | 
            +
            * Tags are provided by the 'plugins/tags/main.rb' plugin and can be integrated in a filter chain.
         | 
| 123 | 
            +
              They look like html tags and can be used to extend the wiki syntax.
         | 
| 124 | 
            +
             | 
| 125 | 
            +
            === Tipps
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            * Execute 'rake --tasks' to see the available development tasks
         | 
| 128 | 
            +
            * Activate development mode by setting the option 'production: false' in 'config/config.yml'
         | 
| 129 | 
            +
            * Increase the log verbosity by setting 'log.level: DEBUG' in 'config/config.yml'
         | 
| 130 | 
            +
            * Do not hesitate to create an issue at the [[https://github.com/minad/olelo/issues|issue tracker]]
         | 
| 131 | 
            +
             | 
| 112 132 | 
             
            == Authors
         | 
| 113 133 |  | 
| 114 | 
            -
            Git-Wiki was originally developed by Simon Rozet. The development of Ōlelo to its current state was done by Daniel Mendler and contributors.
         | 
| 115 | 
            -
            The current code base doesn't have much in common with the original Git-Wiki proof-of-concept.
         | 
| 134 | 
            +
            Git-Wiki was originally developed by Simon Rozet. The development of Ōlelo to its current state was done by Daniel Mendler and contributors. The current code base doesn't have much in common with the original Git-Wiki proof-of-concept.
         | 
| 116 135 |  | 
| 117 136 | 
             
            Contributors:
         | 
| 118 137 | 
             
            * Alex Eagle
         | 
| 119 138 | 
             
            * Alex Wall
         | 
| 120 139 | 
             
            * Hrvoje
         | 
| 140 | 
            +
            * Korthaerd
         | 
| 121 141 | 
             
            * Luca Greco
         | 
| 122 142 | 
             
            * Pavel Suchmann
         | 
| 123 143 | 
             
            * Raffael Schmid
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            task default:  | 
| 1 | 
            +
            task default: :test
         | 
| 2 2 |  | 
| 3 3 | 
             
            def shrink_js(t)
         | 
| 4 4 | 
             
              #sh "cat #{t.prerequisites.sort.join(' ')} > #{t.name}"
         | 
| @@ -42,21 +42,14 @@ namespace :gen do | |
| 42 42 | 
             
              task css: %w(static/themes/atlantis/style.css
         | 
| 43 43 | 
             
                              plugins/treeview/treeview.css
         | 
| 44 44 | 
             
                              plugins/utils/pygments.css
         | 
| 45 | 
            -
                              plugins/gallery/gallery.css
         | 
| 45 | 
            +
                              plugins/aspects/gallery/gallery.css
         | 
| 46 46 | 
             
                              plugins/misc/fancybox/jquery.fancybox.css
         | 
| 47 47 | 
             
                              plugins/blog/blog.css)
         | 
| 48 48 | 
             
            end
         | 
| 49 49 |  | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
               | 
| 53 | 
            -
                sh "bacon -q -Ilib:test #{t.prerequisites.join(' ')}"
         | 
| 54 | 
            -
              end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
              desc 'Generate test coverage report'
         | 
| 57 | 
            -
              task rcov: FileList['test/*_test.rb'] do |t|
         | 
| 58 | 
            -
                sh "rcov -Ilib:test #{t.prerequisites.join(' ')}"
         | 
| 59 | 
            -
              end
         | 
| 50 | 
            +
            desc 'Run tests with bacon'
         | 
| 51 | 
            +
            task test: FileList['test/*_test.rb'] do |t|
         | 
| 52 | 
            +
              sh "bacon -q -Ilib:test test/run.rb"
         | 
| 60 53 | 
             
            end
         | 
| 61 54 |  | 
| 62 55 | 
             
            desc 'Cleanup'
         | 
| @@ -67,19 +60,51 @@ task :clean do |t| | |
| 67 60 | 
             
              FileUtils.rm_rf '.wiki/log'
         | 
| 68 61 | 
             
            end
         | 
| 69 62 |  | 
| 70 | 
            -
            desc 'Generate documentation'
         | 
| 71 63 | 
             
            namespace :doc do
         | 
| 72 | 
            -
               | 
| 73 | 
            -
              task : | 
| 74 | 
            -
             | 
| 64 | 
            +
              desc 'Generate documentation'
         | 
| 65 | 
            +
              task :gen    do; sh "yard doc -o doc/api 'lib/**/*.rb' 'plugins/**/*.rb'"; end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              desc 'Start YARD documentation server'
         | 
| 68 | 
            +
              task :server do; sh 'yard server --reload'; end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              desc 'Check YARD documentation'
         | 
| 71 | 
            +
              task :check  do; sh "yardcheck 'lib/**/*.rb' 'plugins/**/*.rb'"; end
         | 
| 72 | 
            +
            end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            namespace :locale do
         | 
| 75 | 
            +
              desc 'Sort locale yaml files'
         | 
| 76 | 
            +
              task :sort do
         | 
| 77 | 
            +
                # You need the i18n_yaml_sorter gem
         | 
| 78 | 
            +
                Dir['**/locale.yml'].each do |file|
         | 
| 79 | 
            +
                  puts "Sorting #{file}"
         | 
| 80 | 
            +
                  system("sort_yaml < #{file} > #{file}.sorted; mv #{file}.sorted #{file}")
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              desc 'Check locales for missing keys'
         | 
| 85 | 
            +
              task :check do
         | 
| 86 | 
            +
                require 'yaml'
         | 
| 87 | 
            +
                Dir['**/locale.yml'].each do |file|
         | 
| 88 | 
            +
                  puts "Checking #{file}"
         | 
| 89 | 
            +
                  translations = YAML.load_file(file)
         | 
| 90 | 
            +
                  puts 'en locale missing' unless translations['en']
         | 
| 91 | 
            +
                  keys = translations['en'].keys
         | 
| 92 | 
            +
                  translations.each do |locale,hash|
         | 
| 93 | 
            +
                    delta = hash.keys - keys
         | 
| 94 | 
            +
                    puts "\tLocale #{locale} has additional keys #{delta.join(' ')}" unless delta.empty?
         | 
| 95 | 
            +
                    delta = keys - hash.keys
         | 
| 96 | 
            +
                    puts "\tLocale #{locale} has missing keys #{delta.join(' ')}" unless delta.empty?
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
              end
         | 
| 75 100 | 
             
            end
         | 
| 76 101 |  | 
| 77 102 | 
             
            namespace :notes do
         | 
| 78 | 
            -
              task :todo      do;  | 
| 79 | 
            -
              task :fixme     do;  | 
| 80 | 
            -
              task :hack      do;  | 
| 81 | 
            -
              task :warning   do;  | 
| 82 | 
            -
              task :important do;  | 
| 103 | 
            +
              task :todo      do; sh('ack T''ODO');      end
         | 
| 104 | 
            +
              task :fixme     do; sh('ack F''IXME');     end
         | 
| 105 | 
            +
              task :hack      do; sh('ack H''ACK');      end
         | 
| 106 | 
            +
              task :warning   do; sh('ack W''ARNING');   end
         | 
| 107 | 
            +
              task :important do; sh('ack I''MPORTANT'); end
         | 
| 83 108 | 
             
            end
         | 
| 84 109 |  | 
| 85 110 | 
             
            desc 'Show annotations'
         | 
    
        data/config/aspects.rb
    CHANGED
    
    | @@ -67,7 +67,8 @@ aspect :page do | |
| 67 67 | 
             
                  remove_comments.tag_shortcuts
         | 
| 68 68 | 
             
                  creole_nowiki.tag { creole!.rubypants }
         | 
| 69 69 | 
             
                end
         | 
| 70 | 
            -
                toc | 
| 70 | 
            +
                fix_image_links.toc
         | 
| 71 | 
            +
                interwiki(map: interwiki_map).link_classifier
         | 
| 71 72 | 
             
              end
         | 
| 72 73 | 
             
            end
         | 
| 73 74 |  | 
| @@ -78,7 +79,8 @@ aspect :s5 do | |
| 78 79 | 
             
              filter do
         | 
| 79 80 | 
             
                remove_comments.tag_shortcuts
         | 
| 80 81 | 
             
                creole_nowiki.tag { creole!.rubypants }
         | 
| 81 | 
            -
                toc | 
| 82 | 
            +
                fix_image_links.toc
         | 
| 83 | 
            +
                interwiki(map: interwiki_map).link_classifier
         | 
| 82 84 | 
             
                html_wrapper!.s5!
         | 
| 83 85 | 
             
              end
         | 
| 84 86 | 
             
            end
         | 
| @@ -90,7 +92,7 @@ aspect :latex do | |
| 90 92 | 
             
              filter do
         | 
| 91 93 | 
             
                remove_comments.tag_shortcuts.creole_nowiki
         | 
| 92 94 | 
             
                tag(static: true) { creole!.rubypants }
         | 
| 93 | 
            -
                 | 
| 95 | 
            +
                interwiki(map: interwiki_map)
         | 
| 94 96 | 
             
                html_wrapper!.xslt!(stylesheet: 'xhtml2latex.xsl')
         | 
| 95 97 | 
             
              end
         | 
| 96 98 | 
             
            end
         | 
| @@ -107,7 +109,8 @@ aspect :page do | |
| 107 109 | 
             
                  remove_comments.tag_shortcuts
         | 
| 108 110 | 
             
                  mediawiki_nowiki.tag { mediawiki!.rubypants }
         | 
| 109 111 | 
             
                end
         | 
| 110 | 
            -
                toc | 
| 112 | 
            +
                fix_image_links.toc
         | 
| 113 | 
            +
                interwiki(map: interwiki_map).link_classifier
         | 
| 111 114 | 
             
              end
         | 
| 112 115 | 
             
            end
         | 
| 113 116 |  | 
| @@ -118,7 +121,8 @@ aspect :s5 do | |
| 118 121 | 
             
              filter do
         | 
| 119 122 | 
             
                remove_comments.tag_shortcuts
         | 
| 120 123 | 
             
                mediawiki_nowiki.tag { mediawiki!.rubypants }
         | 
| 121 | 
            -
                toc | 
| 124 | 
            +
                fix_image_links.toc
         | 
| 125 | 
            +
                interwiki(map: interwiki_map).link_classifier
         | 
| 122 126 | 
             
                html_wrapper!.s5!
         | 
| 123 127 | 
             
              end
         | 
| 124 128 | 
             
            end
         | 
| @@ -130,7 +134,7 @@ aspect :latex do | |
| 130 134 | 
             
              filter do
         | 
| 131 135 | 
             
                remove_comments.tag_shortcuts.mediawiki_nowiki
         | 
| 132 136 | 
             
                tag(static: true) { mediawiki!.rubypants }
         | 
| 133 | 
            -
                 | 
| 137 | 
            +
                interwiki(map: interwiki_map)
         | 
| 134 138 | 
             
                html_wrapper!.xslt!(stylesheet: 'xhtml2latex.xsl')
         | 
| 135 139 | 
             
              end
         | 
| 136 140 | 
             
            end
         | 
| @@ -145,7 +149,7 @@ aspect :page do | |
| 145 149 | 
             
              filter do
         | 
| 146 150 | 
             
                remove_comments.tag_shortcuts.textile_nowiki
         | 
| 147 151 | 
             
                tag(disable: 'html:*') { textile!.rubypants }
         | 
| 148 | 
            -
                 | 
| 152 | 
            +
                fix_image_links.toc
         | 
| 149 153 | 
             
                interwiki(map: interwiki_map).link_classifier
         | 
| 150 154 | 
             
              end
         | 
| 151 155 | 
             
            end
         | 
| @@ -157,7 +161,7 @@ aspect :s5 do | |
| 157 161 | 
             
              filter do
         | 
| 158 162 | 
             
                remove_comments.tag_shortcuts.textile_nowiki
         | 
| 159 163 | 
             
                tag(disable: 'html:*') { textile!.rubypants }
         | 
| 160 | 
            -
                 | 
| 164 | 
            +
                fix_image_links.toc
         | 
| 161 165 | 
             
                interwiki(map: interwiki_map).link_classifier
         | 
| 162 166 | 
             
                html_wrapper!.s5!
         | 
| 163 167 | 
             
              end
         | 
| @@ -170,7 +174,7 @@ aspect :latex do | |
| 170 174 | 
             
              filter do
         | 
| 171 175 | 
             
                remove_comments.tag_shortcuts.textile_nowiki
         | 
| 172 176 | 
             
                tag(static: true, disable: 'html:*') { textile!.rubypants }
         | 
| 173 | 
            -
                 | 
| 177 | 
            +
                interwiki(map: interwiki_map)
         | 
| 174 178 | 
             
                html_wrapper!.xslt!(stylesheet: 'xhtml2latex.xsl')
         | 
| 175 179 | 
             
              end
         | 
| 176 180 | 
             
            end
         | 
| @@ -187,7 +191,7 @@ aspect :page do | |
| 187 191 | 
             
                  remove_comments.tag_shortcuts.markdown_nowiki
         | 
| 188 192 | 
             
                  tag(disable: 'html:*') { markdown! }
         | 
| 189 193 | 
             
                end
         | 
| 190 | 
            -
                 | 
| 194 | 
            +
                fix_image_links.toc
         | 
| 191 195 | 
             
                interwiki(map: interwiki_map).link_classifier
         | 
| 192 196 | 
             
              end
         | 
| 193 197 | 
             
            end
         | 
| @@ -199,7 +203,7 @@ aspect :s5 do | |
| 199 203 | 
             
              filter do
         | 
| 200 204 | 
             
                remove_comments.tag_shortcuts.markdown_nowiki
         | 
| 201 205 | 
             
                tag(disable: 'html:*') { markdown! }
         | 
| 202 | 
            -
                 | 
| 206 | 
            +
                fix_image_links.toc
         | 
| 203 207 | 
             
                interwiki(map: interwiki_map).link_classifier
         | 
| 204 208 | 
             
                html_wrapper!.s5!
         | 
| 205 209 | 
             
              end
         | 
| @@ -212,7 +216,7 @@ aspect :latex do | |
| 212 216 | 
             
              filter do
         | 
| 213 217 | 
             
                remove_comments.tag_shortcuts.markdown_nowiki
         | 
| 214 218 | 
             
                tag(static: true, disable: 'html:*') { markdown! }
         | 
| 215 | 
            -
                 | 
| 219 | 
            +
                interwiki(map: interwiki_map)
         | 
| 216 220 | 
             
                html_wrapper!.xslt!(stylesheet: 'xhtml2latex.xsl')
         | 
| 217 221 | 
             
              end
         | 
| 218 222 | 
             
            end
         | 
| @@ -227,7 +231,7 @@ aspect :page do | |
| 227 231 | 
             
              filter do
         | 
| 228 232 | 
             
                remove_comments.tag_shortcuts
         | 
| 229 233 | 
             
                tag { orgmode!.rubypants }
         | 
| 230 | 
            -
                 | 
| 234 | 
            +
                fix_image_links.toc
         | 
| 231 235 | 
             
                interwiki(map: interwiki_map).link_classifier
         | 
| 232 236 | 
             
              end
         | 
| 233 237 | 
             
            end
         | 
| @@ -239,7 +243,7 @@ aspect :s5 do | |
| 239 243 | 
             
              filter do
         | 
| 240 244 | 
             
                remove_comments.tag_shortcuts
         | 
| 241 245 | 
             
                tag { orgmode!.rubypants }
         | 
| 242 | 
            -
                 | 
| 246 | 
            +
                fix_image_links.toc
         | 
| 243 247 | 
             
                interwiki(map: interwiki_map).link_classifier
         | 
| 244 248 | 
             
                html_wrapper!.s5!
         | 
| 245 249 | 
             
              end
         | 
| @@ -252,7 +256,7 @@ aspect :latex do | |
| 252 256 | 
             
              filter do
         | 
| 253 257 | 
             
                remove_comments.tag_shortcuts
         | 
| 254 258 | 
             
                tag(static: true) { orgmode!.rubypants }
         | 
| 255 | 
            -
                 | 
| 259 | 
            +
                interwiki(map: interwiki_map)
         | 
| 256 260 | 
             
                html_wrapper!.xslt!(stylesheet: 'xhtml2latex.xsl')
         | 
| 257 261 | 
             
              end
         | 
| 258 262 | 
             
            end
         | 
    
        data/lib/olelo/application.rb
    CHANGED
    
    | @@ -154,10 +154,9 @@ module Olelo | |
| 154 154 |  | 
| 155 155 | 
             
                get '/history(/:path)' do
         | 
| 156 156 | 
             
                  per_page = 30
         | 
| 157 | 
            -
                  limit = 90
         | 
| 158 157 | 
             
                  @page = Page.find!(params[:path])
         | 
| 159 158 | 
             
                  @page_nr = [params[:page].to_i, 1].max
         | 
| 160 | 
            -
                  @history = page.history((@page_nr - 1) * per_page,  | 
| 159 | 
            +
                  @history = page.history((@page_nr - 1) * per_page, per_page)
         | 
| 161 160 | 
             
                  @page_count = @page_nr + @history.length / per_page
         | 
| 162 161 | 
             
                  @history = @history[0...per_page]
         | 
| 163 162 | 
             
                  cache_control version: page.version
         | 
| @@ -205,7 +204,7 @@ module Olelo | |
| 205 204 |  | 
| 206 205 | 
             
                get '/edit(/:path)' do
         | 
| 207 206 | 
             
                  @page = Page.find!(params[:path])
         | 
| 208 | 
            -
                  flash.info!(:info_binary.t(page: page.title, type: "#{page.mime.comment} (#{page.mime})")) unless page. | 
| 207 | 
            +
                  flash.info!(:info_binary.t(page: page.title, type: "#{page.mime.comment} (#{page.mime})")) unless page.editable?
         | 
| 209 208 | 
             
                  render :edit
         | 
| 210 209 | 
             
                end
         | 
| 211 210 |  | 
    
        data/lib/olelo/extensions.rb
    CHANGED
    
    
    
        data/lib/olelo/helper.rb
    CHANGED
    
    | @@ -58,6 +58,7 @@ module Olelo | |
| 58 58 |  | 
| 59 59 | 
             
                def pagination(path, page_count, page_nr, options = {})
         | 
| 60 60 | 
             
                  return if page_count <= 1
         | 
| 61 | 
            +
                  unlimited = options.delete(:unlimited)
         | 
| 61 62 | 
             
                  li = []
         | 
| 62 63 | 
             
                  li << if page_nr > 1
         | 
| 63 64 | 
             
                          %{<a href="#{escape_html build_path(path, options.merge(page: page_nr - 1))}">◂</a>}
         | 
| @@ -86,11 +87,12 @@ module Olelo | |
| 86 87 | 
             
                  if max != page_count
         | 
| 87 88 | 
             
                    li << %{<span class="ellipsis"/>} << %{<a href="#{escape_html build_path(path, options.merge(page: page_count))}">#{page_count}</a>}
         | 
| 88 89 | 
             
                  end
         | 
| 89 | 
            -
                   | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 90 | 
            +
                  if page_nr < page_count
         | 
| 91 | 
            +
                    li << %{<span class="ellipsis"/>} if unlimited
         | 
| 92 | 
            +
                    li << %{<a href="#{escape_html build_path(path, options.merge(page: page_nr + 1))}">▸</a>}
         | 
| 93 | 
            +
                  else
         | 
| 94 | 
            +
                    li << %{<span class="disabled">▸</span>}
         | 
| 95 | 
            +
                  end
         | 
| 94 96 | 
             
                  ('<ul class="pagination">' + li.map {|x| "<li>#{x}</li>"}.join + '</ul>').html_safe
         | 
| 95 97 | 
             
                end
         | 
| 96 98 |  | 
    
        data/lib/olelo/locale.rb
    CHANGED
    
    | @@ -41,7 +41,7 @@ module Olelo | |
| 41 41 | 
             
                    if !key.to_s.ends_with?('_plural') && args[:count] && args[:count] != 1
         | 
| 42 42 | 
             
                      translate("#{key}_plural", args)
         | 
| 43 43 | 
             
                    elsif @translations[key]
         | 
| 44 | 
            -
                       | 
| 44 | 
            +
                      @translations[key] % args
         | 
| 45 45 | 
             
                    else
         | 
| 46 46 | 
             
                      args[:fallback] || "##{key}"
         | 
| 47 47 | 
             
                    end
         | 
    
        data/lib/olelo/locale.yml
    CHANGED
    
    | @@ -1,132 +1,139 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
              access_denied:          ' | 
| 3 | 
            -
              actions:                ' | 
| 4 | 
            -
              already_exists:         ' | 
| 1 | 
            +
            cs_CZ:
         | 
| 2 | 
            +
              access_denied:          'Přístup odepřen'
         | 
| 3 | 
            +
              actions:                'Akce'
         | 
| 4 | 
            +
              already_exists:         'Stránka %{page} již existuje'
         | 
| 5 5 | 
             
              attribute_mime:         'Mime-Type'
         | 
| 6 | 
            -
              attribute_no_title:     ' | 
| 7 | 
            -
              attribute_title:        ' | 
| 8 | 
            -
              attributes:             ' | 
| 9 | 
            -
              attributes_edited:      ' | 
| 10 | 
            -
              author:                 ' | 
| 11 | 
            -
              binary_file:            ' | 
| 12 | 
            -
               | 
| 13 | 
            -
               | 
| 14 | 
            -
               | 
| 15 | 
            -
               | 
| 16 | 
            -
               | 
| 17 | 
            -
               | 
| 18 | 
            -
               | 
| 19 | 
            -
               | 
| 20 | 
            -
               | 
| 21 | 
            -
               | 
| 22 | 
            -
               | 
| 23 | 
            -
               | 
| 24 | 
            -
               | 
| 25 | 
            -
               | 
| 26 | 
            -
               | 
| 27 | 
            -
               | 
| 28 | 
            -
               | 
| 29 | 
            -
               | 
| 30 | 
            -
               | 
| 31 | 
            -
               | 
| 32 | 
            -
               | 
| 33 | 
            -
               | 
| 34 | 
            -
               | 
| 35 | 
            -
               | 
| 36 | 
            -
               | 
| 37 | 
            -
               | 
| 38 | 
            -
               | 
| 39 | 
            -
               | 
| 40 | 
            -
               | 
| 41 | 
            -
               | 
| 42 | 
            -
               | 
| 43 | 
            -
               | 
| 44 | 
            -
               | 
| 45 | 
            -
               | 
| 46 | 
            -
               | 
| 47 | 
            -
               | 
| 48 | 
            -
               | 
| 49 | 
            -
               | 
| 50 | 
            -
               | 
| 51 | 
            -
               | 
| 52 | 
            -
               | 
| 53 | 
            -
               | 
| 54 | 
            -
               | 
| 55 | 
            -
               | 
| 56 | 
            -
               | 
| 57 | 
            -
               | 
| 58 | 
            -
               | 
| 59 | 
            -
               | 
| 60 | 
            -
               | 
| 61 | 
            -
               | 
| 62 | 
            -
               | 
| 63 | 
            -
               | 
| 64 | 
            -
               | 
| 65 | 
            -
               | 
| 66 | 
            -
               | 
| 6 | 
            +
              attribute_no_title:     'Skrýt titulek'
         | 
| 7 | 
            +
              attribute_title:        'Titulek'
         | 
| 8 | 
            +
              attributes:             'Atributy'
         | 
| 9 | 
            +
              attributes_edited:      'Atributy stránky %{page} editovány'
         | 
| 10 | 
            +
              author:                 'Autor'
         | 
| 11 | 
            +
              binary_file:            'Binární soubor'
         | 
| 12 | 
            +
              cancel:                 'Zrušit'
         | 
| 13 | 
            +
              change_password:        'Změnit heslo'
         | 
| 14 | 
            +
              changes:                'Změny'
         | 
| 15 | 
            +
              changes_of:             'Změny stránky %{page}'
         | 
| 16 | 
            +
              changes_saved:          'Změny uloženy'
         | 
| 17 | 
            +
              comment:                'Komentář'
         | 
| 18 | 
            +
              compare:                'Porovnat %{name}'
         | 
| 19 | 
            +
              confirm_password:       'Potvrdit heslo'
         | 
| 20 | 
            +
              create_page:            'Vytvořit stránku %{page}'
         | 
| 21 | 
            +
              create_redirect:        'Vytvořit přesměrování'
         | 
| 22 | 
            +
              date:                   'Datum'
         | 
| 23 | 
            +
              delete:                 'Smazat'
         | 
| 24 | 
            +
              delete_page:            'Smazat stránku %{page}'
         | 
| 25 | 
            +
              deleted:                'Smazáno'
         | 
| 26 | 
            +
              description:            'Popis'
         | 
| 27 | 
            +
              destination:            'Cíl'
         | 
| 28 | 
            +
              edit:                   'Editovat'
         | 
| 29 | 
            +
              edit_page:              'Editace stránky %{page}'
         | 
| 30 | 
            +
              edit_page_section:      'Editovat %{page} (Sekci)'
         | 
| 31 | 
            +
              email:                  'e-mail'
         | 
| 32 | 
            +
              empty_password:         'Prázdné heslo'
         | 
| 33 | 
            +
              error_occurred:         'Ouvej! Vyskytla se chyba.'
         | 
| 34 | 
            +
              file:                   'Soubor'
         | 
| 35 | 
            +
              groups:                 'Skupiny'
         | 
| 36 | 
            +
              head:                   'Nejnovější'
         | 
| 37 | 
            +
              history:                'Historie'
         | 
| 38 | 
            +
              history_of:             'Historie stránky %{page}'
         | 
| 39 | 
            +
              info_binary:            'Stránka %{page} je binární typ %{type} a nemůže být editována jako textový soubor.'
         | 
| 40 | 
            +
              invalid_email:          'e-mail je neplatný'
         | 
| 41 | 
            +
              invalid_mime_type:      'mime-type je neplatný'
         | 
| 42 | 
            +
              invalid_name:           'Jméno je neplatné'
         | 
| 43 | 
            +
              invalid_path:           'Neplatná cesta'
         | 
| 44 | 
            +
              last_modified:          'Poslední modifikace'
         | 
| 45 | 
            +
              login:                  'Přihlášení'
         | 
| 46 | 
            +
              logout:                 'Odhlášení'
         | 
| 47 | 
            +
              menu_actions_edit:      'Editovat'
         | 
| 48 | 
            +
              menu_actions_edit_delete: 'Smazat'
         | 
| 49 | 
            +
              menu_actions_edit_move: 'Přesunout'
         | 
| 50 | 
            +
              menu_actions_edit_new:  'Nová stránka'
         | 
| 51 | 
            +
              menu_actions_history:   'Historie'
         | 
| 52 | 
            +
              menu_actions_history_head: 'Aktuální'
         | 
| 53 | 
            +
              menu_actions_history_newer: 'Novější'
         | 
| 54 | 
            +
              menu_actions_history_older: 'Starší'
         | 
| 55 | 
            +
              menu_actions_view:      'Zobrazit'
         | 
| 56 | 
            +
              move:                   'Přesunout'
         | 
| 57 | 
            +
              move_page:              'Přesunout stránku %{page}'
         | 
| 58 | 
            +
              name:                   'Jméno'
         | 
| 59 | 
            +
              new_page:               'Nová stránka'
         | 
| 60 | 
            +
              no_changes:             'Žádné změny'
         | 
| 61 | 
            +
              not_found_text:         'Pardon, stránka, kterou hledáte, nebyla nalezena.'
         | 
| 62 | 
            +
              old_password:           'Staré heslo'
         | 
| 63 | 
            +
              page:                   'Stránka'
         | 
| 64 | 
            +
              page_deleted:           'Stránka %{page} smazána.'
         | 
| 65 | 
            +
              page_edited:            'Stránka %{page} editována'#
         | 
| 66 | 
            +
              not_found_title:        '404 Not found'
         | 
| 67 | 
            +
              page_moved:             'Stránka %{page} přesunuta do %{destination}.'
         | 
| 68 | 
            +
              page_uploaded:          'Stránka %{page} nahrána'
         | 
| 69 | 
            +
              parents:                'Rodiče'
         | 
| 70 | 
            +
              password:               'Heslo'
         | 
| 71 | 
            +
              passwords_do_not_match: 'Hesla se neshodují'
         | 
| 72 | 
            +
              path:                   'Cesta'
         | 
| 73 | 
            +
              profile_title:          'Profil uživatele %{user}'
         | 
| 74 | 
            +
              really_delete:          'Opravdu smazat?'
         | 
| 75 | 
            +
              reserved_path:          'Cesta je rezervována'
         | 
| 67 76 | 
             
              reset:                  'Reset'
         | 
| 68 | 
            -
              root:                   ' | 
| 69 | 
            -
               | 
| 70 | 
            -
               | 
| 71 | 
            -
               | 
| 72 | 
            -
               | 
| 73 | 
            -
               | 
| 74 | 
            -
               | 
| 75 | 
            -
              signup:                 'Sign up'
         | 
| 76 | 
            -
              summary:                'Summary'
         | 
| 77 | 
            +
              root:                   'Hlavní strana'
         | 
| 78 | 
            +
              save:                   'Uložit'
         | 
| 79 | 
            +
              save_and_close:         'Uložit a zavřít'
         | 
| 80 | 
            +
              search:                 'Hledat'
         | 
| 81 | 
            +
              settings:               'Nastavení'
         | 
| 82 | 
            +
              signup:                 'Registrovat se'
         | 
| 83 | 
            +
              summary:                'Souhrn'
         | 
| 77 84 | 
             
              text:                   'Text'
         | 
| 78 | 
            -
              title:                  ' | 
| 79 | 
            -
              tree:                   ' | 
| 80 | 
            -
              type_select:            ' | 
| 81 | 
            -
              type_stringlist:        ' | 
| 82 | 
            -
               | 
| 83 | 
            -
               | 
| 84 | 
            -
              user:                   ' | 
| 85 | 
            -
              user_already_exists:    ' | 
| 86 | 
            -
              version:                ' | 
| 87 | 
            -
               | 
| 88 | 
            -
               | 
| 89 | 
            -
              wrong_password:         ' | 
| 85 | 
            +
              title:                  'Titulek'
         | 
| 86 | 
            +
              tree:                   'Strom'
         | 
| 87 | 
            +
              type_select:            'Vybrat hodnotu'
         | 
| 88 | 
            +
              type_stringlist:        'Řetězce oddělené čárkou'
         | 
| 89 | 
            +
              upload:                 'Nahrát'
         | 
| 90 | 
            +
              upload_file:            'Nahrát soubor'
         | 
| 91 | 
            +
              user:                   'Uživatel'
         | 
| 92 | 
            +
              user_already_exists:    'Uživatel %{name} již existuje'
         | 
| 93 | 
            +
              version:                'Verze'
         | 
| 94 | 
            +
              version_by:             'Verze %{version} od %{author}, %{date}'
         | 
| 95 | 
            +
              version_conflict:       'Detekován konflikt verzí'
         | 
| 96 | 
            +
              wrong_password:         'Chybné heslo'
         | 
| 97 | 
            +
              wrong_user_or_pw:       'Chybné jméno uživatele nebo heslo'
         | 
| 90 98 | 
             
            de:
         | 
| 91 99 | 
             
              access_denied:          'Zugriff verweigert'
         | 
| 92 100 | 
             
              actions:                'Aktionen'
         | 
| 93 | 
            -
              already_exists:         ' | 
| 101 | 
            +
              already_exists:         '%{page} existiert bereits'
         | 
| 94 102 | 
             
              attribute_mime:         'Mime-Typ'
         | 
| 95 103 | 
             
              attribute_no_title:     'Titel deaktivieren'
         | 
| 96 104 | 
             
              attribute_title:        'Titel'
         | 
| 97 105 | 
             
              attributes:             'Attribute'
         | 
| 98 | 
            -
              attributes_edited:      'Attribute von  | 
| 106 | 
            +
              attributes_edited:      'Attribute von %{page} bearbeitet'
         | 
| 99 107 | 
             
              author:                 'Autor'
         | 
| 100 108 | 
             
              binary_file:            'Binärdatei'
         | 
| 101 | 
            -
              by:                     'von'
         | 
| 102 109 | 
             
              cancel:                 'Abbrechen'
         | 
| 103 110 | 
             
              change_password:        'Passwort ändern'
         | 
| 104 111 | 
             
              changes:                'Änderungen'
         | 
| 105 | 
            -
              changes_of:             'Änderungen von  | 
| 112 | 
            +
              changes_of:             'Änderungen von %{page}'
         | 
| 106 113 | 
             
              changes_saved:          'Änderungen gespeichert'
         | 
| 107 114 | 
             
              comment:                'Kommentar'
         | 
| 108 | 
            -
              compare:                'Vergleiche  | 
| 115 | 
            +
              compare:                'Vergleiche %{name}'
         | 
| 109 116 | 
             
              confirm_password:       'Bestätige Passwort'
         | 
| 110 | 
            -
               | 
| 111 | 
            -
              create_page:            'Neue #{page}'
         | 
| 117 | 
            +
              create_page:            'Neue %{page}'
         | 
| 112 118 | 
             
              create_redirect:        'Weiterleitung'
         | 
| 113 119 | 
             
              date:                   'Datum'
         | 
| 114 120 | 
             
              delete:                 'Löschen'
         | 
| 121 | 
            +
              delete_page:            'Lösche %{page}'
         | 
| 115 122 | 
             
              deleted:                'Gelöscht'
         | 
| 116 | 
            -
              delete_page:            'Lösche #{page}'
         | 
| 117 123 | 
             
              description:            'Beschreibung'
         | 
| 118 124 | 
             
              destination:            'Ziel'
         | 
| 119 125 | 
             
              edit:                   'Bearbeiten'
         | 
| 120 | 
            -
              edit_page:              'Bearbeite  | 
| 121 | 
            -
              edit_page_section:      'Bearbeite  | 
| 126 | 
            +
              edit_page:              'Bearbeite %{page}'
         | 
| 127 | 
            +
              edit_page_section:      'Bearbeite %{page} (Bereich)'
         | 
| 122 128 | 
             
              email:                  'E-Mail'
         | 
| 123 129 | 
             
              empty_password:         'Leeres Passwort'
         | 
| 124 | 
            -
              info_binary:            '#{page} ist eine Datei mit dem Typ #{type} und kann nicht wie eine Textdatei bearbeitet werden.'
         | 
| 125 130 | 
             
              error_occurred:         'Hoppla! Es ist ein Fehler aufgetreten.'
         | 
| 126 131 | 
             
              file:                   'Datei'
         | 
| 127 132 | 
             
              groups:                 'Gruppen'
         | 
| 133 | 
            +
              head:                   'Kopf'
         | 
| 128 134 | 
             
              history:                'Historie'
         | 
| 129 | 
            -
              history_of:             'Historie von  | 
| 135 | 
            +
              history_of:             'Historie von %{page}'
         | 
| 136 | 
            +
              info_binary:            '%{page} ist eine Datei mit dem Typ %{type} und kann nicht wie eine Textdatei bearbeitet werden.'
         | 
| 130 137 | 
             
              invalid_email:          'E-Mail ist ungültig'
         | 
| 131 138 | 
             
              invalid_mime_type:      'Mime-Typ ist ungültig'
         | 
| 132 139 | 
             
              invalid_name:           'Name ist ungültig'
         | 
| @@ -143,26 +150,28 @@ de: | |
| 143 150 | 
             
              menu_actions_history_older: 'Älter'
         | 
| 144 151 | 
             
              menu_actions_view:      'Ansicht'
         | 
| 145 152 | 
             
              move:                   'Verschieben'
         | 
| 146 | 
            -
              move_page:              'Verschiebe  | 
| 153 | 
            +
              move_page:              'Verschiebe %{page}'
         | 
| 147 154 | 
             
              name:                   'Name'
         | 
| 148 155 | 
             
              new_page:               'Neue Seite'
         | 
| 149 156 | 
             
              no_changes:             'Keine Änderungen'
         | 
| 157 | 
            +
              not_found_text:         'Die Seite wurde leider nicht gefunden.'
         | 
| 158 | 
            +
              not_found_title:        '404 Nicht gefunden'
         | 
| 150 159 | 
             
              old_password:           'Altes Passwort'
         | 
| 151 160 | 
             
              page:                   'Seite'
         | 
| 152 | 
            -
               | 
| 153 | 
            -
               | 
| 154 | 
            -
               | 
| 161 | 
            +
              page_deleted:           '%{page} gelöscht.'
         | 
| 162 | 
            +
              page_edited:            '%{page} bearbeitet'
         | 
| 163 | 
            +
              page_moved:             '%{page} verschoben nach %{destination}.'
         | 
| 164 | 
            +
              page_uploaded:          'Seite %{page} hochgeladen'
         | 
| 165 | 
            +
              parents:                'Eltern'
         | 
| 155 166 | 
             
              password:               'Passwort'
         | 
| 156 167 | 
             
              passwords_do_not_match: 'Passwörter stimmen nicht überein'
         | 
| 157 | 
            -
              parents:                'Eltern'
         | 
| 158 168 | 
             
              path:                   'Pfad'
         | 
| 159 | 
            -
               | 
| 169 | 
            +
              powered_by:             'Powered by <a href="https://github.com/minad/olelo">Ōlelo</a>'
         | 
| 170 | 
            +
              profile_title:          'Profil von %{user}'
         | 
| 160 171 | 
             
              really_delete:          'Wirklich löschen?'
         | 
| 161 172 | 
             
              reserved_path:          'Pfad ist reserviert'
         | 
| 162 173 | 
             
              reset:                  'Zurücksetzen'
         | 
| 163 174 | 
             
              root:                   'Root'
         | 
| 164 | 
            -
              page_deleted:           '#{page} gelöscht.'
         | 
| 165 | 
            -
              page_moved:             '#{page} verschoben nach #{destination}.'
         | 
| 166 175 | 
             
              save:                   'Speichern'
         | 
| 167 176 | 
             
              save_and_close:         'Speichern & Schließen'
         | 
| 168 177 | 
             
              search:                 'Suche'
         | 
| @@ -171,111 +180,196 @@ de: | |
| 171 180 | 
             
              summary:                'Zusammenfassung'
         | 
| 172 181 | 
             
              text:                   'Text'
         | 
| 173 182 | 
             
              title:                  'Titel'
         | 
| 183 | 
            +
              tree:                   'Baum'
         | 
| 174 184 | 
             
              type_select:            'Wert auswählen'
         | 
| 175 185 | 
             
              type_stringlist:        'Durch Komma getrennte Strings'
         | 
| 176 | 
            -
              tree:                   'Baum'
         | 
| 177 | 
            -
              upload_file:            'Datei hochladen'
         | 
| 178 186 | 
             
              upload:                 'Hochladen'
         | 
| 187 | 
            +
              upload_file:            'Datei hochladen'
         | 
| 179 188 | 
             
              user:                   'Benutzer'
         | 
| 180 | 
            -
              user_already_exists:    'Benutzer  | 
| 189 | 
            +
              user_already_exists:    'Benutzer %{name} existiert bereits'
         | 
| 181 190 | 
             
              version:                'Version'
         | 
| 191 | 
            +
              version_by:             'Version %{version} von %{author}, %{date}'
         | 
| 182 192 | 
             
              version_conflict:       'Versionskonflikt aufgetreten'
         | 
| 183 | 
            -
              wrong_user_or_pw:       'Falscher Benutzername oder falsches Passwort'
         | 
| 184 193 | 
             
              wrong_password:         'Falsches Passwort'
         | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 187 | 
            -
               | 
| 188 | 
            -
               | 
| 194 | 
            +
              wrong_user_or_pw:       'Falscher Benutzername oder falsches Passwort'
         | 
| 195 | 
            +
            en:
         | 
| 196 | 
            +
              access_denied:          'Access denied'
         | 
| 197 | 
            +
              actions:                'Actions'
         | 
| 198 | 
            +
              already_exists:         '%{page} exists already'
         | 
| 189 199 | 
             
              attribute_mime:         'Mime-Type'
         | 
| 190 | 
            -
              attribute_no_title:     ' | 
| 191 | 
            -
              attribute_title:        ' | 
| 192 | 
            -
              attributes:             ' | 
| 193 | 
            -
              attributes_edited:      ' | 
| 194 | 
            -
              author:                 ' | 
| 195 | 
            -
              binary_file:            ' | 
| 196 | 
            -
               | 
| 197 | 
            -
               | 
| 198 | 
            -
               | 
| 199 | 
            -
               | 
| 200 | 
            -
               | 
| 201 | 
            -
               | 
| 202 | 
            -
               | 
| 203 | 
            -
               | 
| 204 | 
            -
               | 
| 205 | 
            -
               | 
| 206 | 
            -
               | 
| 207 | 
            -
               | 
| 208 | 
            -
               | 
| 209 | 
            -
               | 
| 210 | 
            -
               | 
| 211 | 
            -
               | 
| 212 | 
            -
               | 
| 213 | 
            -
               | 
| 214 | 
            -
               | 
| 215 | 
            -
               | 
| 216 | 
            -
               | 
| 217 | 
            -
               | 
| 218 | 
            -
               | 
| 219 | 
            -
               | 
| 220 | 
            -
               | 
| 221 | 
            -
               | 
| 222 | 
            -
               | 
| 223 | 
            -
               | 
| 224 | 
            -
               | 
| 225 | 
            -
               | 
| 226 | 
            -
               | 
| 227 | 
            -
               | 
| 228 | 
            -
               | 
| 229 | 
            -
               | 
| 230 | 
            -
               | 
| 231 | 
            -
               | 
| 232 | 
            -
               | 
| 233 | 
            -
               | 
| 234 | 
            -
               | 
| 235 | 
            -
               | 
| 236 | 
            -
               | 
| 237 | 
            -
               | 
| 238 | 
            -
               | 
| 239 | 
            -
               | 
| 240 | 
            -
               | 
| 241 | 
            -
               | 
| 242 | 
            -
               | 
| 243 | 
            -
               | 
| 244 | 
            -
               | 
| 245 | 
            -
               | 
| 246 | 
            -
               | 
| 247 | 
            -
               | 
| 248 | 
            -
               | 
| 249 | 
            -
               | 
| 250 | 
            -
               | 
| 251 | 
            -
               | 
| 252 | 
            -
               | 
| 253 | 
            -
              passwords_do_not_match: 'Hesla se neshodují'
         | 
| 254 | 
            -
              parents:                'Rodiče'
         | 
| 255 | 
            -
              path:                   'Cesta'
         | 
| 256 | 
            -
              profile_title:          'Profil uživatele #{user}'
         | 
| 257 | 
            -
              really_delete:          'Opravdu smazat?'
         | 
| 258 | 
            -
              reserved_path:          'Cesta je rezervována'
         | 
| 200 | 
            +
              attribute_no_title:     'Disable title'
         | 
| 201 | 
            +
              attribute_title:        'Title'
         | 
| 202 | 
            +
              attributes:             'Attributes'
         | 
| 203 | 
            +
              attributes_edited:      'Attributes of %{page} edited'
         | 
| 204 | 
            +
              author:                 'Author'
         | 
| 205 | 
            +
              binary_file:            'Binary file'
         | 
| 206 | 
            +
              cancel:                 'Cancel'
         | 
| 207 | 
            +
              change_password:        'Change password'
         | 
| 208 | 
            +
              changes:                'Changes'
         | 
| 209 | 
            +
              changes_of:             'Changes of %{page}'
         | 
| 210 | 
            +
              changes_saved:          'Changes saved'
         | 
| 211 | 
            +
              comment:                'Comment'
         | 
| 212 | 
            +
              compare:                'Compare %{name}: %{from} → %{to}'
         | 
| 213 | 
            +
              confirm_password:       'Confirm password'
         | 
| 214 | 
            +
              create_page:            'Create %{page}'
         | 
| 215 | 
            +
              create_redirect:        'Create redirect'
         | 
| 216 | 
            +
              date:                   'Date'
         | 
| 217 | 
            +
              delete:                 'Delete'
         | 
| 218 | 
            +
              delete_page:            'Delete %{page}'
         | 
| 219 | 
            +
              deleted:                'Deleted'
         | 
| 220 | 
            +
              description:            'Description'
         | 
| 221 | 
            +
              destination:            'Destination'
         | 
| 222 | 
            +
              edit:                   'Edit'
         | 
| 223 | 
            +
              edit_page:              'Editing %{page}'
         | 
| 224 | 
            +
              edit_page_section:      'Editing %{page} (Section)'
         | 
| 225 | 
            +
              email:                  'E-Mail'
         | 
| 226 | 
            +
              empty_password:         'Empty password'
         | 
| 227 | 
            +
              error_occurred:         'Oh snap! An error occurred.'
         | 
| 228 | 
            +
              file:                   'File'
         | 
| 229 | 
            +
              groups:                 'Groups'
         | 
| 230 | 
            +
              head:                   'Head'
         | 
| 231 | 
            +
              history:                'History'
         | 
| 232 | 
            +
              history_of:             'History of %{page}'
         | 
| 233 | 
            +
              info_binary:            '%{page} is a binary %{type} and cannot be edited like a text file.'
         | 
| 234 | 
            +
              invalid_email:          'E-Mail is invalid'
         | 
| 235 | 
            +
              invalid_mime_type:      'Invalid mime type'
         | 
| 236 | 
            +
              invalid_name:           'Name is invalid'
         | 
| 237 | 
            +
              invalid_path:           'Invalid path'
         | 
| 238 | 
            +
              last_modified:          'Last modified'
         | 
| 239 | 
            +
              login:                  'Login'
         | 
| 240 | 
            +
              logout:                 'Logout'
         | 
| 241 | 
            +
              menu_actions_edit_new:  'New Page'
         | 
| 242 | 
            +
              move:                   'Move'
         | 
| 243 | 
            +
              move_page:              'Move %{page}'
         | 
| 244 | 
            +
              name:                   'Name'
         | 
| 245 | 
            +
              new_page:               'New Page'
         | 
| 246 | 
            +
              no_changes:             'No changes'
         | 
| 247 | 
            +
              not_found_text:         'Sorry, the page you were looking for was not found.'
         | 
| 248 | 
            +
              not_found_title:        '404 Not found'
         | 
| 249 | 
            +
              old_password:           'Old password'
         | 
| 250 | 
            +
              page:                   'Page'
         | 
| 251 | 
            +
              page_deleted:           '%{page} deleted.'
         | 
| 252 | 
            +
              page_edited:            '%{page} edited'
         | 
| 253 | 
            +
              page_moved:             '%{page} moved to %{destination}.'
         | 
| 254 | 
            +
              page_uploaded:          'Page %{page} uploaded'
         | 
| 255 | 
            +
              parents:                'Parents'
         | 
| 256 | 
            +
              password:               'Password'
         | 
| 257 | 
            +
              passwords_do_not_match: 'Passwords do not match'
         | 
| 258 | 
            +
              path:                   'Path'
         | 
| 259 | 
            +
              powered_by:             'Powered by <a href="https://github.com/minad/olelo">Ōlelo</a>'
         | 
| 260 | 
            +
              profile_title:          'Profile of %{user}'
         | 
| 261 | 
            +
              really_delete:          'Really delete?'
         | 
| 262 | 
            +
              reserved_path:          'Path is reserved'
         | 
| 259 263 | 
             
              reset:                  'Reset'
         | 
| 260 | 
            -
              root:                   ' | 
| 261 | 
            -
               | 
| 262 | 
            -
               | 
| 263 | 
            -
               | 
| 264 | 
            -
               | 
| 265 | 
            -
               | 
| 266 | 
            -
               | 
| 267 | 
            -
              signup:                 'Registrovat se'
         | 
| 268 | 
            -
              summary:                'Souhrn'
         | 
| 264 | 
            +
              root:                   'Root'
         | 
| 265 | 
            +
              save:                   'Save'
         | 
| 266 | 
            +
              save_and_close:         'Save & Close'
         | 
| 267 | 
            +
              search:                 'Search'
         | 
| 268 | 
            +
              settings:               'Settings'
         | 
| 269 | 
            +
              signup:                 'Sign up'
         | 
| 270 | 
            +
              summary:                'Summary'
         | 
| 269 271 | 
             
              text:                   'Text'
         | 
| 270 | 
            -
              title:                  ' | 
| 271 | 
            -
              tree:                   ' | 
| 272 | 
            -
              type_select:            ' | 
| 273 | 
            -
              type_stringlist:        ' | 
| 274 | 
            -
               | 
| 275 | 
            -
               | 
| 276 | 
            -
              user:                   ' | 
| 277 | 
            -
              user_already_exists:    ' | 
| 278 | 
            -
              version:                ' | 
| 279 | 
            -
               | 
| 280 | 
            -
               | 
| 281 | 
            -
              wrong_password:         ' | 
| 272 | 
            +
              title:                  'Title'
         | 
| 273 | 
            +
              tree:                   'Tree'
         | 
| 274 | 
            +
              type_select:            'Select value'
         | 
| 275 | 
            +
              type_stringlist:        'Comma-separated strings'
         | 
| 276 | 
            +
              upload:                 'Upload'
         | 
| 277 | 
            +
              upload_file:            'Upload file'
         | 
| 278 | 
            +
              user:                   'User'
         | 
| 279 | 
            +
              user_already_exists:    'User %{name} already exists'
         | 
| 280 | 
            +
              version:                'Version'
         | 
| 281 | 
            +
              version_by:             'Version %{version} by %{author}, %{date}'
         | 
| 282 | 
            +
              version_conflict:       'Version conflict detected'
         | 
| 283 | 
            +
              wrong_password:         'Wrong password'
         | 
| 284 | 
            +
              wrong_user_or_pw:       'Wrong username or password'
         | 
| 285 | 
            +
            fr:
         | 
| 286 | 
            +
              access_denied:          "Accès refusé"
         | 
| 287 | 
            +
              actions:                "Actions"
         | 
| 288 | 
            +
              already_exists:         "%{page} existe déjà"
         | 
| 289 | 
            +
              attribute_mime:         "Type MIME"
         | 
| 290 | 
            +
              attribute_no_title:     "Désactiver le titre"
         | 
| 291 | 
            +
              attribute_title:        "Titre"
         | 
| 292 | 
            +
              attributes:             "Attributs"
         | 
| 293 | 
            +
              attributes_edited:      "Attributs de %{page} modifiés"
         | 
| 294 | 
            +
              author:                 "Auteur"
         | 
| 295 | 
            +
              binary_file:            "Fichier binaire"
         | 
| 296 | 
            +
              cancel:                 "Cancel"
         | 
| 297 | 
            +
              change_password:        "Changer de mot de passe"
         | 
| 298 | 
            +
              changes:                "Changement"
         | 
| 299 | 
            +
              changes_of:             "Chamgements de %{page}"
         | 
| 300 | 
            +
              changes_saved:          "Changement enregistrés"
         | 
| 301 | 
            +
              comment:                "Commentaire"
         | 
| 302 | 
            +
              compare:                "Comparer %{name}"
         | 
| 303 | 
            +
              confirm_password:       "Confirmer le mot de passe"
         | 
| 304 | 
            +
              create_page:            "Créer %{page}"
         | 
| 305 | 
            +
              create_redirect:        "Créer une redirection"
         | 
| 306 | 
            +
              date:                   "Date"
         | 
| 307 | 
            +
              delete:                 "Effacer"
         | 
| 308 | 
            +
              delete_page:            "Effacer %{page}"
         | 
| 309 | 
            +
              deleted:                "Supprimé"
         | 
| 310 | 
            +
              description:            "Description"
         | 
| 311 | 
            +
              destination:            "Destination"
         | 
| 312 | 
            +
              edit:                   "Éditer"
         | 
| 313 | 
            +
              edit_page:              "Modifier %{page}"
         | 
| 314 | 
            +
              edit_page_section:      "Modifier %{page} (Section)"
         | 
| 315 | 
            +
              email:                  "Courriel"
         | 
| 316 | 
            +
              empty_password:         "Mot de passe vide"
         | 
| 317 | 
            +
              error_occurred:         "Oops ! Une erreur est survenue."
         | 
| 318 | 
            +
              file:                   "Fichier"
         | 
| 319 | 
            +
              groups:                 "Groupes"
         | 
| 320 | 
            +
              head:                   "Tête"
         | 
| 321 | 
            +
              history:                "Historique"
         | 
| 322 | 
            +
              history_of:             "Historique de %{page}"
         | 
| 323 | 
            +
              info_binary:            "%{page} est un binaire %{type} et ne peut pas être édité comme un fichier texte."
         | 
| 324 | 
            +
              invalid_email:          "Courriel invalide"
         | 
| 325 | 
            +
              invalid_mime_type:      "Type MIME invalide"
         | 
| 326 | 
            +
              invalid_name:           "Nom invalide"
         | 
| 327 | 
            +
              invalid_path:           "Chemin invalide"
         | 
| 328 | 
            +
              last_modified:          "Dernière modification"
         | 
| 329 | 
            +
              login:                  "Connexion"
         | 
| 330 | 
            +
              logout:                 "Déconnexion"
         | 
| 331 | 
            +
              menu_actions_edit_new:  "Nouvelle page"
         | 
| 332 | 
            +
              move:                   "Déplacer"
         | 
| 333 | 
            +
              move_page:              "Déplacer %{page}"
         | 
| 334 | 
            +
              name:                   "Nom"
         | 
| 335 | 
            +
              new_page:               "Nouvelle page"
         | 
| 336 | 
            +
              newer:                  "Plus récent"
         | 
| 337 | 
            +
              no_changes:             "Aucun changement"
         | 
| 338 | 
            +
              not_found_text:         "Désolé, la page que vous recherchez n'a pas été trouvée."
         | 
| 339 | 
            +
              not_found_title:        '404 Non trouvé'
         | 
| 340 | 
            +
              old_password:           "Ancien mot de passe"
         | 
| 341 | 
            +
              page:                   "Page"
         | 
| 342 | 
            +
              page_deleted:           "%{page} supprimé."
         | 
| 343 | 
            +
              page_edited:            "%{page} éditée"
         | 
| 344 | 
            +
              page_moved:             "%{page} déplacer vers %{destination}."
         | 
| 345 | 
            +
              page_uploaded:          "Page %{page} téléversé"
         | 
| 346 | 
            +
              parents:                "Parents"
         | 
| 347 | 
            +
              password:               "Mot de passe"
         | 
| 348 | 
            +
              passwords_do_not_match: "Les mots de passe ne correspondent pas"
         | 
| 349 | 
            +
              path:                   "Chemin"
         | 
| 350 | 
            +
              powered_by:             'Powered by <a href="https://github.com/minad/olelo">Ōlelo</a>'
         | 
| 351 | 
            +
              profile_title:          "Profil de %{user}"
         | 
| 352 | 
            +
              really_delete:          "Effacer réellement ?"
         | 
| 353 | 
            +
              reserved_path:          "Chemin réservé"
         | 
| 354 | 
            +
              reset:                  "Réinitialiser"
         | 
| 355 | 
            +
              root:                   "Racine"
         | 
| 356 | 
            +
              save:                   "Enregistrer"
         | 
| 357 | 
            +
              save_and_close:         "Enregistrer et fermer"
         | 
| 358 | 
            +
              search:                 "Rechercher"
         | 
| 359 | 
            +
              settings:               "Paramètres"
         | 
| 360 | 
            +
              signup:                 "S'enregistrer"
         | 
| 361 | 
            +
              summary:                "Sommaire"
         | 
| 362 | 
            +
              text:                   "Texte"
         | 
| 363 | 
            +
              title:                  "Titre"
         | 
| 364 | 
            +
              tree:                   "Arbre"
         | 
| 365 | 
            +
              type_select:            "Sélectionnez une valeur"
         | 
| 366 | 
            +
              type_stringlist:        "Chaînes séparées par des virgules"
         | 
| 367 | 
            +
              upload:                 "Téléverser"
         | 
| 368 | 
            +
              upload_file:            "Téléverser un fichier"
         | 
| 369 | 
            +
              user:                   "Utilisateur"
         | 
| 370 | 
            +
              user_already_exists:    "L'utilisateur %{name} existe déjà"
         | 
| 371 | 
            +
              version:                "Version"
         | 
| 372 | 
            +
              version_by:             'Version %{version} par %{author}, %{date}'
         | 
| 373 | 
            +
              version_conflict:       "Conflit de version détecté"
         | 
| 374 | 
            +
              wrong_password:         "Mot de passe incorect"
         | 
| 375 | 
            +
              wrong_user_or_pw:       "Nom d'utilisateur ou mot de passe incorect"
         |