From 2d1e801b1bb9214ff5093ab6ec3639360dd1ffd5 Mon Sep 17 00:00:00 2001 From: Alexander Yakovlev Date: Sun, 26 Nov 2017 20:02:41 +0700 Subject: [PATCH] packery with drag & drop --- js/main.coffee | 31 ++++++++++++++----------------- main.css | 25 +++++++++++++++++++++++++ masonry.php | 9 +++++++-- package.json | 1 - 4 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 main.css diff --git a/js/main.coffee b/js/main.coffee index 9e5adb3..4a6bdf6 100644 --- a/js/main.coffee +++ b/js/main.coffee @@ -1,5 +1,3 @@ -Packery = require('packery') - jQuery(document).ready(() -> jQuery("#masonryslide-container").hide() ) @@ -10,37 +8,36 @@ jQuery(document).on('click', '#pack', () -> jQuery("#masonryslide").width(container.width() - 100) jQuery("#masonryslide").height(container.height() - 300) - promise = Promise.resolve() slide = document.getElementById('masonryslide') - grid = new Packery(slide, { - itemSelector: "img" - percentPosition: true - columnWidth: 100 + slide.innerHTML = "" + grid = jQuery(slide).packery({ + itemSelector: ".grid-item" + columnWidth: 400 }) for file in document.getElementById('masonryslide-files').files img = document.createElement("img") img.classList.add("obj") img.file = file - jQuery("#masonryslide")[0].append(img) fr = new FileReader() fr.onload = ((aImg) -> (e) -> aImg.src = e.target.result - if jQuery(aImg).width() > (jQuery("#masonryslide").width() / 3) - jQuery(aImg).width("33%") - grid.layout() - resolve() + d = jQuery("
") + d.append(aImg) + grid.append(d) + grid.packery('layout') + jQuery(document).trigger("masonryloadedImg") )(img) fr.readAsDataURL(file) - promise.then(() -> - items = jQuery(slide).find('img').draggable() - grid.bindUIDraggableEvents(items) + jQuery(document).on("masonryloadedImg", () -> + items = jQuery('#masonryslide .grid-item') + if items.length == document.getElementById('masonryslide-files').files.length + items.draggable() + jQuery("#masonryslide").packery('bindUIDraggableEvents', items).packery('layout') ) ) jQuery("#pngdownload").click(() -> - canvas = document.getElementById("masonryslide") - document.location.href = canvas.toDataUrl("image/png") ) diff --git a/main.css b/main.css new file mode 100644 index 0000000..17fb288 --- /dev/null +++ b/main.css @@ -0,0 +1,25 @@ +/* jQuery UI Draggable adds ui-draggable-dragging */ +.grid-item.ui-draggable-dragging, +/* Packery adds class while transitioning to drop position */ +.grid-item.is-positioning-post-drag { + background: #C90; + z-index: 2; /* keep dragged item on top */ +} +.packery-drop-placeholder { + outline: 3px dashed #444; + outline-offset: -6px; + /* transition position changing */ + -webkit-transition: -webkit-transform 0.2s; + transition: transform 0.2s; +} +.grid-item { + float: left; + max-width: 390px; + margin: 5px; +} +.grid-item img { + max-width: 100%; +} +.grid-item:hover { + cursor: move; +} diff --git a/masonry.php b/masonry.php index 6097769..8149604 100644 --- a/masonry.php +++ b/masonry.php @@ -33,10 +33,15 @@ function masonryslides_js($hook) { 'masonryslides_libcss', plugins_url('main.css', __FILE__) ); + wp_enqueue_script( + 'packery', + 'https://cdnjs.cloudflare.com/ajax/libs/packery/2.1.1/packery.pkgd.min.js', + ['jquery'] + ); wp_enqueue_script( 'masonryslides_js', plugins_url('dist/main.js', __FILE__), - ['jquery', 'jquery-ui-core', 'jquery-ui-draggable'] + ['jquery', 'jquery-ui-core', 'jquery-ui-draggable', 'packery'] ); } @@ -49,7 +54,7 @@ function masonryslides_newslide() {

-

+

diff --git a/package.json b/package.json index 5a9bc67..dd5929c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,6 @@ "dependencies": { "coffee-loader": "^0.9.0", "coffeescript": "^2.0.2", - "packery": "^2.1.1", "uglifyjs-webpack-plugin": "^1.1.1", "webpack": "^3.8.1" }