Ooof, got the dependencies all up to date as well
Lots of tests needed fixing, but it seemed to be a whitespace parsing
error in the view files 🤔
This commit is contained in:
parent
ec01b3c6a2
commit
b2b6693aec
61 changed files with 2029 additions and 1413 deletions
|
|
@ -6,6 +6,7 @@ use App\Models\Like;
|
||||||
use App\Models\Note;
|
use App\Models\Note;
|
||||||
use App\Models\Article;
|
use App\Models\Article;
|
||||||
use App\Models\Bookmark;
|
use App\Models\Bookmark;
|
||||||
|
use App\Services\ActivityStreamsService;
|
||||||
|
|
||||||
class FrontPageController extends Controller
|
class FrontPageController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -14,6 +15,10 @@ class FrontPageController extends Controller
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
if (request()->wantsActivityStream()) {
|
||||||
|
return (new ActivityStreamsService())->siteOwnerResponse();
|
||||||
|
}
|
||||||
|
|
||||||
$pageNumber = request()->query('page') ?? 1;
|
$pageNumber = request()->query('page') ?? 1;
|
||||||
|
|
||||||
$notes = Note::latest()->get();
|
$notes = Note::latest()->get();
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ declare(strict_types=1);
|
||||||
namespace App\Jobs;
|
namespace App\Jobs;
|
||||||
|
|
||||||
use App\Models\Like;
|
use App\Models\Like;
|
||||||
|
use Codebird\Codebird;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Thujohn\Twitter\Facades\Twitter;
|
use Thujohn\Twitter\Facades\Twitter;
|
||||||
|
|
@ -19,14 +21,18 @@ use Jonnybarnes\WebmentionsParser\Exceptions\AuthorshipParserException;
|
||||||
|
|
||||||
class ProcessLike implements ShouldQueue
|
class ProcessLike implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
use Dispatchable;
|
||||||
|
use InteractsWithQueue;
|
||||||
|
use Queueable;
|
||||||
|
use SerializesModels;
|
||||||
|
|
||||||
|
/** @var Like */
|
||||||
protected $like;
|
protected $like;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new job instance.
|
* Create a new job instance.
|
||||||
*
|
*
|
||||||
* @param \App\Models\Like $like
|
* @param Like $like
|
||||||
*/
|
*/
|
||||||
public function __construct(Like $like)
|
public function __construct(Like $like)
|
||||||
{
|
{
|
||||||
|
|
@ -36,14 +42,18 @@ class ProcessLike implements ShouldQueue
|
||||||
/**
|
/**
|
||||||
* Execute the job.
|
* Execute the job.
|
||||||
*
|
*
|
||||||
* @param \GuzzleHttp\Client $client
|
* @param Client $client
|
||||||
* @param \Jonnybarnes\WebmentionsParser\Authorship $authorship
|
* @param Authorship $authorship
|
||||||
* @return int
|
* @return int
|
||||||
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
public function handle(Client $client, Authorship $authorship): int
|
public function handle(Client $client, Authorship $authorship): int
|
||||||
{
|
{
|
||||||
if ($this->isTweet($this->like->url)) {
|
if ($this->isTweet($this->like->url)) {
|
||||||
$tweet = Twitter::getOembed(['url' => $this->like->url]);
|
$codebird = resolve(Codebird::class);
|
||||||
|
|
||||||
|
$tweet = $codebird->statuses_oembed(['url' => $this->like->url]);
|
||||||
|
|
||||||
$this->like->author_name = $tweet->author_name;
|
$this->like->author_name = $tweet->author_name;
|
||||||
$this->like->author_url = $tweet->author_url;
|
$this->like->author_url = $tweet->author_url;
|
||||||
$this->like->content = $tweet->html;
|
$this->like->content = $tweet->html;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,12 @@ declare(strict_types=1);
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Cache;
|
use Cache;
|
||||||
|
use Codebird\Codebird;
|
||||||
|
use Exception;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||||
use Twitter;
|
use Twitter;
|
||||||
use Normalizer;
|
use Normalizer;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
|
@ -29,7 +35,7 @@ class Note extends Model
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reges for matching lone usernames.
|
* The regex for matching lone usernames.
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
|
|
@ -79,7 +85,7 @@ class Note extends Model
|
||||||
/**
|
/**
|
||||||
* Define the relationship with tags.
|
* Define the relationship with tags.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
* @return BelongsToMany
|
||||||
*/
|
*/
|
||||||
public function tags()
|
public function tags()
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +95,7 @@ class Note extends Model
|
||||||
/**
|
/**
|
||||||
* Define the relationship with clients.
|
* Define the relationship with clients.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
* @return BelongsTo
|
||||||
*/
|
*/
|
||||||
public function client()
|
public function client()
|
||||||
{
|
{
|
||||||
|
|
@ -99,7 +105,7 @@ class Note extends Model
|
||||||
/**
|
/**
|
||||||
* Define the relationship with webmentions.
|
* Define the relationship with webmentions.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
|
* @return MorphMany
|
||||||
*/
|
*/
|
||||||
public function webmentions()
|
public function webmentions()
|
||||||
{
|
{
|
||||||
|
|
@ -109,7 +115,7 @@ class Note extends Model
|
||||||
/**
|
/**
|
||||||
* Define the relationship with places.
|
* Define the relationship with places.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
* @return BelongsTo
|
||||||
*/
|
*/
|
||||||
public function place()
|
public function place()
|
||||||
{
|
{
|
||||||
|
|
@ -119,7 +125,7 @@ class Note extends Model
|
||||||
/**
|
/**
|
||||||
* Define the relationship with media.
|
* Define the relationship with media.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
* @return HasMany
|
||||||
*/
|
*/
|
||||||
public function media()
|
public function media()
|
||||||
{
|
{
|
||||||
|
|
@ -346,13 +352,18 @@ class Note extends Model
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$oEmbed = Twitter::getOembed([
|
$codebird = resolve(Codebird::class);
|
||||||
|
$oEmbed = $codebird->statuses_oembed([
|
||||||
'url' => $this->in_reply_to,
|
'url' => $this->in_reply_to,
|
||||||
'dnt' => true,
|
'dnt' => true,
|
||||||
'align' => 'center',
|
'align' => 'center',
|
||||||
'maxwidth' => 512,
|
'maxwidth' => 512,
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
|
||||||
|
if ($oEmbed->httpstatus >= 400) {
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Cache::put($tweetId, $oEmbed, ($oEmbed->cache_age));
|
Cache::put($tweetId, $oEmbed, ($oEmbed->cache_age));
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,14 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Cache;
|
|
||||||
use Twitter;
|
|
||||||
use App\Traits\FilterHtml;
|
use App\Traits\FilterHtml;
|
||||||
|
use Codebird\Codebird;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Jonnybarnes\WebmentionsParser\Authorship;
|
use Jonnybarnes\WebmentionsParser\Authorship;
|
||||||
|
use Jonnybarnes\WebmentionsParser\Exceptions\AuthorshipParserException;
|
||||||
|
|
||||||
class WebMention extends Model
|
class WebMention extends Model
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +34,7 @@ class WebMention extends Model
|
||||||
/**
|
/**
|
||||||
* Define the relationship.
|
* Define the relationship.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
|
* @return MorphTo
|
||||||
*/
|
*/
|
||||||
public function commentable()
|
public function commentable()
|
||||||
{
|
{
|
||||||
|
|
@ -43,12 +45,14 @@ class WebMention extends Model
|
||||||
* Get the author of the webmention.
|
* Get the author of the webmention.
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
|
* @throws AuthorshipParserException
|
||||||
*/
|
*/
|
||||||
public function getAuthorAttribute(): array
|
public function getAuthorAttribute(): array
|
||||||
{
|
{
|
||||||
$authorship = new Authorship();
|
$authorship = new Authorship();
|
||||||
$hCard = $authorship->findAuthor(json_decode($this->mf2, true));
|
$hCard = $authorship->findAuthor(json_decode($this->mf2, true));
|
||||||
if (array_key_exists('properties', $hCard) &&
|
if (
|
||||||
|
array_key_exists('properties', $hCard) &&
|
||||||
array_key_exists('photo', $hCard['properties'])
|
array_key_exists('photo', $hCard['properties'])
|
||||||
) {
|
) {
|
||||||
$hCard['properties']['photo'][0] = $this->createPhotoLink($hCard['properties']['photo'][0]);
|
$hCard['properties']['photo'][0] = $this->createPhotoLink($hCard['properties']['photo'][0]);
|
||||||
|
|
@ -118,7 +122,8 @@ class WebMention extends Model
|
||||||
return Cache::get($url);
|
return Cache::get($url);
|
||||||
}
|
}
|
||||||
$username = ltrim(parse_url($url, PHP_URL_PATH), '/');
|
$username = ltrim(parse_url($url, PHP_URL_PATH), '/');
|
||||||
$info = Twitter::getUsers(['screen_name' => $username]);
|
$codebird = resolve(Codebird::class);
|
||||||
|
$info = $codebird->users_show(['screen_name' => $username]);
|
||||||
$profile_image = $info->profile_image_url_https;
|
$profile_image = $info->profile_image_url_https;
|
||||||
Cache::put($url, $profile_image, 10080); //1 week
|
Cache::put($url, $profile_image, 10080); //1 week
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ class NoteObserver
|
||||||
/**
|
/**
|
||||||
* Listen to the Note created event.
|
* Listen to the Note created event.
|
||||||
*
|
*
|
||||||
* @param \App\Note $note
|
* @param Note $note
|
||||||
*/
|
*/
|
||||||
public function created(Note $note)
|
public function created(Note $note)
|
||||||
{
|
{
|
||||||
$text = array_get($note->getAttributes(), 'note');
|
$text = Arr::get($note->getAttributes(), 'note');
|
||||||
if ($text === null) {
|
if ($text === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -36,7 +36,7 @@ class NoteObserver
|
||||||
/**
|
/**
|
||||||
* Listen to the Note updated event.
|
* Listen to the Note updated event.
|
||||||
*
|
*
|
||||||
* @param \App\Note $Note
|
* @param Note $note
|
||||||
*/
|
*/
|
||||||
public function updated(Note $note)
|
public function updated(Note $note)
|
||||||
{
|
{
|
||||||
|
|
@ -62,7 +62,7 @@ class NoteObserver
|
||||||
/**
|
/**
|
||||||
* Listen to the Note deleting event.
|
* Listen to the Note deleting event.
|
||||||
*
|
*
|
||||||
* @param \App\Note $note
|
* @param Note $note
|
||||||
*/
|
*/
|
||||||
public function deleting(Note $note)
|
public function deleting(Note $note)
|
||||||
{
|
{
|
||||||
|
|
@ -72,8 +72,8 @@ class NoteObserver
|
||||||
/**
|
/**
|
||||||
* Retrieve the tags from a note’s text, tag for form #tag.
|
* Retrieve the tags from a note’s text, tag for form #tag.
|
||||||
*
|
*
|
||||||
* @param string $note
|
* @param string $note
|
||||||
* @return \Illuminate\Support\Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
private function getTagsFromNote(string $note): Collection
|
private function getTagsFromNote(string $note): Collection
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use App\Models\Note;
|
use App\Models\Note;
|
||||||
|
use Codebird\Codebird;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Observers\NoteObserver;
|
use App\Observers\NoteObserver;
|
||||||
|
|
@ -29,6 +30,23 @@ class AppServiceProvider extends ServiceProvider
|
||||||
$this->app->bind('Intervention\Image\ImageManager', function () {
|
$this->app->bind('Intervention\Image\ImageManager', function () {
|
||||||
return new \Intervention\Image\ImageManager(['driver' => config('image.driver')]);
|
return new \Intervention\Image\ImageManager(['driver' => config('image.driver')]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Bind the Codebird client
|
||||||
|
$this->app->bind('Codebird\Codebird', function () {
|
||||||
|
Codebird::setConsumerKey(
|
||||||
|
env('TWITTER_CONSUMER_KEY'),
|
||||||
|
env('TWITTER_CONSUMER_SECRET')
|
||||||
|
);
|
||||||
|
|
||||||
|
$cb = Codebird::getInstance();
|
||||||
|
|
||||||
|
$cb->setToken(
|
||||||
|
env('TWITTER_ACCESS_TOKEN'),
|
||||||
|
env('TWITTER_ACCESS_TOKEN_SECRET')
|
||||||
|
);
|
||||||
|
|
||||||
|
return $cb;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@
|
||||||
],
|
],
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.0",
|
"php": "^7.2",
|
||||||
|
"ext-intl": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"cviebrock/eloquent-sluggable": "~6.0",
|
"cviebrock/eloquent-sluggable": "~6.0",
|
||||||
"fideloper/proxy": "~4.0",
|
"fideloper/proxy": "~4.0",
|
||||||
|
|
@ -19,6 +20,7 @@
|
||||||
"jonnybarnes/emoji-a11y": "^0.3",
|
"jonnybarnes/emoji-a11y": "^0.3",
|
||||||
"jonnybarnes/indieweb": "dev-master",
|
"jonnybarnes/indieweb": "dev-master",
|
||||||
"jonnybarnes/webmentions-parser": "0.4.*",
|
"jonnybarnes/webmentions-parser": "0.4.*",
|
||||||
|
"jublonet/codebird-php": "4.0.0-beta.1",
|
||||||
"laravel/framework": "^6.0",
|
"laravel/framework": "^6.0",
|
||||||
"laravel/horizon": "^3.0",
|
"laravel/horizon": "^3.0",
|
||||||
"laravel/scout": "^7.0",
|
"laravel/scout": "^7.0",
|
||||||
|
|
@ -39,16 +41,14 @@
|
||||||
"tgalopin/html-sanitizer": "^1.1"
|
"tgalopin/html-sanitizer": "^1.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"barryvdh/laravel-debugbar": "~3.0",
|
"barryvdh/laravel-debugbar": "^3.0",
|
||||||
"beyondcode/laravel-dump-server": "^1.0",
|
"beyondcode/laravel-dump-server": "^1.0",
|
||||||
"codedungeon/phpunit-result-printer": "^0.26.0",
|
"facade/ignition": "^1.4",
|
||||||
"filp/whoops": "~2.0",
|
"fzaninotto/faker": "^1.4",
|
||||||
"fzaninotto/faker": "~1.4",
|
|
||||||
"laravel/dusk": "^5.0",
|
"laravel/dusk": "^5.0",
|
||||||
"mockery/mockery": "~1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"nunomaduro/collision": "^3.0",
|
"nunomaduro/collision": "^3.0",
|
||||||
"phpunit/phpunit": "~8.0",
|
"phpunit/phpunit": "^8.0"
|
||||||
"symfony/thanks": "~1.0"
|
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true,
|
||||||
|
|
|
||||||
771
composer.lock
generated
771
composer.lock
generated
File diff suppressed because it is too large
Load diff
1054
package-lock.json
generated
1054
package-lock.json
generated
File diff suppressed because it is too large
Load diff
21
package.json
21
package.json
|
|
@ -6,20 +6,21 @@
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
"puppeteer": "^1.18.1"
|
"puppeteer": "^2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"css-loader": "^3.1.0",
|
"css-loader": "^3.2.0",
|
||||||
"husky": "^3.0.0",
|
"husky": "^3.0.9",
|
||||||
"lint-staged": "^9.2.0",
|
"lint-staged": "^9.4.2",
|
||||||
"mini-css-extract-plugin": "^0.8.0",
|
"mini-css-extract-plugin": "^0.8.0",
|
||||||
"node-sass": "^4.12.0",
|
"node-sass": "^4.13.0",
|
||||||
"pre-commit": "^1.1.3",
|
"pre-commit": "^1.1.3",
|
||||||
"sass-loader": "^7.1.0",
|
"sass-loader": "^8.0.0",
|
||||||
"style-loader": "^0.23.1",
|
"style-loader": "^1.0.0",
|
||||||
"stylelint": "^10.1.0",
|
"stylelint": "^11.1.1",
|
||||||
"webpack": "^4.36.1",
|
"stylelint-config-standard": "^19.0.0",
|
||||||
"webpack-cli": "^3.3.6"
|
"webpack": "^4.41.2",
|
||||||
|
"webpack-cli": "^3.3.9"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"compress": "scripts/compress",
|
"compress": "scripts/compress",
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
convertNoticesToExceptions="true"
|
convertNoticesToExceptions="true"
|
||||||
convertWarningsToExceptions="true"
|
convertWarningsToExceptions="true"
|
||||||
processIsolation="false"
|
processIsolation="false"
|
||||||
stopOnFailure="false"
|
stopOnFailure="true"
|
||||||
printerClass="Codedungeon\PHPUnitPrettyResultPrinter\Printer">
|
>
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Unit">
|
<testsuite name="Unit">
|
||||||
<directory suffix="Test.php">./tests/Unit</directory>
|
<directory suffix="Test.php">./tests/Unit</directory>
|
||||||
|
|
|
||||||
73
public/assets/app.css
vendored
73
public/assets/app.css
vendored
|
|
@ -1,5 +1,76 @@
|
||||||
|
:root {
|
||||||
|
--font-stack-body: montserrat, sans-serif;
|
||||||
|
--font-stack-headings: bebas-neue, sans-serif; }
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: "Comic Sans MS", cursive; }
|
font-family: var(--font-stack-body);
|
||||||
|
font-size: 2rem; }
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-family: var(--font-stack-headings); }
|
||||||
|
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column; }
|
||||||
|
|
||||||
|
#top-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center; }
|
||||||
|
#top-header h1 {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center; }
|
||||||
|
#top-header nav {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center; }
|
||||||
|
#top-header nav a {
|
||||||
|
margin: 0 0.5rem; }
|
||||||
|
|
||||||
|
.h-feed {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin: auto; }
|
||||||
|
@media screen and (min-width: 700px) {
|
||||||
|
.h-feed {
|
||||||
|
max-width: 700px; }
|
||||||
|
.h-feed > .note,
|
||||||
|
.h-feed > .h-entry {
|
||||||
|
padding: 0 1rem; } }
|
||||||
|
|
||||||
|
.note {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column; }
|
||||||
|
.note .note-metadata {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between; }
|
||||||
|
.note .note-metadata .syndication-links svg {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em; }
|
||||||
|
|
||||||
|
.personal-bio {
|
||||||
|
padding: 0 2rem; }
|
||||||
|
|
||||||
|
footer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 1.5rem; }
|
||||||
|
|
||||||
|
.post-info a {
|
||||||
|
text-decoration: none; }
|
||||||
|
|
||||||
|
.syndication-links .u-syndication {
|
||||||
|
text-decoration: none; }
|
||||||
|
|
||||||
|
.p-bridgy-facebook-content,
|
||||||
|
.p-bridgy-twitter-content {
|
||||||
|
display: none; }
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=app.css.map*/
|
/*# sourceMappingURL=app.css.map*/
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"sources":["webpack:///./resources/sass/app.scss"],"names":[],"mappings":"AAAA;EACI,qCAAqC","file":"app.css","sourcesContent":["body {\n font-family: \"Comic Sans MS\", cursive;\n}\n"],"sourceRoot":""}
|
{"version":3,"sources":["webpack:///./resources/sass/_variables.scss","webpack:///./resources/sass/_base.scss","webpack:///./resources/sass/_layout-main.scss","webpack:///./resources/sass/_link-styles.scss","webpack:///./resources/sass/_posse.scss"],"names":[],"mappings":"AAAA;EACI,yCAAkB;EAClB,6CAAsB;;ACF1B;EACI,mCAAmC;EACnC,eAAe;;AAGnB;;;;;;EAMI,uCAAuC;;ACX3C;EACI,aAAa;EACb,sBAAsB;;AAG1B;EACI,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EAH3B;IAMQ,aAAa;IACb,uBAAuB;EAP/B;IAWQ,aAAa;IACb,uBAAuB;IAZ/B;MAeY,gBAAgB;;AAK5B;EACI,aAAa;EACb,sBAAsB;EACtB,YAAY;EAEZ;IALJ;MAMQ,gBAAgB;MANxB;;QAUY,eAAe,IAClB;;AAIT;EACI,aAAa;EACb,sBAAsB;EAF1B;IAKQ,aAAa;IACb,mBAAmB;IACnB,8BAA8B;IAPtC;MAWgB,WAAW;MACX,UAAU;;AAM1B;EACI,eAAe;;AAGnB;EACI,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,kBAAkB;;AClEtB;EAEQ,qBAAqB;;AAI7B;EAEQ,qBAAqB;;ACR7B;;EAEI,aAAa","file":"app.css","sourcesContent":[":root {\n --font-stack-body: montserrat, sans-serif;\n --font-stack-headings: bebas-neue, sans-serif;\n}\n","body {\n font-family: var(--font-stack-body);\n font-size: 2rem;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-family: var(--font-stack-headings);\n}\n","body {\n display: flex;\n flex-direction: column;\n}\n\n#top-header {\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n h1 {\n display: flex;\n justify-content: center;\n }\n\n nav {\n display: flex;\n justify-content: center;\n\n a {\n margin: 0 0.5rem;\n }\n }\n}\n\n.h-feed {\n display: flex;\n flex-direction: column;\n margin: auto;\n\n @media screen and (min-width: 700px) {\n max-width: 700px;\n\n > .note,\n > .h-entry {\n padding: 0 1rem;\n }\n }\n}\n\n.note {\n display: flex;\n flex-direction: column;\n\n .note-metadata {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n .syndication-links {\n svg {\n height: 1em;\n width: 1em;\n }\n }\n }\n}\n\n.personal-bio {\n padding: 0 2rem;\n}\n\nfooter {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: 1.5rem;\n}\n",".post-info {\n a {\n text-decoration: none;\n }\n}\n\n.syndication-links {\n .u-syndication {\n text-decoration: none;\n }\n}\n",".p-bridgy-facebook-content,\n.p-bridgy-twitter-content {\n display: none;\n}\n"],"sourceRoot":""}
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/sass/app.scss?af33"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;AClFA,uC","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// extracted by mini-css-extract-plugin"],"sourceRoot":""}
|
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/sass/app.scss"],"names":[],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA,uC","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// extracted by mini-css-extract-plugin"],"sourceRoot":""}
|
||||||
13
resources/sass/_base.scss
vendored
Normal file
13
resources/sass/_base.scss
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
body {
|
||||||
|
font-family: var(--font-stack-body);
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-family: var(--font-stack-headings);
|
||||||
|
}
|
||||||
68
resources/sass/_layout-main.scss
vendored
Normal file
68
resources/sass/_layout-main.scss
vendored
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
a {
|
||||||
|
margin: 0 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-feed {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin: auto;
|
||||||
|
|
||||||
|
@media screen and (min-width: 700px) {
|
||||||
|
max-width: 700px;
|
||||||
|
|
||||||
|
> .note,
|
||||||
|
> .h-entry {
|
||||||
|
padding: 0 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.note {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.note-metadata {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.syndication-links {
|
||||||
|
svg {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.personal-bio {
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
}
|
||||||
11
resources/sass/_link-styles.scss
vendored
Normal file
11
resources/sass/_link-styles.scss
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
.post-info {
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.syndication-links {
|
||||||
|
.u-syndication {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
4
resources/sass/_posse.scss
vendored
Normal file
4
resources/sass/_posse.scss
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
.p-bridgy-facebook-content,
|
||||||
|
.p-bridgy-twitter-content {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
4
resources/sass/_variables.scss
vendored
Normal file
4
resources/sass/_variables.scss
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
:root {
|
||||||
|
--font-stack-body: montserrat, sans-serif;
|
||||||
|
--font-stack-headings: bebas-neue, sans-serif;
|
||||||
|
}
|
||||||
8
resources/sass/app.scss
vendored
8
resources/sass/app.scss
vendored
|
|
@ -1,3 +1,5 @@
|
||||||
body {
|
@import "variables";
|
||||||
font-family: "Comic Sans MS", cursive;
|
@import "base";
|
||||||
}
|
@import "layout-main";
|
||||||
|
@import "link-styles";
|
||||||
|
@import "posse";
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue