Page MenuHomePhabricator

D16463.id39621.diff
No OneTemporary

D16463.id39621.diff

diff --git a/resources/sql/autopatches/20160829.pastebin.01.language.sql b/resources/sql/autopatches/20160829.pastebin.01.language.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160829.pastebin.01.language.sql
@@ -0,0 +1,3 @@
+/* Allow this column to be nullable (null means we'll try to autodetect) */
+ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste MODIFY language VARCHAR(64)
+ COLLATE {$COLLATE_TEXT};
diff --git a/resources/sql/autopatches/20160829.pastebin.02.language.sql b/resources/sql/autopatches/20160829.pastebin.02.language.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160829.pastebin.02.language.sql
@@ -0,0 +1,2 @@
+UPDATE {$NAMESPACE}_pastebin.pastebin_paste SET language = NULL
+ WHERE language = '';
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1732,6 +1732,7 @@
'PasteEditConduitAPIMethod' => 'applications/paste/conduit/PasteEditConduitAPIMethod.php',
'PasteEmbedView' => 'applications/paste/view/PasteEmbedView.php',
'PasteInfoConduitAPIMethod' => 'applications/paste/conduit/PasteInfoConduitAPIMethod.php',
+ 'PasteLanguageSelectDatasource' => 'applications/paste/typeahead/PasteLanguageSelectDatasource.php',
'PasteMailReceiver' => 'applications/paste/mail/PasteMailReceiver.php',
'PasteQueryConduitAPIMethod' => 'applications/paste/conduit/PasteQueryConduitAPIMethod.php',
'PasteReplyHandler' => 'applications/paste/mail/PasteReplyHandler.php',
@@ -6401,6 +6402,7 @@
'PasteEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
'PasteEmbedView' => 'AphrontView',
'PasteInfoConduitAPIMethod' => 'PasteConduitAPIMethod',
+ 'PasteLanguageSelectDatasource' => 'PhabricatorTypeaheadDatasource',
'PasteMailReceiver' => 'PhabricatorObjectMailReceiver',
'PasteQueryConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
diff --git a/src/applications/paste/editor/PhabricatorPasteEditEngine.php b/src/applications/paste/editor/PhabricatorPasteEditEngine.php
--- a/src/applications/paste/editor/PhabricatorPasteEditEngine.php
+++ b/src/applications/paste/editor/PhabricatorPasteEditEngine.php
@@ -63,10 +63,6 @@
}
protected function buildCustomEditFields($object) {
- $langs = array(
- '' => pht('(Detect From Filename in Title)'),
- ) + PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');
-
return array(
id(new PhabricatorTextEditField())
->setKey('title')
@@ -76,14 +72,14 @@
->setConduitDescription(pht('Retitle the paste.'))
->setConduitTypeDescription(pht('New paste title.'))
->setValue($object->getTitle()),
- id(new PhabricatorSelectEditField())
+ id(new PhabricatorDatasourceEditField())
->setKey('language')
->setLabel(pht('Language'))
->setTransactionType(
PhabricatorPasteLanguageTransaction::TRANSACTIONTYPE)
->setAliases(array('lang'))
->setIsCopyable(true)
- ->setOptions($langs)
+ ->setDatasource(new PasteLanguageSelectDatasource())
->setDescription(
pht(
'Language used for syntax highlighting. By default, inferred '.
@@ -91,7 +87,7 @@
->setConduitDescription(
pht('Change language used for syntax highlighting.'))
->setConduitTypeDescription(pht('New highlighting language.'))
- ->setValue($object->getLanguage()),
+ ->setSingleValue($object->getLanguage()),
id(new PhabricatorTextAreaEditField())
->setKey('text')
->setLabel(pht('Text'))
diff --git a/src/applications/paste/storage/PhabricatorPaste.php b/src/applications/paste/storage/PhabricatorPaste.php
--- a/src/applications/paste/storage/PhabricatorPaste.php
+++ b/src/applications/paste/storage/PhabricatorPaste.php
@@ -42,7 +42,6 @@
return id(new PhabricatorPaste())
->setTitle('')
- ->setLanguage('')
->setStatus(self::STATUS_ACTIVE)
->setAuthorPHID($actor->getPHID())
->setViewPolicy($view_policy)
@@ -72,7 +71,7 @@
self::CONFIG_COLUMN_SCHEMA => array(
'status' => 'text32',
'title' => 'text255',
- 'language' => 'text64',
+ 'language' => 'text64?',
'mailKey' => 'bytes20',
'parentPHID' => 'phid?',
diff --git a/src/applications/paste/typeahead/PasteLanguageSelectDatasource.php b/src/applications/paste/typeahead/PasteLanguageSelectDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/paste/typeahead/PasteLanguageSelectDatasource.php
@@ -0,0 +1,42 @@
+<?php
+
+final class PasteLanguageSelectDatasource
+ extends PhabricatorTypeaheadDatasource {
+
+ public function getBrowseTitle() {
+ return pht('Browse Languages');
+ }
+
+ public function getPlaceholderText() {
+ return pht('Type a language name or leave blank to auto-detect...');
+ }
+
+ public function getDatasourceApplicationClass() {
+ return 'PhabricatorPasteApplication';
+ }
+
+ public function loadResults() {
+ $results = $this->buildResults();
+ return $this->filterResultsAgainstTokens($results);
+ }
+
+
+ protected function renderSpecialTokens(array $values) {
+ return $this->renderTokensFromResults($this->buildResults(), $values);
+ }
+
+ private function buildResults() {
+ $results = array();
+ $languages = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');
+
+ foreach ($languages as $value => $name) {
+ $result = id(new PhabricatorTypeaheadResult())
+ ->setPHID($value)
+ ->setName($name);
+
+ $results[$value] = $result;
+ }
+ return $results;
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 10, 12:11 PM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6721434
Default Alt Text
D16463.id39621.diff (5 KB)

Event Timeline