From cde67e113b03c8943de6f40aaccb89f09fc13536 Mon Sep 17 00:00:00 2001 From: Felix Niklas Date: Tue, 24 Nov 2015 14:05:13 +0100 Subject: [PATCH] chat designer: fix loader, add new api --- .../app/controllers/_channel/chat.coffee | 68 +++++++++++-------- .../app/views/channel/chat.jst.eco | 9 ++- app/assets/stylesheets/zammad.scss | 30 ++++++-- 3 files changed, 72 insertions(+), 35 deletions(-) diff --git a/app/assets/javascripts/app/controllers/_channel/chat.coffee b/app/assets/javascripts/app/controllers/_channel/chat.coffee index 41bce6c87..5ec79fd1a 100644 --- a/app/assets/javascripts/app/controllers/_channel/chat.coffee +++ b/app/assets/javascripts/app/controllers/_channel/chat.coffee @@ -9,7 +9,7 @@ class App.ChannelChat extends App.Controller 'submit .js-testurl': 'changeDemoWebsite' 'blur .js-testurl-input': 'changeDemoWebsite' 'click .js-selectBrowserWidth': 'selectBrowserWidth' - 'click .js-swatch': 'useSwatchColor' + 'click .js-swatch': 'usePaletteColor' elements: '.js-browser': 'browser' @@ -19,8 +19,10 @@ class App.ChannelChat extends App.Controller '.js-backgroundColor': 'chatBackground' '.js-paramsBlock': 'paramsBlock' '.js-code': 'code' - '.js-swatches': 'swatches' + '.js-palette': 'palette' '.js-color': 'colorField' + '.js-screenshot': 'screenshot' + '.js-website': 'website' apiOptions: [ { @@ -140,10 +142,11 @@ class App.ChannelChat extends App.Controller width = parseInt value, 10 # reset zoom - @chat.css('transform', '') + @chat + .css('transform', '') + .removeClass('is-fullscreen') @browser.css('width', '') - @chat.removeClass('is-fullscreen') - @iframe.css + @website.css transform: '' width: '' height: '' @@ -156,7 +159,7 @@ class App.ChannelChat extends App.Controller else percentage = @el.width()/width @chat.css('transform', "scale(#{ percentage })") - @iframe.css + @website.css transform: "scale(#{ percentage })" width: @el.width() / percentage height: @el.height() / percentage @@ -166,56 +169,67 @@ class App.ChannelChat extends App.Controller # fire both on enter and blur # but cache url - return if @urlInput.val() is '' or @urlInput.val() is @url - @url = @urlInput.val() + return if @urlInput.val() is '' or @urlInput.val() is @urlCache + @urlCache = @urlInput.val() - src = @url - if !src.startsWith('http') - src = "http://#{ src }" + @url = @urlCache + if !@url.startsWith('http') + @url = "http://#{ @url }" @urlInput.addClass('is-loading') - # clear swatches and iframe - @swatches.empty() - @iframe.attr('src', '').css('background-image', '') + # clear palette and iframe + @palette.empty() + @website.attr('data-mode', '') + @iframe.attr('src', '') + @screenshot.attr('src', '') $.ajax - url: 'https://images.zammad.com/api/v1/webpage/colors' + url: 'https://images.zammad.com/api/v1/webpage/combined' data: - url: src + url: @url + count: 20 success: @renderDemoWebsite dataType: 'json' renderDemoWebsite: (data) => + imageSource = data['data_url'] - # @iframe.attr 'src', src - @renderSwatches data + if imageSource + console.log "renderDemoWebsite", typeof imageSource, imageSource + @screenshot.attr 'src', imageSource + @website.attr('data-mode', 'screenshot') + else + @iframe.attr 'src', @url + @website.attr('data-mode', 'iframe') + + @renderPalette data['palette'] @urlInput.removeClass('is-loading') - renderSwatches: (swatches) -> + renderPalette: (palette) -> - swatches = _.map swatches, tinycolor + palette = _.map palette, tinycolor # filter white - swatches = _.filter swatches, (color) => - 0.25 < color.getLuminance() < 0.85 + palette = _.filter palette, (color) => + color.getLuminance() < 0.85 htmlString = '' max = 8 - for color, i in swatches + for color, i in palette htmlString += App.view('channel/color_swatch') color: color.toHexString() break if i is max - @swatches.html htmlString + @palette.html htmlString # auto use first color - if swatches[0] - @useSwatchColor undefined, swatches[0].toHexString() + if palette[0] + @usePaletteColor undefined, palette[0].toHexString() - useSwatchColor: (event, code) -> + usePaletteColor: (event, code) -> if event code = $(event.currentTarget).attr('data-color') @colorField.val code diff --git a/app/assets/javascripts/app/views/channel/chat.jst.eco b/app/assets/javascripts/app/views/channel/chat.jst.eco index 9f1443d88..06c78c7ee 100644 --- a/app/assets/javascripts/app/views/channel/chat.jst.eco +++ b/app/assets/javascripts/app/views/channel/chat.jst.eco @@ -63,11 +63,14 @@
-
+
- +
+ + +
@@ -122,7 +125,7 @@
-
+
diff --git a/app/assets/stylesheets/zammad.scss b/app/assets/stylesheets/zammad.scss index b0c88236a..1051b817b 100644 --- a/app/assets/stylesheets/zammad.scss +++ b/app/assets/stylesheets/zammad.scss @@ -2317,6 +2317,10 @@ ol.tabs li { height: 12px; } +.loading.icon.muted { + background: hsl(195,20%,96%); +} + @keyframes rotateplane { 0% { transform: perspective(120px) rotateX(0deg) rotateY(0deg); @@ -7431,6 +7435,18 @@ output { height: 450px; width: 100%; + .browser-website { + position: relative; + height: 100%; + transform-origin: left top; + overflow: auto; + + &[data-mode=screenshot] iframe, + &[data-mode=iframe] img { + display: none; + } + } + iframe { position: absolute; border: none; @@ -7438,7 +7454,11 @@ output { top: 0; width: 100%; height: 100%; - transform-origin: left top; + background: white; + } + + img { + vertical-align: bottom; } } @@ -7455,6 +7475,10 @@ output { input { min-width: 0; padding-right: 40px; + + &.is-loading + .loading.icon { + display: block; + } } .loading.icon { @@ -7463,10 +7487,6 @@ output { top: 11px; display: none; } - - &.is-loading .loading.icon { - display: block; - } } .help-block {