first commit
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace Jorenvh\Share\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Jorenvh\Share\Share;
|
||||
|
||||
class ShareServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap the application services.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang/', 'laravel-share');
|
||||
|
||||
$this->publishes([
|
||||
__DIR__ . '/../../config/laravel-share.php' => config_path('laravel-share.php'),
|
||||
], 'config');
|
||||
|
||||
$this->publishes([
|
||||
__DIR__ . '/../../public/js/share.js' => public_path('js/share.js'),
|
||||
], 'assets');
|
||||
|
||||
$this->publishes([
|
||||
__DIR__ . '/../../resources/lang/' => resource_path('lang/vendor/laravel-share'),
|
||||
], 'translations');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the application services.
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->app->bind(Share::class, function () {
|
||||
return new Share();
|
||||
});
|
||||
|
||||
$this->mergeConfigFrom(__DIR__ . '/../../config/laravel-share.php', 'laravel-share');
|
||||
}
|
||||
}
|
||||
+284
@@ -0,0 +1,284 @@
|
||||
<?php
|
||||
|
||||
namespace Jorenvh\Share;
|
||||
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class Share
|
||||
{
|
||||
/**
|
||||
* The url of the page to share
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* The generated urls
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $generatedUrls = [];
|
||||
|
||||
/**
|
||||
* Optional text for Twitter
|
||||
* and Linkedin title
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $title;
|
||||
|
||||
/**
|
||||
* Extra options for the share links
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $options = [];
|
||||
|
||||
/**
|
||||
* Html to prefix before the share links
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $prefix = '<div id="social-links"><ul>';
|
||||
|
||||
/**
|
||||
* Html to append after the share links
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $suffix = '</ul></div>';
|
||||
|
||||
/**
|
||||
* The generated html
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $html = '';
|
||||
|
||||
/**
|
||||
* Return a string with html at the end
|
||||
* of the chain.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
$this->html = $this->prefix . $this->html;
|
||||
$this->html .= $this->suffix;
|
||||
|
||||
return $this->html;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
* @param string|null $title
|
||||
* @param array $options
|
||||
* @param string|null $prefix
|
||||
* @param string|null $suffix
|
||||
* @return $this
|
||||
*/
|
||||
public function page($url, $title = null, $options = [], $prefix = null, $suffix = null)
|
||||
{
|
||||
$this->url = $url;
|
||||
$this->title = $title;
|
||||
$this->options = $options;
|
||||
$this->html = '';
|
||||
|
||||
$this->setPrefixAndSuffix($prefix, $suffix);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $title
|
||||
* @param array $options
|
||||
* @param string|null $prefix
|
||||
* @param string|null $suffix
|
||||
* @return $this
|
||||
*/
|
||||
public function currentPage($title = null, $options = [], $prefix = null, $suffix = null)
|
||||
{
|
||||
$url = request()->getUri();
|
||||
|
||||
return $this->page($url, $title, $options, $prefix, $suffix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Facebook share link
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function facebook()
|
||||
{
|
||||
$url = config('laravel-share.services.facebook.uri') . $this->url;
|
||||
|
||||
$this->buildLink('facebook', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Twitter share link
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function twitter()
|
||||
{
|
||||
if (is_null($this->title)) {
|
||||
$this->title = config('laravel-share.services.twitter.text');
|
||||
}
|
||||
|
||||
$base = config('laravel-share.services.twitter.uri');
|
||||
$url = $base . '?text=' . urlencode($this->title) . '&url=' . $this->url;
|
||||
|
||||
$this->buildLink('twitter', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reddit share link
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function reddit()
|
||||
{
|
||||
if (is_null($this->title)) {
|
||||
$this->title = config('laravel-share.services.reddit.text');
|
||||
}
|
||||
|
||||
$base = config('laravel-share.services.reddit.uri');
|
||||
$url = $base . '?title=' . urlencode($this->title) . '&url=' . $this->url;
|
||||
|
||||
$this->buildLink('reddit', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Telegram share link
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function telegram()
|
||||
{
|
||||
if (is_null($this->title)) {
|
||||
$this->title = config('laravel-share.services.telegram.text');
|
||||
}
|
||||
|
||||
$base = config('laravel-share.services.telegram.uri');
|
||||
$url = $base . '?url=' . $this->url . '&text=' . urlencode($this->title);
|
||||
|
||||
$this->buildLink('telegram', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whatsapp share link
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function whatsapp()
|
||||
{
|
||||
$url = config('laravel-share.services.whatsapp.uri') . $this->url;
|
||||
|
||||
$this->buildLink('whatsapp', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Linked in share link
|
||||
*
|
||||
* @param string $summary
|
||||
* @return $this
|
||||
*/
|
||||
public function linkedin($summary = '')
|
||||
{
|
||||
$base = config('laravel-share.services.linkedin.uri');
|
||||
$mini = config('laravel-share.services.linkedin.extra.mini');
|
||||
$url = $base . '?mini=' . $mini . '&url=' . $this->url . '&title=' . urlencode($this->title) . '&summary=' . urlencode($summary);
|
||||
|
||||
$this->buildLink('linkedin', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pinterest share link
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function pinterest()
|
||||
{
|
||||
$url = config('laravel-share.services.pinterest.uri') . $this->url;
|
||||
|
||||
$this->buildLink('pinterest', $url);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the raw generated links.
|
||||
*
|
||||
* @return string|array
|
||||
*/
|
||||
public function getRawLinks()
|
||||
{
|
||||
if(count($this->generatedUrls) === 1) {
|
||||
return Arr::first($this->generatedUrls);
|
||||
}
|
||||
|
||||
return $this->generatedUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a single link
|
||||
*
|
||||
* @param string $provider
|
||||
* @param string $url
|
||||
*/
|
||||
protected function buildLink($provider, $url)
|
||||
{
|
||||
$fontAwesomeVersion = config('laravel-share.fontAwesomeVersion', 5);
|
||||
|
||||
$this->rememberRawLink($provider, $url);
|
||||
|
||||
$this->html .= trans("laravel-share::laravel-share-fa$fontAwesomeVersion.$provider", [
|
||||
'url' => $url,
|
||||
'class' => key_exists('class', $this->options) ? $this->options['class'] : '',
|
||||
'id' => key_exists('id', $this->options) ? $this->options['id'] : '',
|
||||
'title' => key_exists('title', $this->options) ? $this->options['title'] : '',
|
||||
'rel' => key_exists('rel', $this->options) ? $this->options['rel'] : '',
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Optionally Set custom prefix and/or suffix
|
||||
*
|
||||
* @param string $prefix
|
||||
* @param string $suffix
|
||||
*/
|
||||
protected function setPrefixAndSuffix($prefix, $suffix)
|
||||
{
|
||||
if (!is_null($prefix)) {
|
||||
$this->prefix = $prefix;
|
||||
}
|
||||
|
||||
if (!is_null($suffix)) {
|
||||
$this->suffix = $suffix;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $provider
|
||||
* @param string $socialNetworkUrl
|
||||
*/
|
||||
protected function rememberRawLink($provider, $socialNetworkUrl)
|
||||
{
|
||||
$this->generatedUrls[$provider] = $socialNetworkUrl;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace Jorenvh\Share;
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
/**
|
||||
* @method page($url, ?string $title = null, array $options = [], ?string $prefix = null, ?string $suffix = null)
|
||||
* @method currentPage($url, ?string $title = null, array $options = [], ?string $prefix = null, ?string $suffix = null)
|
||||
* @method facebook()
|
||||
* @method twitter()
|
||||
* @method reddit()
|
||||
* @method telegram()
|
||||
* @method whatsapp()
|
||||
* @method linkedin(string $summary = '')
|
||||
* @method pinterest()
|
||||
* @method array getRawLinks()
|
||||
*/
|
||||
class ShareFacade extends Facade
|
||||
{
|
||||
/**
|
||||
* Get the registered name of the component.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return Share::class;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user