Ready for SP 4-6.
authorRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Fri, 24 Jan 2014 09:13:27 +0000 (10:13 +0100)
committerRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Fri, 31 Jan 2014 11:17:58 +0000 (12:17 +0100)
librarian/dcparser.py
librarian/pyhtml.py
librarian/pypdf.py

index 78f231c..8883f92 100644 (file)
@@ -167,6 +167,7 @@ class WorkInfo(object):
         Field( DCNS('creator.expert'), 'authors_expert', as_person, salias='author', required=False, multiple=True),
         Field( DCNS('creator.scenario'), 'authors_scenario', as_person, salias='author', required=False, multiple=True),
         Field( DCNS('creator.textbook'), 'authors_textbook', as_person, salias='author', required=False, multiple=True),
+        Field( DCNS('requires'), 'requires', required=False, multiple=True),
         Field( DCNS('title'), 'title'),
         Field( DCNS('type'), 'type', required=False),
 
index 21132b6..f6dfdf5 100644 (file)
@@ -13,15 +13,6 @@ from copy import deepcopy
 
 IMAGE_THUMB_WIDTH = 300
 
-try:
-    from fnpdjango.utils.text.slughifi import slughifi
-    def naglowek_to_anchor(naglowek):
-        return slughifi(naglowek.text)
-except ImportError:
-    from urllib import quote
-    def naglowek_to_anchor(naglowek):
-        return quote(re.sub(r" +", " ", naglowek.text.strip()))
-
 class EduModule(Xmill):
     def __init__(self, options=None):
         super(EduModule, self).__init__(options)
@@ -64,11 +55,14 @@ class EduModule(Xmill):
     handle_tytul_dziela = tag('em', 'title')
     handle_slowo_obce = tag('em', 'foreign')
 
+    def naglowek_to_anchor(self, naglowek):
+        return self.options['urlmapper'].naglowek_to_anchor(naglowek)
+
     def handle_nazwa_utworu(self, element):
         toc = []
         for naglowek in element.getparent().findall('.//naglowek_rozdzial'):
             a = etree.Element("a")
-            a.attrib["href"] = "#" + naglowek_to_anchor(naglowek)
+            a.attrib["href"] = "#" + self.naglowek_to_anchor(naglowek)
             a.text = naglowek.text
             atxt = etree.tostring(a, encoding=unicode)
             toc.append("<li>%s</li>" % atxt)
@@ -78,7 +72,10 @@ class EduModule(Xmill):
 
     def handle_naglowek_rozdzial(self, element):
         return_to_top = u"<a href='#top' class='top-link'>wróć do spisu treści</a>"
-        pre, post = tag_open_close("h2", id=naglowek_to_anchor(element))
+        pre, post = tag_open_close("h2", id=self.naglowek_to_anchor(element))
+        url = self.options['urlmapper'].get_help_url(element)
+        if url:
+            post = " <a class='help' href='%s'>?</a>" % (url,) + post
         return return_to_top + pre, post
 
     def handle_naglowek_podrozdzial(self, element):
@@ -111,8 +108,22 @@ class EduModule(Xmill):
         else: pomoce = ''
 
         forma = ''.join(element.xpath('forma/text()'))
+        get_forma_url = self.options['urlmapper'].get_forma_url
+        forms = []
+        for form_name in forma.split(','):
+            name = form_name.strip()
+            url = get_forma_url(name)
+            if url:
+                forms.append("<a href='%s'>%s</a>" % (url, name))
+            else:
+                forms.append(name)
+        forma = ', '.join(forms)
+        if forma:
+            forma = '<section class="infobox kind"><h1>Metoda</h1><p>%s</p></section>' % forma
 
         czas = ''.join(element.xpath('czas/text()'))
+        if czas:
+            czas = '<section class="infobox time"><h1>Czas</h1><p>%s min</p></section>' % czas
 
         counter = self.activity_counter
 
@@ -131,8 +142,8 @@ class EduModule(Xmill):
 u"""%(wskazowki)s
  </div>
  <aside class="info">
-  <section class="infobox time"><h1>Czas</h1><p>%(czas)s min</p></section>
-  <section class="infobox kind"><h1>Metoda</h1><p>%(forma)s</p></section>
+  %(czas)s
+  %(forma)s
   %(pomoce)s
  </aside>
  <div class="clearboth"></div>
@@ -182,12 +193,11 @@ u"""%(wskazowki)s
             if surl is None:
                 # print '** missing src on <slowniczek>, setting default'
                 surl = 'http://edukacjamedialna.edu.pl/lekcje/slowniczek/'
