2012-10-16 19:33:47 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This is a bare HTML page view which has access to Phabricator page
|
|
|
|
* infrastructure like Celerity, but no content or builtin static resources.
|
|
|
|
* You basically get a valid HMTL5 document and an empty body tag.
|
|
|
|
*
|
|
|
|
* @concrete-extensible
|
|
|
|
*/
|
|
|
|
class PhabricatorBarePageView extends AphrontPageView {
|
|
|
|
|
|
|
|
private $request;
|
|
|
|
private $controller;
|
|
|
|
private $frameable;
|
|
|
|
private $deviceReady;
|
|
|
|
|
|
|
|
private $bodyContent;
|
|
|
|
|
|
|
|
public function setController(AphrontController $controller) {
|
|
|
|
$this->controller = $controller;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getController() {
|
|
|
|
return $this->controller;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setRequest(AphrontRequest $request) {
|
|
|
|
$this->request = $request;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getRequest() {
|
|
|
|
return $this->request;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setFrameable($frameable) {
|
|
|
|
$this->frameable = $frameable;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getFrameable() {
|
|
|
|
return $this->frameable;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setDeviceReady($device_ready) {
|
|
|
|
$this->deviceReady = $device_ready;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getDeviceReady() {
|
|
|
|
return $this->deviceReady;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function willRenderPage() {
|
|
|
|
// We render this now to resolve static resources so they can appear in the
|
|
|
|
// document head.
|
2013-02-13 23:50:15 +01:00
|
|
|
$this->bodyContent = phutil_implode_html('', $this->renderChildren());
|
2012-10-16 19:33:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function getHead() {
|
|
|
|
$framebust = null;
|
|
|
|
if (!$this->getFrameable()) {
|
2013-02-13 23:50:15 +01:00
|
|
|
$framebust = '(top == self) || top.location.replace(self.location.href);';
|
2012-10-16 19:33:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$viewport_tag = null;
|
2013-01-01 23:09:10 +01:00
|
|
|
if ($this->getDeviceReady()) {
|
2013-01-18 03:39:02 +01:00
|
|
|
$viewport_tag = phutil_tag(
|
2012-10-16 19:33:47 +02:00
|
|
|
'meta',
|
|
|
|
array(
|
|
|
|
'name' => 'viewport',
|
|
|
|
'content' => 'width=device-width, '.
|
|
|
|
'initial-scale=1, '.
|
|
|
|
'maximum-scale=1',
|
|
|
|
));
|
|
|
|
}
|
2013-03-25 19:24:17 +01:00
|
|
|
$icon_tag = phutil_tag(
|
|
|
|
'link',
|
|
|
|
array(
|
|
|
|
'rel' => 'apple-touch-icon',
|
|
|
|
'href' => celerity_get_resource_uri('/rsrc/image/apple-touch-icon.png')
|
|
|
|
));
|
|
|
|
|
|
|
|
$apple_tag = phutil_tag(
|
|
|
|
'meta',
|
|
|
|
array(
|
|
|
|
'name' => 'apple-mobile-web-app-status-bar-style',
|
|
|
|
'content' => 'black-translucent'
|
|
|
|
));
|
2012-10-16 19:33:47 +02:00
|
|
|
|
|
|
|
$response = CelerityAPI::getStaticResourceResponse();
|
|
|
|
|
2013-04-21 02:55:47 +02:00
|
|
|
$developer = PhabricatorEnv::getEnvConfig('phabricator.developer-mode');
|
2013-02-13 23:50:15 +01:00
|
|
|
return hsprintf(
|
2013-04-21 02:55:47 +02:00
|
|
|
'%s%s%s%s%s',
|
2012-10-16 19:33:47 +02:00
|
|
|
$viewport_tag,
|
2013-03-25 19:24:17 +01:00
|
|
|
$icon_tag,
|
|
|
|
$apple_tag,
|
2013-04-21 02:55:47 +02:00
|
|
|
CelerityStaticResourceResponse::renderInlineScript(
|
|
|
|
$framebust.jsprintf('window.__DEV__=%d;', ($developer ? 1 : 0))),
|
2013-02-13 23:50:15 +01:00
|
|
|
$response->renderResourcesOfType('css'));
|
2012-10-16 19:33:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function getBody() {
|
|
|
|
return $this->bodyContent;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getTail() {
|
|
|
|
$response = CelerityAPI::getStaticResourceResponse();
|
|
|
|
return $response->renderResourcesOfType('js');
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|