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');
 }
Exemple #3
0
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');
}
Exemple #4
0
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');
}
Exemple #5
0
 /**
  * Ссылка на элемент библиотеки в виде всплывающей подсказки
  */
 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);
 }
Exemple #8
0
 public function getFoldedEntityPreview($ident)
 {
     return array('info' => PsBubble::spanFoldedEntityBubble($ident, $this->getUnique($ident)), 'content' => $this->fetchTplImpl($ident));
 }
Exemple #9
0
 protected function executeImpl(ArrayAdapter $params)
 {
     return new AjaxSuccess(PsBubble::extractFoldedEntityBubbleDiv($params->str('unique')));
 }