Użytkownik:Eksekk/licencje i moduły

Z Nonsensopedii, polskiej encyklopedii humoru

Strona powstała, żeby status mojego "zlecenia" był nieco bardziej przejrzysty (co już jest zrobione, a co jeszcze wymaga zrobienia).

MATERIAŁY

Lista nowych modułów:

  • Moduł:Narzędzia licencyjne – jak Moduł:Narzędzia, tylko do moich celów licencyjnych.
    • makeTemplate - zwraca wywołanie szablonu w wikitekście (np. {{abc|argument=test}})
    • stripTemplate - zwraca nazwę szablonu i tablicę z argumentami z wywołania szablonu w wikitekście (np.
      local name, args = p.stripTemplate("<nowiki>{{test|abc|{{test2|a|inner=abc}}|param=test|{{test3|b}}}}</nowiki>")
      mw.log(name)
      mw.logObject(args)
      
      zwróci
test
table#1 {
  "abc",
  ["param"] = "test",
  ["test2"] = table#2 {
    "a",
    ["inner"] = "abc",
  },
  ["test3"] = table#3 {
    "b",
  },
}

)

    • stripLicenseModifierTemplates
    • getTemplateFromCode – to wymaga dłuższego wytłumaczenia. Żeby można było odzyskać wywołanie szablonu w wikitekście, stworzyłem system adnotacji w kodzie szablonu. Wygląda on mniej więcej tak (przykład copydowna):
    • <div data-template="copydown">{{Licbox|Copydown|{{#if:{{{lic|}}}|Ten obraz był '''edytowany''' i jest obecnie zlepkiem pikseli z różnych źródeł. Kilka pikseli może mieć jednak '''zastrzeżone prawa autorskie''' (i zapewne ma). Używanie tej grafiki '''najprawdopodobniej łamie prawa autorskie''', jednakże sam '''autor montażu publikuje swój wkład pracy na wolnej licencji''' (tzw. ''copydown''), mianowicie:<div data-template="copydown" data-argument="lic">{{{lic}}}</div>|Ten obraz był '''edytowany''' i jest obecnie zlepkiem pikseli z różnych źródeł. Jednocześnie wgrywająca go osoba nie rości sobie niczego z tego tytułu. Kilka pikseli może mieć jednak zastrzeżone '''prawa autorskie'''. Używasz tego na własną '''odpowiedzialność!'''}}|grafika=[[Plik:Copydown.png|90px|link=Nonsensopedia:Copydown]]}}</div>
    • W skrócie: każdy szablon jest opatrzony parametrem data-template, który zawiera nazwę tego szablonu, a każdy argument parametrem data-template (żeby było wiadomo, do którego szablonu on należy, jak są zagnieżdżone) i parametrem data-argument, który zawiera nazwę argumentu. Funkcja parsuje ten kod i zwraca wywołanie szablonu w wikitekście + następny punkt parsowania, żeby można było chainować wywołania tej funkcji. Przykładowy input:
<table style="margin: 0;" data-template="copydown" class="licbox licbox-default"><tr><td class="licbox-grafika" style="padding: 5px; text-align: center;">[[Plik:Copydown.png|90px|link=Nonsensopedia:Copydown]]</td>
<td style="padding: 5px;">Ten obraz był """edytowany""" i jest obecnie zlepkiem pikseli z różnych źródeł. Kilka pikseli może mieć jednak """zastrzeżone prawa autorskie""" (i zapewne ma). Używanie tej grafiki """najprawdopodobniej łamie prawa autorskie""", jednakże sam """autor montażu publikuje swój wkład pracy na wolnej licencji""" (tzw. ""copydown""), mianowicie: <div data-template="copydown" data-argument="lic"><table style="margin: 0;" data-template="użytkownik:eksekk/kopyrajt" class="licbox licbox-default"><tr><td class="licbox-grafika" style="padding: 5px; text-align: center;">[[Plik:NotCommons-emblem-copyrighted.svg|100px]]</td>
<td style="padding: 5px;"><span style="font-weight: bold; font-size: 16pt;">KOPYRAJT-OŁRAJT!</span><br />
Ktoś się uparł, że ten plik podlega prawom autorskim, jednak bez niego artykuł w Nonsensopedii wyglądałby kijowo, dlatego zakładamy, że możemy sobie go pożyczyć na zasadzie """niedozwolonego użytku""".</td>
</tr><tr><td class="licname" colspan="2">"""<span class="licensetpl_short"><b>COPYRIGHT</b></span>"""</td></tr></table><div class="licensetpl_wrapper" style="display:none"><span class="licensetpl_nonfree">true</span><span class="licensetpl_link_req">false</span><span class="licensetpl_long">Copyright</span><span class="licensetpl_attr_req">true</span><span class="licensetpl_short">Copyright</span></div>
[[Kategoria:Pliki z zastrzeżonymi prawami autorskimi]]</div></td>
</tr><tr><td class="licname" colspan="2">"""<span class="licensetpl_short"><b>COPYDOWN</b></span>"""</td></tr></table>
    • I przykładowy output:
table#1 {
  ["args"] = table#2 {
    ["lic"] = table#3 {
      ["args"] = table#4 {
      },
      ["name"] = "użytkownik:eksekk/kopyrajt",
    },
  },
  ["name"] = "copydown",
}
    • reconstructTemplateCall – rekonstruuje wywołanie szablonu w wikitekście z outputu powyższej funkcji.
  • Moduł:Licbox – moduł licboksa, przeznaczony do wywoływania głównie z innych modułów.
    • showContents – funkcja do debugowania, wygodnie pokazuje zawartość tabeli.
    • getLicboxType – konwertuje typ licboksa podawany jako argument na wartość, która jest używana m.in. jako nazwa klasy w CSS.
    • getMetadataTable – zwraca tablicę metadanych na podstawie nazwy licencji i opcjonalnych argumentów.
    • setSMWProperties – ustawia właściwości SMW na podstawie argumentów i tablicy metadanych.
    • p._getCode – zwraca właściwy kod licboksa na podstawie argumentów przekazanych do szablonu i jego nazwy, używane też w innych modułach.
    • p.run – przeznaczone do wywoływania bezpośrednio w szablonach licencji, preprocesuje kod jeśli nie podano argumentu demo.
  • Moduł:Szablony CC – mini-kombajn – moduł do wszystkich szablonów licencji Creative Commons, generujący je na podstawie tylko nazwy licencji. Funkcje są raczej łatwe do zrozumienia.

Testy:

Pomoce naukowe:

Dokumentacja
Parsowanie licencji składowych

Wszystko się zaczyna od wywołania szablonu Użytkownik:Eksekk/information, z odpowiednimi parametrami zgodnymi z tymi w obecnym information. Powyższy szablon wywołuje funkcję information z Moduł:Information/sandbox. Zmiany w tym module wprowadziłem w funkcji processParts, najpierw dostaję tabelę reprezentującą oryginalne wywołanie szablonu za pomocą funkcji getTemplateFromCode z Moduł:Narzędzia licencyjne, a także oryginalnie zapisany kod plica (np. {{Użytkownik:Expert3222/domniemanie|lic={{Użytkownik:Expert3222/copydown|lic={{Użytkownik:Expert3222/kopyrajt}}}}}}), używając reconstructTemplateCall. Potem parsujemy to wywołanie szablonu, żeby wyciągnąć informację, czy były jakieś domniemania/copydowny i odpowiednio ustawiamy subobiekt licencji, w międzyczasie tworząc stringa z parametrami, które potem będą przekazane do szablonu licencji (przykład: {{Użytkownik:Expert3222/kopyrajt|mini=1|domniemanie=1|copydown=2}} (te liczby są po to, żeby była zachowana kolejność szablonów przy generowaniu wyglądu)). Potem ten szablon wywołuje Moduł:Licbox, który na podstawie argumentu mini generuje miniaturową wersję szablonu i ewentualnie dodaje ikonki informujące o domniemaniu itp.

TODO
Nr Problem Status Uwagi
1 Szablony czasem są nieintuicyjne w wypełnianiu, przykładowo {{self}}, który ma gąszcz dzikich parametrów i to jedyny sposób żeby niektóre rzeczy działały. zrobione tylko przemielić botem i będzie git
2 Są tu i ówdzie kwiatki pokroju {{CopyrightedFreeUseProvidedThat/self}}. Takie wyjątki nie powinny być potrzebne. zrobione jw.
3 Mamy koszmarną ilość szablonów CC z bardzo podobnym kodem. Powinny one zostać zastąpione prostym wywołaniem jakiegoś jednego megaszablonu CC, który by to wszystko ogarniał. zrobione Moduł do szablonów CC jest już napisany, trzeba go tylko odpowiednio przerobić.
4 Ogólnie należy zredukować ilość powielającego się wikitekstu do absolutnego minimum. w toku To pewnie oznaczę jako zakończone dopiero na samym końcu.
5 Chcemy mieć 100% zgodności z rozszerzeniem CommonsMetadata, które wyciąga informacje z szablonu Information i wyświetla je w MultimediaViewerze. zrobione Trzeba jeszcze uzupełnić tablicę metadanych w Moduł:Lista licencji. Jakiś ochotnik? :P
6 Szablony w wersji mini, czyli wykorzystywane w opisie składowych są ograniczone. Powinna być opcja np. otworzenia wyskakującego okienka z pełnym opisem licencji, a także wpisywanie tam bardziej skomplikowanych licencji. Myślę że możesz spokojnie założyć, że darujemy sobie wpisywanie tam wielu licencji, ale powinno to ogarniać rzeczy typu domniemanie. zrobione Bardziej skomplikowane licencje ogarnięte, trzeba tylko to jakoś uładnić i dorobić JS.
7 Składowe również powinny się ładnie w SMW oznaczać jako subobiekty, razem z autorem i źródłem parsowanym przez odpowiednie moduły. w toku
8 Idealnie by było, gdybyśmy mogli automatycznie ustawiać licencję i autora składowej na podstawie samego źródła, jeśli źródłem jest Nonsa. To by był naprawdę dobry bajer. w toku
9 fajnie by było gdyby szablony licencji miały mobilny tryb wyświetlania, w którym znikałyby np. znaczki licencji, bo teraz zajmują trochę za dużo miejsca, a nie są absolutnie niezbędne. w toku
10 Obecnie z jakiegoś powodu licencje ustawiają sobie atrybuty id= na różnych elementach HTML co jest spoko… dopóki jest w dokumencie jeden szablon licencji :P Tak niestety nie jest, a wielokrotnie występujące ID mogą psuć niektóre rzeczy (jQuery chociażby) i ogólnie są niezgodne ze specyfikacją. zrobione Jednakże myślałem o tym wcześniej i chyba nawet wiem co trzeba zrobić, także niedługo to ogarnę.
11 Semantyczne oznaczanie elementów szablonów licencji w toku do dodania i rozdzielenia wszystkie metadane plus dodatkowe atrybuty
12 Wiele licencji w permission + self, parsowanie ich, SMW, itp. w toku Zostało: testy parsowania, SMW
13 Formularz do edytowania licencji zrobione

Źródło: moja dyskusja (tekst problemów autorstwa Ostrzyciela)

ZASTĘPOWANIE STAREGO SYSTEMU
  1. Zastąpić moduł Information moją wersją.
  2. Edytować wszystkie szablony licencji i przerobić je na nowszą wersję.
INNE
  1. Zmienić wszędzie nazwę funkcji p._getCode na p.getCode.