public function getBlockImgHref($imageId) { $imageId = trim($imageId); $num = $this->getNextImgNum($imageId, false); if (!is_numeric($num)) { return PsHtml::spanErr("Ссылка на незарегистрированную картинку с идентификатором '{$imageId}'"); } $boxId = $this->getImgElId($imageId); return PsBubble::spanById($boxId, "рис. " . PsConstJs::numeratorHrefIndex(self::CSS_NUMERATOR_IMG, $num)); }
public function getFormulaHref($formulaId) { $formulaId = trim($formulaId); $num = $this->getNextFormulaNum($formulaId, false); if (!$num) { return PsHtml::spanErr("Ссылка на незарегистрированную формулу с идентификатором '{$formulaId}'"); } $boxId = $this->getFormulaElId($formulaId); return PsBubble::spanById($boxId, '(' . PsConstJs::numeratorHrefIndex(self::CSS_NUMERATOR_FORMULA, $num) . ')', 'formula'); }
function smarty_modifier_thhref($thId) { $thId = trim($thId); $CTXT = PostFetchingContext::getInstance(); $num = $CTXT->getNextThNum($thId, false); if (!$num) { return PsHtml::spanErr("Ссылка на незарегистрированную теорему с идентификатором '{$thId}'"); } return PsBubble::aById($CTXT->getThElId($thId), "№{$num}", 'theorem'); }
function smarty_modifier_exhref($exId) { $exId = trim($exId); $num = PostFetchingContext::getInstance()->getExampleNum($exId, false); $elId = PostFetchingContext::getInstance()->getExampleElId($exId); if (!$num) { return PsHtml::spanErr("Ссылка на незарегистрированный пример с идентификатором '{$exId}'"); } return PsBubble::aById($elId, "№{$num}", 'example'); }
/** * Ссылка на элемент библиотеки в виде всплывающей подсказки */ public function getBubbleHref($ident, $text, ArrayAdapter $params) { if (!$ident) { return $text; } $entity = $this->getFoldedEntity($ident); if (!$entity) { return $text; } $unique = $entity->getUnique(); // if (!$entity) { //return PsHtml::spanErr("Ссылка на несуществующий элемент подсказки [$unique]"); // } return PsBubble::spanFoldedEntityBubble($text, $unique); }
private function extractUsedBubbleItems($content, array &$items = array()) { $matches = array(); $data = PsConstJs::BUBBLE_LOADER_FOLDING_DATA; $pattern = "/data-{$data}=\"(.+?)\"/si"; preg_match_all($pattern, $content, $matches); $uniques = array_diff(array_unique(array_get_value(1, $matches, array())), array_keys($items)); //Сначала соберём все баблы foreach ($uniques as $unique) { $bubble = PsBubble::extractFoldedEntityBubbleDiv($unique); if ($bubble) { $items[$unique] = $bubble; } } //Соберём баблы, вложенные в другие баблы foreach ($uniques as $unique) { $this->extractUsedBubbleItems($items[$unique], $items); } }
private function insert($FNAME, ArrayAdapter $params, $content) { $IMG['data'] = $params->has('data') ? $params->get('data') : $params->getByKeyPrefix('data_', true); $IMG['class'] = $params->get(array('cl', 'class')); $IMG['style'] = $params->get(array('st', 'style')); $IMG['title'] = $params->get('title'); /* * Если alt задан, но пуст - таким его и оставим. * Скорее всего нам такое поведение и нужно. Например в галлереях alt используется для подсказки. * Нам не нужно в качестве подсказки показывать название картинки. */ if ($params->has('alt')) { $IMG['alt'] = $params->get('alt'); } if ($params->hasNoEmpty('map')) { $IMG['usemap'] = '#' . $params->get('map'); } $isPopup = ends_with($FNAME, 'imgp'); //Массив фактических картинок $IMAGES = array(); if ($content && !$isPopup) { //Есть содержимое } else { $IMAGES = to_array($this->getImages($params, $FNAME)); check_condition($IMAGES, "В блок [{$FNAME}] не переданы картинки для отображения."); } if ($isPopup) { //Всплывающая картинка $popupImgSrc = $IMAGES[0] instanceof DirItem ? $IMAGES[0]->getRelPath() : $IMAGES[0]; if ($content == '.') { echo PsBubble::previewImgBubble($popupImgSrc); } else { echo PsBubble::spanImgBubble($content, $popupImgSrc); } return; //--- } //Параметры $id = $params->str(array('id', 'num')); $text = $params->str('text'); $isBlock = $content || count($IMAGES) > 1 || $id || $text || ends_with($FNAME, array('imgb', 'imgn')); if (!$isBlock) { $IMG['src'] = $IMAGES[0]; echo PsHtml::img($IMG); return; //--- } //Блочная картинка //Определим номер картинки. Если это imgn, то нумерация форсированно отключена. $inc = ends_with($FNAME, 'imgn') ? null : FoldedContextWatcher::getInstance()->getImageNumeratorContext(false); //Определим текст подписи под картинкой. $num = $inc ? ' ' . PsConst::NUM_REPLCASE_MACROS : ''; $text = trim($num || $text ? "<b>Рис.{$num}</b> {$text}" : ''); $text = $text ? "<p>{$text}</p>" : ''; //Строим див с картинками $DIV['class'] = array('block_img'); if (!$content) { foreach ($IMAGES as $src) { $IMG['src'] = $src; $content .= PsHtml::img($IMG); } } $content .= $text; echo $inc ? $inc->wrapBlockImgBox($id, $DIV, $content) : PsHtml::div($DIV, $content); }
public function getFoldedEntityPreview($ident) { return array('info' => PsBubble::spanFoldedEntityBubble($ident, $this->getUnique($ident)), 'content' => $this->fetchTplImpl($ident)); }
protected function executeImpl(ArrayAdapter $params) { return new AjaxSuccess(PsBubble::extractFoldedEntityBubbleDiv($params->str('unique'))); }