mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 14:52:41 +01:00
Some herald improvements.
This commit is contained in:
parent
3c0a822d65
commit
deb12c9fe8
11 changed files with 160 additions and 59 deletions
|
@ -101,8 +101,6 @@ foreach ($file_map as $path => $info) {
|
|||
$provides = array_filter($provides);
|
||||
$requires = array_filter($requires);
|
||||
|
||||
var_dump($requires);
|
||||
|
||||
if (count($provides) !== 1) {
|
||||
throw new Exception(
|
||||
"File {$path} must @provide exactly one Celerity target.");
|
||||
|
|
|
@ -418,21 +418,24 @@ celerity_register_resource_map(array(
|
|||
),
|
||||
'javelin-behavior-herald-rule-editor' =>
|
||||
array(
|
||||
'uri' => '/res/f18bcd5e/rsrc/js/application/herald/herald-rule-editor.js',
|
||||
'uri' => '/res/48108130/rsrc/js/application/herald/herald-rule-editor.js',
|
||||
'type' => 'js',
|
||||
'requires' =>
|
||||
array(
|
||||
0 => 'herald-rule-editor',
|
||||
1 => 'javelin-lib-dev',
|
||||
),
|
||||
'disk' => '/rsrc/js/application/herald/herald-rule-editor.js',
|
||||
),
|
||||
'herald-rule-editor' =>
|
||||
array(
|
||||
'uri' => '/res/e71d1d0e/rsrc/js/application/herald/HeraldRuleEditor.js',
|
||||
'uri' => '/res/8b5e9d5e/rsrc/js/application/herald/HeraldRuleEditor.js',
|
||||
'type' => 'js',
|
||||
'requires' =>
|
||||
array(
|
||||
0 => 'multirow-row-manager',
|
||||
1 => 'javelin-lib-dev',
|
||||
2 => 'javelin-typeahead-dev',
|
||||
),
|
||||
'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js',
|
||||
),
|
||||
|
|
|
@ -57,6 +57,7 @@ phutil_register_library_map(array(
|
|||
'AphrontResponse' => 'aphront/response/base',
|
||||
'AphrontSideNavView' => 'view/layout/sidenav',
|
||||
'AphrontTableView' => 'view/control/table',
|
||||
'AphrontTokenizerTemplateView' => 'view/control/tokenizer',
|
||||
'AphrontURIMapper' => 'aphront/mapper',
|
||||
'AphrontView' => 'view/base',
|
||||
'AphrontWebpageResponse' => 'aphront/response/webpage',
|
||||
|
@ -449,6 +450,7 @@ phutil_register_library_map(array(
|
|||
'AphrontRequestFailureView' => 'AphrontView',
|
||||
'AphrontSideNavView' => 'AphrontView',
|
||||
'AphrontTableView' => 'AphrontView',
|
||||
'AphrontTokenizerTemplateView' => 'AphrontView',
|
||||
'AphrontWebpageResponse' => 'AphrontResponse',
|
||||
'CelerityResourceController' => 'AphrontController',
|
||||
'ConduitAPI_conduit_connect_Method' => 'ConduitAPIMethod',
|
||||
|
|
|
@ -276,7 +276,8 @@ class HeraldRuleController extends HeraldController {
|
|||
array(
|
||||
'href' => '#',
|
||||
'class' => 'button green',
|
||||
'sigil' => 'create-action',
|
||||
'sigil' => 'create-condition',
|
||||
'mustcapture' => true,
|
||||
),
|
||||
'Create New Condition').
|
||||
'<p>When '.$must_match.' these conditions are met:</p>'.
|
||||
|
@ -290,7 +291,15 @@ class HeraldRuleController extends HeraldController {
|
|||
->appendChild(
|
||||
'<h1>Action</h1>'.
|
||||
'<div style="margin: .5em 0 1em; padding: .5em; background: #aaa;">'.
|
||||
'<a href="#" class="button green">Create New Action</a>'.
|
||||
javelin_render_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'class' => 'button green',
|
||||
'sigil' => 'create-action',
|
||||
'mustcapture' => true,
|
||||
),
|
||||
'Create New Action').
|
||||
'<p>Take these actions:</p>'.
|
||||
javelin_render_tag(
|
||||
'table',
|
||||
|
@ -301,7 +310,7 @@ class HeraldRuleController extends HeraldController {
|
|||
'</div>')
|
||||
->appendChild(
|
||||
id(new AphrontFormSubmitControl())
|
||||
->setValue('Save')
|
||||
->setValue('Save Rule')
|
||||
->addCancelButton('/herald/view/'.$rule->getContentType().'/'));
|
||||
/*
|
||||
$form =
|
||||
|
@ -482,15 +491,20 @@ class HeraldRuleController extends HeraldController {
|
|||
}
|
||||
|
||||
protected function buildTokenizerTemplates() {
|
||||
$template = new AphrontTokenizerTemplateView();
|
||||
$template = $template->render();
|
||||
|
||||
return array(
|
||||
'source' => array(
|
||||
'email' => '/datasource/mailable/',
|
||||
'user' => '/datasource/user/',
|
||||
'repository' => '/datasource/repository/',
|
||||
'email' => '/typeahead/common/mailable/',
|
||||
'user' => '/typeahead/common/user/',
|
||||
'repository' => '/typeahead/common/repository/',
|
||||
/*
|
||||
'tag' => '/datasource/tag/',
|
||||
'package' => '/datasource/package/',
|
||||
*/
|
||||
),
|
||||
'markup' => 'derp derp',//id(<javelin:tokenizer-template />)->toString(),
|
||||
'markup' => $template,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ phutil_require_module('phabricator', 'applications/herald/storage/condition');
|
|||
phutil_require_module('phabricator', 'applications/herald/storage/rule');
|
||||
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||
phutil_require_module('phabricator', 'infrastructure/javelin/api');
|
||||
phutil_require_module('phabricator', 'view/control/tokenizer');
|
||||
phutil_require_module('phabricator', 'view/form/base');
|
||||
phutil_require_module('phabricator', 'view/form/control/submit');
|
||||
phutil_require_module('phabricator', 'view/layout/panel');
|
||||
|
|
104
src/view/control/tokenizer/AphrontTokenizerTemplateView.php
Normal file
104
src/view/control/tokenizer/AphrontTokenizerTemplateView.php
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
class AphrontTokenizerTemplateView extends AphrontView {
|
||||
|
||||
private $value;
|
||||
private $name;
|
||||
private $id;
|
||||
|
||||
public function setID($id) {
|
||||
$this->id = $id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setValue(array $value) {
|
||||
$this->value = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getValue() {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function setName($name) {
|
||||
$this->name = $name;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function render() {
|
||||
require_celerity_resource('aphront-tokenizer-control-css');
|
||||
|
||||
$id = $this->id;
|
||||
$name = $this->getName();
|
||||
$values = nonempty($this->getValue(), array());
|
||||
|
||||
$tokens = array();
|
||||
foreach ($values as $key => $value) {
|
||||
$tokens[] = $this->renderToken($key, $value);
|
||||
}
|
||||
|
||||
$input = javelin_render_tag(
|
||||
'input',
|
||||
array(
|
||||
'mustcapture' => true,
|
||||
'name' => $name,
|
||||
'class' => 'jx-tokenizer-input',
|
||||
'sigil' => 'tokenizer',
|
||||
'style' => 'width: 0px;',
|
||||
'disabled' => 'disabled',
|
||||
'type' => 'text',
|
||||
));
|
||||
|
||||
return phutil_render_tag(
|
||||
'div',
|
||||
array(
|
||||
'id' => $id,
|
||||
'class' => 'jx-tokenizer-container',
|
||||
),
|
||||
implode('', $tokens).
|
||||
$input.
|
||||
'<div style="clear: both;"></div>');
|
||||
}
|
||||
|
||||
private function renderToken($key, $value) {
|
||||
$input_name = $this->getName();
|
||||
if ($input_name) {
|
||||
$input_name .= '[]';
|
||||
}
|
||||
return phutil_render_tag(
|
||||
'a',
|
||||
array(
|
||||
'class' => 'jx-tokenizer-token',
|
||||
),
|
||||
phutil_escape_html($value).
|
||||
phutil_render_tag(
|
||||
'input',
|
||||
array(
|
||||
'type' => 'hidden',
|
||||
'name' => $input_name,
|
||||
'value' => $key,
|
||||
)).
|
||||
'<span class="jx-tokenizer-x-placeholder"></span>');
|
||||
}
|
||||
|
||||
}
|
17
src/view/control/tokenizer/__init__.php
Normal file
17
src/view/control/tokenizer/__init__.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||
phutil_require_module('phabricator', 'infrastructure/javelin/markup');
|
||||
phutil_require_module('phabricator', 'view/base');
|
||||
|
||||
phutil_require_module('phutil', 'markup');
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('AphrontTokenizerTemplateView.php');
|
|
@ -42,16 +42,10 @@ class AphrontFormTokenizerControl extends AphrontFormControl {
|
|||
}
|
||||
|
||||
protected function renderInput() {
|
||||
require_celerity_resource('aphront-tokenizer-control-css');
|
||||
require_celerity_resource('javelin-typeahead-dev');
|
||||
|
||||
$tokens = array();
|
||||
$values = nonempty($this->getValue(), array());
|
||||
foreach ($values as $key => $value) {
|
||||
$tokens[] = $this->renderToken($key, $value);
|
||||
}
|
||||
|
||||
$name = $this->getName();
|
||||
$values = nonempty($this->getValue(), array());
|
||||
|
||||
$input = javelin_render_tag(
|
||||
'input',
|
||||
|
@ -71,6 +65,11 @@ class AphrontFormTokenizerControl extends AphrontFormControl {
|
|||
$id = celerity_generate_unique_node_id();
|
||||
}
|
||||
|
||||
$template = new AphrontTokenizerTemplateView();
|
||||
$template->setName($name);
|
||||
$template->setID($id);
|
||||
$template->setValue($values);
|
||||
|
||||
if (!$this->disableBehavior) {
|
||||
Javelin::initBehavior('aphront-basic-tokenizer', array(
|
||||
'id' => $id,
|
||||
|
@ -80,44 +79,7 @@ class AphrontFormTokenizerControl extends AphrontFormControl {
|
|||
));
|
||||
}
|
||||
|
||||
return phutil_render_tag(
|
||||
'div',
|
||||
array(
|
||||
'id' => $id,
|
||||
'class' => 'jx-tokenizer-container',
|
||||
),
|
||||
implode('', $tokens).
|
||||
$input.
|
||||
'<div style="clear: both;"></div>');
|
||||
|
||||
return phutil_render_tag(
|
||||
'input',
|
||||
array(
|
||||
'type' => 'text',
|
||||
'name' => $this->getName(),
|
||||
'disabled' => $this->getDisabled() ? 'disabled' : null,
|
||||
));
|
||||
}
|
||||
|
||||
private function renderToken($key, $value) {
|
||||
$input_name = $this->getName();
|
||||
if ($input_name) {
|
||||
$input_name .= '[]';
|
||||
}
|
||||
return phutil_render_tag(
|
||||
'a',
|
||||
array(
|
||||
'class' => 'jx-tokenizer-token',
|
||||
),
|
||||
phutil_escape_html($value).
|
||||
phutil_render_tag(
|
||||
'input',
|
||||
array(
|
||||
'type' => 'hidden',
|
||||
'name' => $input_name,
|
||||
'value' => $key,
|
||||
)).
|
||||
'<span class="jx-tokenizer-x-placeholder"></span>');
|
||||
return $template->render();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||
phutil_require_module('phabricator', 'infrastructure/javelin/api');
|
||||
phutil_require_module('phabricator', 'infrastructure/javelin/markup');
|
||||
phutil_require_module('phabricator', 'view/control/tokenizer');
|
||||
phutil_require_module('phabricator', 'view/form/control/base');
|
||||
|
||||
phutil_require_module('phutil', 'markup');
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ JX.install('HeraldRuleEditor', {
|
|||
set_fn = function(v) { input.value = v; };
|
||||
break;
|
||||
case 'email':
|
||||
case 'employee':
|
||||
case 'user':
|
||||
case 'repository':
|
||||
case 'tag':
|
||||
case 'package':
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @requires herald-rule-editor
|
||||
* javelin-behavior
|
||||
* javelin-lib-dev
|
||||
* @provides javelin-behavior-herald-rule-editor
|
||||
* @javelin
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue