Merge branch 'master' of git@github.com:fnp/redakcja
authorLukasz Anwajler <lukasz@anwajler.com>
Thu, 5 Aug 2010 11:31:51 +0000 (06:31 -0500)
committerLukasz Anwajler <lukasz@anwajler.com>
Thu, 5 Aug 2010 11:31:51 +0000 (06:31 -0500)
30 files changed:
apps/toolbar/fixtures/initial_data.yaml
apps/toolbar/locale/pl/LC_MESSAGES/django.mo [new file with mode: 0644]
apps/toolbar/locale/pl/LC_MESSAGES/django.po [new file with mode: 0644]
apps/wiki/constants.py
apps/wiki/locale/pl/LC_MESSAGES/django.mo [new file with mode: 0644]
apps/wiki/locale/pl/LC_MESSAGES/django.po [new file with mode: 0644]
apps/wiki/templates/wiki/document_details.html
apps/wiki/templates/wiki/document_details_base.html
apps/wiki/templates/wiki/tabs/gallery_view.html
apps/wiki/templates/wiki/tabs/gallery_view_item.html [new file with mode: 0644]
apps/wiki/templates/wiki/tabs/search_view.html [new file with mode: 0644]
apps/wiki/templates/wiki/tabs/search_view_item.html [new file with mode: 0644]
apps/wiki/templates/wiki/tabs/summary_view_item.html
apps/wiki/views.py
lib/vstorage/__init__.py
redakcja/settings/compress.py
redakcja/static/css/filelist.css
redakcja/static/css/gallery.css
redakcja/static/css/master.css
redakcja/static/js/button_scripts.js
redakcja/static/js/lib/codemirror/codemirror.js
redakcja/static/js/lib/codemirror/editor.js
redakcja/static/js/wiki/base.js
redakcja/static/js/wiki/dialog_save.js
redakcja/static/js/wiki/loader.js
redakcja/static/js/wiki/view_editor_source.js
redakcja/static/js/wiki/view_gallery.js
redakcja/static/js/wiki/view_search.js [new file with mode: 0644]
redakcja/static/js/wiki/wikiapi.js
redakcja/templates/base.html

index 723732d..a117f9b 100644 (file)
@@ -38,8 +38,8 @@
     model: toolbar.buttongroup
     pk: 17
 -   fields:
-        group: [14, 12]
         accesskey: a
+        group: [14, 12]
         label: akapit
         link: ''
         params: '{"tag": "akap"}'
@@ -49,8 +49,8 @@
     model: toolbar.button
     pk: 39
 -   fields:
-        group: [14]
         accesskey: ''
+        group: [14]
         label: akapit cd.
         link: ''
         params: '{"tag": "akap_cd"}'
@@ -60,8 +60,8 @@
     model: toolbar.button
     pk: 40
 -   fields:
-        group: [14]
         accesskey: d
+        group: [14]
         label: akapit dialogowy
         link: ''
         params: '{"tag": "akap_dialog"}'
@@ -71,8 +71,8 @@
     model: toolbar.button
     pk: 41
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: akt
         link: ''
         params: '{"tag": "akt"}'
@@ -82,8 +82,8 @@
     model: toolbar.button
     pk: 14
 -   fields:
-        group: [13]
         accesskey: ''
+        group: [13]
         label: autor
         link: ''
         params: '{"tag": "autor_utworu"}'
     model: toolbar.button
     pk: 32
 -   fields:
-        group: [2]
         accesskey: ''
+        group: [2]
         label: Podstawowa
         link: ''
         params: '[["fulltextregexp", {"exprs": [["\ufeff", ""], ["$[\\s]*\\d+[\\s]*^",
-            ""], ["-\\s*^", ""], ["\\,\\.\\.|\\.\\,\\.|\\.\\.\\,", "..."]]}], ["lineregexp",
-            {"exprs": [["^\\s+|\\s+$", ""], ["\\s+", " "], ["(,,)\\s+|\\s+(\")", "$1"],
-            ["(\\d)[\u2014-](\\d)", "$1--$2"], ["[\u2014]", "---"], ["<(/?)P([aert])",
-            "<$1p$2"], ["([^\\.])(\\s*)</p", "$1.$2</p"], ["([,\\.:;!\\?])([^\\s\\\\])",
-            "$1 $2"], ["([^\\s])\\s+([,\\.:;!\\?])", "$1$2"]]}]]'
+            ""], ["-\\s*^", ""], ["\\,\\.\\.|\\.\\,\\.|\\.\\.\\,", "..."], ["<(/?)P([aert])",
+            "<$1p$2"], ["[\u2014\u2013\u2010-]+", "---"], ["(\\d)---(\\d)", "$1--$2"],
+            ["(\\S)---(\\S)", "$1-$2"]]}], ["lineregexp", {"exprs": [["^\\s+|\\s+$",
+            ""], ["\\s+", " "], ["(,,)\\s+", "$1"], ["\\s+(\")", "$1"], ["([^\\.])(\\s*)</p",
+            "$1.$2</p"], ["([\\.:;!\\?])([^\\s\\\\])", "$1 $2"], ["([^\\s])\\s+([\\.:;!\\?])",
+            "$1$2"], ["\\s+,([^,])", ",$1"], ["([^,]),([^\\s\\\\,])", "$1, $2"]]}]]'
         scriptlet: macro
         slug: basic_correction
-        tooltip: "Wykonuj\u0119 operacj\u0119 z novel-pages i poem-pages."
+        tooltip: "Wykonuj\u0119 podstawow\u0105 korekt\u0119 tekstu."
     model: toolbar.button
     pk: 4
 -   fields:
-        group: [2]
         accesskey: ''
+        group: [2]
         label: "zamiana cudzys\u0142ow\xF3w 1"
         link: ''
         params: '{"exprs": [["\u00ab|\u201e", ",,"], ["\u00bb", "\""], ["([^=])\"([\u0104\u0118\u00d3\u0141\u017b\u0179\u0106\u0143\u0105\u017c\u017a\u015b\u0144\u00f3\u0142\u0107\\w])",
     model: toolbar.button
     pk: 89
 -   fields:
-        group: [2]
         accesskey: ''
+        group: [2]
         label: "zamiana cudzys\u0142ow\xF3w 2"
         link: ''
         params: '{"exprs": [["\u00bb|\u201e", ",,"], ["\u00ab", "\""], ["([^=])\"([\u0104\u0118\u00d3\u0141\u017b\u0179\u0106\u0143\u0105\u017c\u017a\u015b\u0144\u00f3\u0142\u0107\\w])",
     model: toolbar.button
     pk: 77
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: "cz\u0119\u015B\u0107/ksi\u0119ga"
         link: ''
         params: '{"tag": "naglowek_czesc"}'
     model: toolbar.button
     pk: 10
 -   fields:
-        group: [13, 22]
         accesskey: ''
+        group: [13, 22]
         label: dedykacja
         link: ''
         params: '{"tag": "dedykacja"}'
     model: toolbar.button
     pk: 74
 -   fields:
-        group: [12]
         accesskey: ''
+        group: [12]
         label: didaskalia
         link: ''
         params: '{"tag": "didaskalia"}'
     model: toolbar.button
     pk: 62
 -   fields:
