Comments (13)
Thanks you !
from easyadminbundle.
Hi,
Maybe like @javiereguiluz said in the last response from #5687
Try to make your AssociationField as autocomplete() and then add this HTML attribute to it:
$field->setFormTypeOption('attr.data-ea-autocomplete-render-items-as-html', 'true');
I tried and data-ea-autocomplete-render-items-as-html
seems to be optional
Don't forget to add the image in __toString affinity class
from easyadminbundle.
Hi ! Thanks for that
I tried and it doesn't work. This forces it to be a string :/
from easyadminbundle.
Try '<img src="..." /> ' . $your_label;
from easyadminbundle.
I try return '<img src="'. $this->img .'" />';
and return '<img src="..." /> ' . $this->img;
and i've the same problem
from easyadminbundle.
from easyadminbundle.
Don't forget to add the dir. I tried and it works for me
My test code :
yield AssociationField::new('customer')
->setRequired(true)
->setFormTypeOption('attr', ['required' => true])
->setColumns(4)
->autocomplete();
In my customer class:
public function __toString(): string
{
return '<img src="media/products/images/test.png" />' . $this->fullName;
}
No need public dir, you are already in public
from easyadminbundle.
I don't understand why it doesn't work
from easyadminbundle.
My Crud :
`<?php
namespace App\Controller\Admin;
use App\Entity\Champions;
use App\Repository\AffinityRepository;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
use EasyCorp\Bundle\EasyAdminBundle\Field\FormField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class ChampionsCrudController extends AbstractCrudController
{
private $affinityRepository;
public function __construct(AffinityRepository $affinityRepository)
{
$this->affinityRepository = $affinityRepository;
}
public static function getEntityFqcn(): string
{
return Champions::class;
}
public function configureFields(string $pageName): iterable
{
$affinity = $this->affinityRepository->findAll();
// dd($affinity);
return [
// FormField::addPanel('Détails d\'un champion'),
// BooleanField::new('isAvailable', 'En ligne')
// ->setColumns('col-sm-2 col-lg-2 col-xxl-2'),
FormField::addTab('Détails d\'un champion')
->setIcon('fa-sharp fa-solid fa-building-user')
->addCssClass('optional')
->setHelp(''),
BooleanField::new('isAvailable', 'En ligne')
->setColumns('col-sm-2 col-lg-2 col-xxl-2'),
TextField::new('name', 'Nom')
->setColumns('col-sm-2 col-lg-2 col-xxl-2'),
ChoiceField::new('tier', 'Tier')
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->setChoices([
'Tier S' => 'S',
'Tier A' => 'A',
'Tier B' => 'B',
'Tier C' => 'C',
'Tier D' => 'D',
'Tier E' => 'E',
])
->hideOnIndex(),
AssociationField::new('affinity','Affinité')
->hideOnForm()
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->hideOnIndex(),
AssociationField::new('affinity','Affinité')
->setRequired(true)
->setFormTypeOption('attr', ['required' => true])
->hideOnIndex()
->hideOnDetail()
->setColumns(4)
->autocomplete(),
AssociationField::new('faction','Faction')
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->hideOnIndex(),
AssociationField::new('alliance','Alliance')
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->hideOnIndex(),
AssociationField::new('rarety','Rareté')
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->hideOnIndex(),
AssociationField::new('aura','Aura')
->setColumns('col-sm-4 col-lg-4 col-xxl-4')
->hideOnIndex(),
AssociationField::new('role','Rôle')
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->hideOnIndex(),
FormField::addTab('Statistique de base')
->setIcon('fa-sharp fa-solid fa-building-user')
->addCssClass('optional')
->setHelp(''),
IntegerField::new('hp', 'Points de vie')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('attack', 'Attaque')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('defense', 'Défense')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('speed', 'Vitesse')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('accuracy', 'Précision')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('resistance', 'Résistance')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('criticalRate', 'Taux critique')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('criticalDmg', 'Dommage Critique')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
IntegerField::new('nbBook', 'Nombre de livre')
->setColumns('col-sm-1 col-lg-1 col-xxl-1')
->hideOnIndex(),
FormField::addTab('Compétences')
->setIcon('fa-sharp fa-solid fa-building-user')
->addCssClass('optional')
->setHelp(''),
CollectionField::new('competencesChampions','Compétences du champion')
->useEntryCrudForm()
->setColumns('col-sm-12 col-lg-12 col-xxl-12')
->hideOnIndex(),
FormField::addTab('Forces et faiblesses')
->setIcon('fa-sharp fa-solid fa-building-user')
->addCssClass('optional')
->setHelp(''),
TextareaField::new('strength', 'Forces')
->hideOnIndex(),
TextareaField::new('weakness', 'Faiblesses')
->hideOnIndex(),
FormField::addTab('Visuel'),
ImageField::new('img', 'Image')
->setUploadDir('public/uploads/champions')
->setBasePath('uploads/champions')
->setUploadedFileNamePattern('[randomhash][slug]-[contenthash].[extension]')
->setRequired(false),
DateField::new('created_at', 'créer le')
->hideOnForm()
->hideOnIndex(),
TextField::new('alt', 'ALT')
->setColumns('col-sm-2 col-lg-2 col-xxl-2')
->hideOnForm()
->hideOnIndex(),
];
}
public function configureCrud(Crud $crud): Crud
{
return $crud
->setPageTitle('index', 'Gestion des champions')
->setPageTitle('new', 'Création d\'un champion')
->setPageTitle('edit', fn (Champions $champions) => sprintf('Gestion du champion : %s', $champions->getName()))
->setPageTitle('detail', fn (Champions $champions) => sprintf('Champion %s', $champions->getName()))
->setDateFormat('dd / MM / yyyy')
->setFormThemes(['admin/form.html.twig', '@EasyAdmin/crud/form_theme.html.twig']);
}
public function configureActions(Actions $actions): Actions
{
return $actions
//will add the action in the page index view
->add(Crud::PAGE_INDEX, Action::DETAIL)->setPermission(Action::DETAIL, 'ROLE_DEV')
->setPermission(Action::DELETE, 'ROLE_DEV')
->setPermission(Action::EDIT, 'ROLE_DEV')
->setPermission(Action::NEW, 'ROLE_DEV')
->update(Crud::PAGE_INDEX, Action::NEW, function (Action $action) {
return $action->setIcon('fa-solid fa-plus')->setLabel('Créer');
})
->update(Crud::PAGE_INDEX, Action::EDIT, function (Action $action) {
return $action->setIcon('fa-solid fa-pen-to-square')->setLabel('Editer');
})
->update(Crud::PAGE_INDEX, Action::DELETE, function (Action $action) {
return $action->setIcon('fa-solid fa-minus')->setLabel('Supprimer');
})
->update(Crud::PAGE_INDEX, Action::DETAIL, function (Action $action) {
return $action->setIcon('fa-solid fa-magnifying-glass')->setLabel('En savoir +');
})
->update(Crud::PAGE_INDEX, Action::BATCH_DELETE, function (Action $action) {
return $action->setIcon('fa-solid fa-minus')->setLabel('Supprimer');
})
->update(Crud::PAGE_DETAIL, Action::EDIT, function (Action $action) {
return $action->setIcon('fa-solid fa-floppy-disk')->setLabel('Éditer');
})
->update(Crud::PAGE_DETAIL, Action::INDEX, function (Action $action) {
return $action->setIcon('fa-solid fa-list')->setLabel('Retourner à la liste');
})
->update(Crud::PAGE_DETAIL, Action::DELETE, function (Action $action) {
return $action->setIcon('fa-solid fa-trash')->setLabel('Supprimer');
})
->update(Crud::PAGE_EDIT, Action::SAVE_AND_CONTINUE, function (Action $action) {
return $action->setIcon('fa-solid fa-floppy-disk')->setLabel('Sauvegarder et continuer');
})
->update(Crud::PAGE_EDIT, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setIcon('fa-solid fa-floppy-disk')->setLabel('Sauvegarder et quitter');
})
->update(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER, function (Action $action) {
return $action->setIcon('fa-solid fa-plus')->setLabel('Créer et en ajouter un autre');
})
->update(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER, function (Action $action) {
return $action->setIcon('fa-solid fa-plus')->setLabel('Créer et en ajouter un autre');
})
->update(Crud::PAGE_NEW, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setIcon('fa-solid fa-plus')->setLabel('Créer');
});
}
}
My entity :
<?php
namespace App\Entity;
use App\Repository\AffinityRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
#[ORM\Entity(repositoryClass: AffinityRepository::class)]
#[UniqueEntity(fields: ['name'], message: 'L'élement existe déjà')]
class Affinity
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255, unique: true)]
private ?string $name = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $created_at = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $img = null;
#[ORM\OneToMany(mappedBy: 'affinity', targetEntity: Champions::class)]
private Collection $champions;
#[ORM\OneToMany(mappedBy: 'affinity', targetEntity: Donjons::class)]
private Collection $donjons;
#[ORM\OneToMany(mappedBy: 'affinity', targetEntity: ClanBoss::class)]
private Collection $clanBosses;
public function __toString(): string
{
// return '<img src="'. $this->img .'" />';
// return '<img src="..." /> ' . $this->img;
return '<img src="uploads/affinity/ce5b1ed2fd4304f022bf7cc58b4a5e29ca2a2e46void-33f3829b970b7812cdb90afb47f5f689b3bae848.png" />' . $this->name;
}
public function __construct()
{
$this->champions = new ArrayCollection();
$this->setCreatedAt(new \DateTime());
$this->donjons = new ArrayCollection();
$this->clanBosses = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): static
{
$this->name = $name;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->created_at;
}
public function setCreatedAt(\DateTimeInterface $created_at): static
{
$this->created_at = $created_at;
return $this;
}
public function getImg(): ?string
{
return $this->img;
}
public function setImg(?string $img): static
{
$this->img = $img;
return $this;
}
/**
* @return Collection<int, Champions>
*/
public function getChampions(): Collection
{
return $this->champions;
}
public function addChampion(Champions $champion): static
{
if (!$this->champions->contains($champion)) {
$this->champions->add($champion);
$champion->setAffinity($this);
}
return $this;
}
public function removeChampion(Champions $champion): static
{
if ($this->champions->removeElement($champion)) {
// set the owning side to null (unless already changed)
if ($champion->getAffinity() === $this) {
$champion->setAffinity(null);
}
}
return $this;
}
/**
* @return Collection<int, Donjons>
*/
public function getDonjons(): Collection
{
return $this->donjons;
}
public function addDonjon(Donjons $donjon): static
{
if (!$this->donjons->contains($donjon)) {
$this->donjons->add($donjon);
$donjon->setAffinity($this);
}
return $this;
}
public function removeDonjon(Donjons $donjon): static
{
if ($this->donjons->removeElement($donjon)) {
// set the owning side to null (unless already changed)
if ($donjon->getAffinity() === $this) {
$donjon->setAffinity(null);
}
}
return $this;
}
/**
* @return Collection<int, ClanBoss>
*/
public function getClanBosses(): Collection
{
return $this->clanBosses;
}
public function addClanBoss(ClanBoss $clanBoss): static
{
if (!$this->clanBosses->contains($clanBoss)) {
$this->clanBosses->add($clanBoss);
$clanBoss->setAffinity($this);
}
return $this;
}
public function removeClanBoss(ClanBoss $clanBoss): static
{
if ($this->clanBosses->removeElement($clanBoss)) {
// set the owning side to null (unless already changed)
if ($clanBoss->getAffinity() === $this) {
$clanBoss->setAffinity(null);
}
}
return $this;
}
}
And my entity Champions :
<?php
namespace App\Entity;
use App\Repository\ChampionsRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
#[ORM\Entity(repositoryClass: ChampionsRepository::class)]
#[UniqueEntity(fields: ['name'], message: 'L'élement existe déjà')]
class Champions
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $created_at = null;
#[ORM\Column(length: 255, unique: true)]
private ?string $name = null;
#[ORM\ManyToOne(inversedBy: 'champions')]
#[ORM\JoinColumn(nullable: true)]
private ?Affinity $affinity = null;
#[ORM\ManyToOne(inversedBy: 'champions')]
#[ORM\JoinColumn(nullable: true)]
private ?Factions $faction = null;
#[ORM\ManyToOne(inversedBy: 'champions')]
#[ORM\JoinColumn(nullable: true)]
private ?Alliance $alliance = null;
#[ORM\ManyToOne(inversedBy: 'champions')]
#[ORM\JoinColumn(nullable: true)]
private ?Rarety $rarety = null;
#[ORM\ManyToOne(inversedBy: 'champions')]
#[ORM\JoinColumn(nullable: true)]
private ?Auras $aura = null;
#[ORM\ManyToOne(inversedBy: 'champions')]
#[ORM\JoinColumn(nullable: true)]
private ?Roles $role = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $strength = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $weakness = null;
#[ORM\Column]
private ?int $nbBook = null;
#[ORM\Column]
private ?int $hp = null;
#[ORM\Column]
private ?int $attack = null;
#[ORM\Column]
private ?int $defense = null;
#[ORM\Column]
private ?int $speed = null;
#[ORM\Column]
private ?int $criticalRate = null;
#[ORM\Column]
private ?int $criticalDmg = null;
#[ORM\Column]
private ?int $resistance = null;
#[ORM\Column]
private ?int $accuracy = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $img = null;
#[ORM\OneToMany(mappedBy: 'champion', targetEntity: CompetencesChampions::class, cascade:['persist'])]
private Collection $competencesChampions;
#[ORM\Column(length: 255, nullable: true)]
private ?string $tier = null;
#[ORM\Column]
private ?bool $isAvailable = null;
#[ORM\OneToMany(mappedBy: 'champion', targetEntity: BuildChampion::class)]
private Collection $buildChampions;
#[ORM\Column(length: 255, nullable: true)]
private ?string $alt = null;
public function __toString()
{
return $this->name;
}
public function __construct()
{
$this->competencesChampions = new ArrayCollection();
$this->setAlt($this->name);
$this->setCreatedAt(new \DateTime());
$this->buildChampions = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->created_at;
}
public function setCreatedAt(\DateTimeInterface $created_at): static
{
$this->created_at = $created_at;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): static
{
$this->name = $name;
return $this;
}
public function getAffinity(): ?affinity
{
return $this->affinity;
}
public function setAffinity(?affinity $affinity): static
{
$this->affinity = $affinity;
return $this;
}
public function getFaction(): ?factions
{
return $this->faction;
}
public function setFaction(?factions $faction): static
{
$this->faction = $faction;
return $this;
}
public function getAlliance(): ?Alliance
{
return $this->alliance;
}
public function setAlliance(?Alliance $alliance): static
{
$this->alliance = $alliance;
return $this;
}
public function getRarety(): ?Rarety
{
return $this->rarety;
}
public function setRarety(?Rarety $rarety): static
{
$this->rarety = $rarety;
return $this;
}
public function getAura(): ?Auras
{
return $this->aura;
}
public function setAura(?Auras $aura): static
{
$this->aura = $aura;
return $this;
}
public function getRole(): ?Roles
{
return $this->role;
}
public function setRole(?Roles $role): static
{
$this->role = $role;
return $this;
}
public function getStrength(): ?string
{
return $this->strength;
}
public function setStrength(?string $strength): static
{
$this->strength = $strength;
return $this;
}
public function getWeakness(): ?string
{
return $this->weakness;
}
public function setWeakness(?string $weakness): static
{
$this->weakness = $weakness;
return $this;
}
public function getNbBook(): ?int
{
return $this->nbBook;
}
public function setNbBook(int $nbBook): static
{
$this->nbBook = $nbBook;
return $this;
}
public function getHp(): ?int
{
return $this->hp;
}
public function setHp(int $hp): static
{
$this->hp = $hp;
return $this;
}
public function getAttack(): ?int
{
return $this->attack;
}
public function setAttack(int $attack): static
{
$this->attack = $attack;
return $this;
}
public function getDefense(): ?int
{
return $this->defense;
}
public function setDefense(int $defense): static
{
$this->defense = $defense;
return $this;
}
public function getSpeed(): ?int
{
return $this->speed;
}
public function setSpeed(int $speed): static
{
$this->speed = $speed;
return $this;
}
public function getCriticalRate(): ?int
{
return $this->criticalRate;
}
public function setCriticalRate(int $criticalRate): static
{
$this->criticalRate = $criticalRate;
return $this;
}
public function getCriticalDmg(): ?int
{
return $this->criticalDmg;
}
public function setCriticalDmg(int $criticalDmg): static
{
$this->criticalDmg = $criticalDmg;
return $this;
}
public function getResistance(): ?int
{
return $this->resistance;
}
public function setResistance(int $resistance): static
{
$this->resistance = $resistance;
return $this;
}
public function getAccuracy(): ?int
{
return $this->accuracy;
}
public function setAccuracy(int $accuracy): static
{
$this->accuracy = $accuracy;
return $this;
}
public function getImg(): ?string
{
return $this->img;
}
public function setImg(?string $img): static
{
$this->img = $img;
return $this;
}
/**
* @return Collection<int, CompetencesChampions>
*/
public function getCompetencesChampions(): Collection
{
return $this->competencesChampions;
}
public function addCompetencesChampion(CompetencesChampions $competencesChampion): static
{
if (!$this->competencesChampions->contains($competencesChampion)) {
$this->competencesChampions->add($competencesChampion);
$competencesChampion->setChampion($this);
}
return $this;
}
public function removeCompetencesChampion(CompetencesChampions $competencesChampion): static
{
if ($this->competencesChampions->removeElement($competencesChampion)) {
// set the owning side to null (unless already changed)
if ($competencesChampion->getChampion() === $this) {
$competencesChampion->setChampion(null);
}
}
return $this;
}
public function getTier(): ?string
{
return $this->tier;
}
public function setTier(?string $tier): static
{
$this->tier = $tier;
return $this;
}
public function isIsAvailable(): ?bool
{
return $this->isAvailable;
}
public function setIsAvailable(bool $isAvailable): static
{
$this->isAvailable = $isAvailable;
return $this;
}
/**
* @return Collection<int, BuildChampion>
*/
public function getBuildChampions(): Collection
{
return $this->buildChampions;
}
public function addBuildChampion(BuildChampion $buildChampion): static
{
if (!$this->buildChampions->contains($buildChampion)) {
$this->buildChampions->add($buildChampion);
$buildChampion->setChampion($this);
}
return $this;
}
public function removeBuildChampion(BuildChampion $buildChampion): static
{
if ($this->buildChampions->removeElement($buildChampion)) {
// set the owning side to null (unless already changed)
if ($buildChampion->getChampion() === $this) {
$buildChampion->setChampion(null);
}
}
return $this;
}
public function getAlt(): ?string
{
return $this->alt;
}
// public function setAlt(string $alt): static
// {
// $this->alt = $alt;
// return $this;
// }
public function setAlt(): static
{
$this->alt = $this->getName();
return $this;
}
}
`
from easyadminbundle.
I'm in 4.6.6, maybe that. I will try in 4.8
from easyadminbundle.
It's a bug,
4.6.6 works
4.8.12 doesn't work
from easyadminbundle.
I gonna try with 4.6.6
from easyadminbundle.
yeah it works in 4.6.6, thanks you ! I love you :D
from easyadminbundle.
Related Issues (20)
- update code easyadmin
- AssociationField creating new entries as tags
- GET parameter of entity ID on Index page leads to wrong singular label of NEW action
- Allow EasyAdminTwigExtension::representAsString to use Translatable method HOT 6
- Datagrid actions button not clickable on small screen HOT 1
- Use bootstrap form-text class for fields help HOT 1
- How to add field related js without using this type of field in my page? HOT 2
- SlugField - Incorrect transliteration of the letter "Щ"
- CollectionTableField in addition to CollectionField
- disabled TextEditorField is not really disabled HOT 1
- Pass parameters to linkToCrudAction
- RenderFilters crashes when EntityDto->Instance is not set on Symfony 6.4
- Make ArrayField translatable
- Using ArrayAccess on Doctrine\ORM\Mapping\JoinColumnMapping is deprecated
- Enable filters for autocomplete action
- ChoiceField with zero choices results in an InvalidOptionsException
- Unsupported moneyphp/money package by MoneyField HOT 2
- Searching for a string on an "index" page throws an `AssertionError` when entity does not have any string property
- renderAsEmbeddedForm is not validating subfields in PROD mode but does in dev mode HOT 3
- Submitting forms in Functional Tests results in errors HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from easyadminbundle.