Subversion Repositories web.active

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

$activeColor: #3eb998;
$deleteColor: #e83561;
$errorColor: #FC3A3F;
$gridMargin: 0 0.6em 0.6em 0;
$itemPadding: 0.4em;
$focusPointCircleSize: 40px;


.InputfieldImage {
    .InputfieldHeader {
        .InputfieldImageListToggle {
            // toggles between grid, left and list mode
            float: right;
            padding-right: 0.75em;
            position: relative;

            &--active {
                opacity: 0.5;
            }

            &:first-child {
                // offset from far right side
                padding-right: 1em;
            }
        }
        .InputfieldImageSizeSlider {
            float: right;
            width: 100px;
            position: relative;
            top: 8px;
            right: 1em;

            .ui-slider-handle {
                outline: none;
            }
        }
    }

    &.InputfieldFileEmpty,
    &.InputfieldStateCollapsed {
        .InputfieldImageListToggle,
        .InputfieldImageSizeSlider {
            // prevents display of toggles and slider when there are no images visible
            display: none;
        }
    }
}

// error listing
.InputfieldImageErrors {
    padding-left: 0;
    margin-left: 0;
    li {
        margin-bottom: .5em;
        margin-top: 0;
        color: white;
        background-color: $errorColor;
        padding: .3em .5em;
    }
}

// The <ul> element containing li.gridImage items and .InputfieldImageEdit
.gridImages {
    list-style: none;
    padding-left: 0;
    position: relative;
    margin: 0;
    margin-right: -.6em;
    display: block;
    list-style: none;
}

.gridImage .gridImage__overflow, // grid view(s)
.InputfieldImageEditAll .gridImage .gridImage__overflow img, // list view
.InputfieldImageEdit__image { // clicked image in editor in grid view
    // the following creates a checkerboard pattern (for seeing transparency)
    background-color: #fefefe;
    background-image: linear-gradient(45deg, #cbcbcb 25%, transparent 25%, transparent 75%, #cbcbcb 75%, #cbcbcb), linear-gradient(45deg, #cbcbcb 25%, transparent 25%, transparent 75%, #cbcbcb 75%, #cbcbcb);
    background-size: 16px 16px;
    background-position: 0 0, 8px 8px;
}

// An individual image grid item
.gridImage {
    list-style: none;
    position: relative;
    display: inline-block;

    @at-root li#{&} {
        // overwrite .content li
        display: inline-block;
        margin: $gridMargin;
    }

    box-shadow: 0 1px 3px rgba(black, 0.2);
    border-radius: 2px;
    background: #fff;
    padding: $itemPadding;
    vertical-align: top;
    border: 1px dashed transparent; // to have the placeholder item the same size
    

    &__overflow {
        width: 100%;
        height: 100%;
        overflow: hidden;
        position: relative;

        & > img {
            position: absolute;
            top: 50%;
            left: 50%;
            //transition: transform ease .3s;
            -ms-transform: translate3d(-50%, -50%, 0);
            transform: translate3d(-50%, -50%, 0);
        }
        
    }

    &.gridImagePlaceholder {
        .gridImage__overflow {
            background: #fff;
        }
    }

    &.ui-sortable-placeholder {
        display: inline-block;
        border-radius: 2px;
        border: 1px dashed #ccc;
        padding: $itemPadding;
        visibility: visible !important;
        vertical-align: top;
        background-color: transparent;
        box-shadow: none;

        &::after {
            //replacement for image
            content: " ";
            display: block;
        }
    }

    &__hover {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        padding: $itemPadding;
    }

    &__inner {
        position: relative;
        width: 100%;
        height: 100%;

        .gridImage:hover & {
            background: rgba(#3eb998, .7);
        }
    }

    &__resize {
        position: absolute;
        display: block;
        height: 100%;
        width: 100%;
        line-height: 130px;
        text-align: center;
        color: white;
        font-size: 1.3em;
        cursor: move;
        text-shadow: 0px 0px 7px rgba(#3eb998, .7);
        &.pw-resizing {
            text-shadow: none;
            background: rgba(0,0,0,0.7);
        }
    }

    &__progress {
        /* Reset the default appearance */
        -webkit-appearance: none;
        -moz-appearance: none;
        appearance: none;
        /* Get rid of default border in Firefox. */
        border: none;

        color: $activeColor;
        width: 100%;
        height: 10px;
        background: transparent;

        position: absolute;
        bottom: 0;
        left: 0;

        &::-webkit-progress-bar {
            background-color: inherit;
        }

        &[value]::-webkit-progress-value {
            background-color: $activeColor;
        }

        &[value]::-moz-progress-bar {
            background-color: $activeColor;
        }

        &[value='-1'] {
            background-color: $deleteColor;
        }
    }

    &__trash {
        position: absolute;
        background: white;
        padding: .2em .6em;
        color: #aaa;
        z-index: 2;
        cursor: pointer;

        @at-root label#{&} {
            display: none;
        }

        &--single {
            display: block !important;
            position: static;
        }

        & > input {
            display: none;
        }

        .gridImage:hover & {
            display: block;
        }

        @at-root  .gridImage:hover label#{&}:hover {
            // overwrite a:hover
            display: block;
            color: $deleteColor;
            background-color: white;
        }
    }

    &__edit {
        // The "Edit" link
        position: absolute;
        display: block;
        height: 100%;
        width: 100%;
        line-height: 130px;
        text-align: center;
        color: white !important;
        font-size: 1.3em;
        cursor: move;
        text-shadow: 0px 0px 7px rgba(#3eb998, .7);

        span {
            cursor: pointer;
        }

        display: none;

        .gridImage:hover & {
            display: block;
        }

        &:hover {
            color: white;
        }
    }

    &__tooltip {
        // tooltip that appears above a hovered .gridImage
        pointer-events: none;
        position: absolute;
        bottom: 100%;
        padding: 20px;
        -webkit-filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.1));
        filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.1));
        left: 50%;
        //transform: translate(-50%, 0) perspective(1px) scale(1.01);
        transform: translate(-50%, 0);
        margin-bottom: 12px;
        background: #fff;
        z-index: 110;
        box-shadow: 0 0 1px rgba(black, 0.25);
        opacity: 0;
        transition: opacity .2s 02;

        .gridImage:hover & {
            display: block;
            opacity: 1;
            transition: opacity .2s 1s;
        }

        .InputfieldImageSorting & {
            display: none !important;
        }

        input {
            pointer-events: none;
        }

        table {
            margin: 0;
            border-spacing: 10px 0;
            border-collapse: separate;

            th {
                color: black;
                font-weight: bold;
                text-align: right;
            }
            th, td {
                border: none !important;
                background: white !important;
            }
        }

        &:after {
            top: 100%;
            left: 50%;
            border: solid transparent;
            content: " ";
            height: 0;
            width: 0;
            position: absolute;
            pointer-events: none;
            border-color: rgba(#fff, 0);
            border-top-color: #fff;
            border-width: 10px;
            margin-left: -10px;
        }
    }

    &.gridImageEditing {
        // highlights the current image being edited
        .gridImage__inner {
            background: rgba($activeColor, .5);
        }
    }

    &--active {
        background-color: $activeColor;

        & .gridImage__inner {
            background: rgba($activeColor, .5);
        }

        & .gridImage__trash {
            background-color: $activeColor;
            color: white;

            &:hover {
                background-color: $activeColor;
            }
        }

        &:hover .gridImage__trash:hover {
            background-color: $activeColor;
        }
    }

    &--delete {
        // gridImage item marked for deletion
        background-color: $deleteColor;

        @at-root .InputfieldImageEditSingle.gridImage--delete {
            background-color: transparent;
            .InputfieldImageEdit__inner {
                outline: 3px solid $deleteColor;
            }
        }

        & .gridImage__trash {
            background-color: $deleteColor;
            color: white;
            display: block;

            &:hover {
                background-color: $deleteColor;
            }
        }

        &:hover .gridImage__edit {
            display: none;
        }

        &:hover .gridImage__trash:hover {
            background-color: $deleteColor;
        }

        &:hover .gridImage__inner {
            background: rgba($deleteColor, 0.3);
        }
    }
}

// A type of item that appears in a ul.gridImages but is not itself a .gridImage.
// It contains the image enlargement, file, edit buttons, and description/tags fields. 
.InputfieldImageEdit {
    position: relative;
    display: none;

    &--active,
    &Single {
        display: block;
    }

    &__inner {
        position: relative;
        display: flex;
        flex-flow: row;
        margin: 1em .6em 1em 0;
        -webkit-filter: drop-shadow(0 1px 3px rgba(black, 0.2));
        filter: drop-shadow(0 1px 3px rgba(black, 0.2));
        background-color: white;
    }

    &__close {
        cursor: pointer;
        position: absolute;
        font-size: 1.4em;
        right: .5em;
        top: 0;
        color: #ccc !important;
        text-decoration: none !important;

        .InputfieldFileSingle & {
            display: none;
        }
    }

    &__trash-single {
        cursor: pointer;
        position: absolute;
        font-size: 1.4em;
        right: 0;
        top: 0;
        color: #aaa !important;
        text-decoration: none !important;

        &:hover {
            color: $deleteColor;
        }
    }

    &__arrow {
        // arrow that points up to the item being edited
        bottom: 100%;
        content: " ";
        height: 0;
        width: 0;
        position: absolute;
        pointer-events: none;
        border: .5em solid rgba(white, 0);
        border-bottom-color: white;
        transform: translate(-50%, 0);
    }

    &__imagewrapper {
        display: inline-block;
        display: flex;
        vertical-align: top;
        // align-items: center;
        justify-content: space-around;
        width: 300px;
        border-right: 1px solid #eee;
        min-height: 1em;
        padding: 20px;

        & > div {
            // Fix for Firefox not respecting aspect ratio on images
            width: 100%;
            position: relative;
        }
        .detail {
            text-align: center;
            margin-top: 2px;
        }
        .detail-upload {
            display: block;
            opacity: 0;
        }
        .detail-focus {
            display: none;
        }
        &:hover .detail-upload {
            opacity: 0.7;
        }
        & > div.focusWrap .detail-upload {
            display: none;
        }
        & > div.focusWrap .detail-focus {
            display: block;
            opacity: 0.7;
        }
        
    }
    
    &__replace img {
        // dragging new img on top of old one
        opacity: 0.5;
    }

    &__edit {
        display: inline-block;
        vertical-align: top;
        min-height: 100%;
        padding: 20px;
        flex-grow: 1;

        .InputfieldFileDescription,
        .InputfieldFileTags {
            input {
                width: 100%;
            }
        }
    }

    &__image {
        position: relative;
        margin: 0 auto;
        height: auto;
        cursor: zoom-in;
        max-width: 100%;
    }

    &__name {
        font-weight: bold;
        display: inline-block;
        margin-right: .5em !important;

        /* These are technically the same, but use both */
        overflow-wrap: break-word;
        word-wrap: break-word;

        -ms-word-break: break-all;
        /* This is the dangerous one in WebKit, as it breaks things wherever */
        word-break: break-all;
        /* Instead use this non-standard one: */
        word-break: break-word;

        /* Adds a hyphen where the word breaks, if supported (No Blink) */
        -ms-hyphens: auto;
        -moz-hyphens: auto;
        -webkit-hyphens: auto;
        hyphens: auto;
        cursor: pointer;
    }

    &__info {
        font-size: .9em;
        color: #ccc;
        white-space: nowrap;
    }

    &__buttons {
        margin: 1em 0 0.5em 0;
        button {
            margin-bottom: 0.5em;
        }
    }
    
    .InputfieldFileDescription + .InputfieldFileTags {
        margin-top: 0.5em;
    }

}

.gridImage__overflow .focusArea,
.InputfieldImageEdit .focusArea {
    display: none;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    color: #fff;
    cursor: default;

    &.focusActive {
        display: block;
        overflow: hidden;
    }

    .focusCircle {
        cursor: move;
        width: $focusPointCircleSize;
        height: $focusPointCircleSize;
        margin: ($focusPointCircleSize * -1 / 2 + 0px) !important;
        // border: 3px solid #fff;
        // background-color: rgba(255,255,255,0.3);
        border: 3px solid #EB1D61;
        border-radius: 50%;
        background-color: rgba(255, 255, 255, 0.6);
        background-image: url(data:image/gif;base64,R0lGODlhBAAEAIAAAOsdYQAAACH5BAAAAAAALAAAAAAEAAQAAAIEhI8JBQA7); // 4x4 px magenta
        background-position: 15px 15px;
        background-repeat: no-repeat;
    }
}


.InputfieldImage .ImageData {
    // element in a .gridImage item that contains the details and editable content
    display: none;
}

.InputfieldImageValidExtensions {
    margin-left: 1em;
}

.InputfieldImageUpload {
    position: relative;
    margin: 1em 0 0;

    & .AjaxUploadDropHere {
        display: none;
        position: absolute;
        top: 0;
        right: 0;
        opacity: 0.75;
        cursor: pointer;

        .ie-no-drop & {
            display: none;
            visibility: hidden;
        }
    }

    .InputfieldImageRefresh {
        margin-bottom: 0;
    }
}


// Narrow mode applies when width of Inputfield is under 500px
.InputfieldImageNarrow {

    .InputfieldHeader .InputfieldImageSizeSlider {
        width: 50px;
    }

    .InputfieldImageEdit {
        // the image editor becomes stacked when narrow mode is active

        &__inner {
            display: block;
            padding-top: 0.5em;
        }
        &__imagewrapper {
            display: block;
            width: 100%;
            padding-bottom: 0;
        }
        &__edit {
            width: 100%;
            padding-top: 0;
            .InputfieldImageEdit__buttons,
            .InputfieldImageEdit__info {
                display: block;
                text-align: center;
            }
        }
        &__name {
            margin: 0;
            display: block;
            text-align: center;
        }
    }

    .InputfieldImageUpload {
        .AjaxUploadDropHere {
            display: none !important;
        }
    }

}

.InputfieldFileSingle .gridImages .gridImage img,
.InputfieldRenderValueMode .gridImages .gridImage img {
    cursor: zoom-in;
}


/*****************************************************************************************
 * The "Edit All" mode is the "list" mode where edit inputs are showing for all images
 * This is the opposite of the grid mode, but we use all the same elements from .gridImage
 *
 */

.InputfieldImageEditAll {

    .gridImage {
        display: block;
        width: 100%;

        // clearfix
        &:before,
        &:after {
            content: "";
            display: table;
            border-collapse: collapse;
        }
        &:after {
            clear: both;
        }

        &__overflow {
            position: relative;
            z-index: 2;
            top: 0;
            left: 0;
            float: left;
            background: none; // initial
            display: block;
            height: auto !important;
            width: 23%; 
            overflow: visible;
            cursor: move;
        
            padding: 10px;
            padding-right: 0;

            & > img {
                display: block;
                position: static !important;
                top: 0;
                left: 0;
                transition: none;
                -ms-transform: none;
                transform: none;
                width: 100%;
                max-width: 100% !important;
                height: initial !important;
                cursor: move;
            }
            
            & > .focusArea {
                position: absolute;
                top: 10px; // to match padding of __overflow
                left: 10px;
            }
        }

        .ImageData {
            position: relative;
            float: left;
            display: block;
            width: 77%;
            padding-left: 20px;
            padding-right: 10px;
            z-index: 3;

            .InputfieldFileDescription {
                margin-bottom: 0.5em;
            }

            .InputfieldImageEdit__name {
                margin-bottom: 0;
                margin-top: 1em;
                position: relative;
                z-index: 100;
                cursor: pointer;
            }

            .InputfieldFileSort {
                display: none;
            }

            input {
                position: relative;
                z-index: 4;
            }
        }

        &.gridImagePlaceholder {
            .gridImage__overflow {
                background: #fff;
            }
        }

        &__inner {
            .gridImage__edit {
                display: none;
            }
        }
        &:hover .gridImage__inner {
            background: none; // initial;
        }

        .InputfieldImageEdit {
            &__core {
                input {
                    width: 100%;
                }
            }
        }

        &__resize {
            margin-top: 10px;
            color: $deleteColor;
            text-shadow: none;
        }

        &__progress {
            bottom: 10px;
            margin-left: 10px; 
        }
        
        &.gridImageUploading {
            .gridImage__overflow {
                margin-bottom: 10px; 
            }
            .gridImage__inner {
                overflow: hidden;
            }
        }

        &__trash {
            z-index: 5;
            display: block !important;
            top: 0;
            right: 0;
        }
        
        &__edit {
            display: none;
        }

        &__tooltip {
            display: none !important;
        }

        &--delete {
            background-color: $deleteColor;
            border-bottom: 8px solid transparent;
            height: 45px;
            overflow: hidden;
            
            .gridImage__overflow {
                display: none;
            }
            
            .ImageData {
                padding-left: 10px;
                width: 100%;
            }

            .ImageData .InputfieldImageEdit__name {
                color: rgba(255, 255, 255, 0.6);
                margin-top: 3px;
                text-decoration: line-through;
            }

            .InputfieldImageEdit__info {
                color: rgba(255, 255, 255, 0.4);
            }

            .InputfieldImageEdit__buttons,
            .InputfieldImageEdit__core,
            .InputfieldImageEdit__additional {
                display: none;
            }

            &:hover .gridImage__trash:hover {
                color: white;
                background-color: $deleteColor;
            }

            &:hover .gridImage__hover,
            .gridImage__hover {
                background: rgba(255, 255, 255, 0);
            }
            
        } // &--delete
    } // .gridImage

    // Edit All narrow mode, we stack the image and editor features on top of each other
    &.InputfieldImageNarrow {
        .gridImage {
            &__overflow {
                display: block;
                width: 100% !important;
                height: auto !important;
                padding: 0;

                img {
                    width: 100% !important;
                    height: auto !important;
                }
                
                > .focusArea { // #728
                    top: 0;
                    left: 0;
                }
                
            }
            .ImageData {
                padding: 0;
                width: 100% !important;
                display: block;
                .InputfieldImageEdit__name {
                    margin-top: 0.5em;
                }
                .InputfieldImageEdit__name,
                .InputfieldImageEdit__buttons,
                .InputfieldImageEdit__info {
                    text-align: center;
                    display: block;
                }
            }
        } // .gridImage
    } // .InputfieldImageNarrow
} // .InputfieldImageEditAll

.InputfieldFileActionNote {
    display: none;
    white-space: nowrap;
}