Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

jloads/docs

Open more actions menu

Repository files navigation

License Apache 2.0 gitter

logo.jloads.com

stay native and react faster!

only for old school javascript developers

  • JSON definition
  • native JS code over framework's
  • modularisation over refactoring

Are you for legacy code ready?

  • let's try with jLoads
  • oferuje streamowanie interfejsu aplikacji

  • wspiera natywne rozwiązania, dzięki temu ułatwia rozwój projektów z tzw. kodem zastanym (legacy code)

  • stworzony dla programistów szukających prostych rozwiązań nastawionych na utrzymanie starszych aplikacji

  • zorientowany na modularyzację oraz płaską ale rozproszoną strukturę projektu

  • wspiera proces refaktoryzacji, modularyzacja pozwala na szybkie wdrożenie, dając gwarancję zgodnego, bo natywnego kodu na dekady

  • modularyzacja pozwala na stosowanie najnowszych rozwiązań i ominięcie pułapek stojących za frameworkami z ich aktualizacją

Obecnie rozwiązanie jLoads dotyczy frontendu, ale trwają pracę nad wykorzystaniem NodeJS do wsparcia backendu, co pozwoli na uruchomienie kodu bez opóźnieniea wynikającego z ładowania plików po załadowaniu strony.

More ...

How to learn about jLoads?

How to use?

Load to Your project get.jloads.com/jloads.min.js

<script src="//get.jloads.com/jloads.min.js">
 // Jloads is loading any media and content dynamically
</script>
  • first is loaded jquer and after bootstrap files
  • asynchronus, without special tags, only jloads logic to controll JS loading
<script>
 jl.file({
     "//code.jquery.com/jquery-3.5.1.min.js": [
         "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
         "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
     ]
 });
</script>

Przykładowe MVP

implementacja MVP z biblioteką jLoads

Proste przeładowanie tła, tekstu, grafiki

Formularz

Edytor

Aplikacja do nauki gramatyki

Standardy

Programowanie aspektowe (aspect-oriented programming, AOP) to paradygmat tworzenia programów komputerowych wspomagający separację zagadnień i rozdzielenie programu na części w jak największym stopniu niezwiązane funkcjonalnie. Zagadnienia te są w dużym stopniu rozłączne pomiędzy sobą pod względem funkcjonalnym. Aby je zrealizować, programista musi poprzeplatać ich implementacje (tzw. warkocz), co czyni kod mniej czytelnym, bardziej podatnym na błędy, trudniejszym w modyfikacji. Programowanie aspektowe zapobiega tym negatywnym skutkom oddzielając fizycznie kod każdego zagadnienia poprzez umieszczenie ich w oddzielnych aspektach i logiczne zdefiniowanie punktów interakcji pomiędzy nimi.

Funkcjonalność

możliwe jest ładowanie dynamiczne, poprzez dodawanie przez JS odpowiednich tagów dla:

  • javascript
  • link - style
  • image, file/base64
  • zagnieżdzony html, system pluginów

kaskadowe ładowanie plików

coś więcej niż tylko łaodwanie plików, one są ładowane w dokładnie takiej samej kolejności ale jako jeden plik, który pozwala na zaoszczędzenie czasu ładowania i pozwala na optymalizację bez użycia zasobów serwera.

Dzięki zastosowaniu rozproszeonej infrastruktury CDN można zwiększyć szybkość ładowania.

Obecnie dostępne są rozwiązania:

  • jloads - klasa do wywołania każdego typu poniżej:
    • jloads.obj
    • jloads.url
    • jloads.content
    • jloads.event

jloads

klasa do utworzenia dowolnej implementacji objektu jloads

jloads.obj

loads json object from url as object

jloadsObj("json/sentence.json", function (obj, url) {
 console.log(obj["q&a"], url);
 each(obj["q&a"], function (v,k) {
     var varr = v.split(' ');
     console.log(k,v,varr);
     $('input[name="first"]').val(varr);
 });
});

jloads.url

check url an load what exactly is in url