-        group: [22]
         accesskey: ''
+        group: [22]
         label: "didaskalia pocz\u0105tkowe"
         link: ''
         params: '{"tag": "miejsce_czas"}'
     model: toolbar.button
     pk: 79
 -   fields:
-        group: [12]
         accesskey: ''
+        group: [12]
         label: didaskalia tekstowe
         link: ''
         params: '{"tag": "didask_tekst"}'
     model: toolbar.button
     pk: 63
 -   fields:
-        group: [21]
         accesskey: ''
+        group: [21]
         label: "d\u0142ugi cyt. poet."
         link: ''
         params: '{"tag": "poezja_cyt"}'
     model: toolbar.button
     pk: 67
 -   fields:
-        group: [21]
         accesskey: ''
+        group: [21]
         label: "d\u0142ugi cytat"
         link: ''
         params: '{"tag": "dlugi_cyt"}'
     model: toolbar.button
     pk: 42
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: dramat wiersz.
         link: ''
         params: '{"tag": "dramat_wierszowany_l"}'
     model: toolbar.button
     pk: 20
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: "dramat wiersz./w. \u0142am"
         link: ''
         params: '{"tag": "dramat_wierszowany_lp"}'
     model: toolbar.button
     pk: 22
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: "dramat wsp\xF3\u0142czesny"
         link: ''
         params: '{"tag": "dramat_wspolczesny"}'
     model: toolbar.button
     pk: 21
 -   fields:
-        group: [13]
         accesskey: ''
+        group: [13]
         label: "dzie\u0142o nadrz\u0119dne"
         link: ''
         params: '{"tag": "dzielo_nadrzedne"}'
     model: toolbar.button
     pk: 38
 -   fields:
-        group: [27]
         accesskey: ''
+        group: [27]
         label: extra
         link: ''
         params: '{"tag": "extra"}'
     model: toolbar.button
     pk: 96
 -   fields:
-        group: []
         accesskey: ''
+        group: []
         label: Wydrukuj
         link: print/html
         params: '[]'
     model: toolbar.button
     pk: 87
 -   fields:
-        group: [12]
         accesskey: k
+        group: [12]
         label: kwestia
         link: ''
         params: '{"tag": "kwestia"}'
     model: toolbar.button
     pk: 82
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: liryka
         link: ''
         params: '{"tag": "liryka_l"}'
     model: toolbar.button
     pk: 23
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: "liryka/w. \u0142am"
         link: ''
         params: '{"tag": "liryka_lp"}'
     model: toolbar.button
     pk: 24
 -   fields:
-        group: [22]
         accesskey: ''
+        group: [22]
         label: "lista os\xF3b"
         link: ''
         params: '{"tag": "lista_osob"}'
     model: toolbar.button
     pk: 93
 -   fields:
-        group: [22]
         accesskey: ''
+        group: [22]
         label: 'typ osoby '
         link: ''
         params: '{"tag": "lista_osoba", "attrs": {"typ": ""}}'
     model: toolbar.button
     pk: 78
 -   fields:
-        group: [15]
         accesskey: ''
+        group: [15]
         label: matemat.
         link: ''
         params: '{"tag": "mat"}'
     model: toolbar.button
     pk: 47
 -   fields:
-        group: [13, 22]
         accesskey: ''
+        group: [13, 22]
         label: motto
         link: ''
         params: '{"tag": "motto"}'
     model: toolbar.button
     pk: 75
 -   fields:
-        group: [13, 22]
         accesskey: ''
+        group: [13, 22]
         label: motto podpis
         link: ''
         params: '{"tag": "motto_podpis"}'
     model: toolbar.button
     pk: 37
 -   fields:
-        group: [12]
         accesskey: ''
+        group: [2]
+        label: ",,\u2026\" na \xAB\u2026\xBB"
+        link: ''
+        params: '{"exprs": [[",,", "\u00ab"], ["\"", "\u00bb"]]}'
+        scriptlet: fulltextregexp
+        slug: na-francuskie
+        tooltip: "Zamienia cudzys\u0142owy podw\xF3jne na francuskie"
+    model: toolbar.button
+    pk: 2
+-   fields:
+        accesskey: ''
+        group: [2]
+        label: ",,\u2026\" na \xBB\u2026\xAB"
+        link: ''
+        params: '{"exprs": [[",,", "\u00bb"], ["\"", "\u00ab"]]}'
+        scriptlet: fulltextregexp
+        slug: na-niemieckie
+        tooltip: "Zamienia cudzys\u0142owy podw\xF3jne na niemieckie"
+    model: toolbar.button
+    pk: 3
+-   fields:
+        accesskey: ''
+        group: [12]
         label: "nag\u0142\xF3wek kwestii"
         link: ''
         params: '{"tag": "naglowek_osoba"}'
     model: toolbar.button
     pk: 16
 -   fields:
-        group: [22]
         accesskey: ''
+        group: [22]
         label: "nag\u0142\xF3wek listy"
         link: ''
         params: '{"tag": "naglowek_listy"}'
     model: toolbar.button
     pk: 94
 -   fields:
-        group: [13]
         accesskey: ''
+        group: [13]
         label: nazwa utworu
         link: ''
         params: '{"tag": "nazwa_utworu"}'
     model: toolbar.button
     pk: 33
 -   fields:
-        group: [13]
         accesskey: ''
+        group: [13]
         label: nota
         link: ''
         params: '{"tag": "nota"}'
     model: toolbar.button
     pk: 35
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: opowiadanie
         link: ''
         params: '{"tag": "opowiadanie"}'
     model: toolbar.button
     pk: 18
 -   fields:
-        group: [12]
         accesskey: b
+        group: [12]
         label: osoba
         link: ''
         params: '{"tag": "osoba"}'
     model: toolbar.button
     pk: 64
 -   fields:
-        group: [22]
         accesskey: ''
+        group: [22]
         label: osoba na liscie
         link: ''
         params: '{"tag": "lista_osoba"}'
     model: toolbar.button
     pk: 95
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: "podrozdzia\u0142"
         link: ''
         params: '{"tag": "naglowek_podrozdzial"}'
     model: toolbar.button
     pk: 12
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: "podtytu\u0142"
         link: ''
         params: '{"tag": "podtytul"}'
     model: toolbar.button
     pk: 34
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: "powie\u015B\u0107"
         link: ''
         params: '{"tag": "powiesc"}'
     model: toolbar.button
     pk: 19
 -   fields:
-        group: []
         accesskey: ''
+        group: []
         label: Wydrukuj
         link: print/xml
         params: '[]'
     model: toolbar.button
     pk: 86
 -   fields:
-        group: [26]
         accesskey: ''
+        group: [26]
         label: przypis autorski
         link: ''
         params: '{"tag": "pa"}'
     model: toolbar.button
     pk: 68
 -   fields:
-        group: [26]
         accesskey: ''
+        group: [26]
         label: przypis edytorski
         link: ''
         params: '{"tag": "pe"}'
     model: toolbar.button
     pk: 71
 -   fields:
-        group: [26]
         accesskey: ''
+        group: [26]
         label: przypis redaktorski
         link: ''
         params: '{"tag": "pr"}'
     model: toolbar.button
     pk: 70
 -   fields:
