Merge branch 'master' into edumed-ofop
authorMarcin Koziej <mkoziej@ksi.(none)>
Wed, 30 Jan 2013 14:44:27 +0000 (15:44 +0100)
committerMarcin Koziej <mkoziej@ksi.(none)>
Wed, 30 Jan 2013 14:44:27 +0000 (15:44 +0100)
12 files changed:
librarian/__init__.py
librarian/dcparser.py
librarian/functions.py
librarian/parser.py
librarian/pyhtml.py [new file with mode: 0644]
librarian/xmlutils.py [new file with mode: 0644]
tests/files/edumed/#gim-wizerunek-w-sieci.html# [new file with mode: 0644]
tests/files/edumed/edumed-preview.tgz [new file with mode: 0644]
tests/files/edumed/gim-wizerunek-w-sieci.html [new file with mode: 0644]
tests/files/edumed/gim-wizerunek-w-sieci.xml [new file with mode: 0644]
tests/files/edumed/uwagi.txt [new file with mode: 0644]
tests/test_pyhtml.py [new file with mode: 0644]

index c46d5d1..09bdcd7 100644 (file)
@@ -79,8 +79,8 @@ class WLURI(object):
     """Represents a WL URI. Extracts slug from it."""
     slug = None
 
-    example = 'http://wolnelektury.pl/katalog/lektura/template/'
-    _re_wl_uri = re.compile(r'http://(www\.)?wolnelektury.pl/katalog/lektura/'
+    example = 'http://edukacjamedialna.edu.pl/'
+    _re_wl_uri = re.compile(r'http://(www\.)?edukacjamedialna.edu.pl/'
             '(?P<slug>[-a-z0-9]+)/?$')
 
     def __init__(self, uri):
@@ -104,7 +104,7 @@ class WLURI(object):
         u'http://wolnelektury.pl/katalog/lektura/a-slug/'
 
         """
-        uri = 'http://wolnelektury.pl/katalog/lektura/%s/' % slug
+        uri = 'http://prawokultury.pl/publikacje/%s/' % slug
         return cls(uri)
 
     def __unicode__(self):
@@ -150,7 +150,10 @@ import dcparser
 
 DEFAULT_BOOKINFO = dcparser.BookInfo(
         { RDFNS('about'): u'http://wiki.wolnepodreczniki.pl/Lektury:Template'},
-        { DCNS('creator'): [u'Some, Author'],
+        { 
+          DCNS('creator.expert'): [u'Some, Author'],
+          DCNS('creator.scenario'): [u'Some, Author'],
+          DCNS('creator.textbook'): [u'Some, Author'],
           DCNS('title'): [u'Some Title'],
           DCNS('subject.period'): [u'Unknown'],
           DCNS('subject.type'): [u'Unknown'],
index eddd8e5..062dc9f 100644 (file)
@@ -163,7 +163,9 @@ class WorkInfo(object):
     __metaclass__ = DCInfo
 
     FIELDS = (
-        Field( DCNS('creator'), 'authors', as_person, salias='author', multiple=True),
+        Field( DCNS('creator.expert'), 'authors', as_person, salias='author', multiple=True),
+        Field( DCNS('creator.scenario'), 'authors', as_person, salias='author', multiple=True),
+        Field( DCNS('creator.textbook'), 'authors', as_person, salias='author', multiple=True),
         Field( DCNS('title'), 'title'),
         Field( DCNS('type'), 'type', required=False, multiple=True),
 
index 523b3d5..e91d7e1 100644 (file)
@@ -14,42 +14,47 @@ def _register_function(f):
     ns[f.__name__] = f
 
 
-def reg_substitute_entities():
-    ENTITY_SUBSTITUTIONS = [
-        (u'---', u'—'),
-        (u'--', u'–'),
-        (u'...', u'…'),
-        (u',,', u'„'),
-        (u'"', u'”'),
-    ]
-
-    def substitute_entities(context, text):
-        """XPath extension function converting all entites in passed text."""
-        if isinstance(text, list):
-            text = ''.join(text)
-        for entity, substitutution in ENTITY_SUBSTITUTIONS:
-            text = text.replace(entity, substitutution)
-        return text
+ENTITY_SUBSTITUTIONS = [
+       (u'---', u'—'),
+       (u'--', u'–'),
+       (u'...', u'…'),
+       (u',,', u'„'),
+       (u'"', u'”'),
+]
+
+def substitute_entities(context, text):
+    """XPath extension function converting all entites in passed text."""
+    if isinstance(text, list):
+        text = ''.join(text)
+    for entity, substitutution in ENTITY_SUBSTITUTIONS:
+        text = text.replace(entity, substitutution)
+    return text
 
+
+def reg_substitute_entities():
     _register_function(substitute_entities)
 
 
+def strip(context, text):
+    """Remove unneeded whitespace from beginning and end"""
+    if isinstance(text, list):
+        text = ''.join(text)
+    return re.sub(r'\s+', ' ', text).strip()
+
+
 def reg_strip():
-    def strip(context, text):
-        """Remove unneeded whitespace from beginning and end"""
-        if isinstance(text, list):
-            text = ''.join(text)
-        return re.sub(r'\s+', ' ', text).strip()
     _register_function(strip)
 
 
+def starts_white(context, text):
+    if isinstance(text, list):
+        text = ''.join(text)
+    if not text:
+        return False
+    return text[0].isspace()
+
+
 def reg_starts_white():
-    def starts_white(context, text):
-        if isinstance(text, list):
-            text = ''.join(text)
-        if not text:
-            return False
-        return text[0].isspace()
     _register_function(starts_white)
 
 
@@ -63,44 +68,50 @@ def reg_ends_white():
     _register_function(ends_white)
 
 
+def wrap_words(context, text, wrapping):
+    """XPath extension function automatically wrapping words in passed text"""
+    if isinstance(text, list):
+        text = ''.join(text)
+    if not wrapping:
+        return text
+
+    words = re.split(r'\s', text)
+
+    line_length = 0
+    lines = [[]]
+    for word in words:
+        line_length += len(word) + 1
+        if line_length > wrapping:
+            # Max line length was exceeded. We create new line
+            lines.append([])
+            line_length = len(word)
+        lines[-1].append(word)
+    return '\n'.join(' '.join(line) for line in lines)
+
+
 def reg_wrap_words():
-    def wrap_words(context, text, wrapping):
-        """XPath extension function automatically wrapping words in passed text"""
-        if isinstance(text, list):
-            text = ''.join(text)
-        if not wrapping:
-            return text
-
-        words = re.split(r'\s', text)
-
-        line_length = 0
-        lines = [[]]
-        for word in words:
-            line_length += len(word) + 1
-            if line_length > wrapping:
-                # Max line length was exceeded. We create new line
-                lines.append([])
-                line_length = len(word)
-            lines[-1].append(word)
-        return '\n'.join(' '.join(line) for line in lines)
     _register_function(wrap_words)
 
 
+def person_name(context, text):
+    """ Converts "Name, Forename" to "Forename Name" """
+    if isinstance(text, list):
+        text = ''.join(text)
+    return Person.from_text(text).readable()
+
+
 def reg_person_name():
-    def person_name(context, text):
-        """ Converts "Name, Forename" to "Forename Name" """
-        if isinstance(text, list):
-            text = ''.join(text)
-        return Person.from_text(text).readable()
     _register_function(person_name)
 
 
+def texcommand(context, text):
+    """Remove non-letters"""
+    if isinstance(text, list):
+        text = ''.join(text)
+    return re.sub(r'[^a-zA-Z]', '', text).strip()
+
+
 def reg_texcommand():
-    def texcommand(context, text):
-        """Remove non-letters"""
-        if isinstance(text, list):
-            text = ''.join(text)
-        return re.sub(r'[^a-zA-Z]', '', text).strip()
     _register_function(texcommand)
 
 
index a9e8c65..9068fc0 100644 (file)
@@ -183,7 +183,7 @@ class WLDocument(object):
     # Converters
 
     def as_html(self, *args, **kwargs):
-        from librarian import html
+        from librarian import pyhtml as html
         return html.transform(self, *args, **kwargs)
 
     def as_text(self, *args, **kwargs):
diff --git a/librarian/pyhtml.py b/librarian/pyhtml.py
new file mode 100644 (file)
index 0000000..5c2e5c6
--- /dev/null
@@ -0,0 +1,383 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from lxml import etree
+from librarian import OutputFile, RDFNS, DCNS
+from xmlutils import Xmill, tag, tagged, ifoption
+from librarian import functions
+import re
+import random
+
+
+class EduModule(Xmill):
+    def __init__(self, *args):
+        super(EduModule, self).__init__(*args)
+        self.activity_counter = 0
+        self.register_text_filter(lambda t: functions.substitute_entities(None, t))
+
+    def handle_powiesc(self, element):
+        return u"""
+<div class="module" id="book-text">
+<!-- <span class="teacher-toggle">
+  <input type="checkbox" name="teacher-toggle" id="teacher-toggle"/>
+  <label for="teacher-toggle">Pokaż treść dla nauczyciela</label>
+ </span>-->
+
+""", u"</div>"
+
+    handle_autor_utworu = tag("span", "author")
+    handle_nazwa_utworu = tag("h1", "title")
+    handle_dzielo_nadrzedne = tag("span", "collection")
+    handle_podtytul = tag("span", "subtitle")
+    handle_naglowek_akt = handle_naglowek_czesc = handle_srodtytul = tag("h2")
+    handle_naglowek_scena = handle_naglowek_rozdzial = tag('h3')
+    handle_naglowek_osoba = handle_naglowek_podrozdzial = tag('h4')
+    handle_akap = handle_akap_dialog = handle_akap_cd = tag('p', 'paragraph')
+    handle_strofa = tag('div', 'stanza')
+
+    def handle_aktywnosc(self, element):
+        self.activity_counter += 1
+        self.options = {
+            'activity': True,
+            'activity_counter': self.activity_counter
+            }
+        submill = EduModule()
+
+        opis = submill.generate(element.xpath('opis')[0])
+
+        n = element.xpath('wskazowki')
+        if n: wskazowki = submill.generate(n[0])
+
+        else: wskazowki = ''
+        n = element.xpath('pomoce')
+
+        if n: pomoce = submill.generate(n[0])
+        else: pomoce = ''
+
+        forma = ''.join(element.xpath('forma/text()'))
+
+        czas = ''.join(element.xpath('czas/text()'))
+
+        counter = self.activity_counter
+
+        return u"""
+<div class="activity">
+ <div class="text">%(counter)d.
+  %(opis)s
+  %(wskazowki)s
+ </div>
+ <div class="info">
+  <p>Czas: %(czas)s min</p>
+  <p>Forma: %(forma)s</p>
+  %(pomoce)s
+ </div>
+ <div class="clearboth"></div>
+</div>
+""" % locals()
+
+    handle_opis = ifoption(activity=False)(tag('div', 'description'))
+    handle_wskazowki = ifoption(activity=False)(tag('div', ('hints', 'teacher')))
+
+    @ifoption(activity=False)
+    @tagged('div', 'materials')
+    def handle_pomoce(self, _):
+        return "Pomoce: ", ""
+
+    def handle_czas(self, *_):
+        return
+
+    def handle_forma(self, *_):
+        return
+
+    def handle_cwiczenie(self, element):
+        exercise_handlers = {
+            'wybor': Wybor,
+            'uporzadkuj': Uporzadkuj,
+            'luki': Luki,
+            'zastap': Zastap,
+            'przyporzadkuj': Przyporzadkuj,
+            'prawdafalsz': PrawdaFalsz
+            }
+
+        typ = element.attrib['typ']
+        handler = exercise_handlers[typ](self.options)
+        return handler.generate(element)
+
+    # Lists
+    def handle_lista(self, element, attrs={}):
+        ltype = element.attrib.get('typ', 'punkt')
+        if ltype == 'slowniczek':
+            self.options = {'slowniczek': True}
+            return '<div class="slowniczek">', '</div>'
+### robie teraz punkty wyboru
+        listtag = {'num': 'ol',
+               'punkt': 'ul',
+               'alfa': 'ul',
+               'czytelnia': 'ul'}[ltype]
+
+        classes = attrs.get('class', '')
+        if classes: del attrs['class']
+
+        attrs_s = ' '.join(['%s="%s"' % kv for kv in attrs.items()])
+        if attrs_s: attrs_s = ' ' + attrs_s
+
+        return '<%s class="lista %s %s"%s>' % (listtag, ltype, classes, attrs_s), '</%s>' % listtag
+
+    def handle_punkt(self, element):
+        if self.options['slowniczek']:
+            return '<dl>', '</dl>'
+        else:
+            return '<li>', '</li>'
+
+
+    def handle_podpis(self, element):
+        return u"""<div class="caption">""", u"</div>"
+
+    def handle_tabela(self, element):
+        has_frames = int(element.attrib.get("ramki", "0"))
+        if has_frames: frames_c = "framed"
+        else: frames_c = ""
+        return u"""<table class="%s">""" % frames_c, u"</table>"
+
+    def handle_wiersz(self, element):
+        return u"<tr>", u"</tr>"
+
+    def handle_kol(self, element):
+        return u"<td>", u"</td>"
+
+    def handle_rdf__RDF(self, _):
+        # ustal w opcjach  rzeczy :D
+        return
+
+
+class Exercise(EduModule):
+    def __init__(self, *args, **kw):
+        self.question_counter = 0
+        super(Exercise, self).__init__(*args, **kw)
+
+    def handle_rozw_kom(self, element):
+        return u"""<div style="display:none" class="comment">""", u"""</div>"""
+
+    def handle_cwiczenie(self, element):
+        self.options = {'exercise': element.attrib['typ']}
+        self.question_counter = 0
+        self.piece_counter = 0
+
+        pre = u"""
+<div class="exercise %(typ)s" data-type="%(typ)s">
+<form action="#" method="POST">
+""" % element.attrib
+        post = u"""
+<div class="buttons">
+<span class="message"></span>
+<input type="button" class="check" value="sprawdź"/>
+<input type="button" class="retry" style="display:none" value="spróbuj ponownie"/>
+<input type="button" class="solutions" value="pokaż rozwiązanie"/>
+<input type="button" class="reset" value="reset"/>
+</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):
+        """This will handle <cwiczenie> element, when there is no <pytanie>
+        """
+        add_class = ""
+        self.question_counter += 1
+        self.piece_counter = 0
+        solution = element.attrib.get('rozw', None)
+        if solution: solution_s = ' data-solution="%s"' % solution
+        else: solution_s = ''
+
+        handles = element.attrib.get('uchwyty', None)
+        if handles:
+            add_class += ' handles handles-%s' % handles
+            self.options = {'handles': handles}
+
+        minimum = element.attrib.get('min', None)
+        if minimum: minimum_s = ' data-minimum="%d"' % int(minimum)
+        else: minimum_s = ''
+
+        return '<div class="question%s" data-no="%d" %s>' %\
+            (add_class, self.question_counter, solution_s + minimum_s), \
+            "</div>"
+
+
+class Wybor(Exercise):
+    def handle_cwiczenie(self, element):
+        pre, post = super(Wybor, self).handle_cwiczenie(element)
+        is_single_choice = True
+        for p in element.xpath(".//pytanie"):
+            solutions = re.split(r"[, ]+", p.attrib['rozw'])
+            if len(solutions) != 1:
+                is_single_choice = False
+                break
+        self.options = {'single': is_single_choice}
+        return pre, post
+
+    def handle_punkt(self, element):
+        if self.options['exercise'] and element.attrib.get('nazwa', None):
+            qc = self.question_counter
+            self.piece_counter += 1
+            no = self.piece_counter
+            eid = "q%(qc)d_%(no)d" % locals()
+            aname = element.attrib.get('nazwa', None)
+            if self.options['single']:
+                return u"""
+<li class="question-piece" data-qc="%(qc)d" data-no="%(no)d" data-name="%(aname)s">
+<input type="radio" name="q%(qc)d" id="%(eid)s" value="%(aname)s" />
+<label for="%(eid)s">
+                """ % locals(), u"</label></li>"
+            else:
+                return u"""
+<li class="question-piece" data-qc="%(qc)d" data-no="%(no)d" data-name="%(aname)s">
+<input type="checkbox" name="%(eid)s" id="%(eid)s" />
+<label for="%(eid)s">
+""" % locals(), u"</label></li>"
+
+        else:
+            return super(Wybor, self).handle_punkt(element)
+
+
+class Uporzadkuj(Exercise):
+    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")
+
+        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,\
+            "</li>"
+
+
+class Luki(Exercise):
+    def find_pieces(self, question):
+        return question.xpath("//luka")
+
+    def solution_html(self, piece):
+        return piece.text + ''.join(
+            [etree.tostring(n, encoding=unicode)
+             for n in piece])
+
+    def handle_pytanie(self, element):
+        qpre, qpost = super(Luki, self).handle_pytanie(element)
+
+        luki = list(enumerate(self.find_pieces(element)))
+        luki_html = ""
+        i = 0
+        random.shuffle(luki)
+        for (i, luka) in luki:
+            i += 1
+            luka_html = self.solution_html(luka)
+            luki_html += u'<span class="draggable question-piece" data-no="%d">%s</span>' % (i, luka_html)
+        self.words_html = '<div class="words">%s</div>' % luki_html
+
+        return qpre, qpost
+
+    def handle_opis(self, element):
+        pre, post = super(Luki, self).handle_opis(element)
+        return pre, self.words_html + post
+
+    def handle_luka(self, element):
+        self.piece_counter += 1
+        return '<span class="placeholder" data-solution="%d"></span>' % self.piece_counter
+
+
+class Zastap(Luki):
+    def find_pieces(self, question):
+        return question.xpath("//zastap")
+
+    def solution_html(self, piece):
+        return piece.attrib['rozw']
+
+    def handle_zastap(self, element):
+        self.piece_counter += 1
+        return '<span class="placeholder zastap question-piece" data-solution="%d">' \
+            % self.piece_counter, '</span>'
+
+
+class Przyporzadkuj(Exercise):
+    def handle_pytanie(self, element):
+        pre, post = super(Przyporzadkuj, self).handle_pytanie(element)
+        minimum = element.attrib.get("min", None)
+        if minimum:
+            self.options = {"min": int(minimum)}
+        return pre, post
+
+    def handle_lista(self, lista):
+        if 'nazwa' in lista.attrib:
+            attrs = {
+                'data-name': lista.attrib['nazwa'],
+                'class': 'predicate'
+            }
+            self.options = {'predicate': True}
+        elif 'cel' in lista.attrib:
+            attrs = {
+                'data-target': lista.attrib['cel'],
+                'class': 'subject'
+            }
+            self.options = {'subject': True, 'handles': 'uchwyty' in lista.attrib}
+        else:
+            attrs = {}
+        pre, post = super(Przyporzadkuj, self).handle_lista(lista, attrs)
+        return pre, post + '<br class="clr"/>'
+
+    def handle_punkt(self, element):
+        if self.options['subject']:
+            self.piece_counter += 1
+            if self.options['handles']:
+                return '<li><span data-solution="%s" data-no="%s" class="question-piece draggable handle">%s</span>' % (element.attrib['rozw'], self.piece_counter, self.piece_counter), '</li>'
+            else:
+                return '<li data-solution="%s" data-no="%s" class="question-piece draggable">' % (element.attrib['rozw'], self.piece_counter), '</li>'
+
+        elif self.options['predicate']:
+            if self.options['min']:
+                placeholders = u'<li class="placeholder"/>' * self.options['min']
+            else:
+                placeholders = u'<li class="placeholder multiple"/>'
+            return '<li data-predicate="%(nazwa)s">' % element.attrib, '<ul class="subjects">' + placeholders + '</ul></li>'
+
+        else:
+            return super(Przyporzadkuj, self).handle_punkt(element)
+
+
+class PrawdaFalsz(Exercise):
+    def handle_punkt(self, element):
+        if 'rozw' in element.attrib:
+            return u'''<li data-solution="%s" class="question-piece">
+            <span class="buttons">
+            <a href="#" data-value="true" class="true">Prawda</a>
+            <a href="#" data-value="false" class="false">Fałsz</a>
+        </span>''' % {'prawda': 'true', 'falsz': 'false'}[element.attrib['rozw']], '</li>'
+        else:
+            return super(PrawdaFalsz, self).handle_punkt(element)
+
+
+def transform(wldoc, stylesheet='edumed', options=None, flags=None):
+    """Transforms the WL document to XHTML.
+
+    If output_filename is None, returns an XML,
+    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())
+
+    return OutputFile.from_string(html.encode('utf-8'))
diff --git a/librarian/xmlutils.py b/librarian/xmlutils.py
new file mode 100644 (file)
index 0000000..d762320
--- /dev/null
@@ -0,0 +1,184 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from lxml import etree
+from collections import defaultdict
+
+
+class Xmill(object):
+    """Transforms XML to some text.
+    Used instead of XSLT which is difficult and cumbersome.
+
+    """
+    def __init__(self, options=None):
+        self._options = []
+        if options:
+            self._options.append(options)
+        self.text_filters = []
+
+    def register_text_filter(self, fun):
+        self.text_filters.append(fun)
+
+    def filter_text(self, text):
+        for flt in self.text_filters:
+            if text is None:
+                return None
+            text = flt(text)
+        return text
+
+    def generate(self, document):
+        """Generate text from node using handlers defined in class."""
+        output = self._handle_element(document)
+        return u''.join([x for x in flatten(output) if x is not None])
+
+    @property
+    def options(self):
+        """Returnes merged scoped options for current node.
+        """
+        # Here we can see how a decision not to return the modified map
+        # leads to a need for a hack.
+        return reduce(lambda a, b: a.update(b) or a, self._options, defaultdict(lambda: False))
+
+    @options.setter
+    def options(self, opts):
+        """Sets options overrides for current and child nodes
+        """
+        self._options.append(opts)
+
+
+    def _handle_for_element(self, element):
+        ns = None
+        tagname = None
+#        from nose.tools import set_trace
+
+        if isinstance(element, etree._Comment): return None
+
+        if element.tag[0] == '{':
+            for nshort, nhref in element.nsmap.items():
+                try:
+                    if element.tag.index('{%s}' % nhref) == 0:
+                        ns = nshort
+                        tagname  = element.tag[len('{%s}' % nhref):]
+                        break
+                except ValueError:
+                    pass
+            if not ns:
+                raise ValueError("Strange ns for tag: %s, nsmap: %s" %
+                                 (element.tag, element.nsmap))
+        else:
+            tagname = element.tag
+
+        if ns:
+            meth_name = "handle_%s__%s" % (ns, tagname)
+        else:
+            meth_name = "handle_%s" % (tagname,)
+
+        handler = getattr(self, meth_name, None)
+        return handler
+
+    def next(self, element):
+        if len(element):
+            return element[0]
+
+        while True:
+            sibling = element.getnext()
+            if sibling is not None: return sibling  # found a new branch to dig into
+            element = element.getparent()
+            if element is None: return None  # end of tree
+
+    def _handle_element(self, element):
+        handler = self._handle_for_element(element)
+        # How many scopes
+        try:
+            options_scopes = len(self._options)
+
+            if handler is None:
+                pre = [self.filter_text(element.text)]
+                post = []
+            else:
+                vals = handler(element)
+                # depending on number of returned values, vals can be None, a value, or a tuple.
+                # how poorly designed is that? 9 lines below are needed just to unpack this.
+                if vals is None:
+                    return []
+                else:
+                    if not isinstance(vals, tuple):
+                        return [vals, self.filter_text(element.tail)]
+                    else:
+                        pre = [vals[0], self.filter_text(element.text)]
+                        post = [vals[1], self.filter_text(element.tail)]
+
+            out = pre + [self._handle_element(child) for child in element] + post
+        finally:
+            # clean up option scopes if necessary
+            self._options = self._options[0:options_scopes]
+        return out
+
+
+def tag(name, classes=None, **attrs):
+    """Returns a handler which wraps node contents in tag `name', with class attribute
+    set to `classes' and other attributes according to keyword paramters
+    """
+    if classes:
+        if isinstance(classes, (tuple, list)): classes = ' '.join(classes)
+        attrs['class'] = classes
+    a = ''.join([' %s="%s"' % (k,v) for (k,v) in attrs.items()])
+    def _hnd(self, element):
+        return "<%s%s>" % (name, a), "</%s>" % name
+    return _hnd
+
+
+def tagged(name, classes=None, **attrs):
+    """Handler decorator which wraps handler output in tag `name', with class attribute
+    set to `classes' and other attributes according to keyword paramters
+    """
+    if classes:
+        if isinstance(classes, (tuple,list)): classes = ' '.join(classes)
+        attrs['class'] = classes
+    a = ''.join([' %s="%s"' % (k,v) for (k,v) in attrs.items()])
+    def _decor(f):
+        def _wrap(self, element):
+            r = f(self, element)
+            if r is None: return
+
+            prepend = "<%s%s>" % (name, a)
+            append = "</%s>" % name
+
+            if isinstance(r, tuple):
+                return prepend + r[0], r[1] + append
+            return prepend + r + append
+        return _wrap
+    return _decor
+
+
+def ifoption(**options):
+    """Decorator which enables node only when options are set
+    """
+    def _decor(f):
+        def _handler(self, *args, **kw):
+            opts = self.options
+            for k, v in options.items():
+                if opts[k] != v:
+                    return
+            return f(self, *args, **kw)
+        return _handler
+    return _decor
+
+def flatten(l, ltypes=(list, tuple)):
+    """flatten function from BasicPropery/BasicTypes package
+    """
+    ltype = type(l)
+    l = list(l)
+    i = 0
+    while i < len(l):
+        while isinstance(l[i], ltypes):
+            if not l[i]:
+                l.pop(i)
+                i -= 1
+                break
+            else:
+                l[i:i + 1] = l[i]
+        i += 1
+    return ltype(l)
diff --git a/tests/files/edumed/#gim-wizerunek-w-sieci.html# b/tests/files/edumed/#gim-wizerunek-w-sieci.html#
new file mode 100644 (file)
index 0000000..61fe0ef
--- /dev/null
@@ -0,0 +1,322 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8"/>
+<title>Wizerunek w sieci</title>
+<link rel="stylesheet" type="text/css" href="master.book.css"/>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+</head>
+<body>
+
+<div id="book-text" class="module">
+<h1 class="title">Wizerunek w sieci</h1>
+<p class="paragraph"> Numer porządkowy: 2.1 </p>
+<h3>Informacje</h3>
+
+
+<h4>Cele operacyjne</h4>
+<p class="paragraph">Uczestnik:</p>
+<ul class="lista punkt">
+<li>rozumie, że podejmowane przez niego aktywności w internecie są obserwowane i oceniane przez innych;</li>
+<li>wie, że jego wizerunek w sieci zależy nie tylko od informacji zamieszczonych na portalach społecznościowych, ale również m.in. od sposobu, w jaki pisze e-maile;</li>
+<li>rozumie szanse i zagrożenia związane z kreowaniem swojego wizerunku w sieci;</li>
+<li>potrafi krytycznie analizować wizerunki kreowane przez inne osoby;</li>
+<li>wie, w jaki sposób można modyfikować swój wizerunek w sieci;</li>
+<li>jest świadomy niebezpieczeństw związanych z zamieszczaniem prywatnych informacji w sieci, w tym zwłaszcza zdjęć i danych osobowych.</li>
+</ul>
+
+
+
+<h3>Wiedza w pigułce</h3>
+
+<p class="paragraph">Zwykle przejmujemy się tym, co myślą o nas inni. Opinia na nasz temat zależy od wielu czynników. Może mieć na nią wpływ nasze zachowanie, ubiór czy zainteresowania. Wszystko to składa się na nasz wizerunek.</p>
+<p class="paragraph">We współczesnym świecie internet stał się ważną przestrzenią tworzenia naszego wizerunku. Nasze aktywności w sieci mają na niego duży wpływ. </p>
+<p class="paragraph">Na internautach leży odpowiedzialność za to, co udostępnią. Nawet po usunięciu pewnych treści, w sieci pozostaje po nich ślad, np. na serwerach wyszukiwarek albo jeśli ktoś wcześniej je skopiuje.</p>
+<p class="paragraph">Dlatego też powinieneś zwracać szczególną uwagę na to, co i jak mówisz w internecie. Na twój wizerunek w sieci wpływają m. in.:</p>
+<ul class="lista punkt">
+<li>twój sposób wyrażania się --- to, czy piszesz zgodnie z zasadami poprawnej polszczyzny, czy przeklinasz, jak dużym zasobem słownictwa się posługujesz;</li>
+<li>profile na portalach społecznościowych, a w szczególności:</li>Poniższe wyliczenie to podpunkty do tego punktu, co nie jest uwzględnione w zapisie graficznym. AS.
+<li>zdjęcia, na których jesteś i które udostępniasz,</li>
+<li>informacje ,,o mnie",</li>
+<li>twoje statusy,</li>
+<li>strony, które ,,lubimy",</li>
+<li>nasze komentarze pod artykułami i wypowiedzi na forach,</li>
+<li>forma adresu mailowego i sposób pisania maili.</li>
+</ul>
+
+<p class="paragraph">Jak widzisz, problem wizerunku w internecie nie ogranicza się tylko do portali społecznościowych. Trudnym zadaniem jest np. zadbanie o dobrą opinię na forum tematycznym. Jego użytkownicy nie wiedzą, kim jesteś prywatnie. Mogą oceniać tylko wypowiedzi podpisane określonym nickiem. W tym przypadku respekt możemy zapewnić sobie pokazywaniem swojej wiedzy, pomocą w rozwiązywaniu problemów innych czy kulturalnym zachowaniem.</p>
+<p class="paragraph">Nie mamy pełnej kontroli nad naszym wizerunkiem w sieci. Inni internauci również mają na niego wpływ. Mogą oznaczyć cię na zdjęciach i otagować w swoich statusach. Warto więc uważnie dostosować ustawienia profilów na serwisach społecznościowych.</p>
+<p class="paragraph">Pamiętaj, że wizerunek innych osób zależy także od ciebie. Udostępnianie kompromitujących dla innych treści jest nieetyczne. Jeśli czujesz, że dany materiał może zaszkodzić innym --- nie udostęniaj go. Do sieci mają przecież dostęp nie tylko znajomi, lecz także nauczyciele czy rodzina. Ich reakcja może całkowicie różnić się od tej, jaką chciałeś wywołać. Szkodząc innym, szkodzisz również swojemu wizerunkowi --- mógłbyś zostać uznany za nielojalnego i złośliwego.</p>
+<h3>Pomysł na lekcję</h3>
+
+
+<p class="paragraph">Tak samo jak z łatwością możemy sprawdzić informacje na temat nowo poznanej osoby, tak i inni mogą wyszukać materiały dotyczące nas samych. Wizerunek w sieci to nie tylko portale społecznościowe. Od zamieszczonych przez nas zdjęć, przez blogi i komentarze innych na nasz temat, po Google i usługi lokalizacyjne różnych aplikacji --- w wielu miejscach odnajdziemy treści dotyczące tego, co robimy i kim jesteśmy.</p>
+
+<h4>Przebieg zajęć</h4>
+
+<div class="activity">
+ <div class="text">
+  <div class="description">
+    <p class="paragraph"> Przeanalizuj wraz z uczestnikami zajęć profile z portalu społwecznościowego zamieszczone w karcie pracy ,,Wizerunek''. Poproś uczestników, aby wyobrazili sobie, że są to profile osób, które niebawem dołączą do ich klasy, przeprowadzając się z innego miasta. </p>
+</div>
+  
+  <div class="hints teacher">
+  <p class="paragraph">Zadaj pytanie: ,,Jakie informacje możemy zdobyć dzięki analizie czyjegoś profilu w mediach społecznościowych?.</p>
+  <p class="paragraph">Zadaj pytanie: ,,Jaki wizerunek siebie stworzyli Małgosia i Michał?.</p>
+  
+  <p class="paragraph">Jako pytania pomocnicze rozważ:</p>
+  <ul class="lista punkt">
+<li>czy Małgosia i Michał świadomie kreują swój wizerunek w sieci?</li>
+<li>które informacje zamieszczone na profilach Małgosi i Michała wydają się nie pasować, do wizerunku, który próbują stworzyć?</li>
+<li>czy zamieszczone przez nich informacje tworzą spójny wizerunek?</li>
+<li>co należałoby zmienić w zaprezentowanych profilach, aby uczynić je bardziej spójnymi i przekonującymi dla rówieśników?</li>
+<li>czy są jakieś informacje zamieszczone przez Małgosię i Michała, które można różnie interpretować? (np. w sposób dla nich niekorzystny)</li>
+<li>jakie ryzyko wiąże się z zamieszczaniem na swoim profilu zdjęć innych osób? W jaki sposób można to ryzyko minimalizować? </li>
+<li>jakie ryzyko wiąże się z zamieszczaniem na swoim profilu danych osobowych? W jaki sposób można to ryzyko minimalizować? </li>
+<li>czy da się całkowicie usunąć z internetu niechciane treści na nasz temat, np. zdjęcia lub opinie innych osób? </li>
+</ul>
+
+  
+  <p class="paragraph">W szczególności zwróć uwagę uczestników na następujące elementy:</p>
+  <ul class="lista punkt">
+<li>należy zadbać o odpowiednie ustawienia prywatności w portalach społecznościowych --- czy chcesz, aby wszyscy mieli dostęp do wszystkich zdjęć?</li>
+<li>Twój adres mailowy to Twoja wizytówka --- czy jest odpowiedni, aby podać go nauczycielowi przy całej klasie?</li>
+<li>nie zamieszczaj zdjęć, które zawierają kompromitujące treści --- zdjęcia zamieszczone w sieci błyskawicznie się rozprzestrzeniają, ale nigdy nie da się ich całkowicie usunąć!</li>
+<li>nie zamieszczaj materiałów, które za jakiś czas okażą się niewygodne --- często zmieniamy zdjęcia i modyfikujemy wpisy w portalach społecznościowych. Teraz ich głównym odbiorcą są koledzy z gimnazjum, ale warto pamiętać, że niebawem będą to znajomi z liceum, studiów, a nawet przyszli pracodawcy. Może się zdarzyć, że obecne materiały będziemy chcieli kiedyś usunąć tak samo jak te, które zamieszczaliśmy w szkole podstawowej. </li>
+<li>dbaj o jakość zamieszczanych komentarzy i opinii</li>
+<li>instytucje służące ochronie danych osobowych nie zawsze mogą szybko zareagować. O wizerunek powinniśmy w pierwszej kolejności zadbać sami. Możemy domagać się od znajomych usuwania wpisów na nasz temat, a przede wszystkim dbać o te materiały, które zamieszczamy sami.  </li>
+</ul>
+
+  
+</div>
+
+ </div>
+ <div class="info">
+  <p>Forma: dyskusja</p>
+  <p>Czas: 20 min.</p>
+  <p>Pomoce: <div class="materials">Pomoce: komputer, rzutnik multimedialny, karta pracy ,,Wizerunek'</div>
+  </p>  
+ </div>
+</div>
+dyskusja
+  20
+
+
+
+<div class="activity">
+ <div class="text">
+  <div class="description">
+  <p class="paragraph">Zadaj pytanie: ,,Za pomocą jakich działań kreujemy nasz wizerunek w sieci?".</p>
+</div>
+  
+  <div class="hints teacher">
+  <p class="paragraph">Wybrane 6--7 odpowiedzi zapisz na tablicy.</p>
+  
+  <p class="paragraph">Jako pytania pomocnicze rozważ:</p>
+  <ul class="lista punkt">
+<li>Czego inni mogą się o nas dowiedzieć na podstawie naszych profili w portalach społecznościowych?</li>
+<li>Czy tylko zdjęcia decydują o naszym wizerunku? Jakie jeszcze inne elementy są brane pod uwagę?</li>
+<li>Czy wizerunek tworzymy tylko za pomocą portali społecznościowcych? Jakie inne aktywności podejmowane w sieci decydują o opinii innych na nasz temat?</li>
+</ul>
+
+  
+  <p class="paragraph">Wśród odpowiedzi znaleźć powinny się m.in.:</p>
+  <ul class="lista punkt">
+<li>zdjęcia --- zamieszczane na portalach społecznościowych</li>
+<li>komentarze --- zamieszczane w grupach dyskusyjnych i na portalach społecznościowych</li>
+<li>zainteresowania zadeklarowane na portalach społecznościowych</li>
+<li>blogi i własne strony internetowe</li>
+<li>język, za pomocą którego komunikujemy się z innymi w sieci  --- w tym ortografia </li>
+<li>maile --- sposób, w jaki je piszemy, w tym zwłaszcza ortografia, zwroty grzecznościowe, przejrzysta konstrukcja, ale i sam adres mailowy, którym się posługujemy (np. sloneczko@buziaczek.pl nie jest odpowiednim adresem do kontaktów z nauczycielem)</li>
+<li>strony internetowe, które odwiedzamy (historia w przeglądarce internetowej, zapamiętane zapytania w wyszukiwarkach internetowych)</li>
+</ul>
+
+</div>
+  
+ </div>
+ <div class="info">
+  <p>Forma: dyskusja</p>
+  <p>Czas: 5 min.</p>
+  <p>Pomoce: <div class="materials">Pomoce: tablica, kreda lub marker</div>
+  </p>  
+ </div>
+</div>
+dyskusja
+  5
+
+
+
+<div class="activity">
+ <div class="text">
+  <div class="description">
+  <p class="paragraph"> Podziel uczestników zajęć na 5 grup. Poproś każdy z zespołów o przygotowanie katalogu porad odnośnie sposobu, w jaki należy kreować swój wizerunek na portalach społecznościowych. </p>
+</div>
+  
+  <div class="hints teacher">
+  <p class="paragraph">Katalog powinien zostać stworzony w 7--8 punktach.</p>
+  
+</div>
+
+  
+ </div>
+ <div class="info">
+  <p>Forma: praca w grupach</p>
+  <p>Czas: 10 min.</p>
+  <p>Pomoce: </p>  
+ </div>
+</div>
+praca w grupach
+  10
+
+
+
+
+<div class="activity">
+ <div class="text">
+  <div class="description">
+  <p class="paragraph">Poproś grupy o krótkie prezentacje. Zachęć pozostałych uczestników zajęć do wygłaszania komentarzy i opinii.</p>
+</div>
+  
+  <div class="hints teacher">
+  
+</div>
+
+  
+ </div>
+ <div class="info">
+  <p>Forma: dyskusja</p>
+  <p>Czas: 10 min.</p>
+  <p>Pomoce: </p>  
+ </div>
+</div>
+dyskusja
+  10
+
+
+<h4>Ewaluacja</h4>
+<p class="paragraph">Czy po przeprowadzeniu zajęć ich uczestnicy:</p>
+<ul class="lista punkt">
+<li>rozumieją, że o ich wizerunku w sieci decydują różne działania, a nie tylko informacje zamieszczone w portalach społecznościowych? (--> rozważ realizację modułu 2.2 ,,Relacje")</li>
+<li>potrafią świadomie kreować i modyfikować swój wizerunek w portalach społecznościowych?</li>
+<li>znają zagrożenia związane z zamieszczaniem danych osobowych w sieci?</li>
+<li>wiedzą, że o ich wizerunku decydują nie tylko zamieszczone przez nich informacje, ale również sposób, w jaki zostaną one odebrane i zinterpretowane przez innych?</li>
+</ul>
+
+<h4>Opcje dodatkowe</h4>
+<p class="paragraph">Zajęcia mogą zostać rozbudowane o pracę w grupach. Podziel uczestników na 5 grup, każdy zespół powinien otrzymać jedno z poniższych zadań:</p>
+<ul class="lista punkt">
+<li>Napisz e-mail do portalu internetowego FOTKA.pl, który bez twojej zgody opublikował zdjęcie w kompromitującej cię pozie. Poproś o usunięcie fotografii.</li>
+<li>Napisz e-mail do kolegi, który po raz kolejny zamieścił na swoim profilu twoje zdjęcie z ostatniej imprezy ze złośliwym komentarzem. Poproś, aby kolega usunął twoje zdjęcia i na przyszłość nie zamieszczał ich bez twojej zgody.</li>
+<li>Napisz e-mail do autora bloga ,,Podróże wakacyjne", który bez twojej zgody zamieścił w opublikowanym przez siebie wpisie długi fragment tekstu z twojego bloga poświęconego wakacjom we Włoszech.</li>
+<li>Napisz e-mail do administratora forum dyskusyjnego poświęconego sztukom walki z prośbą o odblokowanie twojego konta. Konto zostało zablokowane pomyłkowo, jesteś użytkownikiem serwisu od przeszło 2 lat, nigdy nie naruszyłeś regulaminu forum.</li>
+<li>Napisz e-mail z prośbą o sprostowanie do portalu NOTKA.pl, który zamieścił w artykule na temat szkoły, do której uczęszczasz, twoją wypowiedź. Zacytowany fragment został skrócony, w efekcie czego twoje słowa krytykują szkołę, co nie było twoim zamiarem.</li>
+</ul>
+
+<h3>Materiały</h3>
+<p class="paragraph">karta pracy ,,Wizerunek"</p>
+<h3>Zadania sprawdzające</h3>
+<p class="paragraph">Profile w portalach społecznościowych z reguły posiadamy po kilka lat. Często codziennie je aktualizujemy lub oznaczamy nowe linki i zmieniamy zainteresowania. Nasze gusta i upodobania zmieniają się jednak z biegiem lat. W efekcie tego, po upływie pewnego czasu, nasze profile mogą zawierać elementy niespójne z wizerunkiem, który staramy się aktualnie tworzyć. Niektóre z nich mogą zwyczajnie nas ośmieszać w oczach znajomych. Często dzieje się tak w przypadku zdjęć, które zamieściliśmy jeszcze w szkole podstawowej, zadeklarowanych wówczas hobby i grup tematycznych, do których dołączyliśmy.</p>
+
+<p class="paragraph">Zakładając, że poniższe osoby świadomie kreują pewien obraz samych siebie, wskaż te informacje, które wydają się zaskakiwać w poszczególnych profilach oraz sprawiają, że ich właściciele stają się mało wiarygodni. Postaraj się ,,wczuć" w kolejne postacie, pomyśl, na jakim wizerunku może im zależeć, a które informacje sprawiają, że jego osiągnięcie nie jest możliwe.</p>
+
+
+<div class="excercise wybor" data-type="wybor">
+
+<div class="question" data-solution="3, 4, 7, 12, 16">
+<ol class="lista num">
+<p class="paragraph">O sobie:</p>
+<li> uwielbiam  zakupy, szczególnie jak mam kupić kosmetyki, mogę siedzieć w sklepie  godzinami i wypróbowywać wszystkie. Poza tym siedzę w domu i oglądam  seriale (House, my love!), trochę gram na kompie i siedzę na fejsie.</li>
+<p class="paragraph">Zainteresowania:</p>
+<li>nowe marki kosmetyków</li>
+<li>rowery górskie</li>
+<li>teatr</li>
+<li>shopping, shopping, shopping!</li>
+<p class="paragraph">Ulubione cytaty:</p>
+<li>Pieniądze szczęścia nie dają. Dopiero zakupy. (Marilyn Monroe)</li>
+<li>Komuniści  są jak krokodyle, które kiedy otwierają paszcze, nie wiemy ---  uśmiechają się, czy chcą nas pożreć. (Winston Churchill)</li>
+<p class="paragraph">Autorytety:</p>
+<li>Coco Chanel </li>
+<li>Naomi Klein</li>
+<p class="paragraph">Muzyka:</p>
+<li>Lady Gaga</li>
+<li>Shakira</li>
+<li>Behemot </li>
+<p class="paragraph">Polecane strony:</p>
+<li>www.nowinki-kosmetyczne.pl</li>
+<li>www.perfekcyjnymakeup.com</li>
+<li>www.gry-online.pl</li>
+<li>www.portalhistoryczny.pl</li></ol>
+</div>
+
+<div class="question" data-solution="4, 6, 10, 12, 15">
+<ol class="lista num">
+<p class="paragraph">O sobie: </p>
+<li>Nic wam nie powiem. Kto mnie zna, wie kim jestem. Kto mnie nie zna, ten się nie dowie. Jedno słowo wystarczy: hardkorrrrr!</li>
+<p class="paragraph">Zainteresowania:</p>
+<li>ostra muza</li>
+<li>jazda bez trzymanki!!!</li>
+<li>spanie</li>
+<li>szybkie fury</li>
+<p class="paragraph">Ulubione cytaty:</p>
+<li>Zakochaj  się, a każdy wszędzie, wszystkie rzeczy, wszystkie słowa oznaczać będą  ,,miłość". To samo dzieje się, kiedy kogoś utracisz. (Jonathan Caroll)</li>
+<li>Lepiej skrócić o głowę niewinnego niż zawahać się podczas wojny. (Józef Stalin)</li>
+<p class="paragraph">Autorytety:</p>
+<li>Robert Kubica</li>
+<li>Krzysztof Hołowczyc</li>
+<p class="paragraph">Muzyka:</p>
+<li>Kasia Nosowska </li>
+<li>AC/DC</li>
+<li>Britney Spears </li>
+<p class="paragraph">Polecane strony:</p>
+<li>www.szybkiewozy.pl</li>
+<li>www.adrenalina.com</li>
+<li>www.najslodszepieskinaswiecie.pl</li>
+<li>www.rajdy-w-polsce.pl</li></ol>
+</div>
+
+<div class="question" data-solution="5, 7, 11, 15, 16">
+<ol class="lista num">
+<p class="paragraph">O sobie: </p>
+<li>piszę...  dużo... najczęściej do szuflady... ale może kiedyś, ktoś znajdzie te  moje okruszki... lubię siedzieć z kubkiem gorącej czekolady (koniecznie z  cynamonem!) i gapić się w okno... mam za oknem świerk, który z każdym  rokiem rośnie... zaraz nie będę widzieć słońca...</li>
+<p class="paragraph">Zainteresowania: </p>
+<li>czekolada</li>
+<li>cisza</li>
+<li>książki --- im starsze, tym lepsze</li>
+<li>rajdy motocyklowe</li>
+<p class="paragraph">Ulubione cytaty:</p>
+<li>Wiesz... gdy się jest bardzo smutnym, lubi się zachody słońca... (Antoine de Saint-Exupéry)</li>
+<li>Jestem  mężczyzną --- to znaczy ślepcem. Jak wszyscy przede mną, tak i ja  zwaliłem się do dołu na łeb, na szyję. Ożeniłem się. (Nikos Kazantzakis)</li>
+<p class="paragraph">Autorytety:</p>
+<li>Maria Pawlikowska-Jasnorzewska</li>
+<li>Budda</li>
+<p class="paragraph">Muzyka:</p>
+<li>Grzegorz Turnau</li>
+<li>Metallica</li>
+<li>Stare Dobre Małżeństwo</li>
+<p class="paragraph">Polecane strony:</p>
+<li>www.biuroliterackie.pl</li>
+<li>www.cytaty.pl</li>
+<li>www.kwejk.pl</li>
+<li>www.plotek.pl</li></ol>
+</div>
+</div>
+
+
+
+<h3>Słowniczek</h3>
+<div class="slowniczek">
+<dl>media społecznościowe</dl>
+<dl>wizerunek</dl>
+</div>
+
+<h3>Czytelnia </h3>
+<ul class="lista czytelnia">
+<li>http://www.pcworld.pl/news/377106/Zadbaj.o.swoj.wizerunek.na.Facebooku.html [?]</li>
+<li>http://socjomania.pl/jak-sie-piszesz-tak-cie-widza-jak-dbac-o-wizerunek-w-social-media/ ??</li>
+</ul>
+</div>
+
+</body>
+</html>
+
diff --git a/tests/files/edumed/edumed-preview.tgz b/tests/files/edumed/edumed-preview.tgz
new file mode 100644 (file)
index 0000000..f96047b
Binary files /dev/null and b/tests/files/edumed/edumed-preview.tgz differ
diff --git a/tests/files/edumed/gim-wizerunek-w-sieci.html b/tests/files/edumed/gim-wizerunek-w-sieci.html
new file mode 100644 (file)
index 0000000..fff49b1
--- /dev/null
@@ -0,0 +1,442 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8"/>
+<title>Wizerunek w sieci</title>
+<link rel="stylesheet" type="text/css" href="master.book.css"/>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script src="edumed.js"></script>
+</head>
+<body>
+
+
+<div class="module" id="book-text">
+ <span class="teacher-toggle">
+  <input type="checkbox" name="teacher-toggle" id="teacher-toggle"/>
+  <label for="teacher-toggle">Pokaż treść dla nauczyciela</label>
+ </span>
+
+
+<h1 class="title">Wizerunek w sieci</h1>
+<p class="paragraph"> Numer porządkowy: 2.1 </p>
+<h3>Informacje</h3>
+
+
+<h4>Cele operacyjne</h4>
+<p class="paragraph">Uczestnik:</p>
+<ul class="lista punkt">
+<li>rozumie, że podejmowane przez niego aktywności w internecie są obserwowane i oceniane przez innych;</li>
+<li>wie, że jego wizerunek w sieci zależy nie tylko od informacji zamieszczonych na portalach społecznościowych, ale również m.in. od sposobu, w jaki pisze e-maile;</li>
+<li>rozumie szanse i zagrożenia związane z kreowaniem swojego wizerunku w sieci;</li>
+<li>potrafi krytycznie analizować wizerunki kreowane przez inne osoby;</li>
+<li>wie, w jaki sposób można modyfikować swój wizerunek w sieci;</li>
+<li>jest świadomy niebezpieczeństw związanych z zamieszczaniem prywatnych informacji w sieci, w tym zwłaszcza zdjęć i danych osobowych.</li>
+</ul>
+
+
+
+<h3>Wiedza w pigułce</h3>
+
+<p class="paragraph">Zwykle przejmujemy się tym, co myślą o nas inni. Opinia na nasz temat zależy od wielu czynników. Może mieć na nią wpływ nasze zachowanie, ubiór czy zainteresowania. Wszystko to składa się na nasz wizerunek.</p>
+<p class="paragraph">We współczesnym świecie internet stał się ważną przestrzenią tworzenia naszego wizerunku. Nasze aktywności w sieci mają na niego duży wpływ. </p>
+<p class="paragraph">Na internautach leży odpowiedzialność za to, co udostępnią. Nawet po usunięciu pewnych treści, w sieci pozostaje po nich ślad, np. na serwerach wyszukiwarek albo jeśli ktoś wcześniej je skopiuje.</p>
+<p class="paragraph">Dlatego też powinieneś zwracać szczególną uwagę na to, co i jak mówisz w internecie. Na twój wizerunek w sieci wpływają m. in.:</p>
+<ul class="lista punkt">
+<li>twój sposób wyrażania się --- to, czy piszesz zgodnie z zasadami poprawnej polszczyzny, czy przeklinasz, jak dużym zasobem słownictwa się posługujesz;</li>
+<li>profile na portalach społecznościowych, a w szczególności:</li>Poniższe wyliczenie to podpunkty do tego punktu, co nie jest uwzględnione w zapisie graficznym. AS.
+<li>zdjęcia, na których jesteś i które udostępniasz,</li>
+<li>informacje ,,o mnie",</li>
+<li>twoje statusy,</li>
+<li>strony, które ,,lubimy",</li>
+<li>nasze komentarze pod artykułami i wypowiedzi na forach,</li>
+<li>forma adresu mailowego i sposób pisania maili.</li>
+</ul>
+
+<p class="paragraph">Jak widzisz, problem wizerunku w internecie nie ogranicza się tylko do portali społecznościowych. Trudnym zadaniem jest np. zadbanie o dobrą opinię na forum tematycznym. Jego użytkownicy nie wiedzą, kim jesteś prywatnie. Mogą oceniać tylko wypowiedzi podpisane określonym nickiem. W tym przypadku respekt możemy zapewnić sobie pokazywaniem swojej wiedzy, pomocą w rozwiązywaniu problemów innych czy kulturalnym zachowaniem.</p>
+<p class="paragraph">Nie mamy pełnej kontroli nad naszym wizerunkiem w sieci. Inni internauci również mają na niego wpływ. Mogą oznaczyć cię na zdjęciach i otagować w swoich statusach. Warto więc uważnie dostosować ustawienia profilów na serwisach społecznościowych.</p>
+<p class="paragraph">Pamiętaj, że wizerunek innych osób zależy także od ciebie. Udostępnianie kompromitujących dla innych treści jest nieetyczne. Jeśli czujesz, że dany materiał może zaszkodzić innym --- nie udostęniaj go. Do sieci mają przecież dostęp nie tylko znajomi, lecz także nauczyciele czy rodzina. Ich reakcja może całkowicie różnić się od tej, jaką chciałeś wywołać. Szkodząc innym, szkodzisz również swojemu wizerunkowi --- mógłbyś zostać uznany za nielojalnego i złośliwego.</p>
+<h3>Pomysł na lekcję</h3>
+
+
+<p class="paragraph">Tak samo jak z łatwością możemy sprawdzić informacje na temat nowo poznanej osoby, tak i inni mogą wyszukać materiały dotyczące nas samych. Wizerunek w sieci to nie tylko portale społecznościowe. Od zamieszczonych przez nas zdjęć, przez blogi i komentarze innych na nasz temat, po Google i usługi lokalizacyjne różnych aplikacji --- w wielu miejscach odnajdziemy treści dotyczące tego, co robimy i kim jesteśmy.</p>
+
+<h4>Przebieg zajęć</h4>
+
+<div class="activity">
+ <div class="text">1. 
+  <div class="description">
+  <p class="paragraph"> Przeanalizuj wraz z uczestnikami zajęć profile z portalu społecznościowego zamieszczone w karcie pracy ,,Wizerunek". Poproś uczestników, aby wyobrazili sobie, że są to profile osób, które niebawem dołączą do ich klasy, przeprowadzając się z innego miasta. </p>
+</div>
+  
+  <div class="hints teacher">
+  <p class="paragraph">Zadaj pytanie: ,,Jakie informacje możemy zdobyć dzięki analizie czyjegoś profilu w mediach społecznościowych?".</p>
+  <p class="paragraph">Zadaj pytanie: ,,Jaki wizerunek siebie stworzyli Małgosia i Michał?".</p>
+  
+  <p class="paragraph">Jako pytania pomocnicze rozważ:</p>
+  <ul class="lista punkt">
+<li>czy Małgosia i Michał świadomie kreują swój wizerunek w sieci?</li>
+<li>które informacje zamieszczone na profilach Małgosi i Michała wydają się nie pasować, do wizerunku, który próbują stworzyć?</li>
+<li>czy zamieszczone przez nich informacje tworzą spójny wizerunek?</li>
+<li>co należałoby zmienić w zaprezentowanych profilach, aby uczynić je bardziej spójnymi i przekonującymi dla rówieśników?</li>
+<li>czy są jakieś informacje zamieszczone przez Małgosię i Michała, które można różnie interpretować? (np. w sposób dla nich niekorzystny)</li>
+<li>jakie ryzyko wiąże się z zamieszczaniem na swoim profilu zdjęć innych osób? W jaki sposób można to ryzyko minimalizować? </li>
+<li>jakie ryzyko wiąże się z zamieszczaniem na swoim profilu danych osobowych? W jaki sposób można to ryzyko minimalizować? </li>
+<li>czy da się całkowicie usunąć z internetu niechciane treści na nasz temat, np. zdjęcia lub opinie innych osób? </li>
+</ul>
+
+  
+  <p class="paragraph">W szczególności zwróć uwagę uczestników na następujące elementy:</p>
+  <ul class="lista punkt">
+<li>należy zadbać o odpowiednie ustawienia prywatności w portalach społecznościowych --- czy chcesz, aby wszyscy mieli dostęp do wszystkich zdjęć?</li>
+<li>Twój adres mailowy to Twoja wizytówka --- czy jest odpowiedni, aby podać go nauczycielowi przy całej klasie?</li>
+<li>nie zamieszczaj zdjęć, które zawierają kompromitujące treści --- zdjęcia zamieszczone w sieci błyskawicznie się rozprzestrzeniają, ale nigdy nie da się ich całkowicie usunąć!</li>
+<li>nie zamieszczaj materiałów, które za jakiś czas okażą się niewygodne --- często zmieniamy zdjęcia i modyfikujemy wpisy w portalach społecznościowych. Teraz ich głównym odbiorcą są koledzy z gimnazjum, ale warto pamiętać, że niebawem będą to znajomi z liceum, studiów, a nawet przyszli pracodawcy. Może się zdarzyć, że obecne materiały będziemy chcieli kiedyś usunąć tak samo jak te, które zamieszczaliśmy w szkole podstawowej. </li>
+<li>dbaj o jakość zamieszczanych komentarzy i opinii</li>
+<li>instytucje służące ochronie danych osobowych nie zawsze mogą szybko zareagować. O wizerunek powinniśmy w pierwszej kolejności zadbać sami. Możemy domagać się od znajomych usuwania wpisów na nasz temat, a przede wszystkim dbać o te materiały, które zamieszczamy sami.  </li>
+</ul>
+
+  
+</div>
+
+ </div>
+ <div class="info">
+  <p>Czas: 20 min</p>
+  <p>Forma: dyskusja</p>
+  <div class="materials">Pomoce: komputer, rzutnik multimedialny, karta pracy ,,Wizerunek"</div>
+  
+ </div>
+ <div class="clearboth"></div>
+</div>
+
+
+
+<div class="activity">
+ <div class="text">2. 
+  <div class="description">
+  <p class="paragraph">Zadaj pytanie: ,,Za pomocą jakich działań kreujemy nasz wizerunek w sieci?".</p>
+</div>
+  
+  <div class="hints teacher">
+  <p class="paragraph">Wybrane 6--7 odpowiedzi zapisz na tablicy.</p>
+  
+  <p class="paragraph">Jako pytania pomocnicze rozważ:</p>
+  <ul class="lista punkt">
+<li>Czego inni mogą się o nas dowiedzieć na podstawie naszych profili w portalach społecznościowych?</li>
+<li>Czy tylko zdjęcia decydują o naszym wizerunku? Jakie jeszcze inne elementy są brane pod uwagę?</li>
+<li>Czy wizerunek tworzymy tylko za pomocą portali społecznościowcych? Jakie inne aktywności podejmowane w sieci decydują o opinii innych na nasz temat?</li>
+</ul>
+
+  
+  <p class="paragraph">Wśród odpowiedzi znaleźć powinny się m.in.:</p>
+  <ul class="lista punkt">
+<li>zdjęcia --- zamieszczane na portalach społecznościowych</li>
+<li>komentarze --- zamieszczane w grupach dyskusyjnych i na portalach społecznościowych</li>
+<li>zainteresowania zadeklarowane na portalach społecznościowych</li>
+<li>blogi i własne strony internetowe</li>
+<li>język, za pomocą którego komunikujemy się z innymi w sieci  --- w tym ortografia </li>
+<li>maile --- sposób, w jaki je piszemy, w tym zwłaszcza ortografia, zwroty grzecznościowe, przejrzysta konstrukcja, ale i sam adres mailowy, którym się posługujemy (np. sloneczko@buziaczek.pl nie jest odpowiednim adresem do kontaktów z nauczycielem)</li>
+<li>strony internetowe, które odwiedzamy (historia w przeglądarce internetowej, zapamiętane zapytania w wyszukiwarkach internetowych)</li>
+</ul>
+
+</div>
+  
+ </div>
+ <div class="info">
+  <p>Czas: 5 min</p>
+  <p>Forma: dyskusja</p>
+  <div class="materials">Pomoce: tablica, kreda lub marker</div>
+  
+ </div>
+ <div class="clearboth"></div>
+</div>
+
+
+
+<div class="activity">
+ <div class="text">3. 
+  <div class="description">
+  <p class="paragraph"> Podziel uczestników zajęć na 5 grup. Poproś każdy z zespołów o przygotowanie katalogu porad odnośnie sposobu, w jaki należy kreować swój wizerunek na portalach społecznościowych. </p>
+</div>
+  
+  <div class="hints teacher">
+  <p class="paragraph">Katalog powinien zostać stworzony w 7--8 punktach.</p>
+  
+</div>
+
+  
+ </div>
+ <div class="info">
+  <p>Czas: 10 min</p>
+  <p>Forma: praca w grupach</p>
+  
+ </div>
+ <div class="clearboth"></div>
+</div>
+
+
+
+
+<div class="activity">
+ <div class="text">4. 
+  <div class="description">
+  <p class="paragraph">Poproś grupy o krótkie prezentacje. Zachęć pozostałych uczestników zajęć do wygłaszania komentarzy i opinii.</p>
+</div>
+  
+  <div class="hints teacher">
+  
+</div>
+
+  
+ </div>
+ <div class="info">
+  <p>Czas: 10 min</p>
+  <p>Forma: dyskusja</p>
+  
+ </div>
+ <div class="clearboth"></div>
+</div>
+
+
+<h4>Ewaluacja</h4>
+<p class="paragraph">Czy po przeprowadzeniu zajęć ich uczestnicy:</p>
+<ul class="lista punkt">
+<li>rozumieją, że o ich wizerunku w sieci decydują różne działania, a nie tylko informacje zamieszczone w portalach społecznościowych? (--> rozważ realizację modułu 2.2 ,,Relacje")</li>
+<li>potrafią świadomie kreować i modyfikować swój wizerunek w portalach społecznościowych?</li>
+<li>znają zagrożenia związane z zamieszczaniem danych osobowych w sieci?</li>
+<li>wiedzą, że o ich wizerunku decydują nie tylko zamieszczone przez nich informacje, ale również sposób, w jaki zostaną one odebrane i zinterpretowane przez innych?</li>
+</ul>
+
+<h4>Opcje dodatkowe</h4>
+<p class="paragraph">Zajęcia mogą zostać rozbudowane o pracę w grupach. Podziel uczestników na 5 grup, każdy zespół powinien otrzymać jedno z poniższych zadań:</p>
+<ul class="lista punkt">
+<li>Napisz e-mail do portalu internetowego FOTKA.pl, który bez twojej zgody opublikował zdjęcie w kompromitującej cię pozie. Poproś o usunięcie fotografii.</li>
+<li>Napisz e-mail do kolegi, który po raz kolejny zamieścił na swoim profilu twoje zdjęcie z ostatniej imprezy ze złośliwym komentarzem. Poproś, aby kolega usunął twoje zdjęcia i na przyszłość nie zamieszczał ich bez twojej zgody.</li>
+<li>Napisz e-mail do autora bloga ,,Podróże wakacyjne", który bez twojej zgody zamieścił w opublikowanym przez siebie wpisie długi fragment tekstu z twojego bloga poświęconego wakacjom we Włoszech.</li>
+<li>Napisz e-mail do administratora forum dyskusyjnego poświęconego sztukom walki z prośbą o odblokowanie twojego konta. Konto zostało zablokowane pomyłkowo, jesteś użytkownikiem serwisu od przeszło 2 lat, nigdy nie naruszyłeś regulaminu forum.</li>
+<li>Napisz e-mail z prośbą o sprostowanie do portalu NOTKA.pl, który zamieścił w artykule na temat szkoły, do której uczęszczasz, twoją wypowiedź. Zacytowany fragment został skrócony, w efekcie czego twoje słowa krytykują szkołę, co nie było twoim zamiarem.</li>
+</ul>
+
+<h3>Materiały</h3>
+<p class="paragraph">karta pracy ,,Wizerunek"</p>
+<h3>Zadania sprawdzające</h3>
+<p class="paragraph">Profile w portalach społecznościowych z reguły posiadamy po kilka lat. Często codziennie je aktualizujemy lub oznaczamy nowe linki i zmieniamy zainteresowania. Nasze gusta i upodobania zmieniają się jednak z biegiem lat. W efekcie tego, po upływie pewnego czasu, nasze profile mogą zawierać elementy niespójne z wizerunkiem, który staramy się aktualnie tworzyć. Niektóre z nich mogą zwyczajnie nas ośmieszać w oczach znajomych. Często dzieje się tak w przypadku zdjęć, które zamieściliśmy jeszcze w szkole podstawowej, zadeklarowanych wówczas hobby i grup tematycznych, do których dołączyliśmy.</p>
+
+<p class="paragraph">Zakładając, że poniższe osoby świadomie kreują pewien obraz samych siebie, wskaż te informacje, które wydają się zaskakiwać w poszczególnych profilach oraz sprawiają, że ich właściciele stają się mało wiarygodni. Postaraj się ,,wczuć" w kolejne postacie, pomyśl, na jakim wizerunku może im zależeć, a które informacje sprawiają, że jego osiągnięcie nie jest możliwe.</p>
+
+
+
+<div class="excercise wybor" data-type="wybor">
+<form action="#" method="POST">
+
+
+<div class="question" data-no="1"  data-solution="3, 4, 7, 12, 16">
+<div class="description"><p class="paragraph">Przypadek A: Anka</p>
+<p class="paragraph">Wiek: 13</p></div>
+
+<ol class="lista num">
+<p class="paragraph">O sobie:</p>
+
+<li class="question-piece" data-qc="1" data-no="1"><input type="checkbox" name="q1_1"/>
+ uwielbiam  zakupy, szczególnie jak mam kupić kosmetyki, mogę siedzieć w sklepie  godzinami i wypróbowywać wszystkie. Poza tym siedzę w domu i oglądam  seriale (House, my love!), trochę gram na kompie i siedzę na fejsie.</li>
+<p class="paragraph">Zainteresowania:</p>
+
+<li class="question-piece" data-qc="1" data-no="2"><input type="checkbox" name="q1_2"/>
+nowe marki kosmetyków</li>
+
+<li class="question-piece" data-qc="1" data-no="3"><input type="checkbox" name="q1_3"/>
+rowery górskie</li>
+
+<li class="question-piece" data-qc="1" data-no="4"><input type="checkbox" name="q1_4"/>
+teatr</li>
+
+<li class="question-piece" data-qc="1" data-no="5"><input type="checkbox" name="q1_5"/>
+shopping, shopping, shopping!</li>
+<p class="paragraph">Ulubione cytaty:</p>
+
+<li class="question-piece" data-qc="1" data-no="6"><input type="checkbox" name="q1_6"/>
+Pieniądze szczęścia nie dają. Dopiero zakupy. (Marilyn Monroe)</li>
+
+<li class="question-piece" data-qc="1" data-no="7"><input type="checkbox" name="q1_7"/>
+Komuniści  są jak krokodyle, które kiedy otwierają paszcze, nie wiemy ---  uśmiechają się, czy chcą nas pożreć. (Winston Churchill)</li>
+<p class="paragraph">Autorytety:</p>
+
+<li class="question-piece" data-qc="1" data-no="8"><input type="checkbox" name="q1_8"/>
+Coco Chanel </li>
+
+<li class="question-piece" data-qc="1" data-no="9"><input type="checkbox" name="q1_9"/>
+Naomi Klein</li>
+<p class="paragraph">Muzyka:</p>
+
+<li class="question-piece" data-qc="1" data-no="10"><input type="checkbox" name="q1_10"/>
+Lady Gaga</li>
+
+<li class="question-piece" data-qc="1" data-no="11"><input type="checkbox" name="q1_11"/>
+Shakira</li>
+
+<li class="question-piece" data-qc="1" data-no="12"><input type="checkbox" name="q1_12"/>
+Behemot </li>
+<p class="paragraph">Polecane strony:</p>
+
+<li class="question-piece" data-qc="1" data-no="13"><input type="checkbox" name="q1_13"/>
+www.nowinki-kosmetyczne.pl</li>
+
+<li class="question-piece" data-qc="1" data-no="14"><input type="checkbox" name="q1_14"/>
+www.perfekcyjnymakeup.com</li>
+
+<li class="question-piece" data-qc="1" data-no="15"><input type="checkbox" name="q1_15"/>
+www.gry-online.pl</li>
+
+<li class="question-piece" data-qc="1" data-no="16"><input type="checkbox" name="q1_16"/>
+www.portalhistoryczny.pl</li></ol>
+</div>
+
+<div class="question" data-no="2"  data-solution="4, 6, 10, 12, 15">
+<div class="description"><p class="paragraph">Przypadek B: Wuwoooo</p>
+<p class="paragraph">Wiek: 14</p></div>
+
+<ol class="lista num">
+<p class="paragraph">O sobie: </p>
+
+<li class="question-piece" data-qc="2" data-no="1"><input type="checkbox" name="q2_1"/>
+Nic wam nie powiem. Kto mnie zna, wie kim jestem. Kto mnie nie zna, ten się nie dowie. Jedno słowo wystarczy: hardkorrrrr!</li>
+<p class="paragraph">Zainteresowania:</p>
+
+<li class="question-piece" data-qc="2" data-no="2"><input type="checkbox" name="q2_2"/>
+ostra muza</li>
+
+<li class="question-piece" data-qc="2" data-no="3"><input type="checkbox" name="q2_3"/>
+jazda bez trzymanki!!!</li>
+
+<li class="question-piece" data-qc="2" data-no="4"><input type="checkbox" name="q2_4"/>
+spanie</li>
+
+<li class="question-piece" data-qc="2" data-no="5"><input type="checkbox" name="q2_5"/>
+szybkie fury</li>
+<p class="paragraph">Ulubione cytaty:</p>
+
+<li class="question-piece" data-qc="2" data-no="6"><input type="checkbox" name="q2_6"/>
+Zakochaj  się, a każdy wszędzie, wszystkie rzeczy, wszystkie słowa oznaczać będą  ,,miłość". To samo dzieje się, kiedy kogoś utracisz. (Jonathan Caroll)</li>
+
+<li class="question-piece" data-qc="2" data-no="7"><input type="checkbox" name="q2_7"/>
+Lepiej skrócić o głowę niewinnego niż zawahać się podczas wojny. (Józef Stalin)</li>
+<p class="paragraph">Autorytety:</p>
+
+<li class="question-piece" data-qc="2" data-no="8"><input type="checkbox" name="q2_8"/>
+Robert Kubica</li>
+
+<li class="question-piece" data-qc="2" data-no="9"><input type="checkbox" name="q2_9"/>
+Krzysztof Hołowczyc</li>
+<p class="paragraph">Muzyka:</p>
+
+<li class="question-piece" data-qc="2" data-no="10"><input type="checkbox" name="q2_10"/>
+Kasia Nosowska </li>
+
+<li class="question-piece" data-qc="2" data-no="11"><input type="checkbox" name="q2_11"/>
+AC/DC</li>
+
+<li class="question-piece" data-qc="2" data-no="12"><input type="checkbox" name="q2_12"/>
+Britney Spears </li>
+<p class="paragraph">Polecane strony:</p>
+
+<li class="question-piece" data-qc="2" data-no="13"><input type="checkbox" name="q2_13"/>
+www.szybkiewozy.pl</li>
+
+<li class="question-piece" data-qc="2" data-no="14"><input type="checkbox" name="q2_14"/>
+www.adrenalina.com</li>
+
+<li class="question-piece" data-qc="2" data-no="15"><input type="checkbox" name="q2_15"/>
+www.najslodszepieskinaswiecie.pl</li>
+
+<li class="question-piece" data-qc="2" data-no="16"><input type="checkbox" name="q2_16"/>
+www.rajdy-w-polsce.pl</li></ol>
+</div>
+
+<div class="question" data-no="3"  data-solution="5, 7, 11, 15, 16">
+<div class="description"><p class="paragraph">Przypadek C: Alicja</p>
+<p class="paragraph">Wiek: xxxxxx</p></div>
+
+<ol class="lista num">
+<p class="paragraph">O sobie: </p>
+
+<li class="question-piece" data-qc="3" data-no="1"><input type="checkbox" name="q3_1"/>
+piszę...  dużo... najczęściej do szuflady... ale może kiedyś, ktoś znajdzie te  moje okruszki... lubię siedzieć z kubkiem gorącej czekolady (koniecznie z  cynamonem!) i gapić się w okno... mam za oknem świerk, który z każdym  rokiem rośnie... zaraz nie będę widzieć słońca...</li>
+<p class="paragraph">Zainteresowania: </p>
+
+<li class="question-piece" data-qc="3" data-no="2"><input type="checkbox" name="q3_2"/>
+czekolada</li>
+
+<li class="question-piece" data-qc="3" data-no="3"><input type="checkbox" name="q3_3"/>
+cisza</li>
+
+<li class="question-piece" data-qc="3" data-no="4"><input type="checkbox" name="q3_4"/>
+książki --- im starsze, tym lepsze</li>
+
+<li class="question-piece" data-qc="3" data-no="5"><input type="checkbox" name="q3_5"/>
+rajdy motocyklowe</li>
+<p class="paragraph">Ulubione cytaty:</p>
+
+<li class="question-piece" data-qc="3" data-no="6"><input type="checkbox" name="q3_6"/>
+Wiesz... gdy się jest bardzo smutnym, lubi się zachody słońca... (Antoine de Saint-Exupéry)</li>
+
+<li class="question-piece" data-qc="3" data-no="7"><input type="checkbox" name="q3_7"/>
+Jestem  mężczyzną --- to znaczy ślepcem. Jak wszyscy przede mną, tak i ja  zwaliłem się do dołu na łeb, na szyję. Ożeniłem się. (Nikos Kazantzakis)</li>
+<p class="paragraph">Autorytety:</p>
+
+<li class="question-piece" data-qc="3" data-no="8"><input type="checkbox" name="q3_8"/>
+Maria Pawlikowska-Jasnorzewska</li>
+
+<li class="question-piece" data-qc="3" data-no="9"><input type="checkbox" name="q3_9"/>
+Budda</li>
+<p class="paragraph">Muzyka:</p>
+
+<li class="question-piece" data-qc="3" data-no="10"><input type="checkbox" name="q3_10"/>
+Grzegorz Turnau</li>
+
+<li class="question-piece" data-qc="3" data-no="11"><input type="checkbox" name="q3_11"/>
+Metallica</li>
+
+<li class="question-piece" data-qc="3" data-no="12"><input type="checkbox" name="q3_12"/>
+Stare Dobre Małżeństwo</li>
+<p class="paragraph">Polecane strony:</p>
+
+<li class="question-piece" data-qc="3" data-no="13"><input type="checkbox" name="q3_13"/>
+www.biuroliterackie.pl</li>
+
+<li class="question-piece" data-qc="3" data-no="14"><input type="checkbox" name="q3_14"/>
+www.cytaty.pl</li>
+
+<li class="question-piece" data-qc="3" data-no="15"><input type="checkbox" name="q3_15"/>
+www.kwejk.pl</li>
+
+<li class="question-piece" data-qc="3" data-no="16"><input type="checkbox" name="q3_16"/>
+www.plotek.pl</li></ol>
+</div>
+
+<div class="buttons">
+<span class="message"></span>
+<input type="button" class="check" value="sprawdź"/>
+<input type="button" class="solutions" value="pokaż rozwiązanie"/>
+</div>
+</form>
+</div>
+
+
+
+
+<h3>Słowniczek</h3>
+<div class="slowniczek">
+<dl>media społecznościowe</dl>
+<dl>wizerunek</dl>
+</div>
+
+<h3>Czytelnia </h3>
+<ul class="lista czytelnia">
+<li>http://www.pcworld.pl/news/377106/Zadbaj.o.swoj.wizerunek.na.Facebooku.html [?]</li>
+<li>http://socjomania.pl/jak-sie-piszesz-tak-cie-widza-jak-dbac-o-wizerunek-w-social-media/ ??</li>
+</ul>
+</div>
+
+</body>
+</html>
+
diff --git a/tests/files/edumed/gim-wizerunek-w-sieci.xml b/tests/files/edumed/gim-wizerunek-w-sieci.xml
new file mode 100644 (file)
index 0000000..8af8605
--- /dev/null
@@ -0,0 +1,298 @@
+<utwor>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<rdf:Description rdf:about="http://redakcja.cyfrowaprzyszlosc.pl/documents/">
+<dc:creator.expert xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Muszyński, Damian</dc:creator.expert>
+<dc:creator.scenario xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Wysocki, Michał</dc:creator.scenario>
+<dc:creator.textbook xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Dobrowolska, Urszula</dc:creator.textbook>
+<dc:title xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Wizerunek w sieci</dc:title>
+<dc:relation.isPartOf xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/"/>
+<dc:publisher xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Fundacja Nowoczesna Polska</dc:publisher>
+<dc:subject.competence xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">[uzupełnimy na końcu]</dc:subject.competence>
+<dc:subject.curriculum xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">[uzupełnimy na końcu]</dc:subject.curriculum>
+<dc:subject xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/"/>
+<dc:description xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Publikacja zrealizowana w ramach projektu Cyfrowa Przyszłość (http://cyfrowaprzyszlosc.pl).</dc:description>
+<dc:description.material xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">linki do załączników</dc:description.material>
+<dc:relation xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">moduły powiązane linki</dc:relation>
+<dc:identifier.url xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://cyfrowaprzyszlosc.pl/wizerunek-w-sieci</dc:identifier.url>
+<dc:rights xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Creative Commons Uznanie autorstwa - Na tych samych warunkach 3.0</dc:rights>
+<dc:rights.license xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://creativecommons.org/licenses/by-sa/3.0/</dc:rights.license>
+<dc:format xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">xml</dc:format>
+<dc:type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type>
+<dc:date xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">2012-11-09</dc:date>
+<dc:audience xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">gimnazjum</dc:audience>
+<dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">pol</dc:language>
+</rdf:Description>
+</rdf:RDF>
+<powiesc>
+<nazwa_utworu>Wizerunek w sieci</nazwa_utworu>
+<akap><!-- Numer porządkowy: 2.1 --></akap>
+<naglowek_rozdzial>Informacje</naglowek_rozdzial>
+
+
+<naglowek_podrozdzial>Cele operacyjne</naglowek_podrozdzial>
+<akap>Uczestnik:</akap>
+<lista typ="punkt">
+<punkt>rozumie, że podejmowane przez niego aktywności w internecie są obserwowane i oceniane przez innych;</punkt>
+<punkt>wie, że jego wizerunek w sieci zależy nie tylko od informacji zamieszczonych na portalach społecznościowych, ale również m.in. od sposobu, w jaki pisze e-maile;</punkt>
+<punkt>rozumie szanse i zagrożenia związane z kreowaniem swojego wizerunku w sieci;</punkt>
+<punkt>potrafi krytycznie analizować wizerunki kreowane przez inne osoby;</punkt>
+<punkt>wie, w jaki sposób można modyfikować swój wizerunek w sieci;</punkt>
+<punkt>jest świadomy niebezpieczeństw związanych z zamieszczaniem prywatnych informacji w sieci, w tym zwłaszcza zdjęć i danych osobowych.</punkt>
+</lista>
+
+
+
+<naglowek_rozdzial>Wiedza w pigułce</naglowek_rozdzial>
+
+<akap>Zwykle przejmujemy się tym, co myślą o nas inni. Opinia na nasz temat zależy od wielu czynników. Może mieć na nią wpływ nasze zachowanie, ubiór czy zainteresowania. Wszystko to składa się na nasz wizerunek.</akap>
+<akap>We współczesnym świecie internet stał się ważną przestrzenią tworzenia naszego wizerunku. Nasze aktywności w sieci mają na niego duży wpływ. </akap>
+<akap>Na internautach leży odpowiedzialność za to, co udostępnią. Nawet po usunięciu pewnych treści, w sieci pozostaje po nich ślad, np. na serwerach wyszukiwarek albo jeśli ktoś wcześniej je skopiuje.</akap>
+<akap>Dlatego też powinieneś zwracać szczególną uwagę na to, co i jak mówisz w internecie. Na twój wizerunek w sieci wpływają m. in.:</akap>
+<lista typ="punkt">
+<punkt>twój sposób wyrażania się --- to, czy piszesz zgodnie z zasadami poprawnej polszczyzny, czy przeklinasz, jak dużym zasobem słownictwa się posługujesz;</punkt>
+<punkt>profile na portalach społecznościowych, a w szczególności:</punkt><uwaga>Poniższe wyliczenie to podpunkty do tego punktu, co nie jest uwzględnione w zapisie graficznym. AS.</uwaga>
+<punkt>zdjęcia, na których jesteś i które udostępniasz,</punkt>
+<punkt>informacje ,,o mnie",</punkt>
+<punkt>twoje statusy,</punkt>
+<punkt>strony, które ,,lubimy",</punkt>
+<punkt>nasze komentarze pod artykułami i wypowiedzi na forach,</punkt>
+<punkt>forma adresu mailowego i sposób pisania maili.</punkt>
+</lista>
+
+<akap>Jak widzisz, problem wizerunku w internecie nie ogranicza się tylko do portali społecznościowych. Trudnym zadaniem jest np. zadbanie o dobrą opinię na forum tematycznym. Jego użytkownicy nie wiedzą, kim jesteś prywatnie. Mogą oceniać tylko wypowiedzi podpisane określonym nickiem. W tym przypadku respekt możemy zapewnić sobie pokazywaniem swojej wiedzy, pomocą w rozwiązywaniu problemów innych czy kulturalnym zachowaniem.</akap>
+<akap>Nie mamy pełnej kontroli nad naszym wizerunkiem w sieci. Inni internauci również mają na niego wpływ. Mogą oznaczyć cię na zdjęciach i otagować w swoich statusach. Warto więc uważnie dostosować ustawienia profilów na serwisach społecznościowych.</akap>
+<akap>Pamiętaj, że wizerunek innych osób zależy także od ciebie. Udostępnianie kompromitujących dla innych treści jest nieetyczne. Jeśli czujesz, że dany materiał może zaszkodzić innym --- nie udostęniaj go. Do sieci mają przecież dostęp nie tylko znajomi, lecz także nauczyciele czy rodzina. Ich reakcja może całkowicie różnić się od tej, jaką chciałeś wywołać. Szkodząc innym, szkodzisz również swojemu wizerunkowi --- mógłbyś zostać uznany za nielojalnego i złośliwego.</akap>
+<naglowek_rozdzial>Pomysł na lekcję</naglowek_rozdzial>
+
+
+<akap>Tak samo jak z łatwością możemy sprawdzić informacje na temat nowo poznanej osoby, tak i inni mogą wyszukać materiały dotyczące nas samych. Wizerunek w sieci to nie tylko portale społecznościowe. Od zamieszczonych przez nas zdjęć, przez blogi i komentarze innych na nasz temat, po Google i usługi lokalizacyjne różnych aplikacji --- w wielu miejscach odnajdziemy treści dotyczące tego, co robimy i kim jesteśmy.</akap>
+
+<naglowek_podrozdzial>Przebieg zajęć</naglowek_podrozdzial>
+<aktywnosc>
+  <opis>
+  <akap> Przeanalizuj wraz z uczestnikami zajęć profile z portalu społecznościowego zamieszczone w <link slug="">karcie pracy ,,Wizerunek"</link>. Poproś uczestników, aby wyobrazili sobie, że są to profile osób, które niebawem dołączą do ich klasy, przeprowadzając się z innego miasta. </akap>
+</opis>
+  <wskazowki>
+  <akap>Zadaj pytanie: ,,Jakie informacje możemy zdobyć dzięki analizie czyjegoś profilu w mediach społecznościowych?".</akap>
+  <akap>Zadaj pytanie: ,,Jaki wizerunek siebie stworzyli Małgosia i Michał?".</akap>
+  
+  <akap>Jako pytania pomocnicze rozważ:</akap>
+  <lista typ="punkt">
+<punkt>czy Małgosia i Michał świadomie kreują swój wizerunek w sieci?</punkt>
+<punkt>które informacje zamieszczone na profilach Małgosi i Michała wydają się nie pasować, do wizerunku, który próbują stworzyć?</punkt>
+<punkt>czy zamieszczone przez nich informacje tworzą spójny wizerunek?</punkt>
+<punkt>co należałoby zmienić w zaprezentowanych profilach, aby uczynić je bardziej spójnymi i przekonującymi dla rówieśników?</punkt>
+<punkt>czy są jakieś informacje zamieszczone przez Małgosię i Michała, które można różnie interpretować? (np. w sposób dla nich niekorzystny)</punkt>
+<punkt>jakie ryzyko wiąże się z zamieszczaniem na swoim profilu zdjęć innych osób? W jaki sposób można to ryzyko minimalizować? </punkt>
+<punkt>jakie ryzyko wiąże się z zamieszczaniem na swoim profilu danych osobowych? W jaki sposób można to ryzyko minimalizować? </punkt>
+<punkt>czy da się całkowicie usunąć z internetu niechciane treści na nasz temat, np. zdjęcia lub opinie innych osób? </punkt>
+</lista>
+
+  
+  <akap>W szczególności zwróć uwagę uczestników na następujące elementy:</akap>
+  <lista typ="punkt">
+<punkt>należy zadbać o odpowiednie ustawienia prywatności w portalach społecznościowych --- czy chcesz, aby wszyscy mieli dostęp do wszystkich zdjęć?</punkt>
+<punkt>Twój adres mailowy to Twoja wizytówka --- czy jest odpowiedni, aby podać go nauczycielowi przy całej klasie?</punkt>
+<punkt>nie zamieszczaj zdjęć, które zawierają kompromitujące treści --- zdjęcia zamieszczone w sieci błyskawicznie się rozprzestrzeniają, ale nigdy nie da się ich całkowicie usunąć!</punkt>
+<punkt>nie zamieszczaj materiałów, które za jakiś czas okażą się niewygodne --- często zmieniamy zdjęcia i modyfikujemy wpisy w portalach społecznościowych. Teraz ich głównym odbiorcą są koledzy z gimnazjum, ale warto pamiętać, że niebawem będą to znajomi z liceum, studiów, a nawet przyszli pracodawcy. Może się zdarzyć, że obecne materiały będziemy chcieli kiedyś usunąć tak samo jak te, które zamieszczaliśmy w szkole podstawowej. </punkt>
+<punkt>dbaj o jakość zamieszczanych komentarzy i opinii</punkt>
+<punkt>instytucje służące ochronie danych osobowych nie zawsze mogą szybko zareagować. O wizerunek powinniśmy w pierwszej kolejności zadbać sami. Możemy domagać się od znajomych usuwania wpisów na nasz temat, a przede wszystkim dbać o te materiały, które zamieszczamy sami.  </punkt>
+</lista>
+
+  
+</wskazowki>
+<pomoce>komputer, rzutnik multimedialny, <link slug="">karta pracy ,,Wizerunek"</link></pomoce>
+  <forma>dyskusja</forma>
+  <czas>20</czas>
+</aktywnosc>
+
+<aktywnosc>
+  <opis>
+  <akap>Zadaj pytanie: ,,Za pomocą jakich działań kreujemy nasz wizerunek w sieci?".</akap>
+</opis>
+  <wskazowki>
+  <akap>Wybrane 6--7 odpowiedzi zapisz na tablicy.</akap>
+  
+  <akap>Jako pytania pomocnicze rozważ:</akap>
+  <lista typ="punkt">
+<punkt>Czego inni mogą się o nas dowiedzieć na podstawie naszych profili w portalach społecznościowych?</punkt>
+<punkt>Czy tylko zdjęcia decydują o naszym wizerunku? Jakie jeszcze inne elementy są brane pod uwagę?</punkt>
+<punkt>Czy wizerunek tworzymy tylko za pomocą portali społecznościowcych? Jakie inne aktywności podejmowane w sieci decydują o opinii innych na nasz temat?</punkt>
+</lista>
+
+  
+  <akap>Wśród odpowiedzi znaleźć powinny się m.in.:</akap>
+  <lista typ="punkt">
+<punkt>zdjęcia --- zamieszczane na portalach społecznościowych</punkt>
+<punkt>komentarze --- zamieszczane w grupach dyskusyjnych i na portalach społecznościowych</punkt>
+<punkt>zainteresowania zadeklarowane na portalach społecznościowych</punkt>
+<punkt>blogi i własne strony internetowe</punkt>
+<punkt>język, za pomocą którego komunikujemy się z innymi w sieci  --- w tym ortografia </punkt>
+<punkt>maile --- sposób, w jaki je piszemy, w tym zwłaszcza ortografia, zwroty grzecznościowe, przejrzysta konstrukcja, ale i sam adres mailowy, którym się posługujemy (np. sloneczko@buziaczek.pl nie jest odpowiednim adresem do kontaktów z nauczycielem)</punkt>
+<punkt>strony internetowe, które odwiedzamy (historia w przeglądarce internetowej, zapamiętane zapytania w wyszukiwarkach internetowych)</punkt>
+</lista>
+
+</wskazowki>
+  <pomoce>tablica, kreda lub marker</pomoce>
+  <forma>dyskusja</forma>
+  <czas>5</czas>
+</aktywnosc>
+
+<aktywnosc>
+  <opis>
+  <akap> Podziel uczestników zajęć na 5 grup. Poproś każdy z zespołów o przygotowanie katalogu porad odnośnie sposobu, w jaki należy kreować swój wizerunek na portalach społecznościowych. </akap>
+</opis>
+  <wskazowki>
+  <akap>Katalog powinien zostać stworzony w 7--8 punktach.</akap>
+  
+</wskazowki>
+
+  <forma>praca w grupach</forma>
+  <czas>10</czas>
+</aktywnosc>
+
+
+<aktywnosc>
+  <opis>
+  <akap>Poproś grupy o krótkie prezentacje. Zachęć pozostałych uczestników zajęć do wygłaszania komentarzy i opinii.</akap>
+</opis>
+  <wskazowki>
+  
+</wskazowki>
+
+  <forma>dyskusja</forma>
+  <czas>10</czas>
+</aktywnosc>
+
+<naglowek_podrozdzial>Ewaluacja</naglowek_podrozdzial>
+<akap>Czy po przeprowadzeniu zajęć ich uczestnicy:</akap>
+<lista typ="punkt">
+<punkt>rozumieją, że o ich wizerunku w sieci decydują różne działania, a nie tylko informacje zamieszczone w portalach społecznościowych? (--> rozważ realizację <link slug="">modułu 2.2 ,,Relacje"</link>)</punkt>
+<punkt>potrafią świadomie kreować i modyfikować swój wizerunek w portalach społecznościowych?</punkt>
+<punkt>znają zagrożenia związane z zamieszczaniem danych osobowych w sieci?</punkt>
+<punkt>wiedzą, że o ich wizerunku decydują nie tylko zamieszczone przez nich informacje, ale również sposób, w jaki zostaną one odebrane i zinterpretowane przez innych?</punkt>
+</lista>
+
+<naglowek_podrozdzial>Opcje dodatkowe</naglowek_podrozdzial>
+<akap>Zajęcia mogą zostać rozbudowane o pracę w grupach. Podziel uczestników na 5 grup, każdy zespół powinien otrzymać jedno z poniższych zadań:</akap>
+<lista typ="punkt">
+<punkt>Napisz e-mail do portalu internetowego FOTKA.pl, który bez twojej zgody opublikował zdjęcie w kompromitującej cię pozie. Poproś o usunięcie fotografii.</punkt>
+<punkt>Napisz e-mail do kolegi, który po raz kolejny zamieścił na swoim profilu twoje zdjęcie z ostatniej imprezy ze złośliwym komentarzem. Poproś, aby kolega usunął twoje zdjęcia i na przyszłość nie zamieszczał ich bez twojej zgody.</punkt>
+<punkt>Napisz e-mail do autora bloga ,,Podróże wakacyjne", który bez twojej zgody zamieścił w opublikowanym przez siebie wpisie długi fragment tekstu z twojego bloga poświęconego wakacjom we Włoszech.</punkt>
+<punkt>Napisz e-mail do administratora forum dyskusyjnego poświęconego sztukom walki z prośbą o odblokowanie twojego konta. Konto zostało zablokowane pomyłkowo, jesteś użytkownikiem serwisu od przeszło 2 lat, nigdy nie naruszyłeś regulaminu forum.</punkt>
+<punkt>Napisz e-mail z prośbą o sprostowanie do portalu NOTKA.pl, który zamieścił w artykule na temat szkoły, do której uczęszczasz, twoją wypowiedź. Zacytowany fragment został skrócony, w efekcie czego twoje słowa krytykują szkołę, co nie było twoim zamiarem.</punkt>
+</lista>
+
+<naglowek_rozdzial>Materiały</naglowek_rozdzial>
+<akap><link slug="">karta pracy ,,Wizerunek"</link></akap>
+<naglowek_rozdzial>Zadania sprawdzające</naglowek_rozdzial>
+<akap>Profile w portalach społecznościowych z reguły posiadamy po kilka lat. Często codziennie je aktualizujemy lub oznaczamy nowe linki i zmieniamy zainteresowania. Nasze gusta i upodobania zmieniają się jednak z biegiem lat. W efekcie tego, po upływie pewnego czasu, nasze profile mogą zawierać elementy niespójne z wizerunkiem, który staramy się aktualnie tworzyć. Niektóre z nich mogą zwyczajnie nas ośmieszać w oczach znajomych. Często dzieje się tak w przypadku zdjęć, które zamieściliśmy jeszcze w szkole podstawowej, zadeklarowanych wówczas hobby i grup tematycznych, do których dołączyliśmy.</akap>
+
+<akap>Zakładając, że poniższe osoby świadomie kreują pewien obraz samych siebie, wskaż te informacje, które wydają się zaskakiwać w poszczególnych profilach oraz sprawiają, że ich właściciele stają się mało wiarygodni. Postaraj się ,,wczuć" w kolejne postacie, pomyśl, na jakim wizerunku może im zależeć, a które informacje sprawiają, że jego osiągnięcie nie jest możliwe.</akap>
+
+
+<cwiczenie typ="wybor">
+
+<pytanie typ="wybor" rozw="3, 4, 7, 12, 16">
+<opis><akap>Przypadek A: Anka</akap>
+<akap>Wiek: 13</akap></opis>
+
+<lista typ="num">
+<akap>O sobie:</akap>
+<punkt nazwa="1"> uwielbiam  zakupy, szczególnie jak mam kupić kosmetyki, mogę siedzieć w sklepie  godzinami i wypróbowywać wszystkie. Poza tym siedzę w domu i oglądam  seriale (<tytul_dziela>House, my love!</tytul_dziela>), trochę gram na kompie i siedzę na fejsie.</punkt>
+<akap>Zainteresowania:</akap>
+<punkt nazwa="2">nowe marki kosmetyków</punkt>
+<punkt nazwa="3">rowery górskie</punkt>
+<punkt nazwa="4">teatr</punkt>
+<punkt nazwa="5">shopping, shopping, shopping!</punkt>
+<akap>Ulubione cytaty:</akap>
+<punkt nazwa="6">Pieniądze szczęścia nie dają. Dopiero zakupy. (Marilyn Monroe)</punkt>
+<punkt nazwa="7">Komuniści  są jak krokodyle, które kiedy otwierają paszcze, nie wiemy ---  uśmiechają się, czy chcą nas pożreć. (Winston Churchill)</punkt>
+<akap>Autorytety:</akap>
+<punkt nazwa="8">Coco Chanel </punkt>
+<punkt nazwa="9">Naomi Klein</punkt>
+<akap>Muzyka:</akap>
+<punkt nazwa="10">Lady Gaga</punkt>
+<punkt nazwa="11">Shakira</punkt>
+<punkt nazwa="12">Behemot </punkt>
+<akap>Polecane strony:</akap>
+<punkt nazwa="13">www.nowinki-kosmetyczne.pl</punkt>
+<punkt nazwa="14">www.perfekcyjnymakeup.com</punkt>
+<punkt nazwa="15">www.gry-online.pl</punkt>
+<punkt nazwa="16">www.portalhistoryczny.pl</punkt></lista>
+</pytanie>
+
+<pytanie typ="wybor" rozw="4, 6, 10, 12, 15">
+<opis><akap>Przypadek B: Wuwoooo</akap>
+<akap>Wiek: 14</akap></opis>
+
+<lista typ="num">
+<akap>O sobie: </akap>
+<punkt nazwa="1">Nic wam nie powiem. Kto mnie zna, wie kim jestem. Kto mnie nie zna, ten się nie dowie. Jedno słowo wystarczy: hardkorrrrr!</punkt>
+<akap>Zainteresowania:</akap>
+<punkt nazwa="2">ostra muza</punkt>
+<punkt nazwa="3">jazda bez trzymanki!!!</punkt>
+<punkt nazwa="4">spanie</punkt>
+<punkt nazwa="5">szybkie fury</punkt>
+<akap>Ulubione cytaty:</akap>
+<punkt nazwa="6">Zakochaj  się, a każdy wszędzie, wszystkie rzeczy, wszystkie słowa oznaczać będą  ,,miłość". To samo dzieje się, kiedy kogoś utracisz. (Jonathan Caroll)</punkt>
+<punkt nazwa="7">Lepiej skrócić o głowę niewinnego niż zawahać się podczas wojny. (Józef Stalin)</punkt>
+<akap>Autorytety:</akap>
+<punkt nazwa="8">Robert Kubica</punkt>
+<punkt nazwa="9">Krzysztof Hołowczyc</punkt>
+<akap>Muzyka:</akap>
+<punkt nazwa="10">Kasia Nosowska </punkt>
+<punkt nazwa="11">AC/DC</punkt>
+<punkt nazwa="12">Britney Spears </punkt>
+<akap>Polecane strony:</akap>
+<punkt nazwa="13">www.szybkiewozy.pl</punkt>
+<punkt nazwa="14">www.adrenalina.com</punkt>
+<punkt nazwa="15">www.najslodszepieskinaswiecie.pl</punkt>
+<punkt nazwa="16">www.rajdy-w-polsce.pl</punkt></lista>
+</pytanie>
+
+<pytanie typ="wybor" rozw="5, 7, 11, 15, 16">
+<opis><akap>Przypadek C: Alicja</akap>
+<akap>Wiek: xxxxxx</akap></opis>
+
+<lista typ="num">
+<akap>O sobie: </akap>
+<punkt nazwa="1">piszę...  dużo... najczęściej do szuflady... ale może kiedyś, ktoś znajdzie te  moje okruszki... lubię siedzieć z kubkiem gorącej czekolady (koniecznie z  cynamonem!) i gapić się w okno... mam za oknem świerk, który z każdym  rokiem rośnie... zaraz nie będę widzieć słońca...</punkt>
+<akap>Zainteresowania: </akap>
+<punkt nazwa="2">czekolada</punkt>
+<punkt nazwa="3">cisza</punkt>
+<punkt nazwa="4">książki --- im starsze, tym lepsze</punkt>
+<punkt nazwa="5">rajdy motocyklowe</punkt>
+<akap>Ulubione cytaty:</akap>
+<punkt nazwa="6">Wiesz... gdy się jest bardzo smutnym, lubi się zachody słońca... (Antoine de Saint-Exupéry)</punkt>
+<punkt nazwa="7">Jestem  mężczyzną --- to znaczy ślepcem. Jak wszyscy przede mną, tak i ja  zwaliłem się do dołu na łeb, na szyję. Ożeniłem się. (Nikos Kazantzakis)</punkt>
+<akap>Autorytety:</akap>
+<punkt nazwa="8">Maria Pawlikowska-Jasnorzewska</punkt>
+<punkt nazwa="9">Budda</punkt>
+<akap>Muzyka:</akap>
+<punkt nazwa="10">Grzegorz Turnau</punkt>
+<punkt nazwa="11">Metallica</punkt>
+<punkt nazwa="12">Stare Dobre Małżeństwo</punkt>
+<akap>Polecane strony:</akap>
+<punkt nazwa="13">www.biuroliterackie.pl</punkt>
+<punkt nazwa="14">www.cytaty.pl</punkt>
+<punkt nazwa="15">www.kwejk.pl</punkt>
+<punkt nazwa="16">www.plotek.pl</punkt></lista>
+</pytanie>
+</cwiczenie>
+
+
+
+<naglowek_rozdzial>Słowniczek</naglowek_rozdzial>
+<lista typ="slowniczek">
+<punkt><definiendum>media społecznościowe</definiendum><definiens/></punkt>
+<punkt><definiendum>wizerunek</definiendum><definiens/></punkt>
+</lista>
+
+<naglowek_rozdzial>Czytelnia </naglowek_rozdzial>
+<lista typ="czytelnia">
+<punkt><link url="http://www.pcworld.pl/news/377106/Zadbaj.o.swoj.wizerunek.na.Facebooku.html">http://www.pcworld.pl/news/377106/Zadbaj.o.swoj.wizerunek.na.Facebooku.html</link> <uwaga>[?]</uwaga></punkt>
+<punkt><link url="http://socjomania.pl/jak-sie-piszesz-tak-cie-widza-jak-dbac-o-wizerunek-w-social-media/">http://socjomania.pl/jak-sie-piszesz-tak-cie-widza-jak-dbac-o-wizerunek-w-social-media/</link> <uwaga>??</uwaga></punkt>
+</lista>
+</powiesc>
+</utwor>
\ No newline at end of file
diff --git a/tests/files/edumed/uwagi.txt b/tests/files/edumed/uwagi.txt
new file mode 100644 (file)
index 0000000..338d8ea
--- /dev/null
@@ -0,0 +1,333 @@
+This is a dry run, to really fix something, run with --seriously
+gim_1.2 Sekrety wyszukiwarek
+---------------------------------------------------
+<uwaga>
+<akap>Powy&#380;sze wygl&#261;da jak uwaga na marginesie pozostawiona przez autora modu&#322;u. Czy nie jest do wyci&#281;cia? Red.AS.</akap>
+
+
+</uwaga>
+  
+
+<uwaga>S&#261;dz&#281;, &#380;e lepiej by&#322;oby, gdyby pojawia&#322; si&#281; punkt (kropa) po ,,Zadaj pytanie".</uwaga>
+  
+gim_1.3 zdublowana pozycja ---- skasować
+---------------------------------------------------
+<uwaga>
+<akap>To jest powt&#243;rzone [http://redakcja.cyfrowaprzyszlosc.pl/editor/edit/gdzie-szukac-informacji/#VisualPerspective], ta wersja jest gorzej zredagowana; A.S.</akap>
+
+
+</uwaga>
+
+
+<uwaga>Metody i materia&#322;y w innych cz&#281;&#347;ciach s&#261; gdzie indziej. A.S.</uwaga>
+
+<uwaga>listy wypunktowane w tej cz&#281;&#347;ci?</uwaga>
+
+
+<uwaga>dwustopniowa lista?</uwaga>
+
+gim_1.5 Zapanuj nad informacjami
+---------------------------------------------------
+<uwaga>
+<akap>mo&#380;emy poprosi&#263;, &#380;eby czytelnicy polecili nam jakie&#347; dobre &#378;r&#243;d&#322;o</akap>
+
+
+</uwaga>
+gim_1 synteza
+---------------------------------------------------
+<uwaga>
+<akap>[P]??? - brak nazwy modu&#322;u</akap>
+
+
+</uwaga>
+gim_2.1 Wizerunek w siec
+---------------------------------------------------
+<uwaga>
+<akap>[?]</akap>
+
+
+</uwaga>
+<uwaga>
+<akap>??</akap>
+
+
+</uwaga>
+gim_2.3 W sieciowej społeczności
+---------------------------------------------------
+<uwaga>
+<akap>jako ilustracja (na prawie cytatu)  <link url="http://networkeddigital.files.wordpress.com/2010/05/podzial-social-media.jpg?w=590&amp;h=590">http://networkeddigital.files.wordpress.com/2010/05/podzial-social-media.jpg?w=590&amp;h=590</link></akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>- co o tym powiecie? dla mnie fajne :)</akap>
+
+
+</uwaga>
+gim_2 Kim jestem w internecie?
+---------------------------------------------------
+<uwaga>
+<akap>Ten sam materia&#322;, nieco inaczej opracowany jest w cz&#281;&#347;ci ,,Wizerunek w sieci". Zredagowane oba - do decyzji autor&#243;w.</akap>
+
+
+</uwaga>
+
+gim_3.1 Podróże po hipertekście
+---------------------------------------------------
+<uwaga>
+<akap>Poniewa&#380; definicja by&#322;a wyj&#261;tkowo niezgrabnie zredagowana po polsku, poprawi&#322;am redakcj&#281; tekstu w Wikipedii. Je&#347;li zmiany zostan&#261; zaakceptowane, nale&#380;y poprawi&#263; zacytowany powy&#380;ej tekst i link (dat&#281; dost&#281;pu).</akap>
+
+
+</uwaga>
+
+gim_3.3 Zmiany w mediach - zmiany świata
+---------------------------------------------------
+<uwaga>
+<akap>Uwaga! do uzupe&#322;nienia</akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>to nieprawda, sa takie gad&#380;ety: http://www.spodlady.com/prod_265_Reksio_stojacy_maskotka__.html; http://www.spodlady.com/prod_18151_Figurki_Bolek_i_Lolek_.html - MN</akap>
+
+
+</uwaga> jak seria opowie&#347;ci o Harrym Potterze czy 
+gim_3.7 Mowa bez słów
+---------------------------------------------------
+<uwaga>
+<akap>tu powinien wy&#347;wietlac si&#281; ten wykres</akap>
+
+
+</uwaga>
+gim_4.1 Sieciowa współpraca
+---------------------------------------------------
+<uwaga>
+<akap>Mo&#380;e warto r&#243;wnie&#380; w innych modu&#322;ach uwzgl&#281;dni&#263; genderowy savoir vivre?</akap>
+
+
+</uwaga>
+
+gim_4.2 Digitalizacja
+---------------------------------------------------
+<uwaga>
+<akap>W innych modu&#322;ach w tym miejscu: ,,Uczestnik:".</akap>
+
+
+</uwaga>
+
+gim_4.3 Remiks - nie tylko w muzyce
+---------------------------------------------------
+<uwaga><akap>V zadania sprawdzaj&#261;ce &#8211; co to znaczy &#8222;&#380;eby remiks by&#322; warto&#347;ciowy&#8221;? Takie podej&#347;cie to moim zdaniem zaprzeczenie zaj&#281;&#263; o remiksie. Dzieci powinny si&#281; dowiedzie&#263;, &#380;e remiksowanie mo&#380;e by&#263; warto&#347;ciowe, ale na zaj&#281;ciach, gdzie si&#281; o remiksie dowiaduj&#261;, nie musz&#261; ustala&#263; kryteri&#243;w. To moim zdaniem tylko szansa na blokad&#281; u nich &#8211; nie r&#243;bcie remiks&#243;w, bo mo&#380;ecie je zrobi&#263; &#378;le. A czy mo&#380;na zrobi&#263; &#378;le remiks? poprawione</akap>
+
+<akap>&#8222;Widz&#261; warto&#347;&#263; w tworzeniu przemy&#347;lanych i warto&#347;ciowych remiks&#243;w?&#8221; - Nie s&#261;dzicie, &#380;e powinni przede wszystkim wiedzie&#263;, co to remiks, umie&#263; doceni&#263; tego typu utwory i cieszy&#263; si&#281; z miksowania (je&#347;li sami si&#281; tym zajm&#261; &#8211; brak praktycznych &#263;wicze&#324;, albo dodatkowego scenariusza na d&#322;u&#380;sze zaj&#281;cia warsztatowe to moim zdaniem ogromna wada tego materia&#322;u), zw&#322;aszcza, &#380;e dopiero si&#281; o tym dowiaduj&#261;, albo rozmawiaj&#261; na forum klasy? Tego typu stwierdzenia zostawmy ekspertom, uczniowie niech widz&#261; warto&#347;&#263; w r&#243;&#380;nych remiksach, zw&#322;aszcza w&#322;asnych, bo dzi&#281;ki nim si&#281; czego&#347; ucz&#261;. Kalkowanie ocen z obszaru &#8222;kultury wysokiej&#8221; do remiks&#243;w jest troch&#281; bez sensu.poprawione</akap>
+<akap>&#8222;Mie&#263; licencj&#281; do wszystkich materia&#322;&#243;w...&#8221; - mo&#380;e lepiej &#8222;zgod&#281;&#8221;? Przecie&#380; mo&#380;na mie&#263; ustn&#261; zgod&#281; od kole&#380;anki lub kolegi, czy to jest licencja (ja sam nie wiem tego na pewno). Poza tym co z wykorzystaniem w utworach, w pe&#322;ni legalnie, np. cytat&#243;w? Przecie&#380; ustawa nie zmusza do uzyskiwania licencji na cytowanie, to w pe&#322;ni dozwolone.zmienilem</akap></uwaga>
+
+gim_4 Twórczość ery cyfrowej
+---------------------------------------------------
+<uwaga>
+<akap>Materia&#322; jest bardzo podobny i nieznacznie inaczej opracowany ni&#380; ten zawarty w cz&#281;&#347;ci ,,Prezentowanie naszych dzie&#322;"; obie cz&#281;&#347;ci zosta&#322;y zredagowane - do wyboru; AS.</akap>
+
+
+</uwaga>
+
+gim_6.1 Jak bezpiecznie działać w sieci?
+---------------------------------------------------
+<uwaga>
+<akap>To samo nieco inaczej jest w rozdziale ,,Twoje bezpiecze&#324;stwo w internecie"; obie zredagowane, do wyboru; AS.</akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>Gdzie indziej ten nag&#322;&#243;wek brzmi inaczej: ,,Uczestnicy i uczestniczki", ,,Uczestnik:" AS.</akap>
+
+
+</uwaga>
+
+gim_6.2 Incognito w internecie
+---------------------------------------------------
+<uwaga>
+<akap>Gdzie indziej ten nag&#322;&#243;wek brzmi inaczej: ,,Uczestnicy i uczestniczki", ,,Uczestnik:" AS.</akap>
+
+
+</uwaga>
+
+gim_6.3 Korzyści i szkody z nadzorowania sieci
+---------------------------------------------------
+<uwaga>
+<akap>Dwa powy&#380;sze elementy do usuni&#281;cia po uzupe&#322;nieniu; AS.</akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>Ten nag&#322;&#243;wek inaczej w innych cz&#281;&#347;ciach. Do ujednolicenia? AS.</akap>
+
+
+</uwaga>
+
+gim_6.5 Zakupy on-line
+---------------------------------------------------
+<uwaga>
+<akap>jest i wersja polska:)</akap>
+
+
+</uwaga>: 
+gim_6 Twoje bezpieczeństwo w internecie
+---------------------------------------------------
+<uwaga>
+<akap>To samo nieco inaczej jest w rozdziale ,,Jak bezpiecznie dzia&#322;a&#263; w sieci?"; obie zredagowane, do wyboru; AS.</akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>(wersja dla syntezy!)</akap>
+
+
+</uwaga>
+<uwaga>
+<akap>nie podano</akap>
+
+
+</uwaga>
+Can't parse gim_7.10 Radiofonia i telewizja: Unescaped '<' not allowed in attributes values, line 201, column 1
+gim_7.12 Dostępność
+---------------------------------------------------
+<uwaga>
+<akap>[do znalezienia]</akap>
+
+
+</uwaga>, komputer z rzutnikiem
+gim_7.7 Domena publiczna
+---------------------------------------------------
+<uwaga>
+<akap>(do zredagowania)Asia m&#243;wi&#322;a, &#380;e zerknie na to.</akap>
+
+
+</uwaga>
+gim_7.8 Dozwolony użytek
+---------------------------------------------------
+<uwaga><akap>ramka: cytat --- 1708 parlament brytyjski odno&#347;nie drukarzy --&gt; co z tym?</akap></uwaga>
+
+gim_7 synteza
+---------------------------------------------------
+<uwaga>
+<akap>brak nazwy tej syntezy</akap>
+
+
+</uwaga>
+
+gim_8.1 Rynek mediów (na przykładzie radiofonii i telewizji)
+---------------------------------------------------
+<uwaga>
+<akap>Co z tym? W innych modu&#322;ach inaczej to zapisywano. A.S.</akap>
+
+
+</uwaga>
+
+gim_8.3 Informacja jako dobro
+---------------------------------------------------
+<uwaga><akap>uwagi:</akap>
+  <akap> ost. pytanie - tu albo podpowied&#378;, albo rozwin&#261;&#263; ten temat w pigu&#322;ce</akap>
+  <akap>super &#263;wiczenie, bardzo po&#380;yteczne i wa&#380;ne, ale czy nie wymaga fachowej wiedzy producenckiej? my&#347;l&#281;, &#380;e nie - to nie b&#281;dzie pe&#322;na lista, ale jakie&#347; pomys&#322;y na pewno padn&#261;</akap></uwaga>
+  
+
+<uwaga><akap>mam te&#380; problem z informacj&#261;, jako komunikacj&#261; - jak to rozumiesz? komunikacja z czat&#243;w, for&#243;w internetowych</akap>
+<akap>ale ka&#380;da informacja jest jako&#347; komunikowana - dopiero wtedy nabiera sensu...</akap></uwaga>
+
+
+<uwaga>
+<akap>,,czysty akt komunikacji"? (np. b&#281;d&#281; pod kinem o 19:30); A.S.</akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>wola&#322;abym nie dawa&#263; tego po angielsku
+na pewno potrzebujemy jeszcze innych propozycji!
+w takim razie proponuj&#281;:
+zapowied&#378;:</akap>
+
+
+</uwaga>
+<uwaga>
+<akap>Oczami samych wydawc&#243;w</akap>
+
+
+</uwaga>
+<uwaga>
+<akap>i krytyczne spojrzenie:</akap>
+
+
+</uwaga>
+gim_8.4 Ekonomia uwagi
+---------------------------------------------------
+<uwaga>
+<akap>--&gt; mo&#380;e damy inny tytu&#322;? bo to sformu&#322;owanie nie pojawia si&#281; w tek&#347;cie (to plus!)</akap>
+
+
+</uwaga>
+<uwaga>
+<akap>mo&#380;e doda&#263; za co</akap>
+
+
+</uwaga>
+<uwaga>--&gt;  nie dawa&#322;abym tego tekstu, nie wnosi praktycznie &#380;adnej nowej wiedzy, a  od strony j&#281;zykowej (zw&#322;aszcza z perspektywy nauczyciela) jest bardzo  ci&#281;&#380;kostrawny ci&#281;&#380;kostrawnym b&#281;dzie dla uczni&#243;w z kolei tejst Filiciaka,  ale nie upieram si&#281;.
+Teraz jestem na  bie&#380;&#261;co z Aigrain, wi&#281;c mo&#380;e zaproponujemy 3 rozdzia&#322;? np. s. 18-21, 22  (specjalnie pomin&#281;&#322;am fragmenty dotycz&#261;ce specyfiki dzielenia si&#281;  plikami?</uwaga>
+
+lic_7.11 Dostępność
+---------------------------------------------------
+<uwaga>
+<akap>Co z tym zrobi&#263;? Zostawi&#263;? Usuna&#263;? A.S.</akap>
+
+
+</uwaga>
+  
+lic_7.13 Informacje o nas w sieci
+---------------------------------------------------
+<uwaga>
+<akap>W innych modu&#322;ach w nazwach kategorii (w tagach) nie ma polskich znak&#243;w diakrytycznych. Poni&#380;sze kategorie mo&#380;na opisa&#263; kr&#243;cej w tagu. Czy mam to zrobi&#263;?</akap>
+
+
+</uwaga>
+lic_7.14 Ochrona danych osobowych
+---------------------------------------------------
+<uwaga>
+<akap>tytu&#322; i autor&#243;w wstawi&#322;am z pada --- PC</akap>
+
+
+</uwaga>
+
+<uwaga>
+<akap>- czy tre&#347;ci na stronie GIODO mo&#380;na w ramach dozwolonego u&#380;ytku??</akap>
+</uwaga>
+<uwaga>
+<akap>- czy tre&#347;ci na stronie GIODO mo&#380;na w ramach dozwolonego u&#380;ytku?? je&#347;li tak, to z tego dokumenty id&#261; strony 8 i 9</akap>
+</uwaga>
+lic_7.3 Zawieranie umów
+---------------------------------------------------
+<uwaga>
+<akap>wchodzimy tu na du&#380;ym poziom szczeg&#243;&#322;u. czym si&#281; r&#243;&#380;ni umowa zawarta pod przymusem, a ta pod wp&#322;ywem gro&#378;by? potrzebuj&#281; przyk&#322;ad&#243;w na przymus, b&#322;&#261;d, podst&#281;p i gro&#378;b&#281;.</akap>
+</uwaga>
+  
+lic_7.4 Prawa obywatela
+---------------------------------------------------
+<uwaga>
+<akap>tutaj proponuj&#281; dodatkowy d&#322;u&#380;szy materia&#322;, mo&#380;e informacje z wikipedii o tych instytucjach (czy wiarygodne?), albo Asia je&#347;li ty mo&#380;esz przygotowa&#263; d&#322;u&#380;sz&#261; wersj&#281; wiedzy w pigu&#322;ce?</akap>
+
+
+</uwaga>
+  
+
+lic_7 synteza
+---------------------------------------------------
+<uwaga>
+<akap>brak nazwy syntezy</akap>
+
+
+</uwaga>
+
diff --git a/tests/test_pyhtml.py b/tests/test_pyhtml.py
new file mode 100644 (file)
index 0000000..319baa7
--- /dev/null
@@ -0,0 +1,56 @@
+
+from librarian import xmlutils
+from lxml import etree
+from librarian.pyhtml import EduModule
+from nose.tools import *
+from tests.utils import get_fixture
+
+def test_traversal():
+    xml = etree.fromstring("<a><b>BBBB</b><c>CCCC</c></a>")
+    hg = xmlutils.Xmill()
+    assert_equals(hg.next(xml), xml[0])
+    assert_equals(hg.next(xml[0]), xml[1])
+    assert_equals(hg.next(xml[1]), None)
+
+
+
+class Foo(xmlutils.Xmill):
+    def __init__(self):
+        super(Foo, self).__init__()
+        self.mode = 0
+
+    def handle_title(self, ele):
+        return "Title: ``%s''" % ele.text
+
+    def handle_artist(self, ele):
+        return "Artist: %s" % ele.text
+
+    def handle_song(self, ele):
+        if ele.getnext() is not None:
+            return "\n","--------------------\n"
+
+
+
+def test_xml_generation():
+    xml = u"""<root>
+<songs>
+<song>
+<title>Oursoul</title>
+<artist>Hindi Zahra</artist>
+</song>
+<song>
+<title>Visitor</title>
+<artist>Portico Quartet</artist>
+</song>
+</songs>
+</root>
+"""
+    txt = Foo().generate(etree.fromstring(xml))
+    print txt
+
+
+def test_edumodule():
+    xml = open(get_fixture('edumed', 'gim-wizerunek-w-sieci.xml')).read()
+    em = EduModule()
+    out = em.generate(etree.fromstring(xml))
+    print out.encode('utf-8')