Merge branch 'release/0.0.13'

This commit is contained in:
Jonny Barnes 2016-09-26 22:19:28 +01:00
commit aa0316ffe0
42 changed files with 273 additions and 547 deletions

View file

@ -204,34 +204,37 @@ class MicropubClientController extends Controller
*/ */
public function postNewPlace(Request $request) public function postNewPlace(Request $request)
{ {
if ($request->session()->has('token') === false) {
return response()->json([
'error' => true,
'error_description' => 'No known token',
], 400);
}
$domain = $request->session()->get('me'); $domain = $request->session()->get('me');
$token = $request->session()->get('token'); $token = $request->session()->get('token');
$micropubEndpoint = $this->indieAuthService->discoverMicropubEndpoint($domain, $this->indieClient); $micropubEndpoint = $this->indieAuthService->discoverMicropubEndpoint($domain, $this->indieClient);
if (! $micropubEndpoint) { if (! $micropubEndpoint) {
return (new Response(json_encode([ return response()->json([
'error' => true, 'error' => true,
'message' => 'Could not determine the micropub endpoint.', 'error_description' => 'Could not determine the micropub endpoint.',
]), 400)) ], 400);
->header('Content-Type', 'application/json');
} }
$place = $this->postPlaceRequest($request, $micropubEndpoint, $token); $place = $this->postPlaceRequest($request, $micropubEndpoint, $token);
if ($place === false) { if ($place === false) {
return (new Response(json_encode([ return response()->json([
'error' => true, 'error' => true,
'message' => 'Unable to create the new place', 'error_description' => 'Unable to create the new place',
]), 400)) ], 400);
->header('Content-Type', 'application/json');
} }
return (new Response(json_encode([ return response()->json([
'url' => $place, 'url' => $place,
'name' => $request->input('place-name'), 'name' => $request->input('place-name'),
'latitude' => $request->input('place-latitude'), 'latitude' => $request->input('place-latitude'),
'longitude' => $request->input('place-longitude'), 'longitude' => $request->input('place-longitude'),
]), 200)) ]);
->header('Content-Type', 'application/json');
} }
/** /**
@ -263,7 +266,7 @@ class MicropubClientController extends Controller
'headers' => $headers, 'headers' => $headers,
]); ]);
} catch (ClientException $e) { } catch (ClientException $e) {
//not sure yet... return false;
} }
if ($response->getStatusCode() == 201) { if ($response->getStatusCode() == 201) {
return $response->getHeader('Location')[0]; return $response->getHeader('Location')[0];
@ -285,12 +288,22 @@ class MicropubClientController extends Controller
$latitude, $latitude,
$longitude $longitude
) { ) {
if ($request->session()->has('token') === false) {
return response()->json([
'error' => true,
'error_description' => 'No known token',
], 400);
}
$domain = $request->session()->get('me'); $domain = $request->session()->get('me');
$token = $request->session()->get('token'); $token = $request->session()->get('token');
$micropubEndpoint = $this->indieAuthService->discoverMicropubEndpoint($domain, $this->indieClient); $micropubEndpoint = $this->indieAuthService->discoverMicropubEndpoint($domain, $this->indieClient);
if (! $micropubEndpoint) { if (! $micropubEndpoint) {
return; return response()->json([
'error' => true,
'error_description' => 'No known endpoint',
], 400);
} }
try { try {
@ -299,7 +312,10 @@ class MicropubClientController extends Controller
'query' => ['q' => 'geo:' . $latitude . ',' . $longitude], 'query' => ['q' => 'geo:' . $latitude . ',' . $longitude],
]); ]);
} catch (\GuzzleHttp\Exception\BadResponseException $e) { } catch (\GuzzleHttp\Exception\BadResponseException $e) {
return; return response()->json([
'error' => true,
'error_description' => 'The endpoint returned a non-good response',
], 400);
} }
return (new Response($response->getBody(), 200)) return (new Response($response->getBody(), 200))

View file

@ -57,54 +57,44 @@ class MicropubController extends Controller
if (array_search('post', $scopes) !== false) { if (array_search('post', $scopes) !== false) {
$clientId = $tokenData->getClaim('client_id'); $clientId = $tokenData->getClaim('client_id');
if (($request->input('h') == 'entry') || ($request->input('type')[0] == 'h-entry')) { if (($request->input('h') == 'entry') || ($request->input('type')[0] == 'h-entry')) {
try {
$note = $this->noteService->createNote($request, $clientId); $note = $this->noteService->createNote($request, $clientId);
$content = <<<EOD } catch (Exception $exception) {
{ return response()->json(['error' => true], 400);
"response": "created",
"location": "$note->longurl"
} }
EOD;
return (new Response($content, 201)) return response()->json([
->header('Location', $note->longurl) 'response' => 'created',
->header('Content-Type', 'application/json'); 'location' => $note->longurl,
], 201)->header('Location', $note->longurl);
} }
if ($request->input('h') == 'card' || $request->input('type')[0] == 'h-card') { if ($request->input('h') == 'card' || $request->input('type')[0] == 'h-card') {
try {
$place = $this->placeService->createPlace($request); $place = $this->placeService->createPlace($request);
$content = <<<EOD } catch (Exception $exception) {
{ return response()->json(['error' => true], 400);
"response": "created",
"location": "$place->longurl"
} }
EOD;
return (new Response($content, 201)) return response()->json([
->header('Location', $place->longurl) 'response' => 'created',
->header('Content-Type', 'application/json'); 'location' => $place->longurl,
], 201)->header('Location', $place->longurl);
} }
} }
} }
$content = <<<'EOD'
{
"response": "error",
"error": "invalid_token",
"error_description": "The token provided is not valid or does not have the necessary scope",
}
EOD;
return (new Response($content, 400)) return response()->json([
->header('Content-Type', 'application/json'); 'response' => 'error',
'error' => 'invalid_token',
'error_description' => 'The token provided is not valid or does not have the necessary scope',
], 400);
} }
$content = <<<'EOD'
{
"response": "error",
"error": "no_token",
"error_description": "No OAuth token sent with request"
}
EOD;
return (new Response($content, 400)) return response()->json([
->header('Content-Type', 'application/json'); 'response' => 'error',
'error' => 'no_token',
'error_description' => 'No OAuth token sent with request',
], 400);
} }
/** /**

View file

@ -4,9 +4,7 @@ namespace App;
use DB; use DB;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Phaza\LaravelPostgis\Geometries\Point;
use MartinBean\Database\Eloquent\Sluggable; use MartinBean\Database\Eloquent\Sluggable;
use Phaza\LaravelPostgis\Geometries\Polygon;
use Phaza\LaravelPostgis\Eloquent\PostgisTrait; use Phaza\LaravelPostgis\Eloquent\PostgisTrait;
class Place extends Model class Place extends Model
@ -33,8 +31,8 @@ class Place extends Model
* @var array * @var array
*/ */
protected $postgisFields = [ protected $postgisFields = [
'location' => Point::class, 'location',
'polygon' => Polygon::class, 'polygon',
]; ];
/** /**

View file

@ -16,21 +16,26 @@ class PlaceService
*/ */
public function createPlace(Request $request) public function createPlace(Request $request)
{ {
//we’ll either have latitude and longitude sent together in a if ($request->header('Content-Type') == 'application/json') {
//geo-url (micropub), or seperatley (/admin) $name = $request->input('properties.name');
if ($request->input('geo') !== null) { $description = $request->input('properties.description') ?? null;
$parts = explode(':', $request->input('geo')); $geo = $request->input('properties.geo');
} else {
$name = $request->input('name');
$description = $request->input('description');
$geo = $request->input('geo');
}
$parts = explode(':', $geo);
$latlng = explode(',', $parts[1]); $latlng = explode(',', $parts[1]);
$latitude = $latlng[0]; $latitude = $latlng[0];
$longitude = $latlng[1]; $longitude = $latlng[1];
}
if ($request->input('latitude') !== null) { if ($request->input('latitude') !== null) {
$latitude = $request->input('latitude'); $latitude = $request->input('latitude');
$longitude = $request->input('longitude'); $longitude = $request->input('longitude');
} }
$place = new Place(); $place = new Place();
$place->name = $request->input('name'); $place->name = $name;
$place->description = $request->input('description'); $place->description = $description;
$place->location = new Point((float) $latitude, (float) $longitude); $place->location = new Point((float) $latitude, (float) $longitude);
$place->save(); $place->save();

View file

@ -1,5 +1,10 @@
# Changelog # Changelog
## Version 0.0.13 (2016-09-26)
- Better places support, particularly with micropub (issue#9)
- Uglify js for better performance (issue#19)
- Autolink spotify links (issue#18)
## Version 0.0.12 (2016-09-21) ## Version 0.0.12 (2016-09-21)
- Better indication of number of replies to a note (issue#17) - Better indication of number of replies to a note (issue#17)
- Use generic twitter status URL so my own profile name isn’t hardcoded (issue#14) - Use generic twitter status URL so my own profile name isn’t hardcoded (issue#14)

51
composer.lock generated
View file

@ -58,16 +58,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.19.9", "version": "3.19.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "55da42fee5ff26f962b2366b08e4f32e348cd1d9" "reference": "eb9488f671175e708cf68c74cc04bd9115c96761"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/55da42fee5ff26f962b2366b08e4f32e348cd1d9", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/eb9488f671175e708cf68c74cc04bd9115c96761",
"reference": "55da42fee5ff26f962b2366b08e4f32e348cd1d9", "reference": "eb9488f671175e708cf68c74cc04bd9115c96761",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -134,7 +134,7 @@
"s3", "s3",
"sdk" "sdk"
], ],
"time": "2016-09-20 22:11:12" "time": "2016-09-22 19:32:03"
}, },
{ {
"name": "barnabywalters/mf-cleaner", "name": "barnabywalters/mf-cleaner",
@ -2891,16 +2891,16 @@
}, },
{ {
"name": "spatie/laravel-medialibrary", "name": "spatie/laravel-medialibrary",
"version": "4.8.4", "version": "4.9.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/spatie/laravel-medialibrary.git", "url": "https://github.com/spatie/laravel-medialibrary.git",
"reference": "8c862e270d49e8bbff6f0993900c8bb59ea165ea" "reference": "bb8786724f87c2d187897809849b7dc79a84a4d9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/8c862e270d49e8bbff6f0993900c8bb59ea165ea", "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/bb8786724f87c2d187897809849b7dc79a84a4d9",
"reference": "8c862e270d49e8bbff6f0993900c8bb59ea165ea", "reference": "bb8786724f87c2d187897809849b7dc79a84a4d9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2910,7 +2910,7 @@
"illuminate/support": "~5.1.16|~5.2.0|~5.3.0", "illuminate/support": "~5.1.16|~5.2.0|~5.3.0",
"php": "^7.0", "php": "^7.0",
"spatie/laravel-glide": "^3.0.0", "spatie/laravel-glide": "^3.0.0",
"spatie/pdf-to-image": "^1.0.1", "spatie/pdf-to-image": "^1.2",
"spatie/string": "^2.0.0" "spatie/string": "^2.0.0"
}, },
"conflict": { "conflict": {
@ -2919,8 +2919,7 @@
"require-dev": { "require-dev": {
"doctrine/dbal": "^2.5.2", "doctrine/dbal": "^2.5.2",
"mockery/mockery": "^0.9.4", "mockery/mockery": "^0.9.4",
"orchestra/database": "3.3.x-dev", "orchestra/testbench": "^3.1",
"orchestra/testbench": "3.3.x-dev",
"phpunit/phpunit": "^5.0.0", "phpunit/phpunit": "^5.0.0",
"scrutinizer/ocular": "^1.1" "scrutinizer/ocular": "^1.1"
}, },
@ -2954,7 +2953,7 @@
"media", "media",
"spatie" "spatie"
], ],
"time": "2016-09-14 16:31:49" "time": "2016-09-23 11:54:31"
}, },
{ {
"name": "spatie/pdf-to-image", "name": "spatie/pdf-to-image",
@ -4031,28 +4030,28 @@
"packages-dev": [ "packages-dev": [
{ {
"name": "barryvdh/laravel-debugbar", "name": "barryvdh/laravel-debugbar",
"version": "V2.2.3", "version": "v2.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git", "url": "https://github.com/barryvdh/laravel-debugbar.git",
"reference": "ecd1ce5c4a827e2f6a8fb41bcf67713beb1c1cbd" "reference": "0c87981df959c7c1943abe227baf607c92f204f9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/ecd1ce5c4a827e2f6a8fb41bcf67713beb1c1cbd", "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/0c87981df959c7c1943abe227baf607c92f204f9",
"reference": "ecd1ce5c4a827e2f6a8fb41bcf67713beb1c1cbd", "reference": "0c87981df959c7c1943abe227baf607c92f204f9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/support": "5.1.*|5.2.*|5.3.*", "illuminate/support": "5.1.*|5.2.*|5.3.*",
"maximebf/debugbar": "~1.11.0|~1.12.0", "maximebf/debugbar": "~1.13.0",
"php": ">=5.5.9", "php": ">=5.5.9",
"symfony/finder": "~2.7|~3.0" "symfony/finder": "~2.7|~3.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.2-dev" "dev-master": "2.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -4081,7 +4080,7 @@
"profiler", "profiler",
"webprofiler" "webprofiler"
], ],
"time": "2016-07-29 15:00:36" "time": "2016-09-15 14:05:56"
}, },
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
@ -4232,16 +4231,16 @@
}, },
{ {
"name": "maximebf/debugbar", "name": "maximebf/debugbar",
"version": "v1.12.0", "version": "v1.13.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/maximebf/php-debugbar.git", "url": "https://github.com/maximebf/php-debugbar.git",
"reference": "e634fbd32cd6bc3fa0e8c972b52d4bf49bab3988" "reference": "5f49a5ed6cfde81d31d89378806670d77462526e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/e634fbd32cd6bc3fa0e8c972b52d4bf49bab3988", "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/5f49a5ed6cfde81d31d89378806670d77462526e",
"reference": "e634fbd32cd6bc3fa0e8c972b52d4bf49bab3988", "reference": "5f49a5ed6cfde81d31d89378806670d77462526e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4260,7 +4259,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.12-dev" "dev-master": "1.13-dev"
} }
}, },
"autoload": { "autoload": {
@ -4289,7 +4288,7 @@
"debug", "debug",
"debugbar" "debugbar"
], ],
"time": "2016-05-15 13:11:34" "time": "2016-09-15 14:01:59"
}, },
{ {
"name": "mockery/mockery", "name": "mockery/mockery",

View file

@ -222,6 +222,7 @@ return [
'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class, 'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class, 'Blade' => Illuminate\Support\Facades\Blade::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class, 'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class, 'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class,

View file

@ -1,8 +1,10 @@
'use strict'; 'use strict';
var gulp = require('gulp'); var gulp = require('gulp');
var pump = require('pump');
var sass = require('gulp-sass'); var sass = require('gulp-sass');
var brotli = require('gulp-brotli'); var brotli = require('gulp-brotli');
var uglify = require('gulp-uglify');
var zopfli = require('gulp-zopfli'); var zopfli = require('gulp-zopfli');
var sourcemaps = require('gulp-sourcemaps'); var sourcemaps = require('gulp-sourcemaps');
var autoprefixer = require('gulp-autoprefixer'); var autoprefixer = require('gulp-autoprefixer');
@ -17,7 +19,12 @@ gulp.task('sass', function () {
}); });
gulp.task('js-assets', function () { gulp.task('js-assets', function () {
//return gulp.src(['resources/assets/js/**/*'])
// .pipe(gulp.dest('./public/assets/js'));
return gulp.src(['resources/assets/js/**/*']) return gulp.src(['resources/assets/js/**/*'])
.pipe(sourcemaps.init())
.pipe(uglify())
.pipe(sourcemaps.write('./maps'))
.pipe(gulp.dest('./public/assets/js')); .pipe(gulp.dest('./public/assets/js'));
}); });

View file

@ -9,6 +9,7 @@
"gulp-brotli": "^1.0.1", "gulp-brotli": "^1.0.1",
"gulp-sass": "^2.3.2", "gulp-sass": "^2.3.2",
"gulp-sourcemaps": "^1.6.0", "gulp-sourcemaps": "^1.6.0",
"gulp-uglify": "^2.0.0",
"gulp-zopfli": "^1.0.0", "gulp-zopfli": "^1.0.0",
"lint-staged": "^1.0.1", "lint-staged": "^1.0.1",
"pre-commit": "^1.1.3", "pre-commit": "^1.1.3",

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,69 +1,2 @@
/* global alertify, store */ function getKeys(){for(var e=[],t=document.querySelectorAll("input[type=text], textarea"),r=0;r<t.length;r++){var o=getFormElement(t[r]);if(o!==!1){var n=o.id+"~"+t[r].id;e.push(n)}}return e}function getFormElement(e){if("body"!==e.nodeName.toLowerCase()){var t=e.parentNode;return"form"===t.nodeName.toLowerCase()?t:getFormElement(t)}return!1}var feature={addEventListener:!!window.addEventListener,querySelectorAll:!!document.querySelectorAll};if(feature.addEventListener&&feature.querySelectorAll)for(var keys=getKeys(),i=0;i<keys.length;i++)if(store.get(keys[i])){var formId=keys[i].split("~")[1];document.getElementById(formId).value=store.get(keys[i])}for(var timerId=window.setInterval(function(){for(var e=!1,t=document.querySelectorAll("input[type=text], textarea"),r=0;r<t.length;r++){var o=getFormElement(t[r]).id+"~"+t[r].id;store.get(o)!==t[r].value&&""!==t[r].value&&(store.set(o,t[r].value),e=!0)}e===!0&&(alertify.logPosition("top right"),alertify.success("Auto saved text"))},5e3),forms=document.querySelectorAll("form"),f=0;f<forms.length;f++){var form=forms[f];form.addEventListener("submit",function(){window.clearInterval(timerId);for(var e=form.id,t=store.keys(),r=0;r<t.length;r++)t[r].indexOf(e)>-1&&store.remove(t[r])})}
var feature = { //# sourceMappingURL=maps/form-save.js.map
addEventListener : !!window.addEventListener,
querySelectorAll : !!document.querySelectorAll
};
if (feature.addEventListener && feature.querySelectorAll) {
var keys = getKeys();
for (var i = 0; i < keys.length; i++) {
if (store.get(keys[i])) {
var formId = keys[i].split('~')[1];
document.getElementById(formId).value = store.get(keys[i]);
}
}
}
var timerId = window.setInterval(function() {
var saved = false;
var inputs = document.querySelectorAll('input[type=text], textarea');
for (var i = 0; i < inputs.length; i++) {
var key = getFormElement(inputs[i]).id + '~' + inputs[i].id;
if (store.get(key) !== inputs[i].value && inputs[i].value !== '') {
store.set(key, inputs[i].value);
saved = true;
}
}
if (saved === true) {
alertify.logPosition('top right');
alertify.success('Auto saved text');
}
}, 5000);
var forms = document.querySelectorAll('form');
for (var f = 0; f < forms.length; f++) {
var form = forms[f];
form.addEventListener('submit', function() {
window.clearInterval(timerId);
var formId = form.id;
var storedKeys = store.keys();
for (var i = 0; i < storedKeys.length; i++) {
if (storedKeys[i].indexOf(formId) > -1) {
store.remove(storedKeys[i]);
}
}
});
}
function getKeys() {
var keys = [];
var formFields = document.querySelectorAll('input[type=text], textarea');
for (var f = 0; f < formFields.length; f++) {
var parent = getFormElement(formFields[f]);
if (parent !== false) {
var key = parent.id + '~' + formFields[f].id;
keys.push(key);
}
}
return keys;
}
function getFormElement(elem) {
if (elem.nodeName.toLowerCase() !== 'body') {
var parent = elem.parentNode;
if (parent.nodeName.toLowerCase() === 'form') {
return parent;
} else {
return getFormElement(parent);
}
} else {
return false;
}
}

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more