-        group: [26]
         accesskey: ''
+        group: [26]
         label: "przypis t\u0142umacza"
         link: ''
         params: '{"tag": "pt"}'
     model: toolbar.button
     pk: 69
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: "rozdzia\u0142"
         link: ''
         params: '{"tag": "naglowek_rozdzial"}'
     model: toolbar.button
     pk: 11
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: scena
         link: ''
         params: '{"tag": "naglowek_scena"}'
     model: toolbar.button
     pk: 15
 -   fields:
-        group: [16]
         accesskey: ''
+        group: [16]
         label: asterysk
         link: ''
         params: '{"nocontent": "true", "tag": "sekcja_asterysk"}'
     model: toolbar.button
     pk: 54
 -   fields:
-        group: [16]
         accesskey: ''
+        group: [16]
         label: linia
         link: ''
         params: '{"nocontent": "true", "tag": "separator_linia"}'
     model: toolbar.button
     pk: 55
 -   fields:
-        group: [16]
         accesskey: ''
+        group: [16]
         label: "\u015Bwiat\u0142o"
         link: ''
         params: '{"nocontent": "true", "tag": "sekcja_swiatlo"}'
     model: toolbar.button
     pk: 53
 -   fields:
-        group: [15]
         accesskey: ''
+        group: [15]
         label: "s\u0142owo obce"
         link: ''
         params: '{"tag": "slowo_obce"}'
     model: toolbar.button
     pk: 46
 -   fields:
-        group: [1]
         accesskey: ''
+        group: [1]
         label: "\u015Br\xF3dtytu\u0142"
         link: ''
         params: '{"tag": "srodtytul"}'
     model: toolbar.button
     pk: 13
 -   fields:
-        group: [2]
-        accesskey: ''
-        label: "Usu\u0144 spacj\u0119"
-        link: ''
-        params: '{"exprs": [["^\\s+|\\s+$", ""], ["\\s+", " "], ["(,,)\\s+", "$1"],
-            ["\\s+(\")", "$1"]]}'
-        scriptlet: lineregexp
-        slug: strip_whitespace
-        tooltip: "Usuwa zb\u0119dne spacj\u0119 z dokumentu."
-    model: toolbar.button
-    pk: 3
--   fields:
-        group: [12, 17]
         accesskey: s
+        group: [12, 17]
         label: strofa
         link: ''
         params: '{"tag": "strofa"}'
     model: toolbar.button
     pk: 81
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: "tag g\u0142\xF3wny"
         link: ''
         params: '{"tag": "utwor"}'
     model: toolbar.button
     pk: 17
 -   fields:
-        group: [2]
         accesskey: u
+        group: [2]
         label: "A<sup>\u2193</sup>"
         link: ''
         params: '[]'
     model: toolbar.button
     pk: 76
 -   fields:
-        group: [15]
         accesskey: ''
+        group: [15]
         label: "tytu\u0142 dzie\u0142a"
         link: ''
         params: '{"tag": "tytul_dziela"}'
     model: toolbar.button
     pk: 92
 -   fields:
-        group: [15]
         accesskey: ''
+        group: [15]
         label: "tytu\u0142 dzie\u0142a typ 1"
         link: ''
         params: '{"tag": "tytul_dziela", "attrs": {"typ": "1"}}'
     model: toolbar.button
     pk: 45
 -   fields:
-        group: [27]
         accesskey: ''
+        group: [27]
         label: uwaga
         link: ''
         params: '{"tag": "uwaga"}'
     model: toolbar.button
     pk: 51
 -   fields:
-        group: [14, 17]
         accesskey: ''
+        group: [14, 17]
         label: wers akap.
         link: ''
         params: '{"tag": "wers_akap"}'
     model: toolbar.button
     pk: 83
 -   fields:
-        group: [12, 17]
         accesskey: ''
+        group: [12, 17]
         label: wers cd.
         link: ''
         params: '{"tag": "wers_cd"}'
     model: toolbar.button
     pk: 85
 -   fields:
-        group: [12, 17]
         accesskey: w
+        group: [12, 17]
         label: "wers mocno wci\u0119ty"
         link: ''
         params: '{"tag": "wers_wciety", "attrs": {"typ": ""}}'
     model: toolbar.button
     pk: 84
 -   fields:
-        group: [12, 17]
         accesskey: q
+        group: [12, 17]
         label: "wers wci\u0119ty"
         link: ''
         params: '{"tag": "wers_wciety", "attrs": {"typ": "1"}}'
     model: toolbar.button
     pk: 91
 -   fields:
-        group: [15]
         accesskey: ''
+        group: [15]
         label: www
         link: ''
         params: '{"tag": "www"}'
     model: toolbar.button
     pk: 48
 -   fields:
-        group: [15]
         accesskey: ''
+        group: [15]
         label: "wyr\xF3\u017Cnienie"
         link: ''
         params: '{"tag": "wyroznienie"}'
     model: toolbar.button
     pk: 44
 -   fields:
-        group: [11]
         accesskey: ''
+        group: [11]
         label: wywiad
         link: ''
         params: '{"tag": "wywiad"}'
     model: toolbar.button
     pk: 25
 -   fields:
-        group: [21]
         accesskey: ''
+        group: [21]
         label: "wywiad odpowied\u017A"
         link: ''
         params: '{"tag": "wywiad_odp"}'
     model: toolbar.button
     pk: 73
 -   fields:
-        group: [21]
         accesskey: ''
+        group: [21]
         label: wywiad pytanie
         link: ''
         params: '{"tag": "wywiad_pyt"}'
     model: toolbar.button
     pk: 72
 -   fields:
-        group: [2]
         accesskey: ''
-        label: "Zamie\u0144 dywiz"
-        link: ''
-        params: '{"exprs": [["(\\s)-(\\s)", "$1---$2"], ["^(\\s*)-(\\s)", "$1---$2"],
-            ["(\\s)-(\\s*)$", "$1---$2"], ["(\\d)[\u2014\u2013\u2010-](\\d)", "$1--$2"],
-            ["\u2014\u2013\u2010", "---"]]}'
-        scriptlet: lineregexp
-        slug: zamien_dywiz
-        tooltip: "Zamienia '\u2014' na '---', oraz '1\u20142' na '1--2'."
-    model: toolbar.button
-    pk: 2
--   fields:
         group: [16]
-        accesskey: ''
         label: "zast\u0119pnik wersu"
         link: ''
         params: '{"tag": "zastepnik_wersu"}'
