1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-23 12:50:16 +00:00
bramw_baserow/web-frontend/modules/builder/pages/tmpPageBuilder.vue
Jonathan Adeline 4321aaea9a Replace icons
2023-09-28 13:39:41 +00:00

271 lines
9.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<!--
This is a temporary page that just holds the static html code. It can later be used
to copy parts out off when building the real thing. When we don't need it anymore,
we should delete it. Note that when this page component is deleted, we must also
delete `builder/components/TemporaryPreview.vue`.
-->
<header class="layout__col-2-1 header header--space-between">
<ul class="header__filter">
<li class="header__filter-item">
<div>
<a class="header__filter-link"
><i class="header__filter-icon iconoir-selection"></i>
<span class="header__filter-name">Elements</span></a
>
</div>
</li>
<li class="header__filter-item">
<div>
<a class="header__filter-link"
><i class="header__filter-icon iconoir-table"></i>
<span class="header__filter-name">Data</span></a
>
</div>
</li>
<li class="header__filter-item">
<div>
<a class="header__filter-link"
><i class="header__filter-icon iconoir-sigma-function"></i>
<span class="header__filter-name">Variables</span></a
>
</div>
</li>
<li class="header__filter-item">
<div>
<a class="header__filter-link"
><i class="header__filter-icon iconoir-settings"></i>
<span class="header__filter-name">Page settings</span></a
>
</div>
</li>
</ul>
<ul class="header__filter">
<li class="header__filter-item header__filter-item--no-margin-left">
<div>
<a
class="header__filter-link"
:class="{ 'active active--primary': device === 'desktop' }"
@click="setDevice('desktop')"
><i class="header__filter-icon iconoir-laptop"></i
></a>
</div>
</li>
<li class="header__filter-item">
<div>
<a
class="header__filter-link"
:class="{ 'active active--primary': device == 'tablet' }"
@click="setDevice('tablet')"
><i class="header__filter-icon baserow-icon-tablet"></i
></a>
</div>
</li>
<li class="header__filter-item">
<div>
<a
class="header__filter-link"
:class="{ 'active active--primary': device == 'smartphone' }"
@click="setDevice('smartphone')"
><i class="header__filter-icon iconoir-smartphone-device"></i
></a>
</div>
</li>
</ul>
<ul class="header__filter">
<li class="header__filter-item">
<div>
<a class="header__filter-link">
<span class="header__filter-name">Preview</span></a
>
</div>
</li>
<li class="header__filter-item header__filter-item--right">
<div>
<a class="header__filter-link"
><i class="header__filter-icon iconoir-upload"></i>
<span class="header__filter-name">Publish</span></a
>
</div>
</li>
</ul>
</header>
<div class="layout__col-2-2 content">
<div class="page-builder">
<div class="page-builder__preview-wrapper">
<div
ref="preview"
class="page-builder__preview"
:class="{
'page-builder__preview--tablet': device == 'tablet',
'page-builder__preview--smartphone': device == 'smartphone',
}"
>
<div ref="previewScaled" class="page-builder__preview-scaled">
<TemporaryPreview>
<div
v-for="(i, index) in new Array(3)"
:key="index"
class="page-builder__preview-element"
:class="{
'page-builder__preview-element--active':
selectedElementIndex === index,
}"
@click="selectedElementIndex = index"
>
<a
v-if="selectedElementIndex + 1 !== index"
href="#"
class="page-builder__preview-add page-builder__preview-element-add page-builder__preview-element-add-first"
>
<i class="iconoir-plus"></i>
</a>
<a
v-if="selectedElementIndex - 1 !== index"
href="#"
class="page-builder__preview-add page-builder__preview-element-add page-builder__preview-element-add-last"
>
<i class="iconoir-plus"></i>
</a>
<div
class="page-builder__preview-menu page-builder__preview-element-menu"
>
<a href="#" class="page-builder__preview-menu-item">
<i class="iconoir-copy"></i>
<div class="page-builder__preview-menu-item-description">
Copy
</div>
</a>
<a href="#" class="page-builder__preview-menu-item">
<i class="iconoir-nav-arrow-up"></i>
<div class="page-builder__preview-menu-item-description">
Move up
</div>
</a>
<a href="#" class="page-builder__preview-menu-item">
<i class="iconoir-nav-arrow-down"></i>
<div class="page-builder__preview-menu-item-description">
Move down
</div>
</a>
<a href="#" class="page-builder__preview-menu-item">
<i class="iconoir-bin"></i>
<div class="page-builder__preview-menu-item-description">
Delete
</div>
</a>
</div>
<p style="font-size: 20px; line-height: 180%; margin: 0">
1Are your projects, ideas or business processes unorganized
or unclear? With Baserow you decide how you want to
structure everything. Whether youre managing customers,
products or airplanes. If you know how a spreadsheet works,
you know how Baserow works.
</p>
</div>
</TemporaryPreview>
</div>
</div>
</div>
<div class="page-builder__sidebar">
<ul class="page-builder__sidebar-tabs">
<li class="page-builder__sidebar-tab">
<a href="#" class="page-builder__sidebar-tab-link">General</a>
</li>
<li class="page-builder__sidebar-tab">
<a href="#" class="page-builder__sidebar-tab-link">Style</a>
</li>
<li class="page-builder__sidebar-tab">
<a
href="#"
class="page-builder__sidebar-tab-link page-builder__sidebar-tab-link--active"
>Visibility</a
>
</li>
<li class="page-builder__sidebar-tab">
<a href="#" class="page-builder__sidebar-tab-link">Events</a>
</li>
</ul>
<div class="page-builder__sidebar-content">
content
<br />
content
<br />
content
<br />
content
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import ResizeObserver from 'resize-observer-polyfill'
import TemporaryPreview from '@baserow/modules/builder/components/TemporaryPreview'
export default {
name: 'Page',
components: { TemporaryPreview },
layout: 'app',
data() {
return {
device: 'desktop', // desktop, tablet or smartphone
selectedElementIndex: 1,
}
},
mounted() {
this.resizeObserver = new ResizeObserver(() => {
this.resized()
})
this.resizeObserver.observe(this.$el)
this.$nextTick(() => {
this.resized()
})
},
beforeDestroy() {
this.resizeObserver.unobserve(this.$el)
},
methods: {
setDevice(value) {
this.device = value
this.$nextTick(() => {
this.resized()
})
},
resized() {
// The widths are the minimum width the preview must have. If the preview dom
// element becomes smaller than the target, it will be scaled down so that the
// actual width remains the same, and it will preview the correct device.
const minimumWidths = {
desktop: 1100,
tablet: 768,
smartphone: 420,
}
const preview = this.$refs.preview
const previewScaled = this.$refs.previewScaled
const currentWidth = preview.clientWidth
const currentHeight = preview.clientHeight
const targetWidth = minimumWidths[this.device]
let scale = 1
let horizontal = 0
let vertical = 0
if (currentWidth < targetWidth) {
scale = Math.round((currentWidth / targetWidth) * 100) / 100
horizontal = (currentWidth - currentWidth * scale) / 2 / scale
vertical = (currentHeight - currentHeight * scale) / 2 / scale
}
previewScaled.style.transform = `scale(${scale})`
previewScaled.style.transformOrigin = `0 0`
previewScaled.style.width = `${horizontal * 2 + currentWidth}px`
previewScaled.style.height = `${vertical * 2 + currentHeight}px`
},
},
}
</script>