From 9980ae2e1c53b4fdcdaf42e0c98169766c0a3186 Mon Sep 17 00:00:00 2001 From: Carlos Oliveira Date: Mon, 30 Jan 2017 17:30:13 -0200 Subject: [PATCH] Add external cover images Allows using an image hosted on a different domain as cover image. --- bl-kernel/abstract/content.class.php | 4 ++ bl-kernel/admin/themes/default/init.php | 28 ++++++++++- bl-kernel/js/bludit-cover-image.js | 62 +++++++++++++++++++++++-- bl-languages/en_US.json | 5 +- bl-languages/pt_BR.json | 5 +- 5 files changed, 97 insertions(+), 7 deletions(-) diff --git a/bl-kernel/abstract/content.class.php b/bl-kernel/abstract/content.class.php index c0eaf294..04b56bde 100644 --- a/bl-kernel/abstract/content.class.php +++ b/bl-kernel/abstract/content.class.php @@ -170,6 +170,10 @@ class Content { return false; } + if (preg_match("/^https?:\/\//", $fileName)) { + $absolute=false; + } + if($absolute) { return HTML_PATH_UPLOADS.$fileName; } diff --git a/bl-kernel/admin/themes/default/init.php b/bl-kernel/admin/themes/default/init.php index 3f244a5f..211b3f13 100644 --- a/bl-kernel/admin/themes/default/init.php +++ b/bl-kernel/admin/themes/default/init.php @@ -214,11 +214,37 @@ class HTML { $style = ''; if(!empty($coverImage)) { - $style = 'background-image: url('.HTML_PATH_UPLOADS_THUMBNAILS.$coverImage.')'; + if (preg_match("/^https?:\/\//", $coverImage)) { + $style = 'background-image: url('.$coverImage.')'; + } + else { + $style = 'background-image: url('.HTML_PATH_UPLOADS_THUMBNAILS.$coverImage.')'; + } } $html = ''; $html .= ' +
+
+
+
+ '.$L->g('External Cover Image').' +
+ + +
+ '.$L->g('Cover image').' +
+ +
+
+
+ +
+
+
diff --git a/bl-kernel/js/bludit-cover-image.js b/bl-kernel/js/bludit-cover-image.js index eddee0d3..b7f20d75 100644 --- a/bl-kernel/js/bludit-cover-image.js +++ b/bl-kernel/js/bludit-cover-image.js @@ -4,7 +4,16 @@ var coverImage = new function() { this.set = function(filename) { - var imageSrc = HTML_PATH_UPLOADS_THUMBNAILS + filename; + var externalCoverImage = true; + var imageSrc = ""; + + var expression = /^https?:\/\//gi; + var regex = new RegExp(expression); + if (!filename.match(regex)) { + externalCoverImage = false; + imageSrc += HTML_PATH_UPLOADS_THUMBNAILS; + } + imageSrc += filename; // Cover image background $("#cover-image-thumbnail").attr("style", "background-image: url("+imageSrc+")"); @@ -19,7 +28,9 @@ var coverImage = new function() { $("#cover-image-upload").hide(); // Hide box "There are no images" - $(".empty-images").hide(); + if (!externalCoverImage) { + $(".empty-images").hide(); + } } @@ -43,12 +54,55 @@ var coverImage = new function() { $(document).ready(function() { + var coverImageTypeSelected = false; + var modal = UIkit.modal("#bludit-cover-image-modal"); + $("#bludit-cover-image").on("click", function(e){ + if (coverImageTypeSelected) { + coverImageTypeSelected = !coverImageTypeSelected; + return; + } + if ( modal.isActive() ) { + modal.hide(); + } else { + $("#external-cover-image-url").val(""); + modal.show(); + $("#external-cover-image-url").focus(); + } + e.stopPropagation(); + e.preventDefault(); + }); + // Stores the external cover image url + $("#jsExternalCoverImageSave").on("click", function(e){ + e.stopPropagation(); + e.preventDefault(); + modal.hide(); + if ($("#external-cover-image-url").val().length > 0) { + var expression = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)\/\S+\.(jpg|jpeg|gif|png)/gi; + var regex = new RegExp(expression); + if ($("#external-cover-image-url").val().match(regex)) { + coverImage.set($("#external-cover-image-url").val().toLowerCase()); + } + else { + alert("g('error').'. '.$L->g('Invalid cover image URL')?>."); + } + } + }); + // Proceed with cover image upload + $("#jsCoverImageUpload").on("click", function(e){ + e.stopPropagation(); + e.preventDefault(); + modal.hide(); + coverImageTypeSelected = true; + $("#cover-image-file-select").trigger("click"); + }); + // Click on delete cover image. - $("#cover-image-delete").on("click", function() { + $("#cover-image-delete").on("click", function(e) { // Remove the cover image. coverImage.remove(); - + e.stopPropagation(); + }); var settings = diff --git a/bl-languages/en_US.json b/bl-languages/en_US.json index e92c7774..f1625187 100644 --- a/bl-languages/en_US.json +++ b/bl-languages/en_US.json @@ -249,5 +249,8 @@ "add-a-new-page": "Add a new page", "add-a-new-post": "Add a new post", - "save-as-draft": "Save as draft" + "save-as-draft": "Save as draft", + "invalid-cover-image-url": "Invalid cover image URL", + "external-cover-image": "External Cover Image", + "cover-image-url": "Cover Image URL" } \ No newline at end of file diff --git a/bl-languages/pt_BR.json b/bl-languages/pt_BR.json index e38a01f0..8e1ca45a 100644 --- a/bl-languages/pt_BR.json +++ b/bl-languages/pt_BR.json @@ -234,5 +234,8 @@ "сurrent-status" : "Estado atual", "disable-the-user" : "Desabilitar usuário", "add-a-new-page": "Criar nova página", - "add-a-new-post": "Criar nova entrada" + "add-a-new-post": "Criar nova entrada", + "invalid-cover-image-url": "URL inválida para a imagem de capa", + "external-cover-image": "Imagem de capa externa", + "cover-image-url": "URL da imagem de capa" } \ No newline at end of file