Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save amiryousefi/328e06f51bd61c59afe6fb0e8ea58510 to your computer and use it in GitHub Desktop.
Save amiryousefi/328e06f51bd61c59afe6fb0e8ea58510 to your computer and use it in GitHub Desktop.
Buffer Pablo like social media graphic designer
<main>
<div class="container">
<div class="row">
<div class="col-4">
<div class="row">
<div class="col-12">
<div class="input-group mb-3">
<input type="text" class="form-control" id="search-text" placeholder="Find free images right from Unsplash">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="image-search">Search!</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="card d-none" id="card-image-clone">
<img class="card-img" data-full="" src="">
</div>
<div class="col mb-3" id="image-container">
<div class="card">
<img class="card-img" data-full="https://images.unsplash.com/photo-1536431311719-398b6704d4cc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ" src="https://images.unsplash.com/photo-1536431311719-398b6704d4cc?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ">
</div>
<div class="card">
<img class="card-img" data-full="https://images.unsplash.com/photo-1527061011665-3652c757a4d4?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ" src="https://images.unsplash.com/photo-1527061011665-3652c757a4d4?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ">
</div>
<div class="card">
<img class="card-img" data-full="https://images.unsplash.com/photo-1475724017904-b712052c192a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ" src="https://images.unsplash.com/photo-1475724017904-b712052c192a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ">
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="btn-group btn-group-sm mb-3 filters">
<button type="button" class="btn" disabled>Filters </button>
<button type="button" class="btn btn-light" data-filter="none">None</button>
<button type="button" class="btn btn-secondary" data-filter="light">Light</button>
<button type="button" class="btn btn-dark" data-filter="heavy">Heavy</button>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="btn-group btn-group-sm mb-3 colors">
<button type="button" class="btn" disabled>Colors </button>
<button type="button" class="btn btn-light" data-color="dee2e6"><span style="background:#dee2e6"></span></button>
<button type="button" class="btn btn-light" data-color="6c757d"><span style="background:#6c757d"></span></button>
<button type="button" class="btn btn-light" data-color="1e1f26"><span style="background:#1e1f26"></span></button>
<button type="button" class="btn btn-light" data-color="dc3545"><span style="background:#dc3545"></span></button>
<button type="button" class="btn btn-light" data-color="007bff"><span style="background:#007bff"></span></button>
<button type="button" class="btn btn-light" data-color="47cf73"><span style="background:#47cf73"></span></button>
<button type="button" class="btn btn-light" data-color="ffdd40"><span style="background:#ffdd40"></span></button>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="btn-group btn-group-sm mb-3 styles">
<button type="button" class="btn btn-light" data-style="regular"><span style="">R</span></button>
<button type="button" class="btn btn-light" data-style="bold"><i class="fas fa-bold"></i></button>
<button type="button" class="btn btn-light" data-style="italic"><i class="fas fa-italic"></i></button>
</div>
<div class="btn-group btn-group-sm mb-3 sizes">
<button type="button" class="btn btn-light" data-size="16"><span style="font-size:10px;">A</span></button>
<button type="button" class="btn btn-light" data-size="18"><span style="font-size:12px;">A</span></button>
<button type="button" class="btn btn-light" data-size="24"><span style="font-size:14px;">A</span></button>
</div>
<div class="btn-group btn-group-sm mb-3 aligns">
<button type="button" class="btn btn-light" data-align="left"><i class="fas fa-align-left"></i></button>
<button type="button" class="btn btn-light" data-align="center"><i class="fas fa-align-center"></i></button>
<button type="button" class="btn btn-light" data-align="right"><i class="fas fa-align-right"></i></button>
</div>
</div>
</div>
</div>
<div class="col-8">
<div id='canvas-container'>
<div class="filter-light" id="canvas-filter"></div>
<div id="float-editor" onmousedown='mydragg.startMoving(this,"container",event);' onmouseup='mydragg.stopMoving("container");'>
<textarea>A Good Quote(click to edit)</textarea>
</div>
</div>
</div>
</div>
</div>
</main>
<footer>
</footer>
var mydragg = (function() {
return {
move: function(divid, xpos, ypos) {
$("#float-editor").css("left", xpos + "px");
$("#float-editor").css("top", ypos + "px");
},
startMoving: function(divid, container, evt) {
evt = evt || window.event;
var fe_pos = $("#float-editor").position();
var posX = evt.clientX, //mouse position on the X axis
posY = evt.clientY, //mouse position on the Y axis
divTop = fe_pos.top,
divLeft = fe_pos.left,
eWi = parseInt($("#float-editor").width()),
eHe = parseInt($("#float-editor").height()),
cWi = parseInt($("#canvas-container").width()),
cHe = parseInt($("#canvas-container").height());
$("#canvas-container").css("cursor", "move"); //styles mouse pointer
var diffX = posX - divLeft, //saves the delta between the mouse pointer Xposition and the Top of the div
diffY = posY - divTop; //same but for the Y axis
document.onmousemove = function(evt) {
evt = evt || window.event;
var posX = evt.clientX,
posY = evt.clientY,
aX = posX - diffX, //new position, X
aY = posY - diffY; //new position, Y
if (aX < 0) aX = 0;
if (aY < 0) aY = 0; //left border
if (aX + eWi > cWi) aX = cWi - eWi; //right border
if (aY + eHe > cHe) aY = cHe - eHe; //top border
mydragg.move(divid, aX, aY);
};
//
},
stopMoving: function(container) {
var a = document.createElement("script"); //not sure for what this is used
$("#canvas-container").css("cursor", "default"); //resets the mouse pointer to default
document.onmousemove = function() {}; //when mouse click is lifted, the event listener for mouse move becomes an empty function
}
};
})();
function unsplash(query) {
$.get(
"https://api.unsplash.com/search/photos?client_id=2ade7f9d83816b22a6953cb28d5e83bd3cfc0b264b693bde6b08838febe0b77d&page=1&query=" +
query,
function(data) {
var result = data["results"];
$("#image-container")
.find(".card")
.remove();
$.each(result, function(index, item) {
var smallUrl = item["urls"]["small"];
var fullUrl = item["urls"]["regular"];
var newImageCard = $("#card-image-clone").clone();
newImageCard.find("img").attr("src", smallUrl);
newImageCard.find("img").attr("data-full", fullUrl);
newImageCard.removeAttr("id").removeClass("d-none");
$("#image-container").append(newImageCard);
});
}
);
}
$("#image-container").on("click", ".card", function() {
var img = $(this).find("img");
var imgSrc = img.attr("data-full");
$("#canvas-container").css("background-image", "url(" + imgSrc + ")");
});
$("#save-result").on("click", function() {
var textEditor = $("#float-editor");
var text = textEditor.find("textarea").text();
console.log({ text: text, position: textEditor.position() });
});
$("#image-search").on("click", function() {
var query = $("#search-text").val();
if (!query) {
alert("Pleaase enter something to search");
} else {
unsplash(query);
}
});
$(".filters button").on("click", function() {
var filter = $(this).attr("data-filter");
if (filter == "none") {
$("#canvas-filter").removeAttr("class");
} else if (filter == "light") {
$("#canvas-filter")
.removeAttr("class")
.addClass("filter-light");
} else if (filter == "heavy") {
$("#canvas-filter")
.removeAttr("class")
.addClass("filter-heavy");
}
});
$(".colors button").on("click", function() {
var color = $(this).attr("data-color");
$("#float-editor")
.find("textarea")
.css("color", "#" + color);
});
$(".styles button").on("click", function() {
var style = $(this).attr("data-style");
if (style == "regular") {
$("#float-editor")
.find("textarea")
.removeAttr("class");
} else if (style == "bold") {
$("#float-editor")
.find("textarea")
.removeAttr("class")
.addClass("text-bold");
} else if (style == "italic") {
$("#float-editor")
.find("textarea")
.removeAttr("class")
.addClass("text-italic");
}
});
$(".sizes button").on("click", function() {
var size = $(this).attr("data-size");
$("#float-editor")
.find("textarea")
.css("font-size", size + "px");
});
$(".aligns button").on("click", function() {
var align = $(this).attr("data-align");
$("#float-editor")
.find("textarea")
.css("text-align", align);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
main{
margin-top:40px;
}
#image-container {
height: 400px;
overflow-y: scroll;
}
#image-container::-webkit-scrollbar {
width: 5px;
}
/* Track */
#image-container::-webkit-scrollbar-track {
background: #f1f1f1;
}
/* Handle */
#image-container::-webkit-scrollbar-thumb {
background: #888;
}
/* Handle on hover */
#image-container::-webkit-scrollbar-thumb:hover {
background: #555;
}
#canvas-container {
position: relative;
background-image: url("https://images.unsplash.com/photo-1536431311719-398b6704d4cc?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ");
height: 612px;
width: 612px;
background-size: cover;
background-repeat: no-repeat;
margin:0 auto;
}
#editor-container {
position: absolute;
}
#float-editor {
width: 400px;
height: 100px;
top: 150px;
left: 200px;
position: relative;
-webkit-user-select: none;
-moz-user-select: none;
-o-user-select: none;
-ms-user-select: none;
-khtml-user-select: none;
user-select: none;
}
#float-editor textarea {
box-sizing: border-box;
width: 100%;
height: 100%;
border: none;
color: #fff;
padding: 3px;
margin: 0;
resize: none;
background: transparent;
}
#canvas-filter {
position: absolute;
width: 100%;
height: 100%;
}
.filter-heavy {
background: rgba(0, 0, 0, 0.5);
}
.filter-light {
background: rgba(0, 0, 0, 0.2);
}
.colors button span {
width: 15px;
height: 15px;
display: block;
border-radius: 3px;
}
.text-bold {
font-weight: bold;
}
.text-italic {
font-style: italic;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/all.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment