/** * @param \Render\APIs\APIv1\CSSAPI $api * @param \Render\Unit $unit * @param \Render\ModuleInfo $moduleInfo * @return string */ protected function htmlHeadUnit($api, $unit, $moduleInfo) { $parentUnit = $api->getParentUnit($unit); // enable animation only if this extension unit is a direct child of default unit if (!$api->getModuleInfo($parentUnit)->isExtension()) { $selector = '#' . $parentUnit->getId(); return "<script>window.rz_style_animation_scroll.push('" . $selector . "');</script>"; } else { if ($api->isEditMode()) { $i18n = new Translator($api, $moduleInfo); $msg = $i18n->translate('error.insideExtensionModule'); return '<script>alert("' . addslashes($msg) . '");</script>'; } } }
/** * Compile CSS using absurd.js (wrapped in dyncss.js) * @param array $moduleCssData * @param $jsonTree * @param $formValues * @param \Render\APIs\APIv1\CSSAPI $api * @return string */ public function compile($moduleCssData, $jsonTree, $formValues, $api) { $vm = $this->getVM(); // data $vm->jsonTree = $jsonTree; $vm->resolutions = $api->getResolutions(); $vm->isEditMode = $api->isEditMode(); // functions $compiledCss = ''; $vm->callback = function ($result) use(&$compiledCss) { $compiledCss = $result; }; $vm->getFormValues = function ($unitId) use(&$formValues) { if (isset($formValues[$unitId])) { return $formValues[$unitId]; } return array(); }; $vm->getColorById = function ($colorId) use(&$api) { $color = $api->getColorById($colorId); return $color; }; $vm->getImageUrl = function ($mediaId, $width, $quality) use(&$api) { if (!$mediaId || $mediaId === 'null') { return null; } try { $mediaItem = $api->getMediaItem($mediaId); } catch (\Exception $e) { // media item not found return null; } try { $img = $mediaItem->getImage(); if ($width > 0) { $img->resizeScale($width); } if (is_numeric($quality) && !is_nan($quality)) { $img->setQuality($quality); } return $img->getUrl(); } catch (\Exception $e) { // use just the url (svg for example) return $mediaItem->getUrl(); } }; $vm->getMediaUrl = function ($mediaId, $download = false) use(&$api) { if (!$mediaId || $mediaId === 'null') { return null; } try { $mediaItem = $api->getMediaItem($mediaId); if ($download) { return $mediaItem->getDownloadUrl(); } else { return $mediaItem->getUrl(); } } catch (\Exception $e) { return null; } }; // run module code (only once per file) foreach ($moduleCssData as $data) { $path = $data['path']; if (!isset($this->loadedPlugins[$path])) { $this->loadedPlugins[$path] = true; $vm->executeString(file_get_contents($path), $path, \V8Js::FLAG_FORCE_ARRAY); } } // run dyncss compiler $dynCssBackendJsPath = $this->basePath . 'dyncssBackend.js'; $vm->executeString(file_get_contents($dynCssBackendJsPath), $dynCssBackendJsPath, \V8Js::FLAG_FORCE_ARRAY); return $compiledCss; }