Chartist.js, O librarie JS pentru chart-uri Responsive

Stefanescu Mihai 3 years ago iNoob

In acest articol am sa va vorbesc despre o librarie JS de charturi responsive si anume despre chartist.js. Aceasta librarie a fost dezvoltate pentur a crea chart-uri responsive intr-un  mod cat se poate de simplu. Chiar daca exista o multime de librarii de chart-uri ce fac o treaba excelenta eu nu am gasit nici-una pe care sa o folosesc la fel de  simplu ca pe aceasta.

In acest articol nu doar am sa va prezint libraria ci am sa va si arat cum poate fi folosita, am sa va arat cateva concepte cheie, dar si cateva functii mai avansate.

Instalarea

Chartist poate fi integrat in proiectul tau in mai mult moduri. Poate fi luat atat cu Bower si NPM cat si direct dintr-un CDN, dar bineinteles ca exista mai multe moduri de instalare.

BOWER

Pentur a instala Chartist ca si dependenta front-end folosind Bower executati urmatoarea comanda in folder-ul proiectului vostru:

bower install chartist --save

NPM

Daca preferi chartist ca repository NPM  sau daca folosesti un bundler CommonJS precum Browserify sau webpack, atunci sigur o sa doresti sa instalezi Chartist folosind NPM:

npm install chartist --save

CDN

Un mod rapid de a te apuca de treaba cu Chartist este folosirea unui CDN. Cei de la jsDelivr fac  o treaba grozava cu pastrarea multor librarii updatate si cel mai important, o fac pe gratis. Pentru a folosi Chartist in acest mod nu trebuie decat sa copiati acest cod in HTML-ul vostru:

<script src="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.js"></script>
<link href="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.css" rel="stylesheet" type="text/css" />

Primul Chart

O data ce ai gasit tipul de chart potrivit pentru proiectul tau te poti apuca de treaba. In acest articol am sa folosesc JSBin pentur a crea chart-uri.

Pentru inceput hai sa facem un line chart simplu. Primul lucru ce trebuie facut este adaugarea unui container in elementul body cu clasa ct-chart:

<!DOCTYPE html>
<html>
<head>
  <script src="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.js"></script>
  <link href="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.css" rel="stylesheet" type="text/css" />
  <meta charset="utf-8">
  <title>Primul Chart</title>
</head>
<body>
  <div class="ct-chart"></div>
</body>
</html>

Acum, cu doar cateva linii de javascript putem initializa un chart in acest element. Hai sa  facem un chart cu 4 linii cu cate 6 valori fiecare. Vom seta si un set de label-uri pentru acest chart. Ca un al doilea argument, constructorul clasei Chartist.Line accepta un obiect cu optiuni In care putem seta o inaltime si o latime fixa pentru chart.

new Chartist.Line('.ct-chart', {
  labels: ['Data 1', 'Data 2', 'Data 3', 'Data 4', 'Data 5', 'Data 6'],
  series: [
    [4, 2.5, 1, 6, 0.5],
    [0, 3, 3, 1.2, 6],
    [6, 1, 1.5, 2, 1],
    [4, 5, 2, 1, 0, 5]
  ]
}, {
  width: 500,
  height: 300
});

Iata rezultatul pe JSBin: http://jsbin.com/woqeba/edit?html,js,output

Container Responsive

In exemplul de mai sus am folosit o inaltime si o latime fixa pentru chart, lucru ce nu este dorit in multe cazuri, mai ales cand vorbim despre un design responsive.

Pentru a pastra aspect ratio (tehnica folosita si in pastrarea aspect ratio la video-uri) o sa folosim una dintre clasele chartist predefinite si mai exact ct-golden-section, dar puteti folosi ce clasa doriti din aceasta lista:http://gionkunz.github.io/chartist-js/getting-started.html#creating-a-chart-using-aspect-ratios

<body>
  <div class="ct-chart ct-golden-section"></div>
</body>

Iar acesta va fi codul nostru js:

new Chartist.Line('.ct-chart', {
  labels: ['Data 1', 'Data 2', 'Data 3', 'Data 4', 'Data 5', 'Data 6'],
  series: [
    [4, 2.5, 1, 6, 0.5],
    [0, 3, 3, 1.2, 6],
    [6, 1, 1.5, 2, 1],
    [4, 5, 2, 1, 0, 5]
  ]
});

Acum avem un chart responsive.

Configurari avansate

Pentru a usura discutia pe aceasta tema am sa fac un bar chart cu ajutorul caruia am sa va arat anumite lucruri

new Chartist.Bar('.ct-chart', {
  labels: ['Luni', 'Marti', 'Miercuri', 'Joi', 'Vineri', 'Sambata', 'Duminica'],
  series: [
    [3, 9, 1, 3, 5, 8, 10],
    [4, 2, 6, 7, 6, 3, 10]
  ]
}, {
  seriesBarDistance: 30,
  axisX: {
    showGrid: false
  }
});

In optiunile de mai sus am setatdistanta barelor si am anuntat Chartist ca nu trebuie sa randeze grilele pe axa x.

In mod standard, label-urile de pe axa x sunt aliniate la stanga. Pentru a le centra avem nevoie de un stil CSS, si de asemenea dorim sa setam latimea barelor la 20 pixeli.

.ct-chart .ct-bar {
  stroke-width: 20px;
}
.ct-chart .ct-label.ct-horizontal {
  text-align: center;
}

Suprascrierea configurarilor responsive

Exemplul de mai sus functioneaza perfect pe monitoarele de desktop, dar nu si pe dispozitivele cu o rezolutie redusa. Barele sunt prea largi, label-urile sunt prea largi, iar label-urile contin prea mult text pentru a mai putea fi citit bine si bineinteles distanta dintre bare va fi prea mare.

Unele dintre aceste schimbari pot fi efectuate din CSS, schimband latimea barelor in media query, dar cum putem aplica asemena schimbari si pentru codul javascript? Chartist vine cu un mecanism numit responsive configuration override ce ne va usura viata.

Hai sa aruncam o privire la exemplul precendent si sa il rescriem gandindu-ne la o abordare mobile-first. Vom optimiza media query-urile pentru continutul cu care lucram si vom crea breakpoint-uri la 300px si la 600px.

ct-chart .ct-label.ct-horizontal {
  text-align: center;
}
.ct-chart .ct-bar {
  stroke-width: 5px;
}
@media screen and (min-width: 300px) {
  .ct-chart .ct-bar {
    stroke-width: 10px;
  }
}
@media screen and (min-width: 600px) {
  .ct-chart .ct-bar {
    stroke-width: 20px;
  }
}

In urmatorul exemplu folosim labelInterpolationFnc pentru a pasao functie ce foloseste interpolarea sau chiar inlocuieste valoarea originala a label-ului pentru o axa data. Asta inseamna ca putem controla modul in care zilele sunt afisate pe axa x.

new Chartist.Bar('.ct-chart', {
  labels: ['Luni', 'Marti', 'Miercuri', 'Joi', 'Vineri', 'Sambata', 'Duminica'],
  series: [
    [3, 9, 1, 3, 5, 8, 10],
    [4, 2, 6, 7, 6, 3, 10]
  ]
}, {
  seriesBarDistance: 6,
  axisX: {
    showGrid: false,
    // returneaza doar prima litera a zilei
    labelInterpolationFnc: function(value) {
      return value[0];
    }
  }
}, [
  // Pe display-urile de peste 300px, schimbam distanta barelor si afisam doar  primele 3 litere din label-uri
  ['screen and (min-width: 300px)', {
    seriesBarDistance: 15,
    axisX: {
      labelInterpolationFnc: function(value) {
        return value.slice(0, 3);
      }
    }
  }],
  // Pe display-urile de peste 600px, schimbam distanta barelor si afisam label-urile complet
  ['screen and (min-width: 600px)', {
    seriesBarDistance: 30,
    axisX: {
      labelInterpolationFnc: function(value) { return value; }
    }
  }]
]);

Modificarea SVG folosind CSS

Trebuie sa va spun ca la acest capitol am avut parte de multe batai de cap si sper ca acest articol (sau cel putin aceasta parte de articol) sa va ajute.

Modificarea SVG-ului cu CSS  este relativ simpla si eficienta pentru ca probabil aveti nevoie de un anumit stil pe care il veti refolosi. Puteti include clase CSS ce definesc aspectul si feel-ul charturilor, dar in acelasi timp tin logica separata de modul de afisare.

Iata o lista de proprietati CSS ce ne ajuta la definirea stilurilor SVG-urilor:

  • fill
    Seteaza culoarea unei forme. Recomand folosirea RGBa.
  • stroke
    Seteaza culoarea outline-ului din jurul unei forme.
  • stroke-width
    Seteaza latimea outline-ului.
  • stroke-dasharray
    Specifica un stroke dasked (linie intrerupta) pentru outline.
  • stroke-linecap
    Seteaza un storke line-cap pentru outline. Poate fi setat la roundbutt sau square.

Animatii CSS

Chiar daca nu esti un mare fan al animatiilor cu siguranta te vei intalni cu o situatie in care vei fi nevoit sa le implementezi. InAcest articol voi exagera putin cu animatiile pentru ca majoritatea browserelor suporta tot felul de animatii, ba chiar ne permit folosirea proprietatilor stroke-dasharray si stroke-dashoffset.

 

JS Bin on jsbin.com

Folosind un CSS3 putem obtine un efect uimitor pentru chart-ul nostru.

@keyframes width-pulse {
  0% {
    stroke-width: 6px
  }
  50% {
    stroke-width: 14px;
  }
  100% {
    stroke-width: 6px;
  }
}
@keyframes dashoffset-seven {
  0% {
    stroke-dashoffset: 7px;
  }
  100% {
    stroke-dashoffset: 0px;
  }
}
@keyframes dasharray-craziness {
  0% {
    stroke-dasharray: 7px 2px;
  }
  80% {
    stroke-dasharray: 7px 100px;
    stroke-width: 10px
  }
  100% {
    stroke-dasharray: 7px 2px;
  }
}
.ct-chart .ct-label.ct-vertical,
.ct-chart .ct-label.ct-horizontal {
  color: rgba(255, 255, 255, 0.5);
}
.ct-chart .ct-grid.ct-vertical,
.ct-chart .ct-grid.ct-horizontal {
  stroke: rgba(255, 255, 255, 0.1);
  stroke-dasharray: 2px;
  shape-rendering: crispEdges;
}
.ct-chart .ct-series.ct-series-a .ct-line {
  stroke: #4ECDC4;
  stroke-width: 10px;
  stroke-linecap: round;
  animation: width-pulse 2s infinite;
}
.ct-chart .ct-series.ct-series-b .ct-line {
  stroke: #C7F464;
  stroke-width: 2px;
  stroke-dasharray: 5px 2px;
  animation: dashoffset-seven 200ms infinite linear;
}
.ct-chart .ct-series.ct-series-c .ct-line {
  stroke: #FF6B6B;
  stroke-width: 3px;
  stroke-linecap: round;
  stroke-dasharray: 30px 5px;
  animation: dasharray-craziness 10s infinite linear;
}

 Extensibilitatea

Pentur ca Chartist foloseste SVG inline in DOM, extinderea functionalitatii este destul de simpla.

In acest exemplu am sa va arat cum sa adaugati tooltip-uri folosind jQuery. Cand utilizatorul pune mouse-ul deasupra unui anumit punct apare un tooltip care ii afiseaza o anumita valoare.

var $tooltip = $('<div class="tooltip tooltip-hidden"></div>').appendTo($('.ct-chart'));

$(document).on('mouseenter', '.ct-point', function() {
  var seriesName = $(this).closest('.ct-series').attr('ct:series-name'),
      value = $(this).attr('ct:value');

  $tooltip.text(seriesName + ': ' + value);
  $tooltip.removeClass('tooltip-hidden');
});

$(document).on('mouseleave', '.ct-point', function() {
  $tooltip.addClass('tooltip-hidden');
});

