diff --git a/app/assets/js/start.js b/app/assets/js/start.js index 4e22b232..b50d8bef 100644 --- a/app/assets/js/start.js +++ b/app/assets/js/start.js @@ -50,6 +50,15 @@ $(function() { // App setup window.CachetHQ = {}; + moment.locale(Global.locale); + + $('abbr.timeago').each(function () { + var $el = $(this); + $el + .livestamp($el.data('timeago')) + .popover(); + }); + window.CachetHQ.Notifier = function () { this.notify = function (message, type, options) { type = (typeof type === 'undefined' || type === 'error') ? 'error' : type; diff --git a/app/config/app.php b/app/config/app.php index 0efbe921..539138aa 100644 --- a/app/config/app.php +++ b/app/config/app.php @@ -95,6 +95,9 @@ return [ 'providers' => [ + /* + * Laravel Framework Service Providers... + */ 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 'Illuminate\Auth\AuthServiceProvider', 'Illuminate\Cache\CacheServiceProvider', @@ -120,6 +123,9 @@ return [ 'Illuminate\Validation\ValidationServiceProvider', 'Illuminate\View\ViewServiceProvider', + /* + * Packages Service Providers... + */ 'Dingo\Api\Provider\ApiServiceProvider', 'GrahamCampbell\Security\SecurityServiceProvider', 'GrahamCampbell\Binput\BinputServiceProvider', @@ -128,7 +134,11 @@ return [ 'Roumen\Feed\FeedServiceProvider', 'Thujohn\Rss\RssServiceProvider', 'Jenssegers\Date\DateServiceProvider', + 'McCool\LaravelAutoPresenter\LaravelAutoPresenterServiceProvider', + /* + * Application Service Providers... + */ 'CachetHQ\Cachet\Providers\AuthServiceProvider', 'CachetHQ\Cachet\Providers\ConsoleServiceProvider', 'CachetHQ\Cachet\Providers\RepositoryServiceProvider', diff --git a/app/views/layout/master.blade.php b/app/views/layout/master.blade.php index 82032641..5101a488 100644 --- a/app/views/layout/master.blade.php +++ b/app/views/layout/master.blade.php @@ -46,6 +46,10 @@ @endif + diff --git a/app/views/partials/incidents.blade.php b/app/views/partials/incidents.blade.php index 76152379..07f952d1 100644 --- a/app/views/partials/incidents.blade.php +++ b/app/views/partials/incidents.blade.php @@ -14,7 +14,10 @@
{{ $incident->name }}
- {{ $incident->created_at->diffForHumans() }} + + + +
@if($incident->hasMessage())
diff --git a/bower.json b/bower.json index cb6abfb0..328fd280 100644 --- a/bower.json +++ b/bower.json @@ -1,18 +1,20 @@ { - "name": "Cachet", - "dependencies": { - "bootstrap-sass-official": "~3.3.1", - "humane-js": "~3.2.2", - "ionicons": "~2.0.0", - "jquery": "~2.1.1", - "jquery-minicolors": "~2.1.10", - "jquery-serialize-object": "~2.4.3", - "lodash": "~2.4.1", - "messenger": "~1.4.1", - "Sortable": "~1.0.0", - "animate-sass": "~0.6.2" - }, - "resolutions": { - "jquery": "~2.1.1" - } + "name": "Cachet", + "dependencies": { + "bootstrap-sass-official": "~3.3.1", + "humane-js": "~3.2.2", + "ionicons": "~2.0.0", + "jquery": "~2.1.1", + "jquery-minicolors": "~2.1.10", + "jquery-serialize-object": "~2.4.3", + "lodash": "~2.4.1", + "messenger": "~1.4.1", + "Sortable": "~1.0.0", + "animate-sass": "~0.6.2", + "moment": "~2.8.4", + "livestampjs": "~1.1.2" + }, + "resolutions": { + "jquery": "~2.1.1" + } } diff --git a/composer.json b/composer.json index cbbd2fa9..bbc971c6 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,8 @@ "roumen/feed": "~2.8", "thujohn/rss": "~1.0", "watson/validating": "0.10.*", - "jenssegers/date": "~2.0" + "jenssegers/date": "~2.0", + "mccool/laravel-auto-presenter": "~2.2@dev" }, "require-dev": { "phpunit/phpunit": "~4.3", diff --git a/composer.lock b/composer.lock index 878c4600..4b5b5188 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "50862b080034db5b187b78c30807c1d5", + "hash": "b561fa017bd12ef775f7765fe28d8839", "packages": [ { "name": "classpreloader/classpreloader", @@ -1458,6 +1458,60 @@ ], "time": "2014-12-10 16:59:07" }, + { + "name": "mccool/laravel-auto-presenter", + "version": "2.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/ShawnMcCool/laravel-auto-presenter.git", + "reference": "79e1eab2528262e325419e9441967bd390c4b667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ShawnMcCool/laravel-auto-presenter/zipball/79e1eab2528262e325419e9441967bd390c4b667", + "reference": "79e1eab2528262e325419e9441967bd390c4b667", + "shasum": "" + }, + "require": { + "illuminate/events": "4.2.*", + "illuminate/pagination": "4.2.*", + "illuminate/support": "4.2.*", + "illuminate/view": "4.2.*", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.8", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "McCool\\LaravelAutoPresenter": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@mineuk.com" + }, + { + "name": "Shawn McCool", + "email": "shawn@heybigname.com" + } + ], + "description": "A system for auto-decorating models with presenter objects.", + "keywords": [ + "eloquent", + "laravel", + "lpm", + "presenter" + ], + "time": "2015-01-07 21:55:43" + }, { "name": "monolog/monolog", "version": "1.12.0", @@ -3792,7 +3846,9 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "mccool/laravel-auto-presenter": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/gulpfile.js b/gulpfile.js index 2c7b610f..833c3245 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -27,6 +27,8 @@ gulp.task('default', function() { 'bower_components/lodash/dist/lodash.js', 'bower_components/messenger/build/js/messenger.js', 'bower_components/Sortable/Sortable.js', + 'bower_components/moment/min/moment-with-locales.js', + 'bower_components/livestampjs/livestamp.js', 'bower_components/jquery-minicolors/jquery.minicolors.js', 'bower_components/jquery-serialize-object/jquery.serialize-object.js', 'js/app.js', diff --git a/src/Models/Incident.php b/src/Models/Incident.php index 4838d2b7..213e5144 100644 --- a/src/Models/Incident.php +++ b/src/Models/Incident.php @@ -7,6 +7,7 @@ use Dingo\Api\Transformer\TransformableInterface; use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletingTrait; +use McCool\LaravelAutoPresenter\PresenterInterface; use Watson\Validating\ValidatingTrait; /** @@ -21,7 +22,7 @@ use Watson\Validating\ValidatingTrait; * @property \Carbon\Carbon $updated_at * @property \Carbon\Carbon $deleted_at */ -class Incident extends Model implements TransformableInterface +class Incident extends Model implements TransformableInterface, PresenterInterface { use SoftDeletingTrait, ValidatingTrait; @@ -52,6 +53,16 @@ class Incident extends Model implements TransformableInterface */ protected $appends = ['humanStatus']; + /** + * Get presenter class. + * + * @return string + */ + public function getPresenter() + { + return 'CachetHQ\Cachet\Presenters\IncidentPresenter'; + } + /** * An incident belongs to a component. * diff --git a/src/Presenters/IncidentPresenter.php b/src/Presenters/IncidentPresenter.php new file mode 100644 index 00000000..62b2601f --- /dev/null +++ b/src/Presenters/IncidentPresenter.php @@ -0,0 +1,50 @@ +resource = $incident; + } + + /** + * Present diff for humans date time. + * + * @return string + */ + public function created_at_diff() + { + return (new Date($this->resource->created_at))->diffForHumans(); + } + + /** + * Present formated date time. + * + * @return string + */ + public function created_at_formated() + { + return ucfirst((new Date($this->resource->created_at))->format('l j F Y H:i:s')); + } + + /** + * Present formated date time. + * + * @return string + */ + public function created_at_iso() + { + return $this->resource->created_at->toISO8601String(); + } +}