diff --git a/apps/toolbar/locale/pl/LC_MESSAGES/django.mo b/apps/toolbar/locale/pl/LC_MESSAGES/django.mo
new file mode 100644 (file)
index 0000000..54dabdf
Binary files /dev/null and b/apps/toolbar/locale/pl/LC_MESSAGES/django.mo differ
diff --git a/apps/toolbar/locale/pl/LC_MESSAGES/django.po b/apps/toolbar/locale/pl/LC_MESSAGES/django.po
new file mode 100644 (file)
index 0000000..8c7cfb1
--- /dev/null
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-03 12:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: models.py:17
+msgid "button group"
+msgstr "grupa przycisków"
+
+#: models.py:17
+msgid "button groups"
+msgstr "grupy przycisków"
+
+#: models.py:51
+msgid "button"
+msgstr "przycisk"
+
+#: models.py:51
+msgid "buttons"
+msgstr "przyciski"
+
+#: models.py:75
+msgid "javascript"
+msgstr ""
index d96ce8b..de6d0e2 100644 (file)
@@ -3,6 +3,7 @@ from django.utils.translation import ugettext_lazy as _
 
 DOCUMENT_STAGES = (
     ("", u"-----"),
+    ("first_correction", _(u"First correction")),
     ("tagging", _(u"Tagging")),
     ("proofreading", _(u"Initial Proofreading")),
     ("annotation-proofreading", _(u"Annotation Proofreading")),
diff --git a/apps/wiki/locale/pl/LC_MESSAGES/django.mo b/apps/wiki/locale/pl/LC_MESSAGES/django.mo
new file mode 100644 (file)
index 0000000..ffadebc
Binary files /dev/null and b/apps/wiki/locale/pl/LC_MESSAGES/django.mo differ
diff --git a/apps/wiki/locale/pl/LC_MESSAGES/django.po b/apps/wiki/locale/pl/LC_MESSAGES/django.po
new file mode 100644 (file)
index 0000000..159aa85
--- /dev/null
@@ -0,0 +1,272 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-03 12:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: constants.py:6
+msgid "First correction"
+msgstr "Autokorekta"
+
+#: constants.py:7
+msgid "Tagging"
+msgstr "Tagowanie"
+
+#: constants.py:8
+msgid "Initial Proofreading"
+msgstr "Korekta"
+
+#: constants.py:9
+msgid "Annotation Proofreading"
+msgstr "Sprawdzenie przypisów źródła"
+
+#: constants.py:10
+msgid "Modernisation"
+msgstr "Uwspółcześnienie"
+
+#: constants.py:11
+msgid "Themes"
+msgstr "Motywy"
+
+#: constants.py:12
+msgid "Editor's Proofreading"
+msgstr "Ostateczna redakcja literacka"
+
+#: constants.py:13
+msgid "Technical Editor's Proofreading"
+msgstr "Ostateczna redakcja techniczna"
+
+#: constants.py:17
+msgid "Ready to publish"
+msgstr "Gotowe do publikacji"
+
+#: forms.py:62
+msgid "Author"
+msgstr "Autor"
+
+#: forms.py:63
+msgid "Your name/"
+msgstr "Imię i nazwisko/"
+
+#: forms.py:68
+msgid "Author's email"
+msgstr "E-mail autora"
+
+#: forms.py:69
+msgid "Your email address, so we can show a gravatar :)"
+msgstr "Adres e-mail, żebyśmy mogli pokazać gravatar :)"
+
+#: forms.py:75
+msgid "Your comments"
+msgstr "Twój komentarz"
+
+#: forms.py:76
+msgid "Describe changes you made."
+msgstr "Opisz swoje zmiany"
+
+#: forms.py:82
+msgid "Completed"
+msgstr "Ukończono"
+
+#: forms.py:83
+msgid "If you completed a life cycle stage, select it."
+msgstr "Jeśli został ukończony etap prac, wskaż go."
+
+#: models.py:93
+#, python-format
+msgid "Finished stage: %s"
+msgstr "Ukończony etap: %s"
+
+#: models.py:149
+msgid "name"
+msgstr "nazwa"
+
+#: models.py:153
+msgid "theme"
+msgstr "motyw"
+
+#: models.py:154
+msgid "themes"
+msgstr "motywy"
+
+#: views.py:279
+msgid "Tag added"
+msgstr "Dodano tag"
+
+#: templates/wiki/base.html:15
+msgid "Platforma Redakcyjna"
+msgstr ""
+
+#: templates/wiki/diff_table.html:5
+msgid "Old version"
+msgstr "Stara wersja"
+
+#: templates/wiki/diff_table.html:6
+msgid "New version"
+msgstr "Nowa wersja"
+
+#: templates/wiki/document_create_missing.html:8
+msgid "Create document"
+msgstr "Utwórz dokument"
+
+#: templates/wiki/document_details.html:31
+msgid "Click to open/close gallery"
+msgstr "Kliknij, aby (ro)zwinąć galerię"
+
+#: templates/wiki/document_details_base.html:36
+msgid "Help"
+msgstr "Pomoc"
+
+#: templates/wiki/document_details_base.html:38
+msgid "Version"
+msgstr "Wersja"
+
+#: templates/wiki/document_details_base.html:38
+msgid "Unknown"
+msgstr "nieznana"
+
+#: templates/wiki/document_details_base.html:40
+#: templates/wiki/tag_dialog.html:15
+msgid "Save"
+msgstr "Zapisz"
+
+#: templates/wiki/document_details_base.html:41
+msgid "Save attempt in progress"
+msgstr ""
+
+#: templates/wiki/document_list.html:30
+msgid "Clear filter"
+msgstr "Wyczyść filtr"
+
+#: templates/wiki/document_list.html:48
+msgid "Your last edited documents"
+msgstr "Twoje ostatnie edycje"
+
+#: templates/wiki/tag_dialog.html:16
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: templates/wiki/tabs/gallery_view.html:7
+msgid "Previous"
+msgstr "Poprzednie"
+
+#: templates/wiki/tabs/gallery_view.html:13
+msgid "Next"
+msgstr "Następne"
+
+#: templates/wiki/tabs/gallery_view.html:15
+msgid "Zoom in"
+msgstr "Powiększ"
+
+#: templates/wiki/tabs/gallery_view.html:16
+msgid "Zoom out"
+msgstr "Zmniejsz"
+
+#: templates/wiki/tabs/gallery_view_item.html:3
+msgid "Gallery"
+msgstr "Galeria"
+
+#: templates/wiki/tabs/history_view.html:5
+msgid "Compare versions"
+msgstr "Porównaj wersje"
+
+#: templates/wiki/tabs/history_view.html:7
+msgid "Mark version"
+msgstr "Oznacz wersję"
+
+#: templates/wiki/tabs/history_view.html:9
+msgid "Revert document"
+msgstr "Przywróć wersję"
+
+#: templates/wiki/tabs/history_view.html:12
+msgid "View version"
+msgstr "Zobacz wersję"
+
+#: templates/wiki/tabs/history_view_item.html:3
+msgid "History"
+msgstr "Historia"
+
+#: templates/wiki/tabs/search_view.html:3
+#: templates/wiki/tabs/search_view.html:5
+msgid "Search"
+msgstr "Szukaj"
+
+#: templates/wiki/tabs/search_view.html:8
+msgid "Replace with"
+msgstr "Zamień na"
+
+#: templates/wiki/tabs/search_view.html:10
+msgid "Replace"
+msgstr "Zamień"
+
+#: templates/wiki/tabs/search_view.html:13
+msgid "Options"
+msgstr "Opcje"
+
+#: templates/wiki/tabs/search_view.html:15
+msgid "Case sensitive"
+msgstr "Rozróżniaj wielkość liter"
+
+#: templates/wiki/tabs/search_view.html:17
+msgid "From cursor"
+msgstr "Zacznij od kursora"
+
+#: templates/wiki/tabs/search_view_item.html:3
+msgid "Search and replace"
+msgstr "Znajdź i zamień"
+
+#: templates/wiki/tabs/source_editor_item.html:5
+msgid "Source code"
+msgstr "Kod źródłowy"
+
+#: templates/wiki/tabs/summary_view.html:10
+msgid "Title"
+msgstr "Tytuł"
+
+#: templates/wiki/tabs/summary_view.html:15
+msgid "Document ID"
+msgstr "ID dokumentu"
+
+#: templates/wiki/tabs/summary_view.html:19
+msgid "Current version"
+msgstr "Aktualna wersja"
+
+#: templates/wiki/tabs/summary_view.html:22
+msgid "Last edited by"
+msgstr "Ostatnio edytowane przez"
+
+#: templates/wiki/tabs/summary_view.html:26
+msgid "Link to gallery"
+msgstr "Link do galerii"
+
+#: templates/wiki/tabs/summary_view.html:31
+msgid "Publish"
+msgstr "Opublikuj"
+
+#: templates/wiki/tabs/summary_view_item.html:4
+msgid "Summary"
+msgstr "Podsumowanie"
+
+#: templates/wiki/tabs/wysiwyg_editor.html:9
+msgid "Insert theme"
+msgstr "Wstaw motyw"
+
+#: templates/wiki/tabs/wysiwyg_editor.html:12
+msgid "Insert annotation"
+msgstr "Wstaw przypis"
+
+#: templates/wiki/tabs/wysiwyg_editor_item.html:3
+msgid "Visual editor"
+msgstr "Edytor wizualny"
index 67b3c47..9657e0f 100644 (file)
        {% include "wiki/tabs/source_editor.html" %}
 {% endblock %}
 
+{% block tabs-right %}
+    {% include "wiki/tabs/gallery_view_item.html" %}
+    {% include "wiki/tabs/search_view_item.html" %}
+{% endblock %}
+
 {% block splitter-extra %}
-    {% include "wiki/tabs/gallery_view.html" %}
+<div class="vsplitbar" title="{% trans "Click to open/close gallery" %}">
+    </div>
+    <div id="sidebar">
+        {% include "wiki/tabs/gallery_view.html" %}
+        {% include "wiki/tabs/search_view.html" %}
+    </div>
 {% endblock %}
 
 {% block dialogs %}
index 28567e1..3c6843d 100644 (file)
         | {% trans "Version" %}: <span id="document-revision">{% trans "Unknown" %}</span>
                {% if not readonly %}
             | <button style="margin-left: 6px" id="save-button">{% trans "Save" %}</button>
+                       <span id='save-attempt-info'>{% trans "Save attempt in progress" %}</span>
                {% endif %}
     </div>
-    <ol id="tabs">
+    <ol id="tabs" class="tabs">
        {% block tabs-menu %} {% endblock %}
     </ol>
+    <ol id="tabs-right" class="tabs">
+        {% block tabs-right %} {% endblock %}
+    </ol>
 </div>
 <div id="splitter">
     <div id="editor" class="{% block editor-class %} {% endblock %}">
index 8f18372..b4be533 100644 (file)
@@ -1,6 +1,4 @@
 {% load i18n %}
-<div class="vsplitbar" title="{% trans "Click to open/close gallery" %}">
-</div>
 <div id="side-gallery">
     <!-- gallery toolbar -->
     <div class="toolbar">
diff --git a/apps/wiki/templates/wiki/tabs/gallery_view_item.html b/apps/wiki/templates/wiki/tabs/gallery_view_item.html
new file mode 100644 (file)
index 0000000..7325c82
--- /dev/null
@@ -0,0 +1,4 @@
+{% load i18n %}
+<li id="ScanGalleryPerspective" data-ui-related="side-gallery" data-ui-jsclass="ScanGalleryPerspective" class='active'>
+    <span>{% trans "Gallery" %}</span>
+</li>
diff --git a/apps/wiki/templates/wiki/tabs/search_view.html b/apps/wiki/templates/wiki/tabs/search_view.html
new file mode 100644 (file)
index 0000000..4bf1e89
--- /dev/null
@@ -0,0 +1,19 @@
+{% load i18n %}
+<div id='side-search'>
+    <p>{% trans "Search" %}:<br/>
+    <input id='search-input' /><br/>
+    <button id='search-button'>{% trans "Search" %}</button>
+    </p>
+
+    <p>{% trans "Replace with" %}:<br/>
+        <input id='replace-input' /><br/>
+        <button id='replace-button'>{% trans "Replace" %}</button><br/>
+    </p>
+
+    <p>{% trans "Options" %}<br/>
+        <input type="checkbox" id="search-case-sensitive" />
+            <label for="search-case-sensitive">{% trans "Case sensitive" %}</label><br/>
+        <input type="checkbox" id="search-from-cursor" />
+            <label for="search-from-cursor">{% trans "From cursor" %}</label><br/>
+    </p>
+</div>
\ No newline at end of file
diff --git a/apps/wiki/templates/wiki/tabs/search_view_item.html b/apps/wiki/templates/wiki/tabs/search_view_item.html
new file mode 100644 (file)
index 0000000..dbd4e09
--- /dev/null
@@ -0,0 +1,4 @@
+{% load i18n %}
+<li id="SearchPerspective" data-ui-related="side-search" data-ui-jsclass="SearchPerspective">
+    <span>{% trans "Search and replace" %}</span>
+</li>
index 79c9f8f..2b4daeb 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
 {% load wiki %}
 <li id="SummaryPerspective" data-ui-related="summary-view-editor" data-ui-jsclass="SummaryPerspective">
-    <span>{{ document.name|wiki_title }}</span>
+    <span>{% trans "Summary" %}</span>
 </li>
index b78959f..b57347c 100644 (file)
@@ -84,6 +84,7 @@ def editor(request, name, template_name='wiki/document_details.html'):
             "text_save": DocumentTextSaveForm(prefix="textsave"),
             "add_tag": DocumentTagForm(prefix="addtag"),
         },
+        'REDMINE_URL': settings.REDMINE_URL,
     })
 
 
@@ -113,6 +114,7 @@ def editor_readonly(request, name, template_name='wiki/document_details_readonly
         'document_name': document.name,
         'document_info': dict(document.info(), readonly=True),
         'document_meta': document.meta,
+        'REDMINE_URL': settings.REDMINE_URL,
     })
 
 
@@ -155,7 +157,13 @@ def text(request, name):
             comment = form.cleaned_data['comment']
             if form.cleaned_data['stage_completed']:        
                 comment += '\n#stage-finished: %s\n' % form.cleaned_data['stage_completed']         
-            author = "%s <%s>" % (form.cleaned_data['author_name'], form.cleaned_data['author_email'])           
+            if request.user.is_authenticated():
+                author_name = request.user
+                author_email = request.user.email
+            else:
+                author_name = form.cleaned_data['author_name']
+                author_email = form.cleaned_data['author_email']
+            author = "%s <%s>" % (author_name, author_email)
             storage.put(document, author=author, comment=comment, parent=revision)           
             document = storage.get(name)          
             return JSONResponse({
index 843bb6b..84d8ee7 100644 (file)
@@ -147,10 +147,18 @@ class VersionedStorage(object):
         self.repo = mercurial.hg.repository(self.ui, self.repo_path)
 
     def _file_path(self, title, type='.xml'):
-        return os.path.join(self.path, urlquote(title, safe='')) + type
+        """ Return plain version if exists in repo, add extension otherwise. """
+        path = os.path.join(self.path, urlquote(title, safe=''))
+        if type and self._title_to_file(title, '') not in self.repo['tip']:
+            path += type
+        return path
 
     def _title_to_file(self, title, type=".xml"):
-        return os.path.join(self.repo_prefix, urlquote(title, safe='')) + type
+        """ Return plain version if exists in repo, add extension otherwise. """
+        path = os.path.join(self.repo_prefix, urlquote(title, safe=''))
+        if type and path not in self.repo['tip']:
+            path += type
+        return path
 
     def _file_to_title(self, filename):
         assert filename.startswith(self.repo_prefix)
index 7207f1b..5e8d721 100644 (file)
@@ -51,6 +51,7 @@ COMPRESS_JS = {
                 'js/wiki/view_editor_source.js',
                 'js/wiki/view_editor_wysiwyg.js',
                 'js/wiki/view_gallery.js',
+                'js/wiki/view_search.js',
                 'js/wiki/view_column_diff.js',
         ),
         'output_filename': 'compressed/detail_scripts_?.js',
index c398c45..b2f51ed 100644 (file)
@@ -64,4 +64,9 @@ a, a:visited, a:active {
 
 a:hover {
        text-decoration: underline;
-}
\ No newline at end of file
+}
+
+
+#loading-overlay {
+       display: none;
+}
index 97c9c12..9c6e3a5 100644 (file)
@@ -1,18 +1,27 @@
-/* =========== */
-/* = Gallery = */
-/* =========== */
-
-#side-gallery {
+#sidebar {
+    display:none;
     position: absolute;
-    /* overflow: hidden; */
     top: 0px;
     right: 0px;
     bottom: 0px;
     width: 480px;
-    display: none;
     background-color: #FFF;
 }
 
+#side-search {
+    height: 100%;
+    display: none;
+    background-color: #C1C1C1;
+}
+
+#side-search p {
+    padding: .5em;
+}
+
+/* =========== */
+/* = Gallery = */
+/* =========== */
+
 #side-gallery .error_message
 {
        background-color: white;
index c14a3dc..cbfe66a 100644 (file)
@@ -87,6 +87,20 @@ body {
     font-weight: bold;
 }
 
+#header.saving {
+       background-color: #E1C1C1;
+}
+#header.saving #save-button {
+    display: none;
+}
+#save-attempt-info {
+    color: #801000;
+    display: none;
+}
+.saving #save-attempt-info {
+    display: inline;
+}
+
 #header h1, #header h1 a {
     margin: 0;
     padding: 0;
@@ -103,16 +117,22 @@ body {
     color: #222;
 }
 
-#tabs {
+.tabs {
        overflow: hidden;
     margin: 0;
        padding: 0;
        height: 31px;
        border: 0px;
        padding-left: 1em;
+    float: left;
+}
+
+#tabs-right {
+    float: right;
+    padding-right: 1em;
 }
 
-#tabs li {
+.tabs li {
        height: 18px;
        margin-top: 6px;
        margin-bottom: 0px;
@@ -143,7 +163,7 @@ body {
     -webkit-border-bottom-right-radius: 0px;
 }
 
-#tabs li.active {
+.tabs li.active {
     background-color: #C1C1C1;
 }
 
index 2a585dc..4aa0c95 100644 (file)
@@ -48,9 +48,8 @@ function ScriptletCenter()
 {
     this.scriptlets = {};
 
-    this.scriptlets['insert_tag'] = function(context, params, done)
+    this.scriptlets['insert_tag'] = function(context, params, text, move_forward, done)
     {
-        var text = this.XMLEditorSelectedText(context);
         var start_tag = '<'+params.tag;
         var move_cursor = false;
 
@@ -95,18 +94,14 @@ function ScriptletCenter()
             }
         }
 
-        this.XMLEditorReplaceSelectedText(context, output);
-
-        try {
-            if (move_cursor) {
-                this.XMLEditorMoveCursorForward(context, params.tag.length+2);
-            }
-        } catch(e) {}
+        if (move_cursor) {
+            move_forward += params.tag.length+2;
+        }
 
-               done();
+        done(output, move_forward);
     }.bind(this);
 
-    this.scriptlets['lineregexp'] = function(context, params, done) {
+    this.scriptlets['lineregexp'] = function(context, params, text, move_forward, done) {
                var self = this;
 
         var exprs = $.map(params.exprs, function(expr) {
@@ -120,8 +115,7 @@ function ScriptletCenter()
         });
 
         var partial = true;
-        var text = this.XMLEditorSelectedText(context);
-        if(!text) return done();
+        if(!text) done(text, move_forward);
 
         var changed = 0;
         var lines = text.split('\n');
@@ -138,15 +132,15 @@ function ScriptletCenter()
             if(old_line != line) changed += 1;
             return line;
         }, function(newlines) {
-                       if(changed > 0) {
-                               self.XMLEditorReplaceSelectedText(context, newlines.join('\n') );
-                       };
+            if(changed > 0) {
+                text = newlines.join('\n');
+            };
 
-                       done();
+            done(text, move_forward);
                });
     }.bind(this);
 
-    this.scriptlets['fulltextregexp'] = function(context, params, done) {
+    this.scriptlets['fulltextregexp'] = function(context, params, text, move_forward, done) {
                var self = this;
 
         var exprs = $.map(params.exprs, function(expr) {
@@ -160,47 +154,39 @@ function ScriptletCenter()
                 };
         });
 
-        var text = this.XMLEditorSelectedText(context);
-        if(!text) return done();
+        if(!text) done(text, move_forward);
         var original = text;$
 
                nblck_each(exprs, function(expr, index) {
                        $progress.html(600 + index);
             text = text.replace(expr.rx, expr.repl);
         }, function() {
-                       if( original != text) {
-                  self.XMLEditorReplaceSelectedText(context, text);
-               }
-
-                       done();
+                       done(text, move_forward);
                });
     }.bind(this);
 
-    this.scriptlets['macro'] = function(context, params, done) {
+    this.scriptlets['macro'] = function(context, params, text, move_forward, done) {
         var self = this;
                var i = 0;
 
-               function next() {
+               function next(text, move_forward) {
                if (i < params.length) {
                                var e = params[i];
                                i = i + 1;
-                               self.scriptlets[e[0]](context, e[1], next);
+                               self.scriptlets[e[0]](context, e[1], text, move_forward, next);
                        }
                        else {
-                               done();
+                               done(text, move_forward);
                        }
         };
 
-               next();
+               next(text, move_forward);
     }.bind(this);
 
-    this.scriptlets['lowercase'] = function(context, params, done)
+    this.scriptlets['lowercase'] = function(context, params, text, move_forward, done)
     {
-        var text = this.XMLEditorSelectedText(context);
-
-        if(!text) return;
+        if(!text) done(text, move_forward);
 
-        var repl = '';
         var lcase = text.toLowerCase();
         var ucase = text.toUpperCase();
 
@@ -214,18 +200,14 @@ function ScriptletCenter()
                     return '';
                 }
             });
-            repl = words.join(' ');
+            text = words.join(' ');
         }
 
-        if(repl != text) this.XMLEditorReplaceSelectedText(context, repl);
-
-               done();
+        done(text, move_forward);
     }.bind(this);
 
 
-    this.scriptlets["insert_stanza"] = function(context, params, done) {
-        var text = this.XMLEditorSelectedText(context);
-
+    this.scriptlets["insert_stanza"] = function(context, params, text, move_forward, done) {
         if(text) {
             var verses = text.split('\n');
             text = ''; var buf = ''; var ebuf = '';
@@ -243,14 +225,12 @@ function ScriptletCenter()
                 }
             }
             text = text + buf + '\n</strofa>' + ebuf;
-            this.XMLEditorReplaceSelectedText(context, text);
         }
-
-        if (!text) {
-            this.XMLEditorMoveCursorForward(context, params.tag.length + 2);
+        else {
+            move_forward += params.tag.length + 2;
         }
 
-               done();
+        done(text, move_forward);
     }.bind(this);
 
 }
@@ -267,10 +247,20 @@ ScriptletCenter.prototype.callInteractive = function(opts) {
 
        $.blockUI({message: $progress, showOverlay: false});
 
-       self.scriptlets[opts.action](opts.context, opts.extra, function(){
+    var input = self.XMLEditorSelectedText(opts.context);
+       self.scriptlets[opts.action](opts.context, opts.extra, input, 0, function(output, move_forward){
            /*if(timer)
                clearTimeout(timer);
            else */
+        if (input != output) {
+            self.XMLEditorReplaceSelectedText(opts.context, output)
+        }
+        if (move_forward) {
+            try {
+                self.XMLEditorMoveCursorForward(opts.context, move_forward)
+            }
+            catch(e) {}
+        }
            $.unblockUI(); // done
        });
 }
index 8c62dab..8475989 100644 (file)
@@ -177,8 +177,8 @@ var CodeMirror = (function(){
     replaceChars: function(text, start, end) {
       this.editor.replaceChars(text, start, end);
     },
-    getSearchCursor: function(string, fromCursor) {
-      return this.editor.getSearchCursor(string, fromCursor);
+    getSearchCursor: function(string, fromCursor, regexp, case_sensitive) {
+      return this.editor.getSearchCursor(string, fromCursor, regexp, case_sensitive);
     },
 
     undo: function() {this.editor.history.undo();},
index f5fe841..4eb6d09 100644 (file)
@@ -223,7 +223,29 @@ var Editor = (function(){
   // indicating whether anything was found, and can be called again to
   // skip to the next find. Use the select and replace methods to
   // actually do something with the found locations.
-  function SearchCursor(editor, string, fromCursor) {
+  function SearchCursor(editor, string, fromCursor, regexp, case_sensitive) {
+
+    function casedIndexOf(hay, needle, case_sensitive) {
+        if (case_sensitive)
+            return hay.indexOf(needle);
+        else
+            return hay.toLowerCase().indexOf(needle.toLowerCase())
+    }
+
+    function casedLastIndexOf(hay, needle, case_sensitive) {
+        if (case_sensitive)
+            return hay.lastIndexOf(needle);
+        else
+            return hay.toLowerCase().lastIndexOf(needle.toLowerCase());
+    }
+
+    function casedEqual(a, b, case_sensitive) {
+        if (case_sensitive)
+            return a == b;
+        else
+            return a.toLowerCase() == b.toLowerCase();
+    }
+
     this.editor = editor;
     this.history = editor.history;
     this.history.commit();
@@ -252,7 +274,8 @@ var Editor = (function(){
       // For one-line strings, searching can be done simply by calling
       // indexOf on the current line.
       function() {
-        var match = cleanText(self.history.textAfter(self.line).slice(self.offset)).indexOf(string);
+        var match = casedIndexOf(cleanText(self.history.textAfter(self.line).slice(self.offset)),
+                string, case_sensitive);
         if (match > -1)
           return {from: {node: self.line, offset: self.offset + match},
                   to: {node: self.line, offset: self.offset + match + string.length}};
@@ -262,19 +285,19 @@ var Editor = (function(){
       // end of the line and the last match starts at the start.
       function() {
         var firstLine = cleanText(self.history.textAfter(self.line).slice(self.offset));
-        var match = firstLine.lastIndexOf(target[0]);
+        var match = casedLastIndexOf(firstLine, target[0], case_sensitive);
         if (match == -1 || match != firstLine.length - target[0].length)
           return false;
         var startOffset = self.offset + match;
 
         var line = self.history.nodeAfter(self.line);
         for (var i = 1; i < target.length - 1; i++) {
-          if (cleanText(self.history.textAfter(line)) != target[i])
+          if (!casedEqual(cleanText(self.history.textAfter(line)), target[i], case_sensitive))
             return false;
           line = self.history.nodeAfter(line);
         }
 
-        if (cleanText(self.history.textAfter(line)).indexOf(target[target.length - 1]) != 0)
+        if (casedIndexOf(cleanText(self.history.textAfter(line)), target[target.length - 1], case_sensitive) != 0)
           return false;
 
         return {from: {node: self.line, offset: startOffset},
@@ -619,8 +642,8 @@ var Editor = (function(){
               offset: lastLine.length};
     },
 
-    getSearchCursor: function(string, fromCursor) {
-      return new SearchCursor(this, string, fromCursor);
+    getSearchCursor: function(string, fromCursor, regexp, case_sensitive) {
+      return new SearchCursor(this, string, fromCursor, regexp, case_sensitive);
     },
 
     // Re-indent the whole buffer
index 61a3949..de1d8e5 100644 (file)
                if($tab.length != 1)
                        $tab = $(DEFAULT_PERSPECTIVE);
 
-               var $old = $('#tabs li').filter('.active');
+               var $old = $tab.closest('.tabs').find('.active');
 
                $old.each(function(){
                        $(this).removeClass('active');
index 916f326..aa9258d 100644 (file)
                        var self = this;
 
                        self.$elem.block({
-                               message: "Zapisywanie...",
+                               message: "Zapisywanie... <br/><button id='save-hide'>ukryj</button>",
                                fadeIn: 0,
                        });
+            $.wiki.blocking = self.$elem;
 
                        try {
 
index e2d4d2b..4256115 100644 (file)
@@ -17,10 +17,6 @@ $(function()
 
     function initialize()
        {
-               gallery = new $.wiki.ScanGalleryPerspective({
-                       doc: CurrentDocument, id: "ScanGalleryPerspective"
-               });
-
                $(document).keydown(function(event) {
                        console.log("Received key:", event);
                });
@@ -36,7 +32,7 @@ $(function()
                /*
                 * TABS
                 */
-        $('#tabs li').live('click', function(event, callback) {
+        $('.tabs li').live('click', function(event, callback) {
                        $.wiki.switchToTab(this);
         });
 
@@ -62,19 +58,19 @@ $(function()
         $('.vsplitbar').toggle(
                        function() {
                                $.wiki.state.perspectives.ScanGalleryPerspective.show = true;
-                               $('#side-gallery').show();
-                               $('.vsplitbar').css('right', 480).addClass('.active');
+                               $('#sidebar').show();
+                               $('.vsplitbar').css('right', 480).addClass('active');
                                $('#editor .editor').css('right', 510);
                                $(window).resize();
-                               gallery.onEnter();
+                               $.wiki.perspectiveForTab('#tabs-right .active').onEnter();
                        },
                        function() {
                                $.wiki.state.perspectives.ScanGalleryPerspective.show = false;
-                               $('#side-gallery').hide();
+                               $('#sidebar').hide();
                                $('.vsplitbar').css('right', 0).removeClass('active');
                                $('#editor .editor').css('right', 30);
                                $(window).resize();
-                               gallery.onExit();
+                               $.wiki.perspectiveForTab('#tabs-right .active').onExit();
                        }
                );
 
@@ -137,6 +133,6 @@ $(function()
        /*
         * Initialize all perspectives
         */
-       initAll( $.makeArray($('ol#tabs li')), initialize);
+       initAll( $.makeArray($('.tabs li')), initialize);
        console.log(location.hash);
 });
index 9fc9922..0597140 100644 (file)
                console.log('Exiting', this.doc);
                this.doc.setText(this.codemirror.getCode());
 
+        if ($('.vsplitbar').hasClass('active') && $('#SearchPerspective').hasClass('active')) {
+            $.wiki.switchToTab('#ScanGalleryPerspective');
+        }
+
                if(success) success();
        }
 
index 8679348..ec486bc 100644 (file)
 
         $.wiki.Perspective.prototype.onEnter.call(this);
 
+        $('.vsplitbar').not('.active').trigger('click');
+
         this.doc.refreshGallery({
             success: function(doc, data){
                 self.$image.show();
diff --git a/redakcja/static/js/wiki/view_search.js b/redakcja/static/js/wiki/view_search.js
new file mode 100644 (file)
index 0000000..34393dc
--- /dev/null
@@ -0,0 +1,113 @@
+(function($){
+
+    /*
+     * Perspective
+     */
+    function SearchPerspective(options){
+        var old_callback = options.callback || function() { };
+
+        this.noupdate_hash_onenter = true;
+
+        options.callback = function(){
+            var self = this;
+
+            this.editor = null;
+            this.$element = $("#side-search");
+            this.$searchInput = $('#search-input', this.$element);
+            this.$replaceInput = $('#replace-input', this.$element);
+            this.$searchButton = $('#search-button', this.$element);
+            this.$replaceButton = $('#replace-button', this.$element);
+
+            this.$replaceButton.attr("disabled","disabled");
+            this.options = Array();
+
+            // handlers
+            this.$searchInput.change(function(event){
+                self.searchCursor = null;
+            });
+            this.$replaceInput.change(function(event){
+                self.searchCursor = null;
+            });
+
+            $("#side-search input:checkbox").each(function() {
+                self.options[this.id] = this.checked;
+            }).change(function(){
+                self.options[this.id] = this.checked;
+                self.searchCursor = null;
+            });
+
+            this.$searchButton.click(function(){
+                if (!self.search())
+                    alert('Brak wyników.');
+            });
+
+            this.$replaceButton.click(function(){
+                self.replace();
+            });
+
+            old_callback.call(this);
+        };
+
+        $.wiki.Perspective.call(this, options);
+    };
+
+    SearchPerspective.prototype = new $.wiki.Perspective();
+
+    SearchPerspective.prototype.search = function(){
+        var self = this;
+        var query = self.$searchInput.val();
+
+        if (!self.editor)
+            self.editor = $.wiki.perspectiveForTab('#CodeMirrorPerspective').codemirror
+
+        if (!self.searchCursor) {
+            self.searchCursor = self.editor.getSearchCursor(
+                self.$searchInput.val(), 
+                self.options['search-from-cursor'], 
+                self.options['search-regexp'],
+                self.options['search-case-sensitive']
+            );
+        }
+        if (self.searchCursor.findNext()) {
+            self.searchCursor.select();
+            self.$replaceButton.removeAttr("disabled");
+            return true;
+        }
+        else {
+            self.searchCursor = null;
+            this.$replaceButton.attr("disabled","disabled");
+            return false;
+        }
+    };
+
+    SearchPerspective.prototype.replace = function(){
+        var self = this;
+        var query = self.$replaceInput.val();
+
+        if (!self.searchCursor) {
+            self.search();
+        }
+        else {}
+        self.searchCursor.select();
+        self.searchCursor.replace(query);
+        self.search();
+    };
+
+    SearchPerspective.prototype.onEnter = function(success, failure){
+        var self = this;
+
+        $.wiki.Perspective.prototype.onEnter.call(this);
+        self.$searchCursor = null;
+
+        $('.vsplitbar').not('.active').trigger('click');
+        if ($.wiki.activePerspective() != 'CodeMirrorPerspective')
+            $.wiki.switchToTab('#CodeMirrorPerspective');
+    };
+
+    SearchPerspective.prototype.onExit = function(success, failure) {
+
+    };
+
+    $.wiki.SearchPerspective = SearchPerspective;
+
+})(jQuery);
\ No newline at end of file
index ad31af3..b6388f1 100644 (file)
                        success: function(data) {
                                var changed = false;
 
+                $('#header').removeClass('saving');
+
                                if (data.text) {
                                        self.text = data.text;
                                        self.revision = data.revision;
                                params['success'](self, changed, ((changed && "Udało się zapisać :)") || "Twoja wersja i serwera jest identyczna"));
                        },
                        error: function(xhr) {
-                               try {
-                                       params['failure'](self, $.parseJSON(xhr.responseText));
-                               }
-                               catch (e) {
-                                       params['failure'](self, {
-                                               "__message": "<p>Nie udało się zapisać - błąd serwera.</p>"
-                                       });
-                               };
+                if ($('#header').hasClass('saving')) {
+                    $('#header').removeClass('saving');
+                    $.blockUI({
+                        message: "<p>Nie udało się zapisać zmian. <br/><button onclick='$.unblockUI()'>OK</button></p>"
+                    })
+                }
+                else {
+                    try {
+                        params['failure'](self, $.parseJSON(xhr.responseText));
+                    }
+                    catch (e) {
+                        params['failure'](self, {
+                            "__message": "<p>Nie udało się zapisać - błąd serwera.</p>"
+                        });
+                    };
+                }
 
                        }
                });
+
+        $('#save-hide').click(function(){
+            $('#header').addClass('saving');
+            $.unblockUI();
+            $.wiki.blocking.unblock();
+        });
        }; /* end of save() */
 
        WikiDocument.prototype.publish = function(params) {
index 749fd2a..971213f 100644 (file)
@@ -10,7 +10,7 @@
     </head>
     <body id="{% block bodyid %}base{% endblock %}">
 
-    <div id="loading-overlay" style="display: none;">
+    <div id="loading-overlay">
        <div id="loading-message">
                <img src="{{STATIC_URL}}img/spinner.gif" />
                <p>{% trans "Loading" %}</p>