-            sxml = None
-            if surl:
-                sxml = etree.fromstring(self.options['provider'].by_uri(surl).get_string())
+            sxml = etree.fromstring(self.options['provider'].by_uri(surl).get_string())
+
             self.options = {'slowniczek': True, 'slowniczek_xml': sxml }
             pre, post = '<div class="slowniczek">', '</div>'
-            if self.options['wldoc'].book_info.url.slug != 'slowniczek':
+            if not self.options['wldoc'].book_info.url.slug.startswith('slowniczek'):
                 post += u'<p class="see-more"><a href="%s">Zobacz cały słowniczek.</a></p>' % surl
             return pre, post
 
@@ -228,9 +238,9 @@ u"""%(wskazowki)s
                     subgen = EduModule(self.options)
                     definiens_s = subgen.generate(definiens)
             else:
-                print '!! Missing definiendum in source:', element.text
+                print "!! Missing definiendum in source: '%s'" % element.text
 
-        return u"<dt>", u"</dt>" + definiens_s
+        return u"<dt id='%s'>" % self.naglowek_to_anchor(element), u"</dt>" + definiens_s
 
     def handle_definiens(self, element):
         return u"<dd>", u"</dd>"
@@ -623,7 +633,7 @@ class EduModuleFormat(Format):
         order = dict(reversed(k) for k in enumerate(self.PRIMARY_MATERIAL_FORMATS))
         mats = self.materials_by_slug.get(slug, {}).items()
         if not mats:
-            pass # print "!! Material missing: '%s'" % slug
+            print "!! Material missing: '%s'" % slug
         return sorted(mats, key=lambda (x, y): order.get(x, x))
 
     def url_for_material(self, slug, fmt):
@@ -632,6 +642,18 @@ class EduModuleFormat(Format):
     def url_for_image(self, slug, fmt, width=None):
         return self.url_for_material(self, slug, fmt)
 
+    def text_to_anchor(self, text):
+        return re.sub(r" +", " ", text)
+
+    def naglowek_to_anchor(self, naglowek):
+        return self.text_to_anchor(naglowek.text.strip())
+
+    def get_forma_url(self, forma):
+        return None
+
+    def get_help_url(self, naglowek):
+        return None
+
 
 def transform(wldoc, stylesheet='edumed', options=None, flags=None, verbose=None):
     """Transforms the WL document to XHTML.
index 9034753..759e1f3 100644 (file)
@@ -107,7 +107,7 @@ class EduModule(Xmill):
                 dc.authors_expert
         else:
             authors = getattr(dc, "authors_%s" % which)
-        return u', '.join(author.readable() for author in authors)
+        return u', '.join(author.readable() for author in authors if author)
 
     @escape(1)
     def get_title(self, element):
@@ -196,7 +196,7 @@ class EduModule(Xmill):
 
     def handle_naglowek_rozdzial(self, element):
         if not self.options['teacher']:
-            if element.text.startswith((u'Wiedza', u'Zadania', u'Słowniczek')):
+            if element.text.startswith((u'Wiedza', u'Zadania', u'Słowniczek', u'Dla ucznia')):
                 self.state['mute'] = False
             else:
                 self.state['mute'] = True
@@ -206,7 +206,17 @@ class EduModule(Xmill):
 
     def handle_naglowek_podrozdzial(self, element):
         self.activity_counter = 0
+        if not self.options['teacher']:
+            if element.text.startswith(u'Dla ucznia'):
+                self.state['mute'] = False
+                return None
+            elif element.text.startswith(u'Dla nauczyciela'):
+                self.state['mute'] = True
+                return None
+            elif self.state['mute']:
+                return None
         return self.handle_texcommand(element)
+    handle_naglowek_podrozdzial.unmuter = True
 
     def handle_uwaga(self, _e):
         return None
@@ -298,9 +308,7 @@ class EduModule(Xmill):
             if surl is None:
                 # print '** missing src on <slowniczek>, setting default'
                 surl = 'http://edukacjamedialna.edu.pl/lekcje/slowniczek/'
-            sxml = None
-            if surl:
-                sxml = etree.fromstring(self.options['wldoc'].provider.by_uri(surl).get_string())
+            sxml = etree.fromstring(self.options['wldoc'].provider.by_uri(surl).get_string())
             self.options = {'slowniczek': True, 'slowniczek_xml': sxml }
 
         listcmd = {'num': 'enumerate',
@@ -398,6 +406,7 @@ class EduModule(Xmill):
         frmt = self.options['format']
         name = element.attrib.get('nazwa', '').strip()
         image = frmt.get_image(name.strip())
+        name = image.get_filename().rsplit('/', 1)[-1]
         img_path = "obraz/%s" % name.replace("_", "")
         frmt.attachments[img_path] = image
         return cmd("obraz", parms=[img_path])(self)