$(document).on('mousemove', '.ct-point', function(event) {
  $tooltip.css({
    left: event.offsetX - $tooltip.width() / 2,
    top: event.offsetY - $tooltip.height() - 20
  });
});

In exemplul de mai sus am folosit evenimente normale din DOM pentur a adauga tooltip-uri simple. Poate ati observat ca folosesc  atributul ct:value din line chart si atributul ct:series-name din series group. Chartist vine cu propriul namespace XML ce este folosit pentur a transmite anumite informatii catre SVG.

Resurse

Concluzie

Sper ca acest articol v-a fost catusi de putin folositor si daca tot aveti nelamuriri in legatura cu ChartistJS puteti sa ma contactati si am sa icnerc sa va ajut cat de repede pot.

Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.


Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum

ortho-cept facilement accessible en ligne # 3 months ago Your style is unique compared to other people I've read stuff from. Thanks for posting when you have the opportunity, Guess I'll just book mark this page.
Opal # 3 months ago I like reading a post that can make people think. Also, thanks for permitting me to comment!
myambutol en vente libre en Suisse # 3 months ago each time i used to read smaller content which also clear their motive, and that is also happening with this article which I am reading now.
Pearl # 3 months ago I used to be able to find good information from your blog articles.
Logan # 3 months ago hey there and thank you for your information – I have certainly picked up something new from right here. I did however expertise several technical points using this web site, as I experienced to reload the website many times previous to I could get it to load properly. I had been wondering if your web host is OK? Not that I am complaining, but sluggish loading instances times will very frequently affect your placement in google and can damage your high-quality score if ads and marketing with Adwords. Anyway I'm adding this RSS to my email and can look out for much more of your respective exciting content. Ensure that you update this again soon.
Nancy # 3 months ago You're so awesome! I do not think I've read through something like this before. So wonderful to discover another person with original thoughts on this topic. Seriously.. many thanks for starting this up. This website is something that's needed on the internet, someone with a bit of originality!
ponstel 250 mg a un precio asequible en Perú # 2 months ago Howdy! This blog post couldn't be written any better! Looking through this post reminds me of my previous roommate! He continually kept preaching about this. I most certainly will forward this information to him. Pretty sure he'll have a good read. Many thanks for sharing!
aankoop van anastrozolo van het merk Mylan # 2 months ago Since the admin of this web page is working, no uncertainty very rapidly it will be famous, due to its quality contents.
bonekwani # 2 months ago <a href=https://www.sapporovn.com/maxx-crosby-white-jersey-nflat>maxx crosby white jersey</a><a href=https://www.sapporovn.com/make-your-own-nba-jersey-online-nflat>make your own nba jersey online</a><a href=https://www.sapporovn.com/womens-sixers-apparel-nflat>womens sixers apparel</a><a href=https://www.sapporovn.com/miami-heats-new-uniforms-nflat>miami heats new uniforms</a> <a href="https://www.tiopepi.net/boston-red-sox-ladies-hats-zillow-handt">boston red sox ladies hats zillow</a> <a href="https://www.execedits.net/ccm-vintage-jerseys-for-cheap-jerseyi">ccm vintage jerseys for cheap</a> <a href="https://www.felicatech.com/pittsburgh-pirates-hat-meaning-xbox-one-capo">pittsburgh pirates hat meaning xbox one</a><a href="https://www.felicatech.com/michael-jordan-fitted-hats-90s-capo">michael jordan fitted hats 90s</a><a href="https://www.felicatech.com/boston-red-sox-dog-hat-2017-capo">boston red sox dog hat 2017</a><a href="https://www.felicatech.com/hats-dolphin-mall-nj-capo">hats dolphin mall nj</a> <a href="https://www.smtlrtcc.net/air-force-1-s-black-shoespt">air force 1 s black</a> <a href=https://www.thestmc.com/jordan-6-low-white-rot-skoie>jordan 6 low white rot</a><a href=https://www.thestmc.com/jordan-13-og-white-black-skoie>jordan 13 og white black</a><a href=https://www.thestmc.com/nike-air-more-uptempo-bambini-skoie>nike air more uptempo bambini</a><a href=https://www.thestmc.com/adidas-nmd-ri-maschio-skoie>adidas nmd ri maschio</a> bonekwani http://www.bonekwani.com/
prijzen van slimex op voorschrift # 2 months ago This site was... how do you say it? Relevant!! Finally I've found something that helped me. Thanks!
vente libre de bupropion en Suisse # 2 months ago Pretty portion of content. I simply stumbled upon your blog and in accession capital to assert that I acquire in fact loved account your weblog posts. Any way I will be subscribing for your feeds and even I fulfillment you get admission to consistently fast.
prix du alyq en Belgique # 2 months ago Hey! Do you know if they make any plugins to protect against hackers? I'm kinda paranoid about losing everything I've worked hard on. Any tips?
albenza online beschikbaar # 2 months ago What's up, everything is going sound here and ofcourse every one is sharing data, that's really fine, keep up writing.
venlafaxine online zonder voorschrift in Nederland # 2 months ago Hey just wanted to give you a brief heads up and let you know a few of the pictures aren't loading properly. I'm not sure why but I think its a linking issue. I've tried it in two different internet browsers and both show the same outcome.
singulair en venta en Lima sin receta # 2 months ago My spouse and I stumbled over here from a different web page and thought I should check things out. I like what I see so now i'm following you. Look forward to going over your web page repeatedly.
Leanne # 2 months ago Hi there friends, pleasant paragraph and good arguments commented at this place, I am genuinely enjoying by these.
acheter sibutramine en Allemagne # 2 months ago Pretty great post. I just stumbled upon your weblog and wished to mention that I've truly enjoyed browsing your blog posts. In any case I will be subscribing to your feed and I'm hoping you write again soon!
famvir prix France # 2 months ago I think this is one of the most significant info for me. And i am glad reading your article. But should remark on some general things, The site style is perfect, the articles is really great : D. Good job, cheers
oxiderma expédié rapidement # 2 months ago Hello There. I found your blog using msn. This is a very well written article. I will be sure to bookmark it and return to read more of your useful information. Thanks for the post. I'll certainly return.
erhalte leflunomide ohne Rezept in der Schweiz # 2 months ago Somebody necessarily lend a hand to make critically posts I'd state. This is the very first time I frequented your web page and thus far? I surprised with the analysis you made to create this particular post incredible. Great process!
clomid 270 pills kopen in Antwerpen zonder recept # 2 months ago Thanks for your marvelous posting! I really enjoyed reading it, you are a great author.I will ensure that I bookmark your blog and will come back later on. I want to encourage you to continue your great work, have a nice day!
bisacodyl en venta en Brasil sin receta # 2 months ago Very good write-up. I definitely love this site. Stick with it!
aldara kopen in Zwitserland # 2 months ago Since the admin of this site is working, no question very shortly it will be well-known, due to its quality contents.
albenza avec ou sans ordonnance en France # 2 months ago I all the time used to read post in news papers but now as I am a user of internet so from now I am using net for articles, thanks to web.
ozobax online kaufen # 2 months ago Greetings from California! I'm bored at work so I decided to browse your site on my iphone during lunch break. I love the info you present here and can't wait to take a look when I get home. I'm shocked at how quick your blog loaded on my phone .. I'm not even using WIFI, just 3G .. Anyways, awesome site!
omnipen te koop in Spanje # 2 months ago Have you ever considered publishing an ebook or guest authoring on other websites? I have a blog based on the same topics you discuss and would really like to have you share some stories/information. I know my visitors would enjoy your work. If you're even remotely interested, feel free to shoot me an email.
vente libre de centany en Belgique # 2 months ago Wonderful blog! I found it while searching on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I've been trying for a while but I never seem to get there! Cheers
acquisto online di cetirizine in Italia # 2 months ago Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you could do with a few pics to drive the message home a little bit, but other than that, this is fantastic blog. An excellent read. I will definitely be back.
cipro facilement accessible en ligne # 2 months ago When I initially commented I clicked the "Notify me when new comments are added" checkbox and now each time a comment is added I get several e-mails with the same comment. Is there any way you can remove me from that service? Thanks a lot!
ipratropium in vendita a Trieste # 2 months ago Remarkable! Its in fact awesome post, I have got much clear idea regarding from this paragraph.
encuentra mowin sin necesidad de receta en Perú # 2 months ago Thanks for finally talking about >Chartist.js, O librarie JS pentru chart-uri Responsive - Invata-Programare <Liked it!
Taylor # 2 months ago Hi there, You have done a fantastic job. I'll definitely digg it and personally recommend to my friends. I'm sure they'll be benefited from this website.
achat de levonorgestrel en ligne # 2 months ago I think that is among the so much vital info for me. And i'm satisfied reading your article. However want to commentary on some common things, The site taste is perfect, the articles is truly nice : D. Good process, cheers
lustral 0.38 euro par pilule sans ordonnance en Suisse # 2 months ago When I initially commented I clicked the "Notify me when new comments are added" checkbox and now each time a comment is added I get several e-mails with the same comment. Is there any way you can remove me from that service? Appreciate it!
raadpleeg een arts om een recept voor noroxin te krijgen in Nederland # 2 months ago Hiya! I know this is kinda off topic however , I'd figured I'd ask. Would you be interested in exchanging links or maybe guest authoring a blog article or vice-versa? My website discusses a lot of the same topics as yours and I feel we could greatly benefit from each other. If you're interested feel free to shoot me an e-mail. I look forward to hearing from you! Wonderful blog by the way!
farlutal beschikbaar in een Nederlandse apotheek # 1 month ago This design is steller! You definitely know how to keep a reader amused. Between your wit and your videos, I was almost moved to start my own blog (well, almost...HaHa!) Excellent job. I really loved what you had to say, and more than that, how you presented it. Too cool!
Dani # 1 month ago This is the perfect site for everyone who hopes to find out about this topic. You understand so much its almost tough to argue with you (not that I really would want to…HaHa). You definitely put a fresh spin on a subject that has been written about for ages. Wonderful stuff, just great!
Clarita # 1 month ago Hello friends, how is all, and what you desire to say concerning this piece of writing, in my view its genuinely awesome in favor of me.
Melaine # 1 month ago It's genuinely very complex in this busy life to listen news on Television, thus I simply use web for that purpose, and obtain the most recent information.
Doretha # 1 month ago Today, while I was at work, my cousin stole my iPad and tested to see if it can survive a 30 foot drop, just so she can be a youtube sensation. My apple ipad is now broken and she has 83 views. I know this is completely off topic but I had to share it with someone!
waar benadryl zonder recept te kopen # 1 month ago If some one wants to be updated with most up-to-date technologies therefore he must be pay a quick visit this web site and be up to date everyday.
blerone te koop zonder recept in Nederland # 1 month ago hello there and thank you for your info – I've definitely picked up anything new from right here. I did however expertise a few technical points using this site, as I experienced to reload the site lots of times previous to I could get it to load correctly. I had been wondering if your web host is OK? Not that I am complaining, but slow loading instances times will often affect your placement in google and can damage your high quality score if advertising and marketing with Adwords. Well I'm adding this RSS to my email and could look out for much more of your respective exciting content. Make sure you update this again soon.
Polska # 1 month ago Good post. I learn something new and challenging on sites I stumbleupon everyday. It's always useful to read through articles from other writers and practice something from other sites.
biaxin zonder voorschrift in Mexico-Stad # 1 month ago It's actually a nice and useful piece of information. I'm happy that you simply shared this useful info with us. Please keep us up to date like this. Thanks for sharing.
benzac verkrijgbaar zonder voorschrift in apotheek in België # 1 month ago If you want to get much from this piece of writing then you have to apply these techniques to your won website.
sevikar sin receta a precio elevado # 1 month ago Hi, i think that i saw you visited my weblog so i came to “return the favor”.I am trying to find things to improve my web site!I suppose its ok to use a few of your ideas!!
compra de lamivudine en Italia en línea # 1 month ago Everything is very open with a clear clarification of the challenges. It was definitely informative. Your site is useful. Thank you for sharing!
Taylor # 1 month ago Howdy just wanted to give you a quick heads up. The words in your post seem to be running off the screen in Opera. I'm not sure if this is a formatting issue or something to do with browser compatibility but I figured I'd post to let you know. The design look great though! Hope you get the problem fixed soon. Thanks
basiron recomendado por profesionales de la salud en Perú # 1 month ago Awesome! Its really remarkable article, I have got much clear idea on the topic of from this post.
rzetelny zakup amoxicillin w Polsce # 1 month ago I'm gone to inform my little brother, that he should also pay a visit this blog on regular basis to obtain updated from newest news.
amoxicillin sans effets secondaires indésirables # 1 month ago It's remarkable to go to see this web site and reading the views of all friends regarding this paragraph, while I am also keen of getting knowledge.
imiquimod senza prescrizione a prezzo elevato # 1 month ago With havin so much content do you ever run into any issues of plagorism or copyright infringement? My site has a lot of exclusive content I've either created myself or outsourced but it appears a lot of it is popping it up all over the web without my authorization. Do you know any techniques to help stop content from being ripped off? I'd certainly appreciate it.
comprar dimenhydrinate en Bélgica sin problemas # 1 month ago Hi there to all, how is all, I think every one is getting more from this site, and your views are nice in support of new users.
Preis für cytoxan mit ärztlicher Verschreibung in Wien erfragen # 1 month ago Definitely imagine that that you stated. Your favourite justification seemed to be at the web the simplest thing to remember of. I say to you, I definitely get annoyed at the same time as people consider issues that they just do not understand about. You managed to hit the nail upon the top and also defined out the entire thing without having side-effects , people can take a signal. Will likely be back to get more. Thanks
BVZ_Moskva_E # 1 week ago Быстро возводимые здания: коммерческий результат в каждом кирпиче! В нынешней эпохе, где секунды - доллары, экспресс-конструкции стали настоящим спасением для предпринимательства. Эти инновационные конструкции обладают высокую надежность, экономичность и мгновенную сборку, что позволяет им наилучшим вариантом для разных коммерческих начинаний. <a href=https://bystrovozvodimye-zdanija-moskva.ru/>Строительство быстровозводимых зданий под ключ цена</a> 1. Быстрое возведение: Секунды - самое ценное в экономике, и скоро возводимые строения позволяют существенно сократить время монтажа. Это чрезвычайно полезно в сценариях, когда актуально быстро начать вести дело и получать доход. 2. Бюджетность: За счет улучшения производственных процедур элементов и сборки на объекте, расходы на скоростройки часто бывает менее, по отношению к обычным строительным проектам. Это способствует сбережению денежных ресурсов и обеспечить более высокий доход с инвестиций. Подробнее на <a href=https://bystrovozvodimye-zdanija-moskva.ru/>https://www.scholding.ru</a> В заключение, моментальные сооружения - это лучшее решение для коммерческих задач. Они обладают молниеносную установку, экономию средств и надежные характеристики, что делает их превосходным выбором для компаний, желающих быстро начать вести бизнес и получать деньги. Не упустите момент экономии времени и средств, выбрав быстровозводимые здания для ваших будущих инициатив!
comprar brahmi en línea en Bélgica # 4 days ago Hi! I just wanted to ask if you ever have any issues with hackers? My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no back up. Do you have any solutions to protect against hackers?
Gabagamma en venta libre en México # 3 days ago Hi, after reading this remarkable post i am also happy to share my familiarity here with mates.
olmesartan 20 mg sin efectos indeseables # 3 days ago You are so cool! I do not think I have read a single thing like that before. So great to find someone with some genuine thoughts on this topic. Really.. thanks for starting this up. This web site is something that is needed on the web, someone with some originality!
sinequan sans ordonnance en Suisse # 1 day ago Hurrah, that's what I was seeking for, what a material! present here at this webpage, thanks admin of this web page.
encuentra lirpan sin necesidad de receta en Perú # 8 hours ago I visited multiple sites but the audio feature for audio songs present at this website is genuinely wonderful.
Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.
Login Register

🔖 Bookmarks
✨ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌪️ Discord
Back to top
Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.