jloads.target

funkcja ma za zadanie rozpoznać typ pliku po rozszerzeniu i go załadować może zostać przetworzone, i np wszystkie pliki js wstępnie pobrane, by skrócić czas ładowania plików oddzielnie.

W pliku JSON określa się selector i do niego ładuje zawartość pliku

przykład

{
 "head": [
   "//code.jquery.com/jquery-3.5.1.min.js",
   "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
   "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css",
   "//app.wapka.pl/css/style.css"
 ],
 "body": [
   "//app.wapka.pl/html/body.html"
 ],
 "#form": [
   "//app.wapka.pl/html/create.html",
   "//app.wapka.pl/js/create.js"
 ],
 "#image": [
   "//logo.wapka.pl/wapka-300.png"
 ]
}

jloads.event

w momencie zdarzenia jest ładowany określony plik lub zmieniana wartość Można określić precyzyjnie zdarzenie i zawartość jaka ma ulec zmianie

przykład

  {  
     "#image": {
          "onclick": {
                   "#image.src::before": "//logo.wapka.pl/wapka-300.png"
                 }                      
          },
          "hover": {
                "#text.src": { 
                       "append": "//logo.wapka.pl/wapka-300.png"
                }                       
         }
     },
     "body": {
          "onload": [
               "//app.wapka.pl/js/create.js"
          ]
     }
  }    
{ 
   "selector" : "#image" 
   "event" : "onclick",
   "function": "append",
   "selector": "#image.src"
   "value": "//logo.wapka.pl/wapka-300.png"    
},

definiowanie jaką wartość chce się zmienić, jeśli się nie definiuje to dodaje standardowo jak w jloads.target

  {  
     "#image:onclick": {
         "#image.title::before": "//logo.wapka.pl/wapka-300.png"                                    
     },                
     "html:onload":[
           "//app.wapka.pl/js/create.js"
     ]     
     "#image:onload": {              
           "#image.src": "//logo.wapka.pl/wapka-300.png",
           "#image.title::after": "image loaded"                                    
     }   
  }

jloads.value

ma za zadanie załadować określoną treść w określony xpath

xpath: value

tutaj jest istotne by nie zapomnieć dokładnej ścieżki, aby nie było konfliktów

to rozwiązanie dla bardziej doświadczonych użytkowników

możliwe jest załadowanie wielu treści pod jeden adres xpath w przypadku gdy adres nie istnieje, jest w poczekalni do momentu aż pojawi się ten element w DOM tree

domyślnie dodaj element do strony

value nie jest analizowane, tylko kolejno wstrzykiwane

przykład

{
   { "head.script.src": "//code.jquery.com/jquery-3.5.1.min.js" }, 

   { "head.script.src": "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" }, 

   {
       "head.link.type": "text/css",
       "head.link.rel": "stylesheet",  
       "head.link.href": "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" 
   },

   {
       "head.link.type": "text/css",
       "head.link.rel": "stylesheet",  
       "head.link.href": "//app.wapka.pl/css/style.css" 
   },

 "body": [
   "//app.wapka.pl/html/body.html"
 ],
 "#form": [
   "//app.wapka.pl/html/create.html",
   "//app.wapka.pl/js/create.js"
 ],
 "#image": [
   "//logo.wapka.pl/wapka-300.png"
 ]
}

jloads.form

ma pomóc w operacjach na danych wysyłanych i odbiernaych przez formularze

ładowanie pliku po załadowaniu formularza

dotyczy każdego formularza

"form:onload":[
 "//app.wapka.pl/js/create.js"
]

ładowanie danych do formularza po jego załadowaniu

dotyczy wybranego formularza

"#form1:onload":{
  "#form1[method]": "POST",
  "#form1[action]": "//url",
  "#form1 .first_name": "Tom",
  "#form1 .last_name": "Sap",
  "#form1 .email": "tom@sap.com",
  "#form1 .message": "example message",
}  

lista wyboru

