diff options
| author | julie lala <jules@okfoc.us> | 2015-04-27 17:08:25 -0400 |
|---|---|---|
| committer | julie lala <jules@okfoc.us> | 2015-04-27 17:08:25 -0400 |
| commit | 1451d6a1262e394dd8505ac6523d0eaea5dfd57c (patch) | |
| tree | 2ab626558332fa5ed0ee6d3faa5ff76c53eba070 | |
| parent | c78f208f3e6bd1199f0d6c88d2431609b58bd303 (diff) | |
| parent | 934a8ac8afdaa2afc2061542abbf3f4864a476b1 (diff) | |
Merge branch 'twohustlers' of github.com:okfocus/okcms into twohustlers
| -rw-r--r-- | Gruntfile.js | 2 | ||||
| -rw-r--r-- | app/node_modules/okadminview/index.js | 1 | ||||
| -rw-r--r-- | site/db.json | 10 | ||||
| -rw-r--r-- | site/index.js | 3 | ||||
| -rw-r--r-- | site/public/assets/javascripts/_env.js | 8 | ||||
| -rw-r--r-- | site/public/assets/style.css | 29 | ||||
| -rw-r--r-- | site/templates/page.liquid | 4 | ||||
| -rw-r--r-- | site/templates/project.liquid | 16 | ||||
| -rw-r--r-- | themes/okadmin/public/css/main.css | 17 | ||||
| -rw-r--r-- | themes/okadmin/public/js/app.js | 58 | ||||
| -rw-r--r-- | themes/okadmin/public/js/upload.js | 15 | ||||
| -rw-r--r-- | themes/okadmin/templates/partials/inputs.liquid | 72 |
12 files changed, 193 insertions, 42 deletions
diff --git a/Gruntfile.js b/Gruntfile.js index 73fb8f7..4a522a6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -88,5 +88,5 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-dentist'); // Default task(s). - grunt.registerTask('default', ['dentist', 'concat', 'uglify', 'copy', 'clean']); +// grunt.registerTask('default', ['dentist', 'concat', 'uglify', 'copy', 'clean']); }; diff --git a/app/node_modules/okadminview/index.js b/app/node_modules/okadminview/index.js index 82f364d..2a0fcd5 100644 --- a/app/node_modules/okadminview/index.js +++ b/app/node_modules/okadminview/index.js @@ -157,6 +157,7 @@ function OKAdminView(options) { resourceMissingHandler(req, res)() } else { view.renderResource(req, res, assign(data, { + JSON: JSON, success: req.flash('success'), errors: req.flash('errors') })); diff --git a/site/db.json b/site/db.json index 1ada83f..591706f 100644 --- a/site/db.json +++ b/site/db.json @@ -16,7 +16,13 @@ "title": "", "thumb": "" }, - "images": [ + "media": [ + { + "type": "vimeo", + "token": "112498725", + "title": "FW14-2H-VIDEO-V4 2", + "thumb": "http://i.vimeocdn.com/video/497493142_640.jpg" + }, { "uri": "https://ltho.s3.amazonaws.com/twohustlers%2Fe22fd077-ca52-42a1-ab9c-e0508bf4408e.jpg", "caption": "" @@ -68,7 +74,7 @@ "title": "", "thumb": "" }, - "images": [ + "media": [ { "uri": "https://ltho.s3.amazonaws.com/twohustlers%2F38ea6ad0-f689-491f-857a-12d4fa0d4748.jpg", "caption": "" diff --git a/site/index.js b/site/index.js index 8bb4b4d..3434742 100644 --- a/site/index.js +++ b/site/index.js @@ -5,8 +5,7 @@ var projectSchema = { title: {type: 'string'}, menu: {type: 'string'}, description: {type: 'text'}, - video: {type: 'video'}, - images: {type: 'captioned-image-list'}, + media: {type: 'media-list'}, thumbnail: {type: 'image'}, } diff --git a/site/public/assets/javascripts/_env.js b/site/public/assets/javascripts/_env.js index 8c1270f..aae60b9 100644 --- a/site/public/assets/javascripts/_env.js +++ b/site/public/assets/javascripts/_env.js @@ -446,16 +446,14 @@ function build_gallery () { // load_video($el) } else { - next() + gallery.next() } }) - // $next.on("click", next) - function next(){ - gallery.next() - } gallery.loader.on("progress", function(imagesLoaded, loadingImage){ $(loadingImage.img).addClass('loaded') }) + $(".nextbutton").click(function(){ gallery.next() }) + $(".prevbutton").click(function(){ gallery.previous() }) } function resize_gallery () { if (! gallery) return; diff --git a/site/public/assets/style.css b/site/public/assets/style.css index f018d8d..8c7594d 100644 --- a/site/public/assets/style.css +++ b/site/public/assets/style.css @@ -405,7 +405,7 @@ nav .sub.active a { height:auto; position:relative; width:100%; - max-height:40px; + max-height:50px; padding: 3px 0 5px 20px; opacity:1; -webkit-transform:translateY(0)scale(1)skew(0deg); @@ -444,10 +444,35 @@ nav .sub.active a { .postname { border-bottom: 1px solid #999; padding: 20px 0px 0.6em 2px; - margin-bottom: 1em; + margin-bottom: 0.7em; font-size: 1em; + text-transform: uppercase; +} + + +.galnav { + display: inline-block; + width: 100%; + float: left; + clear: both; } +.galnav span{ + width: 50%; + background: #999; + color: white; + padding: 2px; + font-size: 11px; + transition:0.2s background; +} +.galnav .nextbutton{ + text-align: right; + background: #888; + cursor:pointer; +} +.galnav span:hover { + background:black; +} .credit { margin: 4em 0px 0px 0px; diff --git a/site/templates/page.liquid b/site/templates/page.liquid index 63f71f2..5c3cabe 100644 --- a/site/templates/page.liquid +++ b/site/templates/page.liquid @@ -2,6 +2,10 @@ <span> {% if page.image %} <span class="postname">{{page.title}}</span> + <div class="galnav"> + <span class="prevbutton">PREVIOUS ASSET</span> + <span class="nextbutton">NEXT ASSET</span> + </div> <img class="mainimg" src="{{page.image}}"> <div class="content"> {{page.body | newline_to_br}} diff --git a/site/templates/project.liquid b/site/templates/project.liquid index b54722d..0dc828c 100644 --- a/site/templates/project.liquid +++ b/site/templates/project.liquid @@ -1,13 +1,17 @@ <div class="entry"> <span> <span class="postname">{{project.title}}</span> - + <div class="galnav"> + <span class="prevbutton">PREVIOUS ASSET</span> + <span class="nextbutton">NEXT ASSET</span> + </div> <div class="gallery" id="okgallery"> - {% if project.video.token %} - <div class="cell video" style="background-image:url({{ project.video.thumb }})" data-video="https://player.vimeo.com/video/{{ project.video.token }}" data-caption="{{ project.video.title }}"></div> - {% endif %} - {% for image in project.images %} - <div class="cell" data-caption="{{ image.caption }}"><img src="{{ image.uri }}"></div> + {% for media in project.media %} + {% if media.token %} + <div class="cell video" style="background-image:url({{ media.thumb }})" data-video="https://player.vimeo.com/video/{{ media.token }}" data-caption="{{ media.title }}"></div> + {% else %} + <div class="cell" data-caption="{{ media.caption }}"><img src="{{ media.uri }}"></div> + {% endif %} {% endfor %} </div> <div class="caption"></div> diff --git a/themes/okadmin/public/css/main.css b/themes/okadmin/public/css/main.css index 747ec34..5dbd910 100644 --- a/themes/okadmin/public/css/main.css +++ b/themes/okadmin/public/css/main.css @@ -283,11 +283,11 @@ button, input[type=submit] { list-style-type: none; display: block; clear: both; - height: 10em; + height: 7em; } .main.resource form img { width: 10em; - max-height: 10em; + max-height: 6em; border: 0; } .main.resource form .images img { @@ -296,7 +296,10 @@ button, input[type=submit] { } .main.resource form textarea.caption { width: 15em; - height: 9em; + height: 6em; +} +.main.resource form .video-element input[type=text] { + width: 15em; } .add-image-button { background: #ddd; @@ -324,13 +327,15 @@ button, input[type=submit] { margin: 0; padding: 0; cursor: pointer; } -.image-element:hover .remove-image { +.video-element:hover .remove, +.image-element:hover .remove { display: block; } -.image-element .remove-image:hover { +.video-element .remove:hover, +.image-element .remove:hover { color: red; } -.remove-image { +.remove { display: none; } diff --git a/themes/okadmin/public/js/app.js b/themes/okadmin/public/js/app.js index e981223..1eb81dc 100644 --- a/themes/okadmin/public/js/app.js +++ b/themes/okadmin/public/js/app.js @@ -2,23 +2,56 @@ var OKAdmin = function(){ // initialize our multi-image uploader with an element and a template $(".group.image-list").each(function(){ + var parent = this var uploader = new OKUpload () uploader.bind( this ) uploader.add = function(url){ - var imageTemplate = $("#captioned-image-template").html() + var imageTemplate = $(".image-template", parent).html() var $el = $(imageTemplate) $el.find(".uri").val(url) $el.find("img").attr("src", url) - $(".captioned-image-list ol").append($el) + $("ol", parent).prepend($el) } }) // delete image from gallery - $(document).on("mousedown", ".image-list .remove-image", function(){ + $(document).on("mousedown", ".image-list .remove", function(){ if (confirm("Remove this image?")) { $(this).parent().remove() } }) + // initialize our multimedia uploader with an element and a template + $(".group.media-list").each(function(){ + var parent = this + var uploader = new OKUpload () + uploader.bind( this ) + uploader.add = function(url){ + var imageTemplate = $(".image-template", parent).html() + var $el = $(imageTemplate) + $el.find(".uri").val(url) + $el.find("img").attr("src", url) + $("ol", parent).prepend($el) + } + uploader.addVideo = function(media){ + console.log(media) + var videoTemplate = $(".video-template", parent).html() + var $el = $(videoTemplate) + $el.addClass("loaded") + $el.find(".video-type").val( media.type ) + $el.find(".video-token").val( media.token ) + $el.find(".video-title").val( media.title ) + $el.find(".video-thumb").val( media.thumbnail ) + $el.find("img").attr("src", media.thumbnail ) + $("ol", parent).prepend($el) + } + }) + // delete image from gallery + $(document).on("mousedown", ".media-list .remove", function(){ + if (confirm("Remove this media?")) { + $(this).parent().remove() + } + }) + // initialize our single image uploader with existing DOM $(".group.image").each(function(){ var $el = $(this) @@ -35,7 +68,7 @@ var OKAdmin = function(){ } }) // delete image from single image entry - $(document).on("mousedown", ".image .remove-image", function(){ + $(document).on("mousedown", ".image .remove", function(){ if (confirm("Remove this image?")) { var $el = $(this).closest(".image") $el.removeClass('loaded') @@ -46,8 +79,8 @@ var OKAdmin = function(){ }) // make the region sortable with drag-and-drop - $(".captioned-image-list ol").sortable() - $(".captioned-image-list ol").disableSelection() + $(".media-list ol, .image-list ol").sortable() + $(".media-list ol, .image-list ol").disableSelection() // populate a video field with info from our url parser var last_url @@ -94,14 +127,17 @@ var OKAdmin = function(){ $id.val( slug ) } - $(".image-element").each(function(index){ - $(this).find("input,textarea").each(function(){ - var field = $(this).attr("name").replace(/\[[0-9]*\]/, "[" + index + "]") - $(this).attr("name", field) + $("ol").each(function(){ + $("li", this).each(function(index){ + $(this).find("input,textarea").each(function(){ + var field = $(this).attr("name").replace(/\[[0-9]*\]/, "[" + index + "]") + $(this).attr("name", field) + }) }) }) }) + // delete individual records $("#delete_form").submit(function(e){ if (confirm("Are you sure you want to delete this record?")) { return @@ -111,6 +147,7 @@ var OKAdmin = function(){ } }) + // reorder items in categories $(".resource-category").on("click", ".edit-btn", function(e) { e.preventDefault(); var $parent = $(e.delegateTarget); @@ -142,6 +179,7 @@ var OKAdmin = function(){ } }); + // save new category order $(".resource-category").on("submit", "form", function(e) { var $parent = $(e.delegateTarget); $parent.find(".resource-input").each(function(index) { diff --git a/themes/okadmin/public/js/upload.js b/themes/okadmin/public/js/upload.js index b4a0dfc..8d73dd5 100644 --- a/themes/okadmin/public/js/upload.js +++ b/themes/okadmin/public/js/upload.js @@ -5,11 +5,19 @@ var OKUpload = function(){ OKUpload.prototype.bind = function(rapper){ var uploader = this $(".add-image-button input", rapper).change( uploader.handleFileSelect.bind(uploader) ) - $(".add-image-url", rapper).on("keydown blur", pressEnter( function(e){ + $(".add-url", rapper).on("keydown blur", pressEnter( function(e){ var url = $(this).val() $(this).val("") if (! url) return - uploader.add(url) + Parser.parse( url, function(media){ + console.log(url, media) + if (media.type == "image") { + uploader.add(url) + } + else { + uploader.addVideo(media) + } + }) })) } OKUpload.prototype.handleFileSelect = function(e) { @@ -50,6 +58,9 @@ OKUpload.prototype.success = function(data){ OKUpload.prototype.add = function(media){ console.log(media) } +OKUpload.prototype.addVideo = function(media){ + console.log(media) +} OKUpload.prototype.error = function(error){ throw error } diff --git a/themes/okadmin/templates/partials/inputs.liquid b/themes/okadmin/templates/partials/inputs.liquid index 4d31413..1b8d6b4 100644 --- a/themes/okadmin/templates/partials/inputs.liquid +++ b/themes/okadmin/templates/partials/inputs.liquid @@ -40,15 +40,75 @@ <input type="file" accept="image/*"> <button>+ Add image</button> </div> - <input class="add-image-url" type="text" placeholder="+ Add URL"> + <input class="add-url" type="text" placeholder="+ Add URL"> </div> <div class="image-element"> <input class="uri" type="hidden" name="{{name}}[uri]" value="{{spec.value.uri}}"> <textarea class="caption" name="{{name}}[caption]">{{spec.value.caption}}</textarea> <img src="{{spec.value.uri}}" alt="{{spec.value.caption}}"> - <button class="remove-image">x</button> + <button class="remove">x</button> </div> </div> + {% elsif type == 'media-list' %} + <div class="media-list group loaded"> + <div class="fields"> + <div class="add-image-button"> + <input type="file" accept="image/*" multiple> + <button>+ Add images</button> + </div> + <input class="add-url" type="text" placeholder="+ Add Image/Video URL"> + </div> + + <script type="text/html" class="image-template"> + <li class="image-element"> + <input class="uri" type="hidden" name="{{name}}[][uri]" value=""> + <textarea class="caption" name="{{name}}[][caption]"></textarea> + <img> + <button class="remove">x</button> + </li> + </script> + + <script type="text/html" class="video-template"> + <li class="video-element"> + <div style="float: left"> + <input name="{{name}}[][type]" type="hidden" class="video-type" hidden> + <input name="{{name}}[][token]" type="hidden" class="video-token" hidden> + <label>Caption</label> + <input name="{{name}}[][title]" type="text" class="video-title"> + <label>Thumbnail</label> + <input name="{{name}}[][thumb]" type="text" class="video-thumb"> + </div> + <img> + <button class="remove">x</button> + </li> + </script> + + <ol> + {% for image in spec.value %} + {% if image.token %} + <li class="video-element"> + <div style="float: left"> + <input name="{{name}}[][type]" value="{{image.type}}" type="hidden" class="video-type" hidden> + <input name="{{name}}[][token]" value="{{image.token}}" type="hidden" class="video-token" hidden> + <label>Caption</label> + <input name="{{name}}[][title]" value="{{image.title}}" type="text" class="video-title"> + <label>Thumbnail</label> + <input name="{{name}}[][thumb]" value="{{image.thumb}}" type="text" class="video-thumb"> + </div> + <img src="{{image.thumb}}"> + <button class="remove">x</button> + </li> + {% else %} + <li class="image-element"> + <input type="hidden" name="{{name}}[{{forloop.index0}}][uri]" value="{{image.uri}}"> + <textarea class="caption" name="{{name}}[{{forloop.index0}}][caption]">{{image.caption}}</textarea> + <img src="{{image.uri}}" alt="{{image.caption}}"> + <button class="remove">x</button> + </li> + {% endif %} + {% endfor %} + </ol> + </div> {% elsif type == 'captioned-image-list' %} <div class="image-list group loaded"> <div class="fields"> @@ -56,15 +116,15 @@ <input type="file" accept="image/*" multiple> <button>+ Add images</button> </div> - <input class="add-image-url" type="text" placeholder="+ Add URL"> + <input class="add-url" type="text" placeholder="+ Add URL"> </div> - <script type="text/html" id="captioned-image-template"> + <script type="text/html" class="image-template"> <li class="image-element"> <input class="uri" type="hidden" name="{{name}}[][uri]" value=""> <textarea class="caption" name="{{name}}[][caption]"></textarea> <img alt="{{image.caption}}"> - <button class="remove-image">x</button> + <button class="remove">x</button> </li> </script> @@ -74,7 +134,7 @@ <input type="hidden" name="{{name}}[{{forloop.index0}}][uri]" value="{{image.uri}}"> <textarea class="caption" name="{{name}}[{{forloop.index0}}][caption]">{{image.caption}}</textarea> <img src="{{image.uri}}" alt="{{image.caption}}"> - <button class="remove-image">x</button> + <button class="remove">x</button> </li> {% endfor %} </ol> |
