excercises almost done with checking
[librarian.git] / librarian / pyhtml.py
index fcfb3a6..bb835ae 100644 (file)
@@ -13,29 +13,6 @@ class EduModule(Xmill):
         super(EduModule, self).__init__(*args)
         self.activity_counter = 0
 
         super(EduModule, self).__init__(*args)
         self.activity_counter = 0
 
-
-
-#     def handle_utwor(self, element):
-#         v = {}
-# #        from pdb import *; set_trace()
-#         v['title'] = element.xpath('//dc:title/text()', namespaces={'dc':DCNS.uri})[0]
-#         return u"""
-# <!DOCTYPE html>
-# <html>
-# <head>
-# <meta charset="utf-8"/>
-# <title>%(title)s</title>
-# <link rel="stylesheet" type="text/css" href="/media/static/edumed/edumed.css"/>
-# <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
-# <script src="/media/static/edumed/js/edumed.js"></script>
-# </head>
-# <body>
-# """ % v, u"""
-# </body>
-# </html>
-# """
-
-    
     def handle_powiesc(self, element):
         return u"""
 <div class="module" id="book-text">
     def handle_powiesc(self, element):
         return u"""
 <div class="module" id="book-text">
@@ -117,6 +94,7 @@ class EduModule(Xmill):
             'uporzadkuj': Uporzadkuj,
             'luki': Luki,
             'zastap': Zastap,
             'uporzadkuj': Uporzadkuj,
             'luki': Luki,
             'zastap': Zastap,
+            'przyporzadkuj': Przyporzadkuj
             }
         
         typ = element.attrib['typ']
             }
         
         typ = element.attrib['typ']
@@ -159,16 +137,19 @@ class Excercise(EduModule):
         self.question_counter = 0
         super(Excercise, self).__init__(*args, **kw)
 
         self.question_counter = 0
         super(Excercise, self).__init__(*args, **kw)
 
+    def handle_rozw_kom(self, element):
+        return None
+
     def handle_cwiczenie(self, element):
         self.options = {'excercise': element.attrib['typ']}
         self.question_counter = 0
         self.piece_counter = 0
 
     def handle_cwiczenie(self, element):
         self.options = {'excercise': element.attrib['typ']}
         self.question_counter = 0
         self.piece_counter = 0
 
-        return u"""
+        pre = u"""
 <div class="excercise %(typ)s" data-type="%(typ)s">
 <form action="#" method="POST">
 <div class="excercise %(typ)s" data-type="%(typ)s">
 <form action="#" method="POST">
-""" % element.attrib, \
-u"""
+""" % element.attrib
+        post = u"""
 <div class="buttons">
 <span class="message"></span>
 <input type="button" class="check" value="sprawdź"/>
 <div class="buttons">
 <span class="message"></span>
 <input type="button" class="check" value="sprawdź"/>
@@ -177,8 +158,16 @@ u"""
 </form>
 </div>
 """
 </form>
 </div>
 """
+        # Add a single <pytanie> tag if it's not there
+        if not element.xpath(".//pytanie"):
+            qpre, qpost = self.handle_pytanie(element)
+            pre = pre + qpre
+            post = qpost + post
+        return pre, post
  
     def handle_pytanie(self, element):
  
     def handle_pytanie(self, element):
+        """This will handle <cwiczenie> element, when there is no <pytanie>
+        """
         self.question_counter += 1
         self.piece_counter = 0
         solution = element.attrib.get('rozw', None)
         self.question_counter += 1
         self.piece_counter = 0
         solution = element.attrib.get('rozw', None)
@@ -187,7 +176,7 @@ u"""
 
         return '<div class="question" data-no="%d" %s>' %\
             (self.question_counter, solution_s), \
 
         return '<div class="question" data-no="%d" %s>' %\
             (self.question_counter, solution_s), \
-    "</div>"    
+    "</div>"
 
 
 class Wybor(Excercise):
 
 
 class Wybor(Excercise):
@@ -208,16 +197,18 @@ class Wybor(Excercise):
 
 
 class Uporzadkuj(Excercise):
 
 
 class Uporzadkuj(Excercise):
-    def handle_cwiczenie(self, element):
-        pre, post = super(Uporzadkuj, self).handle_cwiczenie(element)
+    def handle_pytanie(self, element):
+        """
+Overrides the returned content default handle_pytanie
+        """
+        # we ignore the result, returning our own
+        super(Uporzadkuj, self).handle_pytanie(element)
         order_items = element.xpath(".//punkt/@rozw")
         order_items = element.xpath(".//punkt/@rozw")
-        import pdb
-        if order_items == []: pdb.set_trace()
 
 
-        return pre + u"""<div class="question" data-original="%s">""" % \
-            ','.join(order_items), \
-            u"""</div>""" + post
-    
+        return u"""<div class="question" data-original="%s" data-no="%s">""" % \
+            (','.join(order_items), self.question_counter), \
+            u"""</div>"""
+
     def handle_punkt(self, element):
         return """<li class="question-piece" data-pos="%(rozw)s"/>""" \
             % element.attrib,\
     def handle_punkt(self, element):
         return """<li class="question-piece" data-pos="%(rozw)s"/>""" \
             % element.attrib,\
@@ -229,29 +220,40 @@ class Luki(Excercise):
         return '<input type="text" class="luka question-piece" data-solution="%s"></input>' % element.text
 
 
         return '<input type="text" class="luka question-piece" data-solution="%s"></input>' % element.text
 
 
-
 class Zastap(Excercise):
     def handle_zastap(self, element):
         return '<span class="zastap question-piece" data-solution="%(rozw)s">' % element.attrib, '</span>'
 
 
 class Przyporzadkuj(Excercise):
 class Zastap(Excercise):
     def handle_zastap(self, element):
         return '<span class="zastap question-piece" data-solution="%(rozw)s">' % element.attrib, '</span>'
 
 
 class Przyporzadkuj(Excercise):
-    def handle_lista(self, element):
+    def handle_lista(self, lista):
+        print "in lista %s %s" % (lista.attrib, self.options)
         if 'nazwa' in lista.attrib:
             attrs = {
                 'data-name': lista.attrib['nazwa'],
         if 'nazwa' in lista.attrib:
             attrs = {
                 'data-name': lista.attrib['nazwa'],
-                'class': 'category'
+                'class': 'predicate'
                 }
                 }
+            self.options = {'predicate': True}
         elif 'cel' in lista.attrib:
             attrs = {
                 'data-target': lista.attrib['cel'],
         elif 'cel' in lista.attrib:
             attrs = {
                 'data-target': lista.attrib['cel'],
-                'class': 'object'
+                'class': 'subject'
                 }
                 }
+            self.options = {'subject': True}
         else:
             attrs = {}
         else:
             attrs = {}
-        return super(Przyporzadkuj, self).handle_lista(element, attrs)  
+        pre, post = super(Przyporzadkuj, self).handle_lista(lista, attrs)
+        return pre, post + '<br class="clr"/>'
 
 
+    def handle_punkt(self, element):
+        print "in punkt %s %s" % (element.attrib, self.options)
 
 
+        if self.options['subject']:
+            return '<li data-solution="%(rozw)s" class="question-piece draggable">' % element.attrib, '</li>'
+        elif self.options['predicate']:
+            return '<li data-predicate="%(nazwa)s">' % element.attrib, '<ul class="subjects droppable"></ul></li>'
+        else:
+            return super(Przyporzadkuj, self).handle_punkt(element)
 
 
 def transform(wldoc, stylesheet='edumed', options=None, flags=None):
 
 
 def transform(wldoc, stylesheet='edumed', options=None, flags=None):
@@ -261,7 +263,6 @@ def transform(wldoc, stylesheet='edumed', options=None, flags=None):
     otherwise returns True if file has been written,False if it hasn't.
     File won't be written if it has no content.
     """
     otherwise returns True if file has been written,False if it hasn't.
     File won't be written if it has no content.
     """
-    
     edumod = EduModule(options)
 #    from pdb import set_trace; set_trace()
     html = edumod.generate(wldoc.edoc.getroot())
     edumod = EduModule(options)
 #    from pdb import set_trace; set_trace()
     html = edumod.generate(wldoc.edoc.getroot())