"#form1:onload":{
  "#form1 .servers":[
      {"1":"server 1"},
      {"2":"server 2"},
      {"3":"server 3"}
  ]
}  

wysłanie danych na podany w formularzu URL i metodą w momencie wysyłania formularza

   "form:submit":{
       "login": "#form1 .email",
       "name": "#form1 .last_name",
       "content": "#form1 .message",
   }

  {  

     "form:submit": {
         "#image.title::before": "//logo.wapka.pl/wapka-300.png"                                    
     },                

     "#image:onload": {              
           "#image.src": "//logo.wapka.pl/wapka-300.png",
           "#image.title::after": "image loaded"                                    
     }   
  }    

jloads.content

Aplikacja po stronie backend, która pobiera konfigurację

Struktura:

selector : url zasobu

jest przetworzona do postaci:

xpath: head, body, #image
type: js, css, html, png,
url: oryginalny url zasobu

rozszerzona:

url_b64: base64 (local path, konwersja z url http do BASE64.txt)
content_md5: wygenerowane poprzez md5( content ) 
content_b64: base64 ( TEXT to BASE64 )
time: timestamp

przykład

poniższe przykłady pochodzą z jednego z projektów firmy Softreck

ładowanie skryptów do poszczególnych elementów strony poprzez xpath, gdy element nie jest jeszcze gotowy/załadowany do drzewa DOM, to jloads czeka i załaduje go gdy będzie to możliwe

   // Load core of application
   jl.target({
       "head": [
           "css/fade-in.css",
           "form/form.js",
           "form/form.css",
           "form/inputs.css",
       ],
       "#forms": {
           "form/app.html": [
               "form/submit.js",
               "form/edit_list.js",
           ]
       },
       "#messages": [
           "js/messages.js"
       ],
       "#images": [
           "//logo.faas.ovh/4/cover.png",
       ],
       "#menu": [
           "html/menu.html",
       ],
       "footer": [
           "html/footer.html"
       ]
   });

ładowanie skryptów w zależności od hierarchii, najpierw jQuery a następnie Bootstrap

// load content ASAP with dependencies, that jquery must be first and after that bootstrap
jl.file({
  "//code.jquery.com/jquery-3.5.1.min.js": [
      "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
      "//stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
  ]
});

ładowanie zawartości w zalezności od wywołanego url

   // Load dynamically contents depends url #hash
   jl.url({
       "#app": {
           "#forms": {
               "form/app.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#app_man": {
           "#forms": {
               "form/app_man.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#server": {
           "#forms": {
               "form/server.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#webservice": {
           "#forms": {
               "form/webservice.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#cloud": {
           "#forms": {
               "form/cloud.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#local": {
           "#forms": {
               "form/local.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#iot": {
           "#forms": {
               "form/iot.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#api": {
           "#forms": {
               "form/api.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#api_func": {
           "#forms": {
               "form/api_func.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#api_storage": {
           "#forms": {
               "form/api_storage.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       },
       "#test": {
           "#forms": {
               "form/test.html": [
                   "form/submit.js",
                   "form/edit_list.js"
               ]
           }
       }
   });

konfiguracja

obsługiwane funkcje

  • environment:
    • localhost
    • testing
    • stage
    • production
  • domain, zamiast podawać pełną ścieżkę,
  • target, gdzie mają być załaodowane skrypty domyślnie w head
  • delay,
  • cache, on/off

Environment

zmienne w zależności od środowiska

.env({
    "local":{
        "domain": "//localhost:63342/"
    },
    "production":{
        "domain": "//js.jloads.com/"
    }
})

Cache

możliwość wyłączenia cache-owania

.cacheOff()

Przykladowa implementacja

aplikacja html

 <script src="https://get.jloads.com/jloads-url.js"></script>

framework laravel

{!! Html::script('https://get.jloads.com/jloads-url.js') !!}

environment

npm upgrade

npm install -g npm

production

jLoads.Load - get.jloads.com

local

jLoads.Load - localhost:8080

start

start.bat

start as process in backgrund forever - npm

npm install forever -g

start2.bat    
forever start server.js

TODO

Environment friendly

  • sprawdzać czy funkcje już istnieją, informować i blokować
  • jeśli już np biblioteka bootstrap załadowana to informować i blokować
  • jeśli inne pliki css, czy html załadowane, informować i blokować

Funkcje

  • informacja przy kazdej funkcji skad pochodzi i jaka to wersja.
  • ladowanie plikow z roznych zrodel w zaleznosci od wersji: local/test/cdn

Serwer, uslugi

  • odwrocone edytowanie, forkowanie
  • tworzenie wlasnych zestawow projektow
  • historia zmian, bazowanie na repozytoriach git
    • polaczenie z gitem
      • user
      • fork Tworzenie w locei, poprzez APi i requesty mozna wykorzystac bezposrednio zdefiniowane API/postman wywolanie nawet z konsolie, zeby bylo mozna latwo obrabiac kod, zmieniac, doklejac

mozliwosc generowania wlasnego kodu online i dolaczania do projektu lub bazujac na obcym kodzie zmienic go i wygenerowac link w ktorym bedzie mozna go potem dalej edytowac,

nodejs:

  • OpenApi
  • deploy on api.jloads.com
  • ograniczenia dla ilosci requestow z jednego IP
  • kazdy kto publikuje - za darmo
  • plany platne dla tych, ktorzy wykorzytsuja devops, 1EUR/msc | lifetime 10EUR
    • ulatwienie automatycznego deployu biblitoeki w npmjs
    • edytor online
    • funkcja copy paste dla tych, ktorzy szukaja inspiracji
    • platforma uruchamianie kodu JS

W przszlosci wapka + mozna wybirac licencje, mozlwiosc generowania licencji, + shop, market, aplikacji sprzedawanie swojego kodu, praw +

Calls:

  • generator jednego pliku dla loadera z listy, get request

    • format url: one.js?name=version&name=version&...
  • wyswietlanie dokumentacji konkretnej biblioteki

    • format url: doc.html?name=version&name=version&...

TODO:IDEA

ikonografiki są ładowane bezposrednio z serwisów

  • intergacja z SERWISAMI publicznymi REST

jloads podaje dane wejsciowe, simple version only GET:

{        
    "https://www.crunchbase.com/organization/openbrand": {                        
        "name":"mama",
        "type":" string"
    
    }
}

more details about connections:

{        
   "URL": "https://www.crunchbase.com/organization/openbrand",
   "TYPE" : "GET"
   "DATA": {                        
       "name":"mama",
       "type":" string"

   }
}    



### Listeners

https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event



### Przykładowe rozwiązanie zaproponowane przez @Comandeer https://github.com/Comandeer

```js
jLoads( {
     preload: {
          "head": [
               'arkusz-stylow.css',
               'jakis-skrypt.js'
          ],
          "nav": {
               "navbar_search/page.html": [
                    "navbar_search/script.js",
                    "navbar_search/init.js"
               ]
          },
          "#breadcrumbs": [
               "breadcrumbs/page.html"
          ],
          "footer": [
               "page/footer.html"
          ]
     },
     router: {
          "#a": {
               "article": "page/editor.html"
          },
          "#b": {
               "article": {
                    "grid/page.html": [
                         "grid/init.js",
                    ]
               }

          },
          "#c": {
               "article": "grid-image/page.html"
          },
          "#d": {
               "article": "page/text.html"
          },
          "#e": {
               "#submenu": {
                    "menu/organisation.html": [
                         "form/submit.js"
                    ]
               }
          },
          "#results": {
               "article": {
                    "grid/page.html": [
                         "grid/init.js",
                    ]
               }
          },
     }
} );

// lub

jLoads( '<URL pliku konfiguracyjnego>' );

Community


github npm

Use publishConfig option in your package.json

"publishConfig": { "registry": "https://npm.pkg.github.com/" }

Authenticate https://github.com/settings/tokens

npm login --registry=https://npm.pkg.github.com/

Publish

npm publish

Releases

No releases published

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.