mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-16 11:52:40 +01:00
59ae91a5ce
Summary: We currently cache previews, but the vast majority of previews are never rendered again (e.g., they're a preview of someone partway through typing a comment). Especially when editing large documents (Legalpad, Phriction), this can bloat the markup cache with data that will never be read and won't get purged for 30 days. In particular, most of the data on `admin.phacility.com` is currently 1,000 previews of legalpad documents as I made minor edits to them over the course of several hours. This isn't a big concern, but it's a very easy fix. Test Plan: - Previewed a legalpad document, verified that cache rows were not written as I mashed the keyboard. - Saved the document, verified a new cache row was written. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D11832
94 lines
2.2 KiB
PHP
94 lines
2.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Concrete object for accessing the markup engine with arbitrary blobs of
|
|
* text, like form instructions. Usage:
|
|
*
|
|
* $output = PhabricatorMarkupEngine::renderOneObject(
|
|
* id(new PhabricatorMarkupOneOff())->setContent($some_content),
|
|
* 'default',
|
|
* $viewer);
|
|
*
|
|
* This is less efficient than batching rendering, but appropriate for small
|
|
* amounts of one-off text in form instructions.
|
|
*/
|
|
final class PhabricatorMarkupOneOff implements PhabricatorMarkupInterface {
|
|
|
|
private $content;
|
|
private $preserveLinebreaks;
|
|
private $engineRuleset;
|
|
private $disableCache;
|
|
|
|
public function setEngineRuleset($engine_ruleset) {
|
|
$this->engineRuleset = $engine_ruleset;
|
|
return $this;
|
|
}
|
|
|
|
public function getEngineRuleset() {
|
|
return $this->engineRuleset;
|
|
}
|
|
|
|
public function setPreserveLinebreaks($preserve_linebreaks) {
|
|
$this->preserveLinebreaks = $preserve_linebreaks;
|
|
return $this;
|
|
}
|
|
|
|
public function setContent($content) {
|
|
$this->content = $content;
|
|
return $this;
|
|
}
|
|
|
|
public function getContent() {
|
|
return $this->content;
|
|
}
|
|
|
|
public function setDisableCache($disable_cache) {
|
|
$this->disableCache = $disable_cache;
|
|
return $this;
|
|
}
|
|
|
|
public function getDisableCache() {
|
|
return $this->disableCache;
|
|
}
|
|
|
|
public function getMarkupFieldKey($field) {
|
|
return PhabricatorHash::digestForIndex($this->getContent()).':oneoff';
|
|
}
|
|
|
|
public function newMarkupEngine($field) {
|
|
if ($this->engineRuleset) {
|
|
return PhabricatorMarkupEngine::getEngine($this->engineRuleset);
|
|
} else if ($this->preserveLinebreaks) {
|
|
return PhabricatorMarkupEngine::getEngine();
|
|
} else {
|
|
return PhabricatorMarkupEngine::getEngine('nolinebreaks');
|
|
}
|
|
}
|
|
|
|
public function getMarkupText($field) {
|
|
return $this->getContent();
|
|
}
|
|
|
|
public function didMarkupText(
|
|
$field,
|
|
$output,
|
|
PhutilMarkupEngine $engine) {
|
|
|
|
require_celerity_resource('phabricator-remarkup-css');
|
|
return phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phabricator-remarkup',
|
|
),
|
|
$output);
|
|
}
|
|
|
|
public function shouldUseMarkupCache($field) {
|
|
if ($this->getDisableCache()) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|