Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F32141011
AphrontView.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
3 KB
Subscribers
None
AphrontView.php
View Options
<?php
/**
* @task children Managing Children
*/
abstract
class
AphrontView
extends
Phobject
implements
PhutilSafeHTMLProducerInterface
{
protected
$user
;
protected
$children
=
array
();
/* -( Configuration )------------------------------------------------------ */
/**
* @task config
*/
public
function
setUser
(
PhabricatorUser
$user
)
{
$this
->
user
=
$user
;
return
$this
;
}
/**
* @task config
*/
protected
function
getUser
()
{
return
$this
->
user
;
}
/* -( Managing Children )-------------------------------------------------- */
/**
* Test if this View accepts children.
*
* By default, views accept children, but subclases may override this method
* to prevent children from being appended. Doing so will cause
* @{method:appendChild} to throw exceptions instead of appending children.
*
* @return bool True if the View should accept children.
* @task children
*/
protected
function
canAppendChild
()
{
return
true
;
}
/**
* Append a child to the list of children.
*
* This method will only work if the view supports children, which is
* determined by @{method:canAppendChild}.
*
* @param wild Something renderable.
* @return this
*/
final
public
function
appendChild
(
$child
)
{
if
(!
$this
->
canAppendChild
())
{
$class
=
get_class
(
$this
);
throw
new
Exception
(
pht
(
"View '%s' does not support children."
,
$class
));
}
$this
->
children
[]
=
$child
;
return
$this
;
}
/**
* Produce children for rendering.
*
* Historically, this method reduced children to a string representation,
* but it no longer does.
*
* @return wild Renderable children.
* @task
*/
final
protected
function
renderChildren
()
{
return
$this
->
children
;
}
/**
* Test if an element has no children.
*
* @return bool True if this element has children.
* @task children
*/
final
public
function
hasChildren
()
{
if
(
$this
->
children
)
{
$this
->
children
=
$this
->
reduceChildren
(
$this
->
children
);
}
return
(
bool
)
$this
->
children
;
}
/**
* Reduce effectively-empty lists of children to be actually empty. This
* recursively removes `null`, `''`, and `array()` from the list of children
* so that @{method:hasChildren} can more effectively align with expectations.
*
* NOTE: Because View children are not rendered, a View which renders down
* to nothing will not be reduced by this method.
*
* @param list<wild> Renderable children.
* @return list<wild> Reduced list of children.
* @task children
*/
private
function
reduceChildren
(
array
$children
)
{
foreach
(
$children
as
$key
=>
$child
)
{
if
(
$child
===
null
)
{
unset
(
$children
[
$key
]);
}
else
if
(
$child
===
''
)
{
unset
(
$children
[
$key
]);
}
else
if
(
is_array
(
$child
))
{
$child
=
$this
->
reduceChildren
(
$child
);
if
(
$child
)
{
$children
[
$key
]
=
$child
;
}
else
{
unset
(
$children
[
$key
]);
}
}
}
return
$children
;
}
public
function
getDefaultResourceSource
()
{
return
'phabricator'
;
}
public
function
requireResource
(
$symbol
)
{
$response
=
CelerityAPI
::
getStaticResourceResponse
();
$response
->
requireResource
(
$symbol
,
$this
->
getDefaultResourceSource
());
return
$this
;
}
public
function
initBehavior
(
$name
,
$config
=
array
())
{
Javelin
::
initBehavior
(
$name
,
$config
,
$this
->
getDefaultResourceSource
());
}
/* -( Rendering )---------------------------------------------------------- */
abstract
public
function
render
();
/* -( PhutilSafeHTMLProducerInterface )------------------------------------ */
public
function
producePhutilSafeHTML
()
{
return
$this
->
render
();
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Nov 11, 12:09 AM (1 d, 7 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
31/10/f4b7bf8f9476ec954b55621beb8a
Attached To
rPHAB Phabricator
Event Timeline
Log In to Comment