Home

Awesome

Link Preview

How this works

The algorithm keeps tracking what you are typing in the status field and through regular expressions identifies a url. Thereafter, the text is in the field is passed to PHP that does all the work to analyze all the source code of the url found. If you enter more than one url, it will consider that the first one is the more relevant and it will create a preview. Once the source code of the url is obtained, regular expressions begin to seek out and capture relevant information on it. This information is basically the title page, the images contained therein, and a brief description of the content covered in the page.

<b>Right</b><b>Left</b>
PreviewLeft
<b>Bottom</b><b>Top</b>
BottomTop
<b>Gallery<b><b>Video</b>
Preview GalleryPreview Video

=======

HTTP Server

How to add it to your project

<b>1 • Stylesheets</b>

	<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
    	
	<link rel="stylesheet" type="text/css" href="src/link-preview/css/link-preview.css" />

<b>2 • Scripts</b>

	<script src="https://code.jquery.com/jquery-2.1.4.min.js" type="text/javascript"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
	<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js" type="text/javascript"></script>
        
	<script src="src/link-preview/js/link-preview.js" type="text/javascript"></script>
	
    <!-- Include this script below if you want to retrieve the posts inserted to database -->
    <script src="src/link-preview/js/link-preview-database.js" type="text/javascript"></script>

<b>3 • Configuration</b>

Add the link preview module as a dependency to your application module:

	var app = angular.module('App', ['linkpreview'])

Add the directive inside your controller html:

	<link-preview placeholder="What's in your mind?" />

Attributes

attvardefault valuepossible values
typetyperightright, left, bottom, top (text position)
amountimageAmount-1any integer
btextbuttonTextPostany string
bclassbuttonClassprimarydefault, primary, success, info, warning, danger, link
cbtextcancelButtonTextCancelany string
cbclasscancelButtonClassdangerdefault, primary, success, info, warning, danger, link
ltextloadingTextLoadingany string
limageloadingImageempty.pngany image url
placeholderplaceholderan empty stringany string
ttextthumbnailTextChoose a thumbnailany string
nttextnoThumbnailTextNo thumbnailany string
tpagethumbnailPagination%N of %Nany string, %N is the number reference of pagination
dtitledefaultTitleEnter a titleany string
ddescriptiondefaultDescriptionEnter a descriptionany string
	<link-preview 
			type="" 
			ttext="" 
			tpage="" 
			placeholder="" 
			amount="" 
			limage="" 
			ltext="" 
			btext="" 
			bclass=""
			ctext="" 
			cclass=""
			dtitle="" 
			ddescription="" />

<b>4 • Database</b>

To custom your database configurations, you need to change the following values in Database.php

		$host = "localhost";
        $user = "";
        $password = "";
        $database = "linkpreview";

Additionally, the way I used to retrieve the data was creating a controller link-preview-database.js which you can include the file somehow in your project or you can its content to yours.

	app.controller('MyControllerDatabase', ['$scope', '$http', function ($scope, $http) {
    
        $scope.databasePosts = [];
            $scope.retrieveFromDatabase = function () {
        
                // You must insert in your page a div with the posts retrieved from database. Just like the posts div
                // on template html files
        
                var url = 'src/link-preview/php/retrieve.php';
                $http({
                    url: url,
                    method: "GET",
                    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
                }).success(function (data, status, headers, config) {
        
                    for (var i = 0; i < data.length; i++) {
                        data[i].video = data[i].videoIframe !== "";
                        data[i].showIframe = false;
                        data[i].textHTML = $sce.trustAsHtml(data[i].text);
                        data[i].descriptionHTML = $sce.trustAsHtml(data[i].description);
                        data[i].videoIframeHTML = $sce.trustAsHtml(data[i].videoIframe);
                        console.log(data[i]);
                    }
        
                    $scope.databasePosts = data;
        
                });
        
            };
        
            $scope.deletePosted = function (post, $index) {
                $scope.posts.splice($index, 1);
            };
        
            $scope.imageAction = function (post) {
        
                if (post.video == false) {
                    window.open(post.pageUrl, '_blank');
                } else {
                    post.showIframe = true;
                }
        
            };
        
            $scope.hidePlay = function (post) {
                return post.video == false || post.showIframe == true;
            };
        
            $scope.layoutWithoutImage = function (post) {
                return post.image == '' || post.showIframe == true;
            };
        
            $scope.layoutWithImage = function (post) {
                return post.image != '' || (post.video == true && post.showIframe == false);
            };

    
    }]);

Also, check the file database-template.php to see an example of how to display the data retrieved from database.

Make sure your columns are the same as those ones in linkpreview.sql or customize them.

Result Format

	{  
	   "title":"title",
	   "url":"original url",
	   "pageUrl":"page url",
	   "canonicalUrl":"canonical url",
	   "description":"description",
	   "images": ["array of images"],
	   "image": "first image of images",
	   "video":"true|false",
	   "videoIframe":"video iframe, if it is a video"
	}

Important

Make sure the library <b>php5-curl</b> is installed and enabled on the server, either locally or remotely.

$ sudo apt-get install php5-curl
$ sudo service apache2 restart
$ sudo port install php5-curl 
$ sudo apachectl restart

Also where there is <b>'src/link-preview/'</b> as part of a path of a <b>Javascript, CSS or image</b> file, you must change to the path on your server.

Information and Contact

Developed by @LeonardoCardoso.

Contact me either by Twitter @leocardz or emailing me to contact@leocardz.com.

Related Projects

License

MIT