Improving POSSE compatability with bridgy
Squashed commit of the following: commit d194133182d06ecff4b175c2b5614173ffd48e3a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Aug 20 21:35:32 2017 +0100 Updated css files commit e8a1c6d7a41b4fdf070842eb8c3a225faaf064ae Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Aug 20 21:31:17 2017 +0100 Hide bridgy alternative text with CSS commit bcca21e5e1a0ddf41878fd4b31d35d89ced87d81 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Aug 20 21:22:19 2017 +0100 Add some basic tests commit b6c1f0d86c6e0ea6c722b3680788c4c951fa4442 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Aug 20 20:52:32 2017 +0100 Fix a typo commit 8056448bbb724729ef08e1ee11cbc4cf8e8d988c Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Aug 20 17:12:15 2017 +0100 Convert markdown to html for p-bridgy-silo-content sections commit d42d67a5827bd73c74d89b559ecfcb6e1662c175 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Aug 20 17:02:47 2017 +0100 Add methods to provide twitter content or facebook content where usernames are swapped for usernames, so birdgy is given silo compatible content, not my h-card markup commit 402aa86a3d350d05c98aeac4a67cea3757ccf1bd Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sat Aug 12 18:23:49 2017 +0100 Show silo content if we have made it
This commit is contained in:
parent
3ca1060170
commit
64503fe12b
9 changed files with 148 additions and 8 deletions
112
app/Note.php
112
app/Note.php
|
@ -23,6 +23,13 @@ class Note extends Model
|
|||
use Searchable;
|
||||
use SoftDeletes;
|
||||
|
||||
/**
|
||||
* The reges for matching lone usernames.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private const USERNAMES_REGEX = '/\[.*?\](*SKIP)(*F)|@(\w+)/';
|
||||
|
||||
/**
|
||||
* The database table used by the model.
|
||||
*
|
||||
|
@ -132,12 +139,9 @@ class Note extends Model
|
|||
*/
|
||||
public function getNoteAttribute($value)
|
||||
{
|
||||
$environment = Environment::createCommonMarkEnvironment();
|
||||
$environment->addExtension(new LinkifyExtension());
|
||||
$converter = new Converter(new DocParser($environment), new HtmlRenderer($environment));
|
||||
$emoji = new EmojiModifier();
|
||||
|
||||
$html = $converter->convertToHtml($value);
|
||||
$html = $this->convertMarkdown($value);
|
||||
$hcards = $this->makeHCards($html);
|
||||
$hashtags = $this->autoLinkHashtag($hcards);
|
||||
$modified = $emoji->makeEmojiAccessible($hashtags);
|
||||
|
@ -288,6 +292,94 @@ class Note extends Model
|
|||
return $oEmbed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a specific form of the note for twitter.
|
||||
*
|
||||
*/
|
||||
public function getTwitterContentAttribute()
|
||||
{
|
||||
// find @mentions
|
||||
preg_match_all(self::USERNAMES_REGEX, $this->getOriginal('note'), $matches);
|
||||
if (count($matches[1]) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// check if any @mentions have a contact associated with them
|
||||
$count = 0;
|
||||
foreach ($matches[1] as $match) {
|
||||
$contact = Contact::where('nick', '=', mb_strtolower($match))->first();
|
||||
if ($contact) {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
if ($count === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// swap in twitter usernames
|
||||
$swapped = preg_replace_callback(
|
||||
self::USERNAMES_REGEX,
|
||||
function ($matches) {
|
||||
try {
|
||||
$contact = Contact::where('nick', '=', mb_strtolower($matches[1]))->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
//assume its an actual twitter handle
|
||||
return $matches[0];
|
||||
}
|
||||
if ($contact->twitter) {
|
||||
return '@' . $contact->twitter;
|
||||
}
|
||||
|
||||
return $contact->name;
|
||||
},
|
||||
$this->getOriginal('note')
|
||||
);
|
||||
|
||||
return $this->convertMarkdown($swapped);
|
||||
}
|
||||
|
||||
public function getFacebookContentAttribute()
|
||||
{
|
||||
// find @mentions
|
||||
preg_match_all(self::USERNAMES_REGEX, $this->getOriginal('note'), $matches);
|
||||
if (count($matches[1]) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// check if any @mentions have a contact associated with them
|
||||
$count = 0;
|
||||
foreach ($matches[1] as $match) {
|
||||
$contact = Contact::where('nick', '=', mb_strtolower($match))->first();
|
||||
if ($contact) {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
if ($count === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// swap in facebook usernames
|
||||
$swapped = preg_replace_callback(
|
||||
self::USERNAMES_REGEX,
|
||||
function ($matches) {
|
||||
try {
|
||||
$contact = Contact::where('nick', '=', mb_strtolower($matches[1]))->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
//assume its an actual twitter handle
|
||||
return $matches[0];
|
||||
}
|
||||
if ($contact->facebook) {
|
||||
return '<a class="u-category h-card" href="https://facebook.com/' . $contact->facebook . '">' . $contact->name . '</a>';
|
||||
}
|
||||
|
||||
return $contact->name;
|
||||
},
|
||||
$this->getOriginal('note')
|
||||
);
|
||||
|
||||
return $this->convertMarkdown($swapped);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope a query to select a note via a NewBase60 id.
|
||||
*
|
||||
|
@ -313,9 +405,8 @@ class Note extends Model
|
|||
*/
|
||||
private function makeHCards($text)
|
||||
{
|
||||
$regex = '/\[.*?\](*SKIP)(*F)|@(\w+)/'; //match @alice but not [@bob](...)
|
||||
$hcards = preg_replace_callback(
|
||||
$regex,
|
||||
self::USERNAMES_REGEX,
|
||||
function ($matches) {
|
||||
try {
|
||||
$contact = Contact::where('nick', '=', mb_strtolower($matches[1]))->firstOrFail();
|
||||
|
@ -372,6 +463,15 @@ class Note extends Model
|
|||
return $text;
|
||||
}
|
||||
|
||||
private function convertMarkdown($text)
|
||||
{
|
||||
$environment = Environment::createCommonMarkEnvironment();
|
||||
$environment->addExtension(new LinkifyExtension());
|
||||
$converter = new Converter(new DocParser($environment), new HtmlRenderer($environment));
|
||||
|
||||
return $converter->convertToHtml($text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Do a reverse geocode lookup of a `lat,lng` value.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue