From 541a4616c06449311cae1a793fef11bfa1ca7ace Mon Sep 17 00:00:00 2001 From: luxagraf Date: Tue, 1 Nov 2016 14:42:20 -0400 Subject: widened site, created new photo layouts and prepped homepage redesign --- app/books/migrations/0003_auto_20161023_2014.py | 20 ++ app/daily/migrations/0010_auto_20161023_2014.py | 19 ++ app/jrnl/models.py | 12 +- app/jrnl/views.py | 5 +- app/photos/admin.py | 1 + app/photos/forms.py | 2 +- app/photos/migrations/0011_luximagesize_name.py | 20 ++ .../migrations/0012_luximagesize_is_portrait.py | 20 ++ app/photos/migrations/0013_auto_20161022_1348.py | 20 ++ .../0014_remove_luximagesize_is_portrait.py | 19 ++ app/photos/migrations/0015_auto_20161022_1411.py | 20 ++ app/photos/migrations/0016_auto_20161022_1411.py | 25 ++ app/photos/models.py | 50 +++- .../migrations/0003_auto_20161023_2014.py | 19 ++ design/sass/_header.scss | 6 +- design/sass/_homepage.scss | 86 ++++++- design/sass/_mixins.scss | 8 +- design/sass/_photos.scss | 282 +++++++++++++++++++++ design/sass/_queries.scss | 6 +- design/sass/_writing_archive.scss | 27 ++ design/sass/_writing_details.scss | 56 +++- design/templates/admin/insert_images.html | 1 + design/templates/archives/gallery_list.html | 5 +- design/templates/archives/homepage-light.html | 33 +-- design/templates/details/entry.html | 30 ++- design/templates/details/photo_gallery.html | 6 +- design/templates/lib/img_cluster.html | 1 + design/templates/lib/img_picfull.html | 4 +- design/templates/lib/img_picwide.html | 6 +- 29 files changed, 739 insertions(+), 70 deletions(-) create mode 100644 app/books/migrations/0003_auto_20161023_2014.py create mode 100644 app/daily/migrations/0010_auto_20161023_2014.py create mode 100644 app/photos/migrations/0011_luximagesize_name.py create mode 100644 app/photos/migrations/0012_luximagesize_is_portrait.py create mode 100644 app/photos/migrations/0013_auto_20161022_1348.py create mode 100644 app/photos/migrations/0014_remove_luximagesize_is_portrait.py create mode 100644 app/photos/migrations/0015_auto_20161022_1411.py create mode 100644 app/photos/migrations/0016_auto_20161022_1411.py create mode 100644 app/syndication/migrations/0003_auto_20161023_2014.py create mode 100644 design/templates/lib/img_cluster.html diff --git a/app/books/migrations/0003_auto_20161023_2014.py b/app/books/migrations/0003_auto_20161023_2014.py new file mode 100644 index 0000000..809c465 --- /dev/null +++ b/app/books/migrations/0003_auto_20161023_2014.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-23 20:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('books', '0002_book_is_public'), + ] + + operations = [ + migrations.AlterField( + model_name='book', + name='image', + field=models.FileField(blank=True, null=True, upload_to='/home/lxf/sites/luxagraf/site/media/images/book-covers/'), + ), + ] diff --git a/app/daily/migrations/0010_auto_20161023_2014.py b/app/daily/migrations/0010_auto_20161023_2014.py new file mode 100644 index 0000000..72a68cf --- /dev/null +++ b/app/daily/migrations/0010_auto_20161023_2014.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-23 20:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('daily', '0009_remove_daily_title'), + ] + + operations = [ + migrations.AlterModelOptions( + name='daily', + options={'get_latest_by': 'date', 'ordering': ('-date',)}, + ), + ] diff --git a/app/jrnl/models.py b/app/jrnl/models.py index ceaefa6..2fc775e 100644 --- a/app/jrnl/models.py +++ b/app/jrnl/models.py @@ -37,15 +37,16 @@ def image_url_replace(s): def parse_image(s): soup = BeautifulSoup(s.group(), "lxml") for img in soup.find_all('img'): - print(img) src = img['src'].split("images/")[1] - print(src) i = LuxImage.objects.get(image__icontains=src) cl = img['class'] caption = False exif = False + cluster_class = None if len(cl) > 1: css_class = cl[0] + if css_class == 'cluster': + cluster_class = cl[1] if cl[1] == 'caption': caption = True if cl[1] == 'exif': @@ -59,7 +60,7 @@ def parse_image(s): print('caption'+str(caption)) else: css_class = cl[0] - c = Context({'image': i, 'caption': caption, 'exif': exif}) + c = Context({'image': i, 'caption': caption, 'exif': exif, 'cluster_class': cluster_class}) return render_to_string("lib/img_%s.html" % css_class, c) @@ -72,7 +73,10 @@ def extract_images(s): soup = BeautifulSoup(s, "lxml") imgs = [] for img in soup.find_all('img'): - imgs.append(img['src']) + try: + imgs.append(img['src']) + except: + pass return imgs diff --git a/app/jrnl/views.py b/app/jrnl/views.py index c68625d..6d0e85b 100644 --- a/app/jrnl/views.py +++ b/app/jrnl/views.py @@ -7,6 +7,7 @@ from django.conf import settings from utils.views import PaginatedListView from .models import Entry, HomepageCurrator +from daily.models import CheckIn from locations.models import Country, Region @@ -84,7 +85,8 @@ class HomepageList(ListView): Return a main entry and list of Entries in reverse chronological order """ context_object_name = 'recent' - queryset = Entry.objects.filter(status__exact=1)[:5] + exclude = HomepageCurrator.objects.get(pk=1) + queryset = Entry.objects.filter(status__exact=1).exclude(pk=exclude.featured.pk)[:8] def get_template_names(self): obj = HomepageCurrator.objects.get(pk=1) @@ -94,6 +96,7 @@ class HomepageList(ListView): # Call the base implementation first to get a context context = super(HomepageList, self).get_context_data(**kwargs) context['homepage'] = HomepageCurrator.objects.get(pk=1) + context['location'] = CheckIn.objects.get(pk=1) context['IMAGES_URL'] = settings.IMAGES_URL return context diff --git a/app/photos/admin.py b/app/photos/admin.py index 22de1fd..f0eb1c7 100644 --- a/app/photos/admin.py +++ b/app/photos/admin.py @@ -13,6 +13,7 @@ from .forms import UploadZipForm, GalleryForm class LuxImageSizeAdmin(OSMGeoAdmin): + list_display = ('name', 'width', 'height', 'quality') pass diff --git a/app/photos/forms.py b/app/photos/forms.py index 4e00189..06e829d 100644 --- a/app/photos/forms.py +++ b/app/photos/forms.py @@ -151,7 +151,7 @@ class UploadZipForm(forms.Form): if file_extension != ".mp4": img = Image.open(image.image.path) if img.size[0] > img.size[1]: - image.sizes.add(LuxImageSize.objects.get(width=2280)) + image.sizes.add(LuxImageSize.objects.get(width=2560)) image.sizes.add(LuxImageSize.objects.get(width=1140)) image.sizes.add(LuxImageSize.objects.get(width=720)) if img.size[1] > img.size[0]: diff --git a/app/photos/migrations/0011_luximagesize_name.py b/app/photos/migrations/0011_luximagesize_name.py new file mode 100644 index 0000000..49d046b --- /dev/null +++ b/app/photos/migrations/0011_luximagesize_name.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-21 08:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0010_auto_20160517_0906'), + ] + + operations = [ + migrations.AddField( + model_name='luximagesize', + name='name', + field=models.CharField(blank=True, max_length=30, null=True), + ), + ] diff --git a/app/photos/migrations/0012_luximagesize_is_portrait.py b/app/photos/migrations/0012_luximagesize_is_portrait.py new file mode 100644 index 0000000..a2c2e3a --- /dev/null +++ b/app/photos/migrations/0012_luximagesize_is_portrait.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-22 13:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0011_luximagesize_name'), + ] + + operations = [ + migrations.AddField( + model_name='luximagesize', + name='is_portrait', + field=models.BooleanField(default=False), + ), + ] diff --git a/app/photos/migrations/0013_auto_20161022_1348.py b/app/photos/migrations/0013_auto_20161022_1348.py new file mode 100644 index 0000000..8dfbf98 --- /dev/null +++ b/app/photos/migrations/0013_auto_20161022_1348.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-22 13:48 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0012_luximagesize_is_portrait'), + ] + + operations = [ + migrations.RenameField( + model_name='luximagesize', + old_name='width', + new_name='long_edge', + ), + ] diff --git a/app/photos/migrations/0014_remove_luximagesize_is_portrait.py b/app/photos/migrations/0014_remove_luximagesize_is_portrait.py new file mode 100644 index 0000000..b8e0aa8 --- /dev/null +++ b/app/photos/migrations/0014_remove_luximagesize_is_portrait.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-22 14:11 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0013_auto_20161022_1348'), + ] + + operations = [ + migrations.RemoveField( + model_name='luximagesize', + name='is_portrait', + ), + ] diff --git a/app/photos/migrations/0015_auto_20161022_1411.py b/app/photos/migrations/0015_auto_20161022_1411.py new file mode 100644 index 0000000..d380b52 --- /dev/null +++ b/app/photos/migrations/0015_auto_20161022_1411.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-22 14:11 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0014_remove_luximagesize_is_portrait'), + ] + + operations = [ + migrations.RenameField( + model_name='luximagesize', + old_name='long_edge', + new_name='width', + ), + ] diff --git a/app/photos/migrations/0016_auto_20161022_1411.py b/app/photos/migrations/0016_auto_20161022_1411.py new file mode 100644 index 0000000..54b84d7 --- /dev/null +++ b/app/photos/migrations/0016_auto_20161022_1411.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-22 14:11 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0015_auto_20161022_1411'), + ] + + operations = [ + migrations.AddField( + model_name='luximagesize', + name='height', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='luximagesize', + name='width', + field=models.IntegerField(blank=True, null=True), + ), + ] diff --git a/app/photos/models.py b/app/photos/models.py index 6940110..4207ad4 100644 --- a/app/photos/models.py +++ b/app/photos/models.py @@ -1,10 +1,13 @@ import os.path +import io import datetime from PIL import Image +from django.core.exceptions import ValidationError from django.contrib.gis.db import models from django.contrib.sitemaps import Sitemap from django.utils.encoding import force_text +from django.utils.text import slugify from django.conf import settings from taggit.managers import TaggableManager @@ -24,15 +27,20 @@ def get_upload_path(self, filename): class LuxImageSize(models.Model): - width = models.IntegerField() + name = models.CharField(null=True, blank=True, max_length=30) + width = models.IntegerField(null=True, blank=True) + height = models.IntegerField(null=True, blank=True) quality = models.IntegerField() class Meta: verbose_name_plural = 'Image Sizes' def __str__(self): - return str(self.width) - + if self.width: + size = self.width + if self.height: + size = self.height + return "%s - %s" %(self.name, str(size)) class LuxImage(models.Model): image = models.FileField(blank=True, null=True, upload_to=get_upload_path) @@ -75,8 +83,9 @@ class LuxImage(models.Model): def get_admin_image(self): for size in self.sizes.all(): - if size.width <= 800: - return self.get_image_by_size(size) + if size.width and size.width <= 820 or size.height and size.height<=800: + print("Size name" +size.name) + return self.get_image_by_size(size.name) def get_largest_image(self): t = [] @@ -139,12 +148,21 @@ class LuxImage(models.Model): n = self.get_next_by_pub_date() return "/admin/photos/luximage/%s/change/" % n.pk + @property + def is_portait(self): + if int(self.height) > int(self.width): + return True + else: + return False @receiver(post_save, sender=LuxImage) def post_save_events(sender, update_fields, created, instance, **kwargs): if instance.exif_raw == '': filename, file_extension = os.path.splitext(instance.image.path) if file_extension != ".mp4": + img = Image.open(instance.image.path) + instance.height = img.height + instance.width = img.width instance = readexif(instance) post_save.disconnect(post_save_events, sender=LuxImage) instance.save() @@ -159,16 +177,24 @@ def update_photo_sizes(sender, instance, **kwargs): img = Image.open(instance.image.path) resize_image(img, 160, None, 78, base_path, "%s_tn.%s" % (instance.get_image_name(), instance.get_image_ext())) for size in instance.sizes.all(): - if img.size[0] > img.size[1]: + if size.width: + print("Image width is:"+str(img.width)) try: - resize_image(img, size.width, None, size.quality, base_path, "%s_%s.%s" % (instance.get_image_name(), size.width, instance.get_image_ext())) + if size.width <= img.width: + resize_image(img, size.width, None, size.quality, base_path, "%s_%s.%s" % (instance.get_image_name(), slugify(size.name), instance.get_image_ext())) + else: + raise ValidationError({'items': ["Size is larger than source image"]}) except ImageSizeError: m2m_changed.disconnect(update_photo_sizes, sender=LuxImage.sizes.through) instance.sizes.remove(size) m2m_changed.connect(update_photo_sizes, sender=LuxImage.sizes.through) - if img.size[1] > img.size[0]: + if size.height: try: - resize_image(img, None, size.width, size.quality, base_path, "%s_%s.%s" % (instance.get_image_name(), size.width, instance.get_image_ext())) + if size.height <= img.height: + resize_image(img, None, size.height, size.quality, base_path, "%s_%s.%s" % (instance.get_image_name(), slugify(size.name), instance.get_image_ext())) + + else: + pass except ImageSizeError: m2m_changed.disconnect(update_photo_sizes, sender=LuxImage.sizes.through) instance.sizes.remove(size) @@ -205,10 +231,12 @@ class LuxGallery(models.Model): return "/photos/galleries/private/%s" % (self.slug) def latitude(self): - return self.point.y + if self.point: + return self.point.y def longitude(self): - return self.point.x + if self.point: + return self.point.x def thumbs(self): lst = [x.image.name for x in self.images.all()] diff --git a/app/syndication/migrations/0003_auto_20161023_2014.py b/app/syndication/migrations/0003_auto_20161023_2014.py new file mode 100644 index 0000000..2b311fb --- /dev/null +++ b/app/syndication/migrations/0003_auto_20161023_2014.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-10-23 20:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('syndication', '0002_auto_20160628_2149'), + ] + + operations = [ + migrations.AlterModelOptions( + name='fboauthtoken', + options={'get_latest_by': 'expires', 'ordering': ('-expires',)}, + ), + ] diff --git a/design/sass/_header.scss b/design/sass/_header.scss index 8f4b207..b0c83e0 100644 --- a/design/sass/_header.scss +++ b/design/sass/_header.scss @@ -138,7 +138,11 @@ nav[role="navigation"] { } @include breakpoint(delta) { margin-top: 1.5em; - max-width: 1170px; + max-width: $breakpoint-delta - 40px; + } + @include breakpoint(epsilon) { + margin-top: 1.5em; + max-width: $max_width; } } diff --git a/design/sass/_homepage.scss b/design/sass/_homepage.scss index 6582da5..bea884d 100644 --- a/design/sass/_homepage.scss +++ b/design/sass/_homepage.scss @@ -44,32 +44,45 @@ } .homepage--bright { + max-width: 100%; + @extend %clearfix; article { margin-top: 0; margin-bottom: 20px; - width: 100%; - } - @include breakpoint(alpha) { max-width: 100%; + } + .odd, .even { margin-left: 0; margin-right: 0; padding-left: 0;} + @include breakpoint(delta) { margin-left: 0; + float: right; + max-width: 33%; article { float: left; - width: 47%; + width: 45%; margin-left: 1em; } + .odd { margin-right: 10px;} } @include breakpoint(gamma) { - float: left; - width: 250px; + float: right; + max-width: 33%; margin-top: 0; article { - float: none; - width: 100%; - margin-left: 0; + max-width: 100%; } } - @include breakpoint(delta) { - width: 340px; + @include breakpoint(beta) { + margin-top: 0; + article { + max-width: 50%; + } + } + @include breakpoint(beta-2) { + margin-top: 0; + article { + max-width: 47%; + } + .odd { margin-right: 10px;} } .post--image { margin-left: 0 !important; @@ -78,6 +91,7 @@ overflow: hidden; img { max-width: 100%; + width: 100%; display: block; /* just in case, to force correct aspect ratio */ height: auto !important; @@ -85,16 +99,60 @@ /* lt ie8 */ -ms-interpolation-mode: bicubic; } + @include breakpoint(epsilon){ + max-height: 160px; + } + } +} +.homepage--arc-big { + max-width: 100%; + @include breakpoint(gamma) { + float: left; + max-width: 63%; + article { + max-width: 47%; + width: 47%; + } + } + @include breakpoint(delta) { + float: left; + max-width: 63%; + article { + max-width: 49%; + + } + } +} +.popular { + @include breakpoint(gamma) { + article { + width: 100%; + max-width: 100%; + } + } + @include breakpoint(epsilon) { + float: right; + max-width: 33%; } } .homepage--next { - padding: 6px 0; - @include smcaps; + @extend %clearfix; + @include fontsize(14); + font-family: sans-serif; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 1px; text-decoration: none; - &:after { + padding: 9px 10px 8px; + border: $link_color 1px solid; + a:after { content: "\21E2"; margin-left: 4px; } + a:hover { + background: $link_color; + color: white; + } } .has-hero { .header-wrapper { diff --git a/design/sass/_mixins.scss b/design/sass/_mixins.scss index 29b424e..bd3c5a1 100644 --- a/design/sass/_mixins.scss +++ b/design/sass/_mixins.scss @@ -6,6 +6,7 @@ $body_font: $brown; $body_font_light: #b3aeae; //$light; +$max_width: 1280px; @mixin smcaps { text-transform: uppercase; @@ -113,9 +114,12 @@ $body_font_light: #b3aeae; margin-left: auto; margin-right: auto; @include breakpoint(gamma) { - max-width: 960px; + max-width: $breakpoint-gamma - 20px; } @include breakpoint(delta) { - max-width: 1170px; + max-width: $breakpoint-delta - 40px; + } + @include breakpoint(epsilon) { + max-width: $max_width; } } diff --git a/design/sass/_photos.scss b/design/sass/_photos.scss index c0f51ef..d152bf4 100644 --- a/design/sass/_photos.scss +++ b/design/sass/_photos.scss @@ -222,3 +222,285 @@ // padding-bottom: 0.25em; // } //} + +//lightbox stuff from https://github.com/felixhagspiel/jsOnlyLightbox/blob/master/css/lightbox.scss + +/** +* VARS +**/ + +// font-sizes +$font-size-huge: 2.8em; +$font-size-big: 2em; +$font-size-medium: 1.4em; + +$def-color-1: #FFFFFF; +$def-color-2: #B9CED2; + +$border-color-1: #9C9FA5; + +$def-font-color: #6c7176; +$font-color-highlight: #A99929; +$font-color-hover-1: #C3B919; + +$darkblue: #3F658B; +@mixin prefixr($var, $val) { + -webkit-#{$var}: $val; + -moz-#{$var}: $val; + -o-#{$var}: $val; + -ms-#{$var}: $val; + $var: $val; +} + +/* IE8 Stuff */ +.jslghtbx-ie8.jslghtbx { + background-image: url('../img/trans-bck.png'); + display: none; + &.jslghtbx-active { + display: block; + } + .jslghtbx-contentwrapper > img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + display: block; + } + .jslghtbx-contentwrapper.jslghtbx-wrapper-active > img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + } +} + +/* Main wrapper */ +.jslghtbx { + font-family: sans-serif; + overflow: auto; + visibility: hidden; + position: fixed; + z-index: 2; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0); + &.jslghtbx-active { + visibility: visible; + background-color: rgba(0, 0, 0, 0.85); + } +} + +/* loading-animation */ +.jslghtbx-loading-animation { + margin-top: -60px; + margin-left: -60px; + width: 120px; + height: 120px; + top: 50%; + left: 50%; + display: none; + position: absolute; + z-index: -1; + & > span { + display: inline-block; + width: 20px; + height: 20px; + border-radius: 20px; + margin: 5px; + background-color: #fff; + @include prefixr(transition, all .3s ease-in-out); + &.jslghtbx-active { + margin-bottom: 60px; + } + } +} + +.jslghtbx.jslghtbx-loading .jslghtbx-loading-animation { + display: block; +} + +.jslghtbx-nooverflow { + overflow: hidden !important; // prevent showing of scrollbars on prev/next +} + +.jslghtbx-contentwrapper { + margin: auto; + visibility: hidden; + & > img { + background: #fff; + padding: .5em; + display: none; + height: auto; + margin-left: auto; + margin-right: auto; + opacity: 0; + } +} + +.jslghtbx-contentwrapper.jslghtbx-wrapper-active { + visibility: visible; + & > img { + display: block; + opacity: 1; + } +} + +/* Caption */ +.jslghtbx-caption { + display: none; + margin-left: auto; + margin-right: auto; + margin-top: 5px; + margin-bottom: 5px; + max-width: 450px; + color: #fff; + text-align: center; + font-size: .9em; +} + +.jslghtbx-active .jslghtbx-caption { + display: inline; + margin-right: 1em; +} + +/* Animation Stuff */ +.jslghtbx-contentwrapper.jslghtbx-animate > img { + opacity: 0; +} + +.jslghtbx-contentwrapper > img.jslghtbx-animate-transition { + @include prefixr(transition, opacity .2s ease-in-out); +} + +.jslghtbx-contentwrapper > img.jslghtbx-animating-next { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.jslghtbx-contentwrapper > img.jslghtbx-animating-prev { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.jslghtbx-contentwrapper > img.jslghtbx-animate-init { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.jslghtbx-contentwrapper > img.jslghtbx-animate-transition { + cursor: pointer; +} + +/* Controls */ +.jslghtbx-close { + position: fixed; + right: 23px; + top: 23px; + margin-top: -4px; + font-size: 2em; + color: $def-color-1; + cursor: pointer; + @include prefixr(transition, all .3s ease-in-out); + &:hover { + text-shadow: 0 0 10px #fff; + } + @media screen and(max-width: 1060px) { + font-size: 1.5em; + } +} + +.jslghtbx-next, +.jslghtbx-prev { + display: none; + position: fixed; + top: 50%; + max-width: 6%; + max-height: 250px; + cursor: pointer; + @include prefixr(transition, all .2s ease-in-out); + &.jslghtbx-active { + display: block; + } + & > img { + width: 100%; + } + +} + +.jslghtbx-next { + right: .6em; + &.jslghtbx-no-img:hover { + border-left-color: #787878; + } + @media screen and(min-width: 451px) { + right: .6em; + &.jslghtbx-no-img { + border-top: 20px solid transparent; + border-bottom: 20px solid transparent; + border-left: 20px solid #FFF; + } + } + @media screen and(max-width: 600px) { + &.jslghtbx-no-img { + right: 5px; + padding-left: 0; + border-top: 60px solid transparent; + border-bottom: 60px solid transparent; + border-left: 15px solid #FFF; + } + } + @media screen and(max-width: 450px) { + right: .2em; + padding-left: 20px; + } +} + +.jslghtbx-prev { + left: .6em; + &.jslghtbx-no-img:hover { + border-right-color: #787878; + } + @media screen and(min-width: 451px) { + left: .6em; + &.jslghtbx-no-img { + border-top: 20px solid transparent; + border-bottom: 20px solid transparent; + border-right: 20px solid #FFF; + } + } + @media screen and(max-width: 600px) { + &.jslghtbx-no-img { + left: 5px; + padding-right: 0; + border-top: 60px solid transparent; + border-bottom: 60px solid transparent; + border-right: 15px solid #FFF; + } + } + @media screen and(max-width: 450px) { + left: .2em; + padding-right: 20px; + } +} + +.jslghtbx-thmb { + @media screen and(min-width: 451px) { + margin: 1em; + } + @media screen and(max-width: 450px) { + margin: 1em 0; + } + padding: 2px; + max-width: 100%; + max-height: 140px; + cursor: pointer; + box-shadow: 0px 0px 3px 0px #000; + @include prefixr(transition, all .3s ease-in-out); + &:hover { + box-shadow: 0px 0px 14px 0px #000; + } +} + +.p-link { + color: white !important; + @include fontsize(14); + &:after { + content: "\2197"; + } +} diff --git a/design/sass/_queries.scss b/design/sass/_queries.scss index 8262c84..682d83b 100644 --- a/design/sass/_queries.scss +++ b/design/sass/_queries.scss @@ -2,9 +2,9 @@ $breakpoint-alpha: 38em; $breakpoint-alpha-2: 450px; $breakpoint-beta: 49em; $breakpoint-beta-2: 620px; -$breakpoint-gamma: 56em; -$breakpoint-delta: 73.125em; -$breakpoint-epsilon: 79.625em; +$breakpoint-gamma: 960px; +$breakpoint-delta: 1170px; +$breakpoint-epsilon: $max_width; @mixin breakpoint($point) { @if $point == "alpha" { diff --git a/design/sass/_writing_archive.scss b/design/sass/_writing_archive.scss index 0f5f52b..91b5e46 100644 --- a/design/sass/_writing_archive.scss +++ b/design/sass/_writing_archive.scss @@ -117,4 +117,31 @@ line-height: 36px; } } +.homepage--about .homepage--arc-header:after{ + @extend %clearfix; + display: block; + width: 100%; + margin: 2em auto 1em; + height: 150px; + background: url("/media/img/usa-resize.svg") 50% no-repeat; + background-size: 230px; + @include breakpoint(gamma) { + display: inline; + width: 0; + height: 0; + background: none; + } +} +.homepage--about { + @include breakpoint(gamma) { + background: url("/media/img/usa-resize.svg") 0 60% no-repeat; + background-size: 120px; + } + @include breakpoint(delta) { + background-size: 170px; + } + @include breakpoint(epsilon) { + background-size: 250px; + } +} diff --git a/design/sass/_writing_details.scss b/design/sass/_writing_details.scss index 6a63871..33d6729 100644 --- a/design/sass/_writing_details.scss +++ b/design/sass/_writing_details.scss @@ -246,8 +246,13 @@ img.picwide { } @include breakpoint(delta) { margin-left: -245px; - width: 1140px; - max-width: 1140px; + width: $breakpoint-delta; + max-width: $breakpoint-delta; + } + @include breakpoint(epsilon) { + margin-left: -245px; + width: $max_width * .98; + max-width: $max_width; } } .picwide figcaption { @@ -257,12 +262,16 @@ img.picwide { @include generic_sans; @include breakpoint(gamma) { text-align: right; - width: 960px; - max-width: 960px; + width: $breakpoint-gamma; + max-width: $breakpoint-gamma; } @include breakpoint(delta) { - width: 1170px; - max-width: 1170px; + width: $breakpoint-delta; + max-width: $breakpoint-delta; + } + @include breakpoint(epsilon) { + width: $max_width; + max-width: $max_width; } } figure.picwide > img.picwide { @@ -350,6 +359,41 @@ figure.picwide > img.picwide { } } } +.image-cluster { + @include constrain_wide; + @extend %clearfix; + margin-bottom: 1em; + div img { + float: left; + width: 100%; + padding: 0; + margin: 0 6px 6px 0; + } + div a:last-of-type { + img { + margin-right: 0; + } + } + .picwide { + margin: 0; + padding: 0; + max-width: 100%; + width: 100%; + background: none; + } +} +.pic66 { + max-width: 63.9%; +} +.pic33 { + max-width: 35.5%; +} +.row-3 .pic33 { + max-width: 33%; +} +.pic5 { + max-width: 49.5%; +} .embed-wrapper { @include constrain_wide; diff --git a/design/templates/admin/insert_images.html b/design/templates/admin/insert_images.html index caaa790..7602525 100644 --- a/design/templates/admin/insert_images.html +++ b/design/templates/admin/insert_images.html @@ -99,6 +99,7 @@ $(function(){
  • column width
  • full width cap
  • column width cap
  • +
  • cluster
  • Edit Image
  • diff --git a/design/templates/archives/gallery_list.html b/design/templates/archives/gallery_list.html index 99252ef..91e04cb 100644 --- a/design/templates/archives/gallery_list.html +++ b/design/templates/archives/gallery_list.html @@ -33,6 +33,7 @@