Coder Social home page Coder Social logo

docentyt / librus-srednia Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 0.0 1.86 MB

Wtyczka do przeglądarek wyświetlająca średnią ocen, mimo że administrator szkoły wyłączył tę funkcjonalność.

JavaScript 87.73% HTML 8.25% CSS 4.02%
chrome chrome-extension librus

librus-srednia's Introduction

Librus średnia

Chrome web store Users Rating

Rozszerzenie do najpopularniejszych przeglądarek dodające możliwość wyświetlenia średniej z ocen, która nie zaśmieca strony.

Przed Po
przed po

✨ Funkcje

  • Wyświetlanie średniej dla każdego przedmiotu w tabeli z ocenami.
  • Wyświetlanie średniej wszystkich ocen na dole tabeli.
  • Wyświetlanie średniej ocen śródrocznych i rocznych.
  • Wyświetlanie średniej przewidywanych ocen śródrocznych i rocznych.
  • Automatyczne zamykanie pola "Zachowanie" w tabeli.
  • Możliwość zmiany parametrów wyliczania średniej w ustawieniach.
  • Inteligentne dostosowywanie ilości kolumn w tabeli.
  • Synchronizowanie ustawień między przeglądarkami, gdy użytkownik jest do niej zalogowany (jeśli przeglądarka wspiera synchronizację).
  • Automatyczne przełączanie planu lekcji na najbliższy tydzień w weekend po otwarciu go.

Wtyczka posiada ustawienia z możliwością konfigurowania każdej funkcji.

🧮 Sposób liczenia średniej

Do średniej domyślnie liczą się tylko oceny oznaczone Licz do średniej: tak. Pod uwagę jest brana waga. Domyślnie + dodaje 0.5 do wartości oceny, a - odejmuje 0.25. Oceny niezawierające normalnej liczby nie są brane pod uwagę. Parametry liczenia można zmienić w ustawieniach wtyczki (wciskając ikonkę wtyczki).

🚀 Instalacja

Firefox

Wtyczka w firefoxie obecnie nie działa.

Przeglądarki oparte na chrominium

Jeśli się da to przez chrome web store.

Instalacja ręczna

  1. Sklonuj repozytorium.
  2. Uruchom w konsoli polecenie npm install (wymagane Node.js v18 i npm (testowane na 9.8)). Można użyć dev container.
  3. Uruchom w konsoli polecenie npm run dev.
  4. W Twojej przeglądarce wejdź w Rozszerzenia -> Zarządzaj rozszerzeniami.
  5. Włącz tryb dewelopera.
  6. Wciśnij "Załaduj rozpakowane" i wybierz folder extensions/combined/dist/chrome, gdzie znajduje się rozpakowana wtyczka.

❗Zgłaszanie błędów

Wejdź w zakładkę Issues i utwórz nowy wątek.

🤝 Mogę wesprzeć projekt?

Tak. Możesz pomóc go rozwijać lub możesz wesprzeć projekt finansowo. Zerknij na link po prawej stronie pod napisem Sponsor this project.

librus-srednia's People

Contributors

docentyt avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

librus-srednia's Issues

wywalić debugowanie na "prodzie"

Wybacz, ale musiałem gdy to zobaczyłem:

Wiem, że uciążliwe może być ciągłe szukanie w plikach gdzie miejsca debugowania, ale możesz po prostu zrobić własną funkcję do logowania, która będzie używać console.log (albo możesz nawet spróbować przeciążyć console.log) i dodać w środku if, którym sprawdzasz środowisko rozszerzenia czy jest DEV czy jest PROD (można użyć pewnego rodzaju enum). Jeśli jest to DEV no to logi działają, a jeśli PROD no to pomija logowanie i ju. Wtedy gdy się zapomnisz to zmienisz tylko środowisko z DEV na PROD i po problemie będzie

console.logi mogą być użyte do kradnięcia danych przez np. inne wtyczki (chociaż sposobów pewnie jest więcej).

OOP

Widzę że czasami korzystać z klas a czasami nie. Kod najlepiej gdy jest hermetyczny, wtedy jest bardziej odporny na czynniki zewnętrzne. Masz trochę za dużo odpowiedzialności per plik. Jak dla mnie to np. tworzenie zmiennej globalnej i wykorzystanej jej w kilku też globalnych metodach jest pogwałceniem bezpieczeństwa. Po to są argumenty i parametry, aby hermetyzować kod.

DDD i CQRS

Też kod napisany w pełni obiektowo jest dużo łatwiej testować. Też, aby sobie ułatwić sprawę pisz klasy DTO oraz klasy Domen.
Domena to taka najbardziej podstawowa klasa w całym projekcie. Ona ma zdefiniowane najbardziej podstawowe struktury. Domeny określają jakie podstawowe zasoby są podstępne w ramach projektu. Ja najczęściej Domen używam jako Encji. Domeny przechowują stan aplikacji. Ten stan można czytać (np. z bazy danych) albo zmieniać (zmieniać czyli tworzyć, edytować i usuwać). Gdy stan Domeny się zmienia wtedy mechanizmy nasłuchujące tych zmian wykonują swoją logikę (to może być cokolwiek, ale generalnie chodzi mi o Eventy Domenowe).... Przestawiłem ci mały skrawek z koncepcji DDD. Ogólnie to polecam zacząć tworzyć kod według zasady CQRS. To się sprawdza i na frontend i na backend i w gamedev. Ten CQRS jest też dobrym wstępem w koncepcję DDD. To też jest czymś co lepiej samemu znaleźć, bo każdemu przypasuje inne źródło. co CQRS jest w miarę prosty do zrozumienia to jednak całe DDD wymaga wiele praktyki i wracania do koncepcji (trzeba nie raz kilka razy to samo przeczytać).
Oczywiście za tym się też kryje stosowanie SOLID, KISS, DRY, YAGNI chociaż nigdy nie da się spełnić w 100% zasad programowania. Czasami względem jednej klasy te zasady potrafią się ze sobą kłócić, wtedy wybierz co będzie lepsze w danej sytuacji.

Testy

W całym kodzie nie znalazłem testów (albo jestem ślepy). Są one konieczne do utrzymania kodu w swoim założeniu. Najlepiej jest tak testować wszystkie klasy, wtedy będziesz wiedzieć czy pewne zmiany nie wpływają na działanie reszty kodu. Testy to wykażą i będzie ci o miliard razy łatwiej naprawić błędy. Jeśli pewne założenia się zmienią to warto przyjrzeć się testom i je też zmienić.

Unit test

Jednym ze sposobem testowania jest pisanie unit testów, generalnie to jest kod do sprawdzania kodu.

Scenariusze testowe - testy manualne

To jest ciekawy sposób testów, bo trzeba się naklikać aby coś przetestować. Scenariusze testowe mają ci pomóc określić w co poklikać i jaki ma być oczekiwany efekt. Możesz np. najpierw napisać scenariusze, a potem unit testy. Scenariusze testowe to po prostu pewne opowiadanie np.

Jako (anonimowy) UŻYTKOWNIK edytuję sposób liczenia średniej na taki, a taki i oczekuję, że średnia wyjdzie tyle, tyle

Oczywiście sam będziesz lepiej wiedzieć jak to sobie opisać.

gherkin

Scenariusze testowe można pisać w gherkin i później to można przekonwertować na kod za pomocą jakiegoś automatu.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.