/**
  * {@inheritdoc}
  */
 protected function build(Definition $definition, \Model $model, DefinitionMapper $mapper, Filter $filter = null, Definition $parent = null)
 {
     parent::build($definition, $model, $mapper, $filter, $parent);
     /** @var MarkerClusterGroup $definition */
     if ($model->iconCreateFunction) {
         $definition->setIconCreateFunction(new Expression($model->iconCreateFunction));
     }
     if ($model->polygonOptions) {
         $definition->setPolygonOptions((array) json_decode($model->polygonOptions, true));
     }
     if (!$model->disableDefaultStyle) {
         $this->assets->addStylesheet('assets/leaflet/libs/leaflet-markercluster/MarkerCluster.Default.css');
     }
     $collection = LayerModel::findBy(array('pid=?', 'active=1'), array($model->id), array('order' => 'sorting'));
     if ($collection) {
         foreach ($collection as $layerModel) {
             $layer = $mapper->handle($layerModel);
             if ($layer instanceof Layer) {
                 $definition->addLayer($layer);
                 if ($layer instanceof OmnivoreLayer) {
                     $callback = new AnonymousFunction();
                     $callback->addLine('layers.' . $definition->getId() . '.addLayers(this.getLayers())');
                     $layer->on('ready', $callback);
                 }
             }
         }
     }
 }
 /**
  * Load all libraries for an icon.
  *
  * @param Icon $icon Icon definition
  *
  * @return void.
  */
 protected function loadIconsLibraries($icon)
 {
     foreach ($icon::getRequiredLibraries() as $library) {
         if (!isset($this->libraries[$library])) {
             continue;
         }
         $assets = $this->libraries[$library];
         if (!empty($assets['css'])) {
             list($source, $type) = (array) $assets['css'];
             $this->assets->addStylesheet($source, $type ?: Assets::TYPE_FILE);
         }
         if (!empty($assets['javascript'])) {
             list($source, $type) = (array) $assets['javascript'];
             $this->assets->addJavascript($source, $type ?: Assets::TYPE_FILE);
         }
     }
 }