diff options
| author | Xavier Morel <xmo@openerp.com> | 2013-09-23 14:03:28 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2013-09-23 14:03:28 +0200 |
| commit | 89fc31a633562dbbf046ee48cd943b2eb63c37d0 (patch) | |
| tree | c835cbdad281bb200e00b05ea3574351a42f3bc6 /addons/website/static/src | |
| parent | be4b1b9b599d2dea07f68908b56a2c84ab8e5e5f (diff) | |
| parent | 6788b91af4ae0b116b55af3cb0c5ecf2a16acdac (diff) | |
[MERGE] from trunk
bzr revid: xmo@openerp.com-20130923120328-0wgd7wxhl1y5qyhr
Diffstat (limited to 'addons/website/static/src')
57 files changed, 2432 insertions, 748 deletions
diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index 31167984b83..64f58c8db11 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -1,3 +1,4 @@ +@charset "UTF-8"; /* ---- CKEditor Minimal Reset ---- */ .navbar.navbar-inverse .cke_chrome { border: none; @@ -7,6 +8,19 @@ background: transparent; } +.navbar.navbar-inverse .cke_toolbar { + position: relative; + top: 1px; +} +.navbar.navbar-inverse .cke_combo_button { + padding-top: 3px; + padding-bottom: 3px; +} +.navbar.navbar-inverse .cke_button { + padding-top: 7px; + padding-bottom: 7px; +} + .navbar.navbar-inverse .cke_top { background: transparent; border: none; @@ -86,6 +100,9 @@ table.editorbar-panel { cursor: pointer; width: 100%; } +table.editorbar-panel td { + border: 1px solid #aaaaaa; +} table.editorbar-panel td.selected { background-color: #b1c9d9; } @@ -99,6 +116,18 @@ table.editorbar-panel td.selected { user-select: auto; } +.modal-dialog.select-image { + width: 80%; +} + +.modal .existing-attachments .pager { + margin: 0; +} + +.modal .image-preview { + margin-bottom: 0.5em; +} + .cke_widget_drag_handler_container { display: none !important; } @@ -108,192 +137,232 @@ table.editorbar-panel td.selected { position: fixed; left: 0px; right: 0px; - bottom: 0px; - max-height: 280px; - min-height: 140px; + top: 50px; background: #282828; box-shadow: 0px 10px 10px -10px black inset; + z-index: 1010; + overflow: hidden; + height: 110px; +} +#oe_snippets:hover { + height: auto; +} +#oe_snippets .scroll { + white-space: nowrap; overflow-y: auto; - z-index: 20000; } -#oe_snippets .nav-pills { - padding: 3px 8px; +#oe_snippets .nav { + padding: 3px 15px; + width: 162px; background: #444444; + position: fixed; + z-index: 1; + height: 108px; +} +#oe_snippets .nav > li { + display: block; + float: none; } -#oe_snippets .nav-pills > li > a { +#oe_snippets .nav > li > a { padding: 2px 10px !important; + width: 100%; + display: block; } #oe_snippets .pill-content { - height: 140px; + display: inline-block; + height: 110px; + white-space: nowrap; + padding-left: 166px; +} +#oe_snippets .pill-content > div { + display: inline-block; +} +#oe_snippets .pill-content > div label { + width: 44px; + height: 100%; + color: white; + padding-left: 10px; +} +#oe_snippets .pill-content > div label div { + width: 100px; + text-align: center; + -webkit-transform: translate(-39px, 44px) rotate(-90deg); + -moz-transform: translate(-39px, 44px) rotate(-90deg); + -o-transform: translate(-39px, 44px) rotate(-90deg); + transform: translate(-39px, 44px) rotate(-90deg); + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + transform-origin: 50% 50%; } .oe_snippet { display: inline-block; vertical-align: top; - background: white; - width: 120px; - height: 120px; + width: 108px; + height: 108px; border-radius: 3px; - margin: 10px; - margin-right: 0px; + margin: 1px; + margin-top: 0px; position: relative; - box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.2); overflow: hidden; -webkit-user-select: none; user-select: none; cursor: move; + pointer-events: none; } -.oe_snippet .oe_snippet_thumbnail.oe_label { +.oe_snippet .oe_snippet_thumbnail { + pointer-events: auto; text-align: center; - background: #747474; - background-image: radial-gradient(rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.4)); height: 100%; - line-height: 120px; + background: transparent; color: white; text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.95); - box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset; -} -.oe_snippet .oe_snippet_body { - display: none; + position: relative; } -.oe_snippet > * { - pointer-events: none; +.oe_snippet .oe_snippet_thumbnail span, .oe_snippet .oe_snippet_thumbnail div { + line-height: 18px; } -.oe_snippet > :not(.oe_snippet_body):not(.oe_snippet_thumbnail) { +.oe_snippet > :not(.oe_snippet_thumbnail) { display: none !important; } -.oe_snippet > *:first-child:not(.oe_snippet_thumbnail) { - display: block; - -webkit-transform-origin-x: 5px; - -webkit-transform-origin-y: 10px; - -webkit-transform: scale(0.095); + +#oe_snippets .oe_snippet_thumbnail { + background: #747474; + background-image: radial-gradient(rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.4)); + box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset; } /* ---- SNIPPETS DROP ZONES ---- */ +.col-md-12 { + float: left; +} + .oe_drop_zone.oe_insert { display: block; - height: 32px; - margin: -16px 0px; + height: 48px; + margin: 0px; + margin-bottom: -48px; -webkit-transition: margin 250ms linear; width: 100%; - z-index: 1000; position: absolute; - background: rgba(153, 0, 255, 0.17); - border-radius: 3px; -} -.oe_drop_zone.oe_insert:first-child:not(:last-child) { - margin-top: -8px; - margin-bottom: -24px; -} -.oe_drop_zone.oe_insert:last-child:not(:first-child) { - margin-top: -24px; - margin-bottom: -8px; + z-index: 1000; } -.oe_drop_zone.oe_insert:before { +.oe_drop_zone.oe_insert:not(.oe_vertical):before { content: ""; display: block; border-top: dashed 2px rgba(209, 178, 255, 0.72); position: relative; - top: 16px; -} -.oe_drop_zone.oe_insert:first-child:not(:last-child):before { - top: 8px; -} -.oe_drop_zone.oe_insert:last-child:not(:first-child):before { - top: 24px; + top: 0px; } .oe_drop_zone.oe_insert.oe_hover:before { border-top: dashed 2px rgba(116, 255, 161, 0.72); } .oe_drop_zone.oe_insert.oe_vertical { - width: 16px; - display: inline-block; - position: absolute; - margin: 0px !important; + width: 48px; + float: left; + position: relative; + margin: 0px -24px !important; +} +.oe_drop_zone.oe_insert.oe_overlay { + background: rgba(153, 0, 255, 0.17); + border-radius: 3px; } -.oe_drop_zone { +.oe_drop_zone, .oe_drop_zone_style { background: rgba(153, 0, 255, 0.17); border-radius: 3px; } -.oe_drop_zone.oe_hover { +.oe_drop_zone.oe_hover, .oe_drop_zone_style.oe_hover { background: rgba(0, 255, 133, 0.22); z-index: 1001; } +.oe_drop_zone_style { + color: white; + height: 48px; + margin-bottom: 32px; +} + /* ---- SNIPPET MANIPULATOR ---- */ .oe_overlay { - display: block; + display: none; position: absolute; background: transparent; border-radius: 3px; - opacity: 0; transition: opacity 100ms linear; box-sizing: border-box; pointer-events: none; } -.oe_overlay.oe_hover { - opacity: 1; - cursor: pointer; -} -.oe_overlay.oe_selected, .oe_overlay.oe_active { - opacity: 1; - background: transparent; +.oe_overlay.oe_active { + display: block; border-style: dashed; border-width: 1px; box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.3), 0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset; -} -.oe_overlay.oe_selected { - border-color: rgba(0, 153, 255, 0.5); -} -.oe_overlay .oe_handle { - display: none !important; -} -.oe_overlay.oe_active { border-color: rgba(153, 0, 255, 0.5); } .oe_overlay.oe_active .oe_handle { display: block !important; pointer-events: auto; } +.oe_overlay.oe_active .oe_handle:before { + position: relative; + top: 50%; + left: 50%; + display: block; + background: white; + border: solid 1px #9900ff; + border-radius: 8px; + width: 16px; + height: 16px; + margin: -8px; + padding-left: 1px; + font-size: 14px; + line-height: 14px; + color: #9900ff; + -webkit-transition: background 100ms linear; +} +.oe_overlay.oe_active .oe_handle:hover:before { + background: #9900ff; + color: white; +} +.oe_overlay.oe_active .oe_handle.e:before { + content: "⇨"; +} +.oe_overlay.oe_active .oe_handle.s:before { + content: "⇩"; +} +.oe_overlay.oe_active .oe_handle.w:before { + content: "⇦"; +} +.oe_overlay.oe_active .oe_handle.n:before { + content: "⇧"; +} .oe_overlay .icon.btn { display: inline-block; } .oe_overlay .oe_overlay_options { - display: none; - z-index: 1002; -} -.oe_overlay .oe_overlay_options .oe_options, .oe_overlay .oe_overlay_options .oe_label, .oe_overlay .oe_overlay_options .oe_move { position: absolute; - display: block; - z-index: 1002; + width: 100%; + text-align: center; top: -11px; + z-index: 1002; } -.oe_overlay .oe_overlay_options .oe_options { +.oe_overlay .oe_overlay_options .btn, .oe_overlay .oe_overlay_options a { pointer-events: auto; - left: -14px; -} -.oe_overlay .oe_overlay_options .oe_label { - top: -8px; - right: 6px; - background: white; - font-size: 75%; - color: rgba(153, 0, 255, 0.5); - padding: 0 5px; + cursor: pointer; } -.oe_overlay .oe_overlay_options .oe_move { - pointer-events: auto; - left: 50%; +.oe_overlay .oe_overlay_options .dropdown { + display: inline-block; } -.oe_overlay .oe_overlay_options .oe_move .js_box_move { - margin-left: -50%; +.oe_overlay .oe_overlay_options .dropdown-menu { + text-align: left; + min-width: 180px; } .oe_overlay .oe_overlay_options .dropdown-menu select, .oe_overlay .oe_overlay_options .dropdown-menu input { display: block; } -.oe_overlay.oe_active .oe_overlay_options { - display: block; -} .oe_handle { pointer-events: auto; @@ -414,10 +483,30 @@ table.editorbar-panel td.selected { .oe_seo_configuration .oe_seo_suggestion { cursor: pointer; } +.oe_seo_configuration .oe_seo_keyword { + padding: 0.2em 0.4em 0.2em 0.5em; + border-radius: 0.4em; +} +.oe_seo_configuration .keyword-in-title { + background-color: #5cb85c; + color: white; +} +.oe_seo_configuration .keyword-in-description { + background-color: #428bca; + color: white; +} +.oe_seo_configuration .keyword-in-body { + background-color: #5bc0de; + color: white; +} /* ---- ACE EDITOR ---- */ .oe_ace_view_editor { transition: all 0.2s ease-in; + -webkit-transition: all 0.2s ease-in; + -ms-transition: all 0.2s ease-in; + -o-transition: all 0.2s ease-in; + -moz-transition: all 0.2s ease-in; opacity: 0.3; position: fixed; top: 51px; @@ -435,10 +524,16 @@ table.editorbar-panel td.selected { .oe_ace_view_editor .oe_ace_view_editor_title .oe_view_list { width: 50%; height: 32px; + font-size: 14px; + font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace; + line-height: normal; } .oe_ace_view_editor .oe_ace_view_editor_title .btn { height: 32px; padding: 0 4px 0 4px; + font-size: 14px; + font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace; + line-height: normal; } .oe_ace_view_editor .ace_editor { position: absolute; diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 597804812f1..90b02d3b83a 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -8,6 +8,17 @@ .navbar.navbar-inverse .cke_inner background: transparent +.navbar.navbar-inverse + .cke_toolbar + position: relative + top: 1px + .cke_combo_button + padding-top: 3px + padding-bottom: 3px + .cke_button + padding-top: 7px + padding-bottom: 7px + .navbar.navbar-inverse .cke_top background: transparent border: none @@ -77,6 +88,8 @@ table.editorbar-panel cursor: pointer width: 100% + td + border: 1px solid #aaa td.selected background-color: #b1c9d9 @@ -91,6 +104,16 @@ table.editorbar-panel -o-user-select: auto user-select: auto +.modal-dialog.select-image + width: 80% + +.modal .existing-attachments + .pager + margin: 0 + +.modal .image-preview + margin-bottom: 0.5em + // "remove" drag & drop of CKE widgets .cke_widget_drag_handler_container display: none !important @@ -101,165 +124,198 @@ table.editorbar-panel position: fixed left: 0px right: 0px - bottom: 0px - max-height: 280px - min-height: 140px + top: 50px background: rgb(40,40,40) box-shadow: 0px 10px 10px -10px black inset - overflow-y: auto - z-index: 20000 - .nav-pills - padding: 3px 8px + z-index: 1010 + overflow: hidden + height: 110px + &:hover + height: auto + .scroll + white-space: nowrap + overflow-y: auto + .nav + padding: 3px 15px + width: 162px background: #444444 - > li > a - padding: 2px 10px !important + > li + display: block + float: none + > a + padding: 2px 10px !important + width: 100% + display: block + position: fixed + z-index: 1 + height: 108px .pill-content - height: 140px + display: inline-block + height: 110px + white-space: nowrap + padding-left: 166px + > div + display: inline-block + label + width: 44px + height: 100% + color: #fff + padding-left: 10px + div + width: 100px + text-align: center + -webkit-transform: translate(-39px, 44px) rotate(-90deg) + -moz-transform: translate(-39px, 44px) rotate(-90deg) + -o-transform: translate(-39px, 44px) rotate(-90deg) + transform: translate(-39px, 44px) rotate(-90deg) + -webkit-transform-origin: 50% 50% + -moz-transform-origin: 50% 50% + -ms-transform-origin: 50% 50% + -o-transform-origin: 50% 50% + transform-origin: 50% 50% .oe_snippet display: inline-block vertical-align: top - background: white - width: 120px - height: 120px + width: 108px + height: 108px border-radius: 3px - margin: 10px - margin-right: 0px + margin: 1px + margin-top: 0px position: relative - box-shadow: 0px 3px 10px rgba(0,0,0,0.2) overflow: hidden -webkit-user-select: none user-select: none cursor: move + pointer-events: none - .oe_snippet_thumbnail.oe_label + .oe_snippet_thumbnail + pointer-events: auto text-align: center - background: rgb(116, 116, 116) - background-image: radial-gradient(rgba(0,0,0,0.25),rgba(0,0,0,0.4)) height: 100% - line-height: 120px + background: transparent color: white text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.95) - box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset - - .oe_snippet_body - display: none - & > * - pointer-events: none - & > :not(.oe_snippet_body):not(.oe_snippet_thumbnail) + position: relative + span, div + line-height: 18px + & > :not(.oe_snippet_thumbnail) display: none !important - & > *:first-child:not(.oe_snippet_thumbnail) - display: block - -webkit-transform-origin-x: 5px - -webkit-transform-origin-y: 10px - -webkit-transform: scale(0.095) - +#oe_snippets .oe_snippet_thumbnail + background: rgb(116, 116, 116) + background-image: radial-gradient(rgba(0,0,0,0.25),rgba(0,0,0,0.4)) + box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset /* ---- SNIPPETS DROP ZONES ---- */ +.col-md-12 + float: left .oe_drop_zone.oe_insert display: block - height: 32px - margin: -16px 0px + height: 48px + margin: 0px + margin-bottom: -48px -webkit-transition: margin 250ms linear width: 100% + position: absolute z-index: 1000 - &:first-child:not(:last-child) - margin-top: -8px - margin-bottom: -24px - &:last-child:not(:first-child) - margin-top: -24px - margin-bottom: -8px - &:before + &:not(.oe_vertical):before content: "" display: block border-top: dashed 2px rgba(209, 178, 255, 0.72) position: relative - top: 16px - &:first-child:not(:last-child):before - top: 8px - &:last-child:not(:first-child):before - top: 24px + top: 0px &.oe_hover:before border-top: dashed 2px rgba(116, 255, 161, 0.72) &.oe_vertical - width: 16px - display: inline-block - position: absolute - margin: 0px !important + width: 48px + float: left + position: relative + margin: 0px -24px !important &.oe_overlay - position: absolute - background: rgba(153, 0, 255, 0.17) - border-radius: 3px + background: rgba(153, 0, 255, 0.17) + border-radius: 3px -.oe_drop_zone +.oe_drop_zone, .oe_drop_zone_style background: rgba(153, 0, 255, 0.17) border-radius: 3px &.oe_hover background: rgba(0, 255, 133, 0.22) z-index: 1001 +.oe_drop_zone_style + color: white + height: 48px + margin-bottom: 32px + /* ---- SNIPPET MANIPULATOR ---- */ .oe_overlay - display: block + display: none position: absolute - background: transparent //rgba(153, 0, 255, 0.05) + background: transparent border-radius: 3px - opacity: 0 transition: opacity 100ms linear box-sizing: border-box pointer-events: none - &.oe_hover - opacity: 1 - cursor: pointer - &.oe_selected, &.oe_active - opacity: 1 - background: transparent + &.oe_active + display: block border-style: dashed border-width: 1px box-shadow: 0px 0px 0px 1px rgba(255,255,255,0.3), 0px 0px 0px 1px rgba(255,255,255,0.3) inset - &.oe_selected - border-color: rgba(0, 153, 255, 0.5) - .oe_handle - display: none !important - &.oe_active border-color: rgba(153, 0, 255, 0.5) .oe_handle display: block !important pointer-events: auto + &:before + position: relative + top: 50% + left: 50% + display: block + background: rgba(255, 255, 255, 1) + border: solid 1px rgba(153, 0, 255, 1) + border-radius: 8px + width: 16px + height: 16px + margin: -8px + padding-left: 1px + font-size: 14px + line-height: 14px + color: rgba(153, 0, 255, 1) + -webkit-transition: background 100ms linear + &:hover:before + background: rgba(153, 0, 255, 1) + color: #fff + .oe_handle.e:before + content: "⇨" + .oe_handle.s:before + content: "⇩" + .oe_handle.w:before + content: "⇦" + .oe_handle.n:before + content: "⇧" + .icon.btn display: inline-block .oe_overlay_options - display: none + position: absolute + width: 100% + text-align: center + top: -11px z-index: 1002 - .oe_options,.oe_label,.oe_move - position: absolute - display: block - z-index: 1002 - top: -11px - .oe_options + .btn, a pointer-events: auto - left: -14px - .oe_label - top: -8px - right: 6px - background: #fff - font-size: 75% - color: rgba(153, 0, 255, 0.5) - padding: 0 5px - .oe_move - pointer-events: auto - left: 50% - .js_box_move - margin-left: -50% + cursor: pointer + .dropdown + display: inline-block + .dropdown-menu + text-align: left + min-width: 180px .dropdown-menu select,.dropdown-menu input display: block - &.oe_active .oe_overlay_options - display: block .oe_handle pointer-events: auto @@ -354,6 +410,10 @@ $icon_close: #E00101 /* ---- SEO TOOLS ---- */ $remove_color: $icon_close +$in_title_color: #5cb85c +$in_description_color: #428bca +$in_body_color: #5bc0de +$highlighted_text_color: #ffffff .oe_seo_configuration .modal-dialog width: 80% @@ -361,6 +421,18 @@ $remove_color: $icon_close color: $remove_color .oe_seo_suggestion cursor: pointer + .oe_seo_keyword + padding: .2em .4em .2em .5em + border-radius: .4em + .keyword-in-title + background-color: $in_title_color + color: $highlighted_text_color + .keyword-in-description + background-color: $in_description_color + color: $highlighted_text_color + .keyword-in-body + background-color: $in_body_color + color: $highlighted_text_color /* ---- ACE EDITOR ---- */ @@ -369,8 +441,16 @@ $editorbar_height: 40px // TODO Fix => might break with themes $navbar_height: 51px +@mixin editor-font + font-size: 14px + font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace + line-height: normal .oe_ace_view_editor transition: all 0.2s ease-in + -webkit-transition: all 0.2s ease-in + -ms-transition: all 0.2s ease-in + -o-transition: all 0.2s ease-in + -moz-transition: all 0.2s ease-in opacity: 0.3 position: fixed top: $navbar_height @@ -386,9 +466,11 @@ $navbar_height: 51px .oe_view_list width: 50% height: $editorbar_height - 8px + @include editor-font .btn height: $editorbar_height - 8px padding: 0 4px 0 4px + @include editor-font .ace_editor position: absolute top: $editorbar_height diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.eot b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.eot Binary files differnew file mode 100644 index 00000000000..87eaa434234 --- /dev/null +++ b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.eot diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.svg b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 00000000000..5fee0685496 --- /dev/null +++ b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode=" " /> +<glyph unicode="*" d="M1100 500h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200z" /> +<glyph unicode="+" d="M1100 400h-400v-400h-300v400h-400v300h400v400h300v-400h400v-300z" /> +<glyph unicode=" " /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="652" /> +<glyph unicode=" " horiz-adv-x="1304" /> +<glyph unicode=" " horiz-adv-x="434" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="217" /> +<glyph unicode=" " horiz-adv-x="163" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="326" /> +<glyph unicode="€" d="M800 500h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257 q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406z" /> +<glyph unicode="−" d="M1100 700h-900v-300h900v300z" /> +<glyph unicode="☁" d="M178 300h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57z" /> +<glyph unicode="✉" d="M1200 1100h-1200l600 -603zM300 600l-300 -300v600zM1200 900v-600l-300 300zM800 500l400 -400h-1200l400 400l200 -200z" /> +<glyph unicode="✏" d="M1101 889l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13l-94 -97zM401 189l614 614l-214 214l-614 -614zM-13 -13l333 112l-223 223z" /> +<glyph unicode="" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" d="M700 100h300v-100h-800v100h300v550l-500 550h1200l-500 -550v-550z" /> +<glyph unicode="" d="M1000 934v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7q-79 -25 -122.5 -82t-25.5 -112t86 -75.5t147 5.5 q65 21 109 69t44 90v606z" /> +<glyph unicode="" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="" d="M649 949q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5t-94 124.5t-33.5 117.5q0 64 28 123t73 100.5t104.5 64t119 20.5 t120 -38.5t104.5 -104.5z" /> +<glyph unicode="" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM168 71l2 1z" /> +<glyph unicode="" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM747 331l-74 229l193 140h-235l-77 211l-78 -211h-239l196 -142l-73 -226l192 140zM168 71l2 1z" /> +<glyph unicode="" d="M1200 143v-143h-1200v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100z" /> +<glyph unicode="" d="M1200 1100v-1100h-1200v1100h1200zM200 1000h-100v-100h100v100zM900 1000h-600v-400h600v400zM1100 1000h-100v-100h100v100zM200 800h-100v-100h100v100zM1100 800h-100v-100h100v100zM200 600h-100v-100h100v100zM1100 600h-100v-100h100v100zM900 500h-600v-400h600 v400zM200 400h-100v-100h100v100zM1100 400h-100v-100h100v100zM200 200h-100v-100h100v100zM1100 200h-100v-100h100v100z" /> +<glyph unicode="" d="M500 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400 q21 0 35.5 -14.5t14.5 -35.5zM500 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 250v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5 t14.5 -35.5z" /> +<glyph unicode="" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700 q21 0 35.5 -14.5t14.5 -35.5zM300 450v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-200q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM1200 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M448 34l818 820l-212 212l-607 -607l-206 207l-212 -212z" /> +<glyph unicode="" d="M882 106l-282 282l-282 -282l-212 212l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282z" /> +<glyph unicode="" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM507 363q137 0 233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5t-234 -97t-97 -233 t97 -233t234 -97zM600 800h100v-200h-100v-100h-200v100h-100v200h100v100h200v-100z" /> +<glyph unicode="" d="M913 432l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -141 -78 -262zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 801v-200h400v200h-400z" /> +<glyph unicode="" d="M700 750v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5zM800 975v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123 t-123 184t-45.5 224.5q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1200 1h-200v1200h200v-1200zM900 1h-200v800h200v-800zM600 1h-200v500h200v-500zM300 301h-200v-300h200v300z" /> +<glyph unicode="" d="M488 183l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5 q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39zM600 815q89 0 152 -63 t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152q0 88 63 151t152 63z" /> +<glyph unicode="" d="M900 1100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100zM800 1100v100h-300v-100h300zM200 900h900v-800q0 -41 -29.5 -71 t-70.5 -30h-700q-41 0 -70.5 30t-29.5 71v800zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="" d="M1301 601h-200v-600h-300v400h-300v-400h-300v600h-200l656 644z" /> +<glyph unicode="" d="M600 700h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18v1150q0 11 7 18t18 7h475v-500zM1000 800h-300v300z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 600h200 v-100h-300v400h100v-300z" /> +<glyph unicode="" d="M721 400h-242l-40 -400h-539l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538zM712 500l-27 300h-170l-27 -300h224z" /> +<glyph unicode="" d="M1100 400v-400h-1100v400h490l-290 300h200v500h300v-500h200l-290 -300h490zM988 300h-175v-100h175v100z" /> +<glyph unicode="" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 1012q-170 0 -291 -121t-121 -291t121 -291t291 -121t291 121 t121 291t-121 291t-291 121zM700 600h150l-250 -300l-250 300h150v300h200v-300z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM850 600h-150 v-300h-200v300h-150l250 300z" /> +<glyph unicode="" d="M0 500l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18v475zM903 1000h-606l-97 -500h200l50 -200h300l50 200h200z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM797 598 l-297 -201v401z" /> +<glyph unicode="" d="M1177 600h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123t-123 -184t-45.5 -224.5t45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123 t123 184t45.5 224.5z" /> +<glyph unicode="" d="M700 800l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400zM500 400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122l-145 -145v400h400z" /> +<glyph unicode="" d="M100 1200v-1200h1100v1200h-1100zM1100 100h-900v900h900v-900zM400 800h-100v100h100v-100zM1000 800h-500v100h500v-100zM400 600h-100v100h100v-100zM1000 600h-500v100h500v-100zM400 400h-100v100h100v-100zM1000 400h-500v100h500v-100zM400 200h-100v100h100v-100 zM1000 300h-500v-100h500v100z" /> +<glyph unicode="" d="M200 0h-100v1100h100v-1100zM1100 600v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5z" /> +<glyph unicode="" d="M1200 275v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5t-49.5 -227v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50 q11 0 18 7t7 18zM400 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14zM1000 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14z" /> +<glyph unicode="" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM971 600l141 -141l-71 -71l-141 141l-141 -141l-71 71l141 141l-141 141l71 71l141 -141l141 141l71 -71z" /> +<glyph unicode="" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="" d="M974 186l6 8q142 178 142 405q0 230 -144 408l-6 8l-83 -64l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8zM300 801l300 200v-800l-300 200h-300v400h300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257z" /> +<glyph unicode="" d="M100 700h400v100h100v100h-100v300h-500v-600h100v100zM1200 700v500h-600v-200h100v-300h200v-300h300v200h-200v100h200zM100 1100h300v-300h-300v300zM800 800v300h300v-300h-300zM200 900h100v100h-100v-100zM900 1000h100v-100h-100v100zM300 600h-100v-100h-200 v-500h500v500h-200v100zM900 200v-100h-200v100h-100v100h100v200h-200v100h300v-300h200v-100h-100zM400 400v-300h-300v300h300zM300 200h-100v100h100v-100zM1100 300h100v-100h-100v100zM600 100h100v-100h-100v100zM1200 100v-100h-300v100h300z" /> +<glyph unicode="" d="M100 1200h-100v-1000h100v1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 1200v-1000h-200v1000h200zM400 100v-100h-300v100h300zM500 91h100v-91h-100v91zM700 91h100v-91h-100v91zM1100 91v-91h-200v91h200z " /> +<glyph unicode="" d="M1200 500l-500 -500l-699 700v475q0 10 7.5 17.5t17.5 7.5h474zM320 882q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71t29 -71q30 -30 71.5 -30t71.5 30z" /> +<glyph unicode="" d="M1201 500l-500 -500l-699 700v475q0 11 7 18t18 7h474zM1501 500l-500 -500l-50 50l450 450l-700 700h100zM320 882q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71t30 -71q29 -30 71 -30t71 30z" /> +<glyph unicode="" d="M1200 1200v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900v1025l175 175h925z" /> +<glyph unicode="" d="M947 829l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18l-94 -346l40 -124h592zM1200 800v-700h-200v200h-800v-200h-200v700h200l100 -200h600l100 200h200zM881 176l38 -152q2 -10 -3.5 -17t-15.5 -7h-600q-10 0 -15.5 7t-3.5 17l38 152q2 10 11.5 17t19.5 7 h500q10 0 19.5 -7t11.5 -17z" /> +<glyph unicode="" d="M1200 0v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417zM416 521l178 457l46 -140l116 -317 h-340z" /> +<glyph unicode="" d="M100 1199h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111t-162 -38.5h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21 t-29 14t-49 14.5v70zM400 1079v-379h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425z" /> +<glyph unicode="" d="M1150 1200h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49v300h150h700zM100 1000v-800h75l-125 -167l-125 167h75v800h-75l125 167 l125 -167h-75z" /> +<glyph unicode="" d="M950 1201h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50v300h150h700zM200 101h800v75l167 -125l-167 -125v75h-800v-75l-167 125l167 125 v-75z" /> +<glyph unicode="" d="M700 950v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35zM1100 650v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1000 q21 0 35.5 15t14.5 35zM900 350v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" /> +<glyph unicode="" d="M1000 950v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 650v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1100 q21 0 35.5 15t14.5 35zM1000 350v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M400 1100h-100v-1100h100v1100zM700 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM1100 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM100 425v75h-201v100h201v75l166 -125zM900 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM1200 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" /> +<glyph unicode="" d="M201 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM801 1100h100v-1100h-100v1100zM601 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM1101 425v75h200v100h-200v75l-167 -125zM401 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM701 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" /> +<glyph unicode="" d="M900 925v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M1200 1056v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31zM1100 1000h-1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500zM476 750q0 -56 -39 -95t-95 -39t-95 39t-39 95t39 95t95 39t95 -39 t39 -95z" /> +<glyph unicode="" d="M600 1213q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262q0 124 60.5 231.5t165 172t226.5 64.5zM599 514q107 0 182.5 75.5t75.5 182.5t-75.5 182 t-182.5 75t-182 -75.5t-75 -181.5q0 -107 75.5 -182.5t181.5 -75.5z" /> +<glyph unicode="" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 173v854q-176 0 -301.5 -125t-125.5 -302t125.5 -302t301.5 -125z " /> +<glyph unicode="" d="M554 1295q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5zM455 296q-7 6 -18 17 t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156q14 -82 59.5 -136t136.5 -80z" /> +<glyph unicode="" d="M1108 902l113 113l-21 85l-92 28l-113 -113zM1100 625v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125zM436 341l161 50l412 412l-114 113l-405 -405z" /> +<glyph unicode="" d="M1100 453v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5z M813 431l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209z" /> +<glyph unicode="" d="M1100 569v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69z M625 348l566 567l-136 137l-430 -431l-147 147l-136 -136z" /> +<glyph unicode="" d="M900 303v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198l-300 300l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296z" /> +<glyph unicode="" d="M900 0l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100z" /> +<glyph unicode="" d="M1200 0l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100z" /> +<glyph unicode="" d="M1200 0l-500 488v-488l-564 550l564 550v-487l500 487v-1100z" /> +<glyph unicode="" d="M1100 550l-900 550v-1100z" /> +<glyph unicode="" d="M500 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM900 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200 q21 0 35.5 14.5t14.5 35.5z" /> +<glyph unicode="" d="M1100 150v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35z" /> +<glyph unicode="" d="M500 0v488l-500 -488v1100l500 -487v487l564 -550z" /> +<glyph unicode="" d="M1050 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488l-500 -488v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1064l-550 -564h1100zM1200 350v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M777 7l240 240l-353 353l353 353l-240 240l-592 -594z" /> +<glyph unicode="" d="M513 -46l-241 240l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-200h-200v-200h200v-200h200v200h200v200h-200v200h-200z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM300 700v-200h600v200h-600z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM247 741l141 -141l-142 -141l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141 l-141 142z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM546 623l-102 102l-174 -174l276 -277l411 411l-175 174z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 500h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3 q-105 0 -172 -56t-67 -183h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5zM500 400v-100h200v100h-200z" /> +<glyph unicode="" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-100h200v100h-200zM400 700v-100h100v-200h-100v-100h400v100h-100v300h-300z" /> +<glyph unicode="" d="M1200 700v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203zM700 500v-206q149 48 201 206h-201v200h200 q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210q24 -73 79.5 -127.5t130.5 -78.5v206h200z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM844 735 l-135 -135l135 -135l-109 -109l-135 135l-135 -135l-109 109l135 135l-135 135l109 109l135 -135l135 135z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM896 654 l-346 -345l-228 228l141 141l87 -87l204 205z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM248 385l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5q0 -115 62 -215zM955 809l-564 -564q97 -59 209 -59q171 0 292.5 121.5 t121.5 292.5q0 112 -59 209z" /> +<glyph unicode="" d="M1200 400h-600v-301l-600 448l600 453v-300h600v-300z" /> +<glyph unicode="" d="M600 400h-600v300h600v300l600 -453l-600 -448v301z" /> +<glyph unicode="" d="M1098 600h-298v-600h-300v600h-296l450 600z" /> +<glyph unicode="" d="M998 600l-449 -600l-445 600h296v600h300v-600h298z" /> +<glyph unicode="" d="M600 199v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453z" /> +<glyph unicode="" d="M1200 1200h-400l129 -129l-294 -294l142 -142l294 294l129 -129v400zM565 423l-294 -294l129 -129h-400v400l129 -129l294 294z" /> +<glyph unicode="" d="M871 730l129 -130h-400v400l129 -129l295 295l142 -141zM200 600h400v-400l-129 130l-295 -295l-142 141l295 295z" /> +<glyph unicode="" d="M600 1177q118 0 224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5t45.5 224.5t123 184t184 123t224.5 45.5zM686 549l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5 l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5zM700 400h-200v-100h200v100z" /> +<glyph unicode="" d="M1200 900h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100h100v-200h400v300h200v-300h400v200h100v100z M731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269zM481 900h-281q-3 0 14 48t35 96l18 47zM100 0h400v400h-400v-400zM700 400h400v-400h-400v400z" /> +<glyph unicode="" d="M0 121l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55l-201 -202 v143zM692 611q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5t86.5 76.5q55 66 367 234z" /> +<glyph unicode="" d="M1261 600l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5 t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30zM600 240q64 0 123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212 q0 85 46 158q-102 -87 -226 -258q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5zM484 762l-107 -106q49 -124 154 -191l105 105q-37 24 -75 72t-57 84z" /> +<glyph unicode="" d="M906 1200l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148zM1261 600l-26 -40q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5 t-124 -100t-146.5 -79l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52zM513 264l37 141q-107 18 -178.5 101.5t-71.5 193.5q0 85 46 158q-102 -87 -226 -258q210 -282 393 -336z M484 762l-107 -106q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68z" /> +<glyph unicode="" d="M-47 0h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66t50.5 -34zM700 200v100h-200v-100h-345l445 723l445 -723h-345zM700 700h-200v-100l100 -300l100 300v100z" /> +<glyph unicode="" d="M800 711l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41q0 20 11 44.5t26 38.5 l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339z" /> +<glyph unicode="" d="M941 800l-600 -600h-341v200h259l600 600h241v198l300 -295l-300 -300v197h-159zM381 678l141 142l-181 180h-341v-200h259zM1100 598l300 -295l-300 -300v197h-241l-181 181l141 142l122 -123h159v198z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M400 900h-300v300h300v-300zM1100 900h-300v300h300v-300zM1100 800v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5t-58 109.5t-31.5 116t-15 104t-3 83v200h300v-250q0 -113 6 -145 q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300z" /> +<glyph unicode="" d="M902 184l226 227l-578 579l-580 -579l227 -227l352 353z" /> +<glyph unicode="" d="M650 218l578 579l-226 227l-353 -353l-352 353l-227 -227z" /> +<glyph unicode="" d="M1198 400v600h-796l215 -200h381v-400h-198l299 -283l299 283h-200zM-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196z" /> +<glyph unicode="" d="M1050 1200h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35 q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43l-100 475q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M201 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000zM1501 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="" d="M900 303v197h-600v-197l-300 297l300 298v-198h600v198l300 -298z" /> +<glyph unicode="" d="M31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM100 300h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM900 200h-100v-100h100v100z M1100 200h-100v-100h100v100z" /> +<glyph unicode="" d="M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35zM325 800l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351v250v5 q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200zM-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5z" /> +<glyph unicode="" d="M445 1180l-45 -233l-224 78l78 -225l-233 -44l179 -156l-179 -155l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180z" /> +<glyph unicode="" d="M700 1200h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5zM700 925l-50 -225h450 v-125l-250 -375h-214l-136 100h-100v375l150 212l100 213h50v-175zM0 800v-600h200v600h-200z" /> +<glyph unicode="" d="M700 0h-50q-27 0 -51 20t-38 48l-96 198l-145 196q-20 26 -20 63v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5zM200 400h-200v600h200 v-600zM700 275l-50 225h450v125l-250 375h-214l-136 -100h-100v-375l150 -212l100 -213h50v175z" /> +<glyph unicode="" d="M364 873l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM408 792v-503 l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83zM208 200h-200v600h200v-600z" /> +<glyph unicode="" d="M475 1104l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111t54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6zM370 946 l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100h222q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237zM1199 201h-200v600h200v-600z" /> +<glyph unicode="" d="M1100 473v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90zM911 400h-503l-236 339 l83 86l183 -146q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294zM1000 200v-200h-600v200h600z" /> +<glyph unicode="" d="M305 1104v200h600v-200h-600zM605 310l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15l-230 -362q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106z M905 804v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146l-83 86l237 339h503z" /> +<glyph unicode="" d="M603 1195q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM598 701h-298v-201h300l-2 -194l402 294l-402 298v-197z" /> +<glyph unicode="" d="M597 1195q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5zM200 600l400 -294v194h302v201h-300v197z" /> +<glyph unicode="" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM300 600h200v-300h200v300h200l-300 400z" /> +<glyph unicode="" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM500 900v-300h-200l300 -400l300 400h-200v300h-200z" /> +<glyph unicode="" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM627 1101q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6 q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55 t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q102 -2 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7 q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5 t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23q-19 -3 -37 0zM613 994q0 -18 8 -42.5t16.5 -44t9.5 -23.5q-9 2 -31 5t-36 5t-32 8t-30 14q3 12 16 30t16 25q10 -10 18.5 -10 t14 6t14.5 14.5t16 12.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M1100 1200v-100h-1000v100h1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="" d="M329 729l142 142l-200 200l129 129h-400v-400l129 129zM1200 1200v-400l-129 129l-200 -200l-142 142l200 200l-129 129h400zM271 129l129 -129h-400v400l129 -129l200 200l142 -142zM1071 271l129 129v-400h-400l129 129l-200 200l142 142z" /> +<glyph unicode="" d="M596 1192q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1010q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM455 905 q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5t16 38.5t39 16.5zM708 821l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5 q0 32 20.5 56.5t51.5 29.5zM855 709q23 0 38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39q0 22 16 38t39 16zM345 709q23 0 39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39t15.5 38.5t38.5 15.5z" /> +<glyph unicode="" d="M649 54l-16 22q-90 125 -293 323q-71 70 -104.5 105.5t-77 89.5t-61 99t-17.5 91q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-203 -198 -293 -323zM844 524l12 12 q64 62 97.5 97t64.5 79t31 72q0 71 -48 119t-105 48q-74 0 -132 -82l-118 -171l-114 174q-51 79 -123 79q-60 0 -109.5 -49t-49.5 -118q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203z" /> +<glyph unicode="" d="M476 406l19 -17l105 105l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159q0 -93 66 -159zM123 193l141 -141q66 -66 159 -66q95 0 159 66 l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159q0 -94 66 -160z" /> +<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM900 1000h-600v-700h600v700zM600 46q43 0 73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5t-73.5 -30.5t-30.5 -73.5 t30.5 -73.5t73.5 -30.5z" /> +<glyph unicode="" d="M700 1029v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5 t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5zM600 755v274q-61 -8 -97.5 -37.5t-36.5 -102.5q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3zM700 548 v-311q170 18 170 151q0 64 -44 99.5t-126 60.5z" /> +<glyph unicode="" d="M866 300l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5 t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94 q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1200l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-500h-100v100h-100v-100h-100v500h300zM901 1100h-100v-200h100v200zM700 500h300v-200h-99v-100h-100v100h99v100h-200v100zM800 100h200v-100h-300v200h100v-100z" /> +<glyph unicode="" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-200h-99v-100h-100v100h99v100h-200v100h300zM800 800h200v-100h-300v200h100v-100zM700 500h300v-500h-100v100h-100v-100h-100v500zM801 200h100v200h-100v-200z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1100h-100v100h200v-500h-100v400zM1100 500v-500h-100v100h-200v400h300zM1001 400h-100v-200h100v200z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM1100 1200v-500h-100v100h-200v400h300zM1001 1100h-100v-200h100v200zM900 400h-100v100h200v-500h-100v400z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M300 0l298 300h-198v900h-200v-900h-198zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M400 1100h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M700 0h-300q-163 0 -281.5 117.5t-118.5 282.5v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5zM400 800v-500l333 250z" /> +<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM800 700h-500l250 -333z" /> +<glyph unicode="" d="M1100 700v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM550 733l-250 -333h500z" /> +<glyph unicode="" d="M500 1100h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200zM700 550l-400 -350v200h-300v300h300v200z" /> +<glyph unicode="" d="M403 2l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32z" /> +<glyph unicode="" d="M800 200h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185zM900 200v200h-300v300h300v200l400 -350z" /> +<glyph unicode="" d="M1200 700l-149 149l-342 -353l-213 213l353 342l-149 149h500v-500zM1022 571l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5v-300 q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 794 q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M700 800v400h-300v-400h-300l445 -500l450 500h-295zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M400 700v-300h300v300h295l-445 500l-450 -500h300zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M405 400l596 596l-154 155l-442 -442l-150 151l-155 -155zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M409 1103l-97 97l-212 -212l97 -98zM650 861l-149 149l-212 -212l149 -149l-238 -248h700v699zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M539 950l-149 -149l212 -212l149 148l248 -237v700h-699zM297 709l-97 -97l212 -212l98 97zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="" d="M1200 1199v-1079l-475 272l-310 -393v416h-392zM1166 1148l-672 -712v-226z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1200h-100v-200h100v200z" /> +<glyph unicode="" d="M578 500h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120zM700 1200h-100v-200h100v200zM1300 538l-475 -476l-244 244l123 123l120 -120l353 352z" /> +<glyph unicode="" d="M529 500h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170zM700 1200h-100v-200h100v200zM1167 6l-170 170l-170 -170l-127 127l170 170l-170 170l127 127l170 -170l170 170l127 -128 l-170 -169l170 -170z" /> +<glyph unicode="" d="M700 500h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200zM700 1000h-100v200h100v-200zM1000 600h-200v-300h-200l300 -300l300 300h-200v300z" /> +<glyph unicode="" d="M602 500h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200zM700 1000h-100v200h100v-200zM1000 300h200l-300 300l-300 -300h200v-300h200v300z" /> +<glyph unicode="" d="M1200 900v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1200zM0 800v-550q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200zM100 500h400v-200h-400v200z" /> +<glyph unicode="" d="M500 1000h400v198l300 -298l-300 -298v198h-400v200zM100 800v200h100v-200h-100zM400 800h-100v200h100v-200zM700 300h-400v-198l-300 298l300 298v-198h400v-200zM800 500h100v-200h-100v200zM1000 500v-200h100v200h-100z" /> +<glyph unicode="" d="M1200 50v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM550 1200l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447l-100 203v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300z" /> +<glyph unicode="" d="M1100 106v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394 q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5z" /> +<glyph unicode="" d="M675 1000l-100 100h-375l-100 -100h400l200 -200v-98l295 98h105v200h-425zM500 300v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5zM100 800h300v-200h-300v200zM700 565l400 133 v-163l-400 -133v163zM100 500h300v-200h-300v200zM805 300l295 98v-298h-425l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M179 1169l-162 -162q-1 -11 -0.5 -32.5t16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118 q17 17 20 41.5t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14z" /> +<glyph unicode="" d="M1200 712v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40t-53.5 -36.5t-31 -27.5l-9 -10v-200q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38 t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5zM800 650l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5 t30 -27.5t12 -24l1 -10v-50z" /> +<glyph unicode="" d="M175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250zM1200 100v-100h-1100v100h1100z" /> +<glyph unicode="" d="M600 1100h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300v1000q0 41 29.5 70.5t70.5 29.5zM1000 800h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300v700q0 41 29.5 70.5t70.5 29.5zM400 0v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400h300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM400 600h-100v200h-100v-500h100v200h100v-200h100v500h-100v-200zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-500h300v100h-200v300h200v100h-300zM600 800v-500h300v100h-200v300h200v100h-300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM500 700l-300 -150l300 -150v300zM600 400l300 150l-300 150v-300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM900 800v-500h-700v500h700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM800 700h-130 q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 300h100v500h-200v-100h100v-400z M601 300h100v100h-100v-100z" /> +<glyph unicode="" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM300 700v100h-100v-500h300v400h-200zM800 300h100v500h-200v-100h100v-400zM401 400h-100v200h100v-200z M601 300h100v100h-100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM1000 900h-900v-700h900v700zM400 700h-200v100h300v-300h-99v-100h-100v100h99v200zM800 700h-100v100h200v-500h-100v400zM201 400h100v-100 h-100v100zM701 300h-100v100h100v-100z" /> +<glyph unicode="" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700h-300 v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M596 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700v-100 h-100v100h-200v-100h200v-100h-200v-100h-100v400h300zM800 400h-100v100h100v-100z" /> +<glyph unicode="" d="M800 300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h222v300h400v-300zM700 200h200l-300 -300 l-300 300h200v300h200v-300z" /> +<glyph unicode="" d="M600 714l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h8zM700 -100h-200v300h-200l300 300 l300 -300h-200v-300z" /> +<glyph unicode="" d="M700 200h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-155l-75 -45h350l-75 45v155z" /> +<glyph unicode="" d="M700 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5 q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350z" /> +<glyph unicode="💼" d="M800 1000h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100zM500 1000h200v100h-200v-100zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="📅" d="M1100 900v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1100zM0 800v-750q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100zM100 600h100v-100h-100v100zM300 600h100v-100h-100v100z M500 600h100v-100h-100v100zM700 600h100v-100h-100v100zM900 600h100v-100h-100v100zM100 400h100v-100h-100v100zM300 400h100v-100h-100v100zM500 400h100v-100h-100v100zM700 400h100v-100h-100v100zM900 400h100v-100h-100v100zM100 200h100v-100h-100v100zM300 200 h100v-100h-100v100zM500 200h100v-100h-100v100zM700 200h100v-100h-100v100zM900 200h100v-100h-100v100z" /> +<glyph unicode="📌" d="M902 1185l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207l-380 -303l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15z" /> +<glyph unicode="📎" d="M518 119l69 -60l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163t35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84 t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348 q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256z" /> +<glyph unicode="📷" d="M1200 200v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5z M1000 700h-100v100h100v-100zM844 500q0 -100 -72 -172t-172 -72t-172 72t-72 172t72 172t172 72t172 -72t72 -172zM706 500q0 44 -31 75t-75 31t-75 -31t-31 -75t31 -75t75 -31t75 31t31 75z" /> +<glyph unicode="🔒" d="M900 800h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="🔔" d="M1062 400h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94 q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327zM600 104q-54 0 -103 6q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6z" /> +<glyph unicode="🔖" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="🔥" d="M400 755q2 -12 8 -41.5t8 -43t6 -39.5t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85t5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5 q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129 q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5z" /> +<glyph unicode="🔧" d="M948 778l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138z" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.ttf b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.ttf Binary files differnew file mode 100644 index 00000000000..be784dc1d5b --- /dev/null +++ b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.ttf diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.woff b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.woff Binary files differnew file mode 100644 index 00000000000..2cc3e4852a5 --- /dev/null +++ b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.woff diff --git a/addons/website/static/src/css/snippets.css b/addons/website/static/src/css/snippets.css index 5b7d404a1fd..628689b78cf 100644 --- a/addons/website/static/src/css/snippets.css +++ b/addons/website/static/src/css/snippets.css @@ -206,4 +206,16 @@ [data-snippet-id] { min-height: 10px; min-width: 10px; -}
\ No newline at end of file +} + + +/* Custom CSS for snippets */ +.carousel.oe_small .carousel-inner { + height: 200px; +} +.carousel.oe_medium .carousel-inner { + height: 300px; +} +.carousel.oe_big .carousel-inner { + height: 450px; +} diff --git a/addons/website/static/src/css/website.css b/addons/website/static/src/css/website.css index 75de4387083..c48d4fa9b2a 100644 --- a/addons/website/static/src/css/website.css +++ b/addons/website/static/src/css/website.css @@ -78,6 +78,78 @@ margin-bottom: 0px !important; } +.pt128 { + padding-top: 128px !important; +} + +.pt92 { + padding-top: 92px !important; +} + +.pt64 { + padding-top: 64px !important; +} + +.pt48 { + padding-top: 48px !important; +} + +.pt32 { + padding-top: 32px !important; +} + +.pt16 { + padding-top: 16px !important; +} + +.pt8 { + padding-top: 8px !important; +} + +.pt4 { + padding-top: 4px !important; +} + +.pt0 { + padding-top: 0px !important; +} + +.pb128 { + padding-bottom: 128px !important; +} + +.pb92 { + padding-bottom: 92px !important; +} + +.pb64 { + padding-bottom: 64px !important; +} + +.pb48 { + padding-bottom: 48px !important; +} + +.pb32 { + padding-bottom: 32px !important; +} + +.pb16 { + padding-bottom: 16px !important; +} + +.pb8 { + padding-bottom: 8px !important; +} + +.pb4 { + padding-bottom: 4px !important; +} + +.pb0 { + padding-bottom: 0px !important; +} + /* Grid of unequally tall elements */ .grid > [class*="col-md"] { display: inline-block; @@ -95,6 +167,28 @@ vertical-align: bottom; } +/* Extra Styles */ +img.shadow { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2); + margin: 0 auto; +} + +h1.text-muted, h2.text-muted, h3.text-muted { + margin-top: 10px; +} + +/* ----- BOOTSTRAP HACK FOR HEADER NAV BAR ----- */ +.navbar.navbar-default.navbar-static-top { + margin-bottom: 0; +} + /* ----- BOOTSTRAP HACK FOR STICKY FOOTER ----- */ html, body, #wrapwrap { box-sizing: border-box; @@ -122,18 +216,86 @@ footer { } /* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ +.oe_structure.oe_empty:empty, [data-oe-type=html]:empty, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child { + background-image: url("/website/static/src/img/drag_here.png"); + background-repeat: no-repeat; + background-position: center top; + height: 200px !important; +} + +.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child { + position: static; +} + +.oe_structure.oe_empty:empty:before, [data-oe-type=html]:empty:before, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child:before, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child:before { + content: "Drag Building Blocks Here"; + text-align: center; + display: block; + padding-top: 100px; + padding-bottom: 50px; + color: grey; + font-size: 24px; +} + +/* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ .navbar .nav > li > p { margin-bottom: 0px; } -.carousel .item { - color: white; +.carousel-inner .item { + height: 100%; +} + +.carousel .carousel-caption h1, .carousel .carousel-caption h2, .carousel .carousel-caption h3 { + margin-top: 10px; + margin-bottom: 10px; +} +.carousel .carousel-image { + right: 10%; + left: 50%; + top: 5%; + bottom: 5%; + position: absolute; + text-align: center; +} +.carousel .carousel-image img { + height: 100%; + margin: 0 auto; +} +.carousel .item.text_image .carousel-caption { + left: auto; + right: auto; + bottom: 10%; + text-align: left; + padding: 20px; + background: rgba(0, 0, 0, 0.4); +} +.carousel .item.text_only .carousel-image { + display: none; +} +.carousel .item.text_only .carousel-caption { + left: 10%; + right: 10%; + top: 10%; + text-align: center; +} +.carousel .item.image_text .carousel-caption { + left: auto; + text-align: left; + right: 10%; + bottom: 10%; + padding: 20px; + background: rgba(0, 0, 0, 0.4); +} +.carousel .item.image_text .carousel-image { + right: 50%; + left: 10%; } /* ---- HOMEPAGE THEME CUSTOMIZATION ---- */ .dark { background: #eff8f8; - background: rgba(100, 200, 200, 0.1); + background: rgba(100, 200, 200, 0.14); -webkit-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset; -moz-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset; box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset; @@ -143,8 +305,8 @@ footer { padding-left: 16px; } -div#wrap .carousel { - top: -20px; +#themes-list .well { + padding: 0 0 20px 0; } /* -- Hack for removing double scrollbar from mobile preview -- */ diff --git a/addons/website/static/src/css/website.sass b/addons/website/static/src/css/website.sass index 86cfad27fc6..9f7efa2c416 100644 --- a/addons/website/static/src/css/website.sass +++ b/addons/website/static/src/css/website.sass @@ -49,6 +49,44 @@ .mb0 margin-bottom: 0px !important +.pt128 + padding-top: 128px !important +.pt92 + padding-top: 92px !important +.pt64 + padding-top: 64px !important +.pt48 + padding-top: 48px !important +.pt32 + padding-top: 32px !important +.pt16 + padding-top: 16px !important +.pt8 + padding-top: 8px !important +.pt4 + padding-top: 4px !important +.pt0 + padding-top: 0px !important + +.pb128 + padding-bottom: 128px !important +.pb92 + padding-bottom: 92px !important +.pb64 + padding-bottom: 64px !important +.pb48 + padding-bottom: 48px !important +.pb32 + padding-bottom: 32px !important +.pb16 + padding-bottom: 16px !important +.pb8 + padding-bottom: 8px !important +.pb4 + padding-bottom: 4px !important +.pb0 + padding-bottom: 0px !important + /* Grid of unequally tall elements */ .grid > [class*="col-md"] display: inline-block @@ -62,6 +100,27 @@ &.grid-align-bottom > [class*="col-md"] vertical-align: bottom +/* Extra Styles */ + +img.shadow + -webkit-border-radius: 3px + -moz-border-radius: 3px + -ms-border-radius: 3px + -o-border-radius: 3px + border-radius: 3px + -webkit-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2) + -moz-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2) + box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2) + margin: 0 auto + +h1.text-muted, h2.text-muted, h3.text-muted + margin-top: 10px + +/* ----- BOOTSTRAP HACK FOR HEADER NAV BAR ----- */ + +.navbar.navbar-default.navbar-static-top + margin-bottom: 0 + /* ----- BOOTSTRAP HACK FOR STICKY FOOTER ----- */ html,body, #wrapwrap @@ -86,6 +145,26 @@ footer /* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ +.oe_structure.oe_empty:empty, [data-oe-type=html]:empty, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child + background-image: url('/website/static/src/img/drag_here.png') + background-repeat: no-repeat + background-position: center top + height: 200px !important + +.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child + position: static + +.oe_structure.oe_empty:empty:before, [data-oe-type=html]:empty:before, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child:before, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child:before + content: 'Drag Building Blocks Here' + text-align: center + display: block + padding-top: 100px + padding-bottom: 50px + color: grey + font-size: 24px + +/* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ + .navbar .nav > li > p margin-bottom: 0px @@ -95,14 +174,57 @@ footer // .nav > li a // display: block -.carousel .item - color: white +.carousel-inner .item + height: 100% + +.carousel + .carousel-caption + h1, h2, h3 + margin-top: 10px + margin-bottom: 10px + .carousel-image + right: 10% + left: 50% + top: 5% + bottom: 5% + position: absolute + text-align: center + img + height: 100% + margin: 0 auto + .item.text_image + .carousel-caption + left: auto + right: auto + bottom: 10% + text-align: left + padding: 20px + background: rgba(0, 0, 0, 0.4) + .item.text_only + .carousel-image + display: none + .carousel-caption + left: 10% + right: 10% + top: 10% + text-align: center + .item.image_text + .carousel-caption + left: auto + text-align: left + right: 10% + bottom: 10% + padding: 20px + background: rgba(0, 0, 0, 0.4) + .carousel-image + right: 50% + left: 10% /* ---- HOMEPAGE THEME CUSTOMIZATION ---- */ .dark background: #eff8f8 - background: rgba(100, 200, 200, 0.1) + background: rgba(100, 200, 200, 0.14) -webkit-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset -moz-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset @@ -110,8 +232,8 @@ footer .nav-hierarchy padding-left: 16px -div#wrap .carousel - top: -20px +#themes-list .well + padding: 0 0 20px 0 /* -- Hack for removing double scrollbar from mobile preview -- */ div#mobile-preview.modal diff --git a/addons/website/static/src/img/banner/aqua.jpg b/addons/website/static/src/img/banner/aqua.jpg Binary files differnew file mode 100644 index 00000000000..47ce77005d4 --- /dev/null +++ b/addons/website/static/src/img/banner/aqua.jpg diff --git a/addons/website/static/src/img/banner/baby_blue.jpg b/addons/website/static/src/img/banner/baby_blue.jpg Binary files differnew file mode 100644 index 00000000000..38a3d85bc28 --- /dev/null +++ b/addons/website/static/src/img/banner/baby_blue.jpg diff --git a/addons/website/static/src/img/banner/banner_picture.png b/addons/website/static/src/img/banner/banner_picture.png Binary files differnew file mode 100644 index 00000000000..47836637498 --- /dev/null +++ b/addons/website/static/src/img/banner/banner_picture.png diff --git a/addons/website/static/src/img/banner/black.jpg b/addons/website/static/src/img/banner/black.jpg Binary files differnew file mode 100644 index 00000000000..7aaee7a0fb4 --- /dev/null +++ b/addons/website/static/src/img/banner/black.jpg diff --git a/addons/website/static/src/img/banner/business_guy.jpg b/addons/website/static/src/img/banner/business_guy.jpg Binary files differnew file mode 100644 index 00000000000..691729beb7e --- /dev/null +++ b/addons/website/static/src/img/banner/business_guy.jpg diff --git a/addons/website/static/src/img/banner/color_splash.jpg b/addons/website/static/src/img/banner/color_splash.jpg Binary files differnew file mode 100644 index 00000000000..e17ae39e70f --- /dev/null +++ b/addons/website/static/src/img/banner/color_splash.jpg diff --git a/addons/website/static/src/img/banner/flower.jpg b/addons/website/static/src/img/banner/flower.jpg Binary files differnew file mode 100644 index 00000000000..7208e4c99d9 --- /dev/null +++ b/addons/website/static/src/img/banner/flower.jpg diff --git a/addons/website/static/src/img/banner/flower_field.jpg b/addons/website/static/src/img/banner/flower_field.jpg Binary files differnew file mode 100644 index 00000000000..eec572fbb89 --- /dev/null +++ b/addons/website/static/src/img/banner/flower_field.jpg diff --git a/addons/website/static/src/img/greenfields.jpg b/addons/website/static/src/img/banner/greenfields.jpg Binary files differindex 58c7bc49738..58c7bc49738 100644 --- a/addons/website/static/src/img/greenfields.jpg +++ b/addons/website/static/src/img/banner/greenfields.jpg diff --git a/addons/website/static/src/img/banner/landscape.jpg b/addons/website/static/src/img/banner/landscape.jpg Binary files differnew file mode 100644 index 00000000000..35dfa6206c4 --- /dev/null +++ b/addons/website/static/src/img/banner/landscape.jpg diff --git a/addons/website/static/src/img/landscape.png b/addons/website/static/src/img/banner/landscape.png Binary files differindex 27b1b92e048..27b1b92e048 100644 --- a/addons/website/static/src/img/landscape.png +++ b/addons/website/static/src/img/banner/landscape.png diff --git a/addons/website/static/src/img/banner/mango.jpg b/addons/website/static/src/img/banner/mango.jpg Binary files differnew file mode 100644 index 00000000000..9f88e2fb987 --- /dev/null +++ b/addons/website/static/src/img/banner/mango.jpg diff --git a/addons/website/static/src/img/banner/mountains.jpg b/addons/website/static/src/img/banner/mountains.jpg Binary files differnew file mode 100644 index 00000000000..47e53c82c8c --- /dev/null +++ b/addons/website/static/src/img/banner/mountains.jpg diff --git a/addons/website/static/src/img/banner/orange_red.jpg b/addons/website/static/src/img/banner/orange_red.jpg Binary files differnew file mode 100644 index 00000000000..18838410c9f --- /dev/null +++ b/addons/website/static/src/img/banner/orange_red.jpg diff --git a/addons/website/static/src/img/banner/velour.jpg b/addons/website/static/src/img/banner/velour.jpg Binary files differnew file mode 100644 index 00000000000..f3b0cf1d528 --- /dev/null +++ b/addons/website/static/src/img/banner/velour.jpg diff --git a/addons/website/static/src/img/banner/wood.jpg b/addons/website/static/src/img/banner/wood.jpg Binary files differnew file mode 100644 index 00000000000..738ff955918 --- /dev/null +++ b/addons/website/static/src/img/banner/wood.jpg diff --git a/addons/website/static/src/img/banner/yellow_green.jpg b/addons/website/static/src/img/banner/yellow_green.jpg Binary files differnew file mode 100644 index 00000000000..efd4dad9278 --- /dev/null +++ b/addons/website/static/src/img/banner/yellow_green.jpg diff --git a/addons/website/static/src/img/big_picture.png b/addons/website/static/src/img/big_picture.png Binary files differnew file mode 100644 index 00000000000..cecb39679d5 --- /dev/null +++ b/addons/website/static/src/img/big_picture.png diff --git a/addons/website/static/src/img/drag_here.png b/addons/website/static/src/img/drag_here.png Binary files differnew file mode 100644 index 00000000000..f2e3d38b2df --- /dev/null +++ b/addons/website/static/src/img/drag_here.png diff --git a/addons/website/static/src/img/image_text.jpg b/addons/website/static/src/img/image_text.jpg Binary files differnew file mode 100644 index 00000000000..f34acfc771b --- /dev/null +++ b/addons/website/static/src/img/image_text.jpg diff --git a/addons/website/static/src/img/landscape.jpg b/addons/website/static/src/img/landscape.jpg Binary files differnew file mode 100644 index 00000000000..8c4d19c947e --- /dev/null +++ b/addons/website/static/src/img/landscape.jpg diff --git a/addons/website/static/src/img/library/baby.jpg b/addons/website/static/src/img/library/baby.jpg Binary files differnew file mode 100644 index 00000000000..2e1b0cb877a --- /dev/null +++ b/addons/website/static/src/img/library/baby.jpg diff --git a/addons/website/static/src/img/library/business_conference.jpg b/addons/website/static/src/img/library/business_conference.jpg Binary files differnew file mode 100644 index 00000000000..407137d159a --- /dev/null +++ b/addons/website/static/src/img/library/business_conference.jpg diff --git a/addons/website/static/src/img/library/business_hands.jpg b/addons/website/static/src/img/library/business_hands.jpg Binary files differnew file mode 100644 index 00000000000..cb012519301 --- /dev/null +++ b/addons/website/static/src/img/library/business_hands.jpg diff --git a/addons/website/static/src/img/library/business_stats.jpg b/addons/website/static/src/img/library/business_stats.jpg Binary files differnew file mode 100644 index 00000000000..1123100c675 --- /dev/null +++ b/addons/website/static/src/img/library/business_stats.jpg diff --git a/addons/website/static/src/img/library/engineer.jpg b/addons/website/static/src/img/library/engineer.jpg Binary files differnew file mode 100644 index 00000000000..bd0fa56c38f --- /dev/null +++ b/addons/website/static/src/img/library/engineer.jpg diff --git a/addons/website/static/src/img/library/flight.jpg b/addons/website/static/src/img/library/flight.jpg Binary files differnew file mode 100644 index 00000000000..0071979a015 --- /dev/null +++ b/addons/website/static/src/img/library/flight.jpg diff --git a/addons/website/static/src/img/library/gears.jpg b/addons/website/static/src/img/library/gears.jpg Binary files differnew file mode 100644 index 00000000000..868c2532c41 --- /dev/null +++ b/addons/website/static/src/img/library/gears.jpg diff --git a/addons/website/static/src/img/library/helpdesk.jpg b/addons/website/static/src/img/library/helpdesk.jpg Binary files differnew file mode 100644 index 00000000000..9591abe164e --- /dev/null +++ b/addons/website/static/src/img/library/helpdesk.jpg diff --git a/addons/website/static/src/img/library/landscape_tree.jpg b/addons/website/static/src/img/library/landscape_tree.jpg Binary files differnew file mode 100644 index 00000000000..fd5c9446c7b --- /dev/null +++ b/addons/website/static/src/img/library/landscape_tree.jpg diff --git a/addons/website/static/src/img/library/lazagne.jpg b/addons/website/static/src/img/library/lazagne.jpg Binary files differnew file mode 100644 index 00000000000..21f10a01ca7 --- /dev/null +++ b/addons/website/static/src/img/library/lazagne.jpg diff --git a/addons/website/static/src/img/library/manufacturing.jpg b/addons/website/static/src/img/library/manufacturing.jpg Binary files differnew file mode 100644 index 00000000000..dc7266e46a8 --- /dev/null +++ b/addons/website/static/src/img/library/manufacturing.jpg diff --git a/addons/website/static/src/img/library/personal_laptop.jpg b/addons/website/static/src/img/library/personal_laptop.jpg Binary files differnew file mode 100644 index 00000000000..069487766dd --- /dev/null +++ b/addons/website/static/src/img/library/personal_laptop.jpg diff --git a/addons/website/static/src/img/library/school_kids.jpg b/addons/website/static/src/img/library/school_kids.jpg Binary files differnew file mode 100644 index 00000000000..107b56bba97 --- /dev/null +++ b/addons/website/static/src/img/library/school_kids.jpg diff --git a/addons/website/static/src/img/library/ship_sea.jpg b/addons/website/static/src/img/library/ship_sea.jpg Binary files differnew file mode 100644 index 00000000000..cd0057dbdd6 --- /dev/null +++ b/addons/website/static/src/img/library/ship_sea.jpg diff --git a/addons/website/static/src/img/library/vegetables.jpg b/addons/website/static/src/img/library/vegetables.jpg Binary files differnew file mode 100644 index 00000000000..61a2518bbc4 --- /dev/null +++ b/addons/website/static/src/img/library/vegetables.jpg diff --git a/addons/website/static/src/img/library/world.jpg b/addons/website/static/src/img/library/world.jpg Binary files differnew file mode 100644 index 00000000000..b7b36d65360 --- /dev/null +++ b/addons/website/static/src/img/library/world.jpg diff --git a/addons/website/static/src/img/openerp_logo.png b/addons/website/static/src/img/openerp_logo.png Binary files differnew file mode 100644 index 00000000000..285a059cb06 --- /dev/null +++ b/addons/website/static/src/img/openerp_logo.png diff --git a/addons/website/static/src/img/text_image.png b/addons/website/static/src/img/text_image.png Binary files differnew file mode 100644 index 00000000000..ac02ef230c7 --- /dev/null +++ b/addons/website/static/src/img/text_image.png diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js index fd26c50aefd..206813f237b 100644 --- a/addons/website/static/src/js/website.ace.js +++ b/addons/website/static/src/js/website.ace.js @@ -3,20 +3,33 @@ var globalEditor; + var hash = "#advanced-view-editor"; + var website = openerp.website; website.templates.push('/website/static/src/xml/website.ace.xml'); + website.ready().then(function () { + if (window.location.hash.indexOf(hash) >= 0) { + launch(); + } + }); + + function launch () { + if (globalEditor) { + globalEditor.open(); + } else { + globalEditor = new website.ace.ViewEditor(this); + globalEditor.appendTo($(document.body)); + } + } + website.EditorBar.include({ events: _.extend({}, website.EditorBar.prototype.events, { 'click a[data-action=ace]': 'launchAce', }), - launchAce: function () { - if (globalEditor) { - globalEditor.open(); - } else { - globalEditor = new website.ace.ViewEditor(this); - globalEditor.appendTo($(document.body)); - } + launchAce: function (e) { + e.preventDefault(); + launch(); }, }); @@ -55,88 +68,143 @@ website.ace.ViewEditor = openerp.Widget.extend({ template: 'website.ace_view_editor', events: { - 'change #ace-view-list': 'displayView', - 'click button[data-action=save]': 'saveView', + 'change #ace-view-list': 'displaySelectedView', + 'click button[data-action=save]': 'saveViews', 'click button[data-action=format]': 'formatXml', 'click button[data-action=close]': 'close', }, + init: function (parent) { + this.buffers = {}; + this._super(parent); + }, start: function () { var self = this; + self.aceEditor = ace.edit(self.$('#ace-view-editor')[0]); + self.aceEditor.setTheme("ace/theme/monokai"); var viewId = $(document.documentElement).data('view-xmlid'); openerp.jsonRpc('/website/customize_template_get', 'call', { 'xml_id': viewId, 'optional': false, }).then(function (views) { - self.loadViewList.call(self, views); + self.loadViews.call(self, views); + self.open.call(self); }); - this.$el.hover(); - }, - selectedViewId: function () { - return parseInt(this.$('#ace-view-list').val(), 10); }, - loadViewList: function (views) { + loadViews: function (views) { + var self = this; var activeViews = _.filter(views, function (view) { return view.active; }); - var $viewList = this.$('#ace-view-list'); + var $viewList = self.$('#ace-view-list'); _.each(activeViews, function (view) { if (view.id) { - new website.ace.ViewOption(this, view).appendTo($viewList); + new website.ace.ViewOption(self, view).appendTo($viewList); + self.loadView(view.id); } }); - var editor = ace.edit(this.$('#ace-view-editor')[0]); - editor.setTheme("ace/theme/monokai"); - this.aceEditor = editor; - this.open(); }, - displayView: function () { - var editor = this.aceEditor; + loadView: function (id) { + var viewId = parseInt(id, 10); + var self = this; openerp.jsonRpc('/web/dataset/call', 'call', { model: 'ir.ui.view', method: 'read', - args: [[this.selectedViewId()], ['arch'], website.get_context()], + args: [[viewId], ['arch'], website.get_context()], }).then(function(result) { - var xml = new website.ace.XmlDocument(result[0].arch); - var editingSession = new ace.EditSession(xml.xml); + var editingSession = self.buffers[viewId] = new ace.EditSession(result[0].arch);; editingSession.setMode("ace/mode/xml"); editingSession.setUndoManager(new ace.UndoManager()); - editor.setSession(editingSession); + editingSession.on("change", function () { + setTimeout(function () { + var $option = self.$('#ace-view-list').find('[value='+viewId+']'); + var bufferName = $option.text(); + var dirtyMarker = " (unsaved changes)"; + var isDirty = editingSession.getUndoManager().hasUndo(); + if (isDirty && bufferName.indexOf(dirtyMarker) < 0) { + $option.text(bufferName + dirtyMarker); + } else if (!isDirty && bufferName.indexOf(dirtyMarker) > 0) { + $option.text(bufferName.substring(0, bufferName.indexOf(dirtyMarker))); + } + }, 1); + }); + if (viewId === self.selectedViewId()) { + self.displayView.call(self, viewId); + } }); }, + selectedViewId: function () { + return parseInt(this.$('#ace-view-list').val(), 10); + }, + displayView: function (id) { + var viewId = parseInt(id, 10); + var editingSession = this.buffers[viewId]; + if (editingSession) { + this.aceEditor.setSession(editingSession); + } + }, + displaySelectedView: function () { + this.displayView(this.selectedViewId()); + this.updateHash(); + }, formatXml: function () { var xml = new website.ace.XmlDocument(this.aceEditor.getValue()); this.aceEditor.setValue(xml.format()); }, - saveView: function () { + saveViews: function () { var self = this; - var xml = new website.ace.XmlDocument(this.aceEditor.getValue()); + var toSave = _.filter(_.map(self.buffers, function (editingSession, viewId) { + return { + id: parseInt(viewId, 10), + isDirty: editingSession.getUndoManager().hasUndo(), + text: editingSession.getValue(), + }; + }), function (session) { + return session.isDirty; + }); + var requests = _.map(toSave, self.saveView); + $.when.apply($, requests).then(function () { + self.reloadPage.call(self); + }).fail(function (source, error) { + var message = (error.data.arguments[0] === "Access Denied") ? "Access denied: please sign in" : error.message; + self.displayError.call(self, message); + }); + }, + saveView: function (session) { + var xml = new website.ace.XmlDocument(session.text); if (xml.isWellFormed()) { - openerp.jsonRpc('/web/dataset/call', 'call', { + return openerp.jsonRpc('/web/dataset/call', 'call', { model: 'ir.ui.view', method: 'write', - args: [[this.selectedViewId()], { 'arch': xml.xml }, website.get_context()], - }).then(function(result) { - self.reloadPage(); - }).fail(function (error) { - self.displayError(error); + args: [[session.id], { 'arch': xml.xml }, website.get_context()], }); } else { - self.displayError(); + return $.Deferred().fail("Malformed XML document"); } }, + updateHash: function () { + window.location.hash = hash + "?view=" + this.selectedViewId(); + }, reloadPage: function () { - // TODO Reload { header + div#wrap + footer } only + this.updateHash(); window.location.reload(); }, displayError: function (error) { // TODO Improve feedback (e.g. update 'Save' button + tooltip) - alert("Malformed XML document"); + alert(error); }, open: function () { this.$el.removeClass('oe_ace_closed').addClass('oe_ace_open'); - this.displayView(); + var curentHash = window.location.hash; + var indexOfView = curentHash.indexOf("?view="); + if (indexOfView >= 0) { + var viewId = parseInt(curentHash.substring(indexOfView + 6, curentHash.length), 10); + this.$('#ace-view-list').val(viewId).change(); + } else { + window.location.hash = hash; + } }, close: function () { + window.location.hash = ""; var self = this; this.$el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function () { globalEditor = null; diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 16443ac36c4..b2a93b9cfd6 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -236,10 +236,17 @@ this.rte = new website.RTE(this); this.rte.on('change', this, this.proxy('rte_changed')); + var instanceReady = false; + this.rte.on('instanceReady', this, function () { + clearTimeout(instanceReady); + instanceReady = setTimeout(function () { + self.trigger('rte:ready'); + }, 0); + }); return $.when( this._super.apply(this, arguments), - this.rte.prependTo(this.$('#website-top-edit .nav.pull-right')) + this.rte.appendTo(this.$('#website-top-edit .nav.pull-right')) ); }, edit: function () { @@ -667,23 +674,34 @@ }, 'change input[type=file]': 'file_selection', 'change input.url': 'preview_image', - 'click .existing-attachments a': 'select_existing', + 'click a[href=#existing]': 'browse_existing', + 'change select.image-style': 'preview_image', }), start: function () { var selection = this.editor.getSelection(); var el = selection && selection.getSelectedElement(); this.element = null; + + var $select = this.$('.image-style'); + var $options = $select.children(); + this.image_styles = $options.map(function () { return this.value; }).get(); + if (el && el.is('img')) { this.element = el; + _(this.image_styles).each(function (style) { + if (el.hasClass(style)) { + $select.val(style); + } + }); + // set_image must follow setup of image style this.set_image(el.getAttribute('src')); } - return $.when( - this._super(), - this.fetch_existing().then(this.proxy('fetched_existing'))); + return this._super(); }, save: function () { var url = this.$('input.url').val(); + var style = this.$('.image-style').val(); var element, editor = this.editor; if (!(element = this.element)) { element = editor.document.createElement('img'); @@ -697,7 +715,10 @@ }, 0); } element.setAttribute('src', url); - this._super(); + $(element.$).removeClass(this.image_styles.join(' ')); + if (style) { element.addClass(style); } + + return this._super(); }, /** @@ -735,17 +756,54 @@ var image = this.$('input.url').val(); if (!image) { return; } - this.$('img.image-preview').attr('src', image); + this.$('img.image-preview') + .attr('src', image) + .removeClass(this.image_styles.join(' ')) + .addClass(this.$('select.image-style').val()); + }, + + browse_existing: function (e) { + e.preventDefault(); + new website.editor.ExistingImageDialog(this).appendTo(document.body); + }, + }); + + var IMAGES_PER_ROW = 6; + var IMAGES_ROWS = 4; + website.editor.ExistingImageDialog = website.editor.Dialog.extend({ + template: 'website.editor.dialog.image.existing', + events: _.extend({}, website.editor.Dialog.prototype.events, { + 'click .existing-attachments img': 'select_existing', + 'click .pager > li': function (e) { + e.preventDefault(); + var $target = $(e.currentTarget); + if ($target.hasClass('disabled')) { + return; + } + this.page += $target.hasClass('previous') ? -1 : 1; + this.display_attachments(); + }, + }), + init: function (parent) { + this.image = null; + this.page = 0; + this.parent = parent; + this._super(parent.editor); + }, + + start: function () { + return $.when( + this._super(), + this.fetch_existing().then(this.proxy('fetched_existing'))); }, fetch_existing: function () { - // FIXME: lazy load attachments? return openerp.jsonRpc('/web/dataset/call_kw', 'call', { model: 'ir.attachment', method: 'search_read', args: [], kwargs: { - fields: ['name'], + fields: ['name', 'website_url'], domain: [['res_model', '=', 'ir.ui.view']], order: 'name', context: website.get_context(), @@ -753,17 +811,36 @@ }); }, fetched_existing: function (records) { + this.records = records; + this.display_attachments(); + }, + display_attachments: function () { + var per_screen = IMAGES_PER_ROW * IMAGES_ROWS; + + var from = this.page * per_screen; + var records = this.records; + // Create rows of 3 records var rows = _(records).chain() - .groupBy(function (_, index) { return Math.floor(index / 3); }) + .slice(from, from + per_screen) + .groupBy(function (_, index) { return Math.floor(index / IMAGES_PER_ROW); }) .values() .value(); + this.$('.existing-attachments').replaceWith( - openerp.qweb.render('website.editor.dialog.image.existing', {rows: rows})); + openerp.qweb.render( + 'website.editor.dialog.image.existing.content', {rows: rows})); + this.$('.pager') + .find('li.previous').toggleClass('disabled', (from === 0)).end() + .find('li.next').toggleClass('disabled', (from + per_screen >= records.length)); + }, select_existing: function (e) { - e.preventDefault(); - this.set_image(e.currentTarget.getAttribute('href')); + var link = $(e.currentTarget).attr('src'); + if (link) { + this.parent.set_image(link); + } + this.close() }, }); diff --git a/addons/website/static/src/js/website.mobile.js b/addons/website/static/src/js/website.mobile.js index 6487b2b457b..d4630d0a0c2 100644 --- a/addons/website/static/src/js/website.mobile.js +++ b/addons/website/static/src/js/website.mobile.js @@ -17,7 +17,7 @@ 'hidden.bs.modal': 'destroy' }, start: function () { - document.getElementById("mobile-viewport").src = window.location.href + "?mobile-preview=true"; + document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview"; this.$el.modal(); }, }); diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index 738bd46d413..1d9234165c4 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -6,30 +6,52 @@ website.EditorBar.include({ events: _.extend({}, website.EditorBar.prototype.events, { - 'click a[data-action=promote-current-page]': 'promotePage', + 'click a[data-action=promote-current-page]': 'launchSeo', }), - promotePage: function () { + launchSeo: function () { (new website.seo.Configurator()).appendTo($(document.body)); }, }); website.seo = {}; + function analyzeKeyword(htmlPage, keyword) { + return htmlPage.isInTitle(keyword) ? { + title: 'keyword-in-title', + description: "This keyword is used in the page title", + } : htmlPage.isInDescription(keyword) ? { + title: 'keyword-in-description', + description: "This keyword is used in the page description", + } : htmlPage.isInBody(keyword) ? { + title: 'keyword-in-body', + description: "This keyword is used in the page content." + } : { title: "", description: "" }; + } + website.seo.Suggestion = openerp.Widget.extend({ template: 'website.seo_suggestion', events: { 'click .js_seo_suggestion': 'select', }, - init: function (parent, keyword) { - this.keyword = keyword; - var keywordRegex = new RegExp(this.keyword, "gi"); - var pageText = $('body').children().not('.js_seo_configuration').text(); - var isKeywordInBody = keywordRegex.test(pageText); - // cf. http://getbootstrap.com/components/#labels - // default, primary, success, info, warning, danger - this.type = isKeywordInBody ? 'info' : 'default'; + init: function (parent, options) { + this.root = options.root; + this.keyword = options.keyword; + this.htmlPage = options.page; this._super(parent); }, + start: function () { + this.htmlPage.on('title-changed', this, this.renderElement); + this.htmlPage.on('description-changed', this, this.renderElement); + }, + analyze: function () { + return analyzeKeyword(this.htmlPage, this.keyword); + }, + highlight: function () { + return this.analyze().title; + }, + tooltip: function () { + return this.analyze().description; + }, select: function () { this.trigger('selected', this.keyword); }, @@ -37,8 +59,9 @@ website.seo.SuggestionList = openerp.Widget.extend({ template: 'website.seo_list', - init: function (parent, word) { - this.word = word; + init: function (parent, options) { + this.root = options.root; + this.htmlPage = options.page; this._super(parent); }, start: function () { @@ -50,14 +73,18 @@ function addSuggestions (list) { self.$el.empty(); // TODO Improve algorithm + Ajust based on custom user keywords - var nameRegex = new RegExp(self.companyName, "gi"); - var cleanList = _.map(list, function removeCompanyName (word) { - return word.replace(nameRegex, "").trim(); + var regex = new RegExp(self.root, "gi"); + var cleanList = _.map(list, function (word) { + return word.replace(regex, "").trim(); }); // TODO Order properly ? _.each(_.uniq(cleanList), function (keyword) { if (keyword) { - var suggestion = new website.seo.Suggestion(self, keyword); + var suggestion = new website.seo.Suggestion(self, { + root: self.root, + keyword: keyword, + page: self.htmlPage, + }); suggestion.on('selected', self, function (word) { self.trigger('selected', word); }); @@ -65,7 +92,7 @@ } }); } - $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(this.word + " "), addSuggestions); + $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(this.root + " "), addSuggestions); }, }); @@ -75,21 +102,37 @@ 'click a[data-action=remove-keyword]': 'destroy', }, maxWordsPerKeyword: 4, // TODO Check - init: function (parent, keyword) { - this.keyword = keyword; - // cf. http://getbootstrap.com/components/#labels - // default, primary, success, info, warning, danger - this.type = 'warning'; + init: function (parent, options) { + this.keyword = options.word; + this.htmlPage = options.page; this._super(parent); }, start: function () { - var self = this; - self.suggestionList = new website.seo.SuggestionList(self, this.keyword); - self.suggestionList.on('selected', self, function (word) { - self.trigger('selected', word); + this.htmlPage.on('title-changed', this, this.updateLabel); + this.htmlPage.on('description-changed', this, this.updateLabel); + this.suggestionList = new website.seo.SuggestionList(this, { + root: this.keyword, + page: this.htmlPage, + }); + this.suggestionList.on('selected', this, function (word) { + this.trigger('selected', word); }); this.suggestionList.appendTo(this.$('.js_seo_keyword_suggestion')); }, + analyze: function () { + return analyzeKeyword(this.htmlPage, this.keyword); + }, + highlight: function () { + return this.analyze().title; + }, + tooltip: function () { + return this.analyze().description; + }, + updateLabel: function () { + var cssClass = "oe_seo_keyword js_seo_keyword " + this.highlight(); + this.$(".js_seo_keyword").attr('class', cssClass); + this.$(".js_seo_keyword").attr('title', this.tooltip()); + }, destroy: function () { this.trigger('removed'); this._super(); @@ -99,28 +142,44 @@ website.seo.KeywordList = openerp.Widget.extend({ template: 'website.seo_list', maxKeywords: 10, - init: function (parent) { + init: function (parent, options) { + this.htmlPage = options.page; this._super(parent); }, + start: function () { + var self = this; + var existingKeywords = self.htmlPage.keywords(); + if (existingKeywords.length > 0) { + _.each(existingKeywords, function (word) { + self.add.call(self, word); + }); + } else { + var companyName = self.htmlPage.company().toLowerCase(); + self.add(companyName); + } + }, keywords: function () { var result = []; - this.$('span.js_seo_keyword').each(function () { + this.$('.js_seo_keyword').each(function () { result.push($(this).data('keyword')); }); return result; }, - isKeywordListFull: function () { + isFull: function () { return this.keywords().length >= this.maxKeywords; }, - isExistingKeyword: function (word) { + exists: function (word) { return _.contains(this.keywords(), word); }, add: function (candidate) { var self = this; // TODO Refine - var word = candidate ? candidate.replace(/[,;.:<>]+/g, " ").replace(/ +/g, " ").trim() : ""; - if (word && !self.isKeywordListFull() && !self.isExistingKeyword(word)) { - var keyword = new website.seo.Keyword(self, word); + var word = candidate ? candidate.replace(/[,;.:<>]+/g, " ").replace(/ +/g, " ").trim().toLowerCase() : ""; + if (word && !self.isFull() && !self.exists(word)) { + var keyword = new website.seo.Keyword(self, { + word: word, + page: this.htmlPage, + }); keyword.on('removed', self, function () { self.trigger('list-not-full'); self.trigger('removed', word); @@ -130,7 +189,7 @@ }); keyword.appendTo(self.$el); } - if (self.isKeywordListFull()) { + if (self.isFull()) { self.trigger('list-full'); } }, @@ -147,9 +206,13 @@ website.seo.ImageList = openerp.Widget.extend({ + init: function (parent, options) { + this.htmlPage = options.page; + this._super(parent); + }, start: function () { var self = this; - new website.seo.HtmlPage().images().each(function (index, image) { + this.htmlPage.images().each(function (index, image) { new website.seo.Image(self, image).appendTo(self.$el); }); }, @@ -169,29 +232,33 @@ }, }); - website.seo.HtmlPage = openerp.Class.extend({ + website.seo.HtmlPage = openerp.Class.extend(openerp.PropertiesMixin, { url: function () { var url = window.location.href; var hashIndex = url.indexOf('#'); return hashIndex >= 0 ? url.substring(0, hashIndex) : url; }, title: function () { - return $('title').text(); + return $('title').text().trim(); }, changeTitle: function (title) { $('title').text(title); + this.trigger('title-changed', title); }, description: function () { - return $('meta[name=description]').attr('value'); + return $('meta[name=description]').attr('value').trim(); }, changeDescription: function (description) { - return $('meta[name=description]').attr('value', description); + $('meta[name=description]').attr('value', description); + this.trigger('description-changed', description); }, keywords: function () { - return $('meta[name=keywords]').attr('value').split(","); + var parsed = $('meta[name=keywords]').attr('value').split(","); + return parsed[0] ? parsed: []; }, changeKeywords: function (keywords) { - return $('meta[name=keywords]').attr('value', keyword.join(",")); + $('meta[name=keywords]').attr('value', keywords.join(",")); + this.trigger('keywords-changed', keywords); }, headers: function (tag) { return $('#wrap '+tag).map(function () { @@ -210,6 +277,18 @@ company: function () { return $('meta[name="openerp.company"]').attr('value'); }, + bodyText: function () { + return $('body').children().not('.js_seo_configuration').text(); + }, + isInBody: function (text) { + return new RegExp(text, "gi").test(this.bodyText()); + }, + isInTitle: function (text) { + return new RegExp(text, "gi").test(this.title()); + }, + isInDescription: function (text) { + return new RegExp(text, "gi").test(this.description()); + }, }); website.seo.Tip = openerp.Widget.extend({ @@ -245,10 +324,14 @@ $modal.find('.js_seo_page_url').text(htmlPage.url()); $modal.find('input[name=seo_page_title]').val(htmlPage.title()); $modal.find('textarea[name=seo_page_description]').val(htmlPage.description()); - self.suggestImprovements(htmlPage); - self.imageList = new website.seo.ImageList(self); - self.imageList.appendTo($modal.find('.js_seo_image_list')); - self.keywordList = new website.seo.KeywordList(self); + self.suggestImprovements(); + self.imageList = new website.seo.ImageList(self, { page: htmlPage }); + if (htmlPage.images().length === 0) { + $modal.find('.js_image_section').remove() + } else { + self.imageList.appendTo($modal.find('.js_seo_image_list')); + } + self.keywordList = new website.seo.KeywordList(self, { page: htmlPage }); self.keywordList.on('list-full', self, function () { $modal.find('input[name=seo_page_keywords]') .attr('readonly', "readonly") @@ -266,11 +349,9 @@ self.keywordList.add(word); }); self.keywordList.appendTo($modal.find('.js_seo_keywords_list')); - var companyName = htmlPage.company().toLowerCase(); - self.addKeyword(companyName); $modal.modal(); }, - suggestImprovements: function (parser) { + suggestImprovements: function () { var tips = []; var self = this; function displayTip(message, type) { @@ -279,17 +360,17 @@ type: type, }).appendTo(self.$('.js_seo_tips')); } - var htmlPage = parser || new website.seo.HtmlPage(); + var htmlPage = this.htmlPage; if (htmlPage.headers('h1').length === 0) { tips.push({ type: 'warning', - message: "You don't have an <h1> tag on your page.", + message: "This page seems to be missing an <h1> tag.", }); } if (htmlPage.headers('h1').length > 1) { tips.push({ type: 'warning', - message: "You have more than one <h1> tag on your page.", + message: "The page contains more than one <h1> tag.", }); } if (tips.length > 0) { @@ -297,7 +378,7 @@ displayTip(tip.message, tip.type); }); } else { - displayTip("Your page makup is appropriate for search engines.", 'success'); + displayTip("The markup on this page is appropriate for search engines.", 'success'); } }, confirmKeyword: function (e) { @@ -327,7 +408,7 @@ setTimeout(function () { var title = self.$('input[name=seo_page_title]').val(); self.htmlPage.changeTitle(title); - }, 1); + }, 0); }, descriptionChanged: function () { var self = this; @@ -336,5 +417,9 @@ self.htmlPage.changeDescription(description); }, 1); }, + destroy: function () { + this.htmlPage.changeKeywords(this.keywordList.keywords()); + this._super(); + }, }); })(); diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js index 36e72fcff60..3457fbb66e2 100644 --- a/addons/website/static/src/js/website.snippets.js +++ b/addons/website/static/src/js/website.snippets.js @@ -5,54 +5,70 @@ website.templates.push('/website/static/src/xml/website.snippets.xml'); website.EditorBar.include({ - events: _.extend({}, website.EditorBar.prototype.events, { - 'click button[data-action=snippet]': 'snippet', - }), start: function () { - return this._super().then(function () { - - this.$buttons.snippet = this.$('button[data-action=snippet]'); - - }.bind(this)); + var self = this; + $("[data-oe-model]").on('click', function (event) { + var tag = event.srcElement.tagName.toLowerCase(); + var $this = $(event.srcElement); + if (!(tag === 'a' || tag === "button") && !$this.parents("a, button").length) { + self.$('[data-action="edit"]').parent().effect('bounce', {distance: 18, times: 5}, 250); + } + }); + return this._super(); }, edit: function () { - window.snippets = this.snippets = new website.snippet.BuildingBlock(this); - this.snippets.appendTo($(document.body)); + $("body").off('click'); + var self = this; + self.on('rte:ready', this, function () { + + window.snippets = self.snippets = new website.snippet.BuildingBlock(this); + self.snippets.appendTo(self.$el); + + }); return this._super.apply(this, arguments); }, - snippet: function (ev) { - this.snippets.toggle(); - }, save: function () { - $('body').trigger("save"); + remove_added_snippet_id(); this._super(); }, }); + + $(document).ready(function () { + hack_to_add_snippet_id(); + $("[data-snippet-id]").each(function() { + var $snipped_id = $(this); + if (typeof $snipped_id.data("snippet-view") === 'undefined' && + website.snippet.animationRegistry[$snipped_id.data("snippet-id")]) { + $snipped_id.data("snippet-view", new website.snippet.animationRegistry[$snipped_id.data("snippet-id")]($snipped_id)); + } + }); + }); + /* ----- SNIPPET SELECTOR ---- */ website.snippet = {}; + // puts $el at the same absolute position as $target - website.snippet.cover_target = function ($el, $target){ - $el.css({ - 'position': 'absolute', - 'width': $target.outerWidth(), - 'height': $target.outerHeight(), - }); - $el.css($target.offset()); - }; function hack_to_add_snippet_id () { _.each(website.snippet.selector, function (val) { $(val[0]).each(function() { - if ($(this).is("[data-snippet-id='"+ val[1]+"']")) - $(this).removeAttr("data-snippet-id"); - if (!$(this).is("[data-snippet-id]") && $(this).parents("[data-oe-model]").length) + if (!$(this).is("[data-snippet-id]") && $(this).parents("[data-oe-model]").length) { $(this).attr("data-snippet-id", val[1]); + } + }); + }); + } + function remove_added_snippet_id () { + _.each(website.snippet.selector, function (val) { + $(val[0]).each(function() { + if ($(this).data("snippet-id") === val[1]) { + $(this).removeAttr("data-snippet-id"); + } }); }); } - website.snippet.selector = []; website.snippet.BuildingBlock = openerp.Widget.extend({ @@ -65,49 +81,134 @@ $("<div id='oe_manipulators'></div>").appendTo('body'); } this.$active_snipped_id = false; - this.active = false; - this.parent_of_editable_box = "body > :not(:has(#website-top-view)):not(#oe_manipulators):not(#oe_snippets) "; hack_to_add_snippet_id(); + $("body").on('DOMNodeInserted', hack_to_add_snippet_id); + }, + dom_filter: function (dom) { + if (typeof dom === "string") { + var include = "[data-oe-model]"; + var sdom = dom.split(','); + dom = ""; + _.each(sdom, function (val) { + val = val.replace(/^\s+|\s+$/g, ''); + dom += "body " + include + " " + val + ", "; + val = val.split(" "); + dom += "body "+ val.shift() + include + val.join(" ") + ", "; + }); + dom = dom.replace(/,\s*$/g, ''); + return $(dom); + } else { + return $(dom).is("[data-oe-model]") || $(dom).parents("[data-oe-model]").length ? $(dom) : $(""); + } }, start: function() { var self = this; - var snippets_template = []; + var $ul = this.parent.$("#website-top-edit ul"); + + var $button = $(openerp.qweb.render('website.snippets_button')) + .click(function () {self.$el.toggleClass("hidden");}) + .prependTo($ul); + + this.fetch_snippet_templates(); + + this.bind_selected_manipulator(); + this.bind_snippet_click_editor(); + this.activate_overlay_zones(); + + this.scrollspy(); + this.$el.addClass("hidden"); + + this.$modal = $(openerp.qweb.render('website.snippets_modal')); + this.$modal.appendTo("body"); + }, + fetch_snippet_templates: function () { + var self = this; + this.style_templates = {}; + _.each(openerp.qweb.compiled_templates, function (val, key) { if (key.indexOf('website.snippets.') === 0) { var $snippet = $(openerp.qweb.render(key)).addClass("oe_snippet"); - if ($snippet.data("action")) { - self.$el.find('#snippet_' + $snippet.data('category')).append($snippet); - self.make_snippet_draggable($snippet); + var snipped_id = $snippet.data("snippet-id"); + if (snipped_id) { + + if ($snippet.data('category') === 'style') { + self.style_templates[snipped_id] = { + 'snipped-id' : snipped_id, + 'selector': $snippet.data('selector'), + 'class': $snippet.find(".oe_snippet_class").text(), + 'label': $snippet.find(".oe_snippet_label").text(), + '$el': $snippet + }; + } + if ($snippet.find(".oe_snippet_thumbnail").length) { + self.$el.find('#snippet_' + $snippet.data('category')).append($snippet); + self.make_snippet_draggable($snippet); + } } } }); + }, + scrollspy: function (){ + var self = this; + var $ul = this.$("ul"); + var $pill = self.$(".pill-content"); + var padding = parseInt($pill.css("padding-left")); + var $scroll = this.$(".scroll"); + + $scroll.scroll(function () { + $pill.find("> div").each(function () { + if ($(this).position().left <= padding) { + $ul.find("> li").removeClass('active'); + $ul.find("a[href='#" + $(this).attr("id") + "']").parent("li").addClass('active'); + } + }); + }); - this.bind_selected_manipulator(); - this.bind_snippet_click_editor(); + $ul.find("a").click(function (event) { + event.preventDefault(); + $scroll.scrollLeft( $scroll.scrollLeft() + $($(event.currentTarget).attr("href")).position().left - padding ); + return false; + }); + + $pill.css("padding-right", self.$el.outerWidth() - padding + 10 - $pill.find("> div:last").outerWidth()); + $ul.find("> li:first").addClass('active'); + }, + cover_target: function ($el, $target){ + var pos = $target.offset(); + var mt = parseInt($target.css("margin-top") || 0); + var mb = parseInt($target.css("margin-bottom") || 0); + $el.css({ + 'position': 'absolute', + 'width': $target.outerWidth(), + 'height': $target.outerHeight() + mt + mb, + 'top': pos.top - mt, + 'left': pos.left + }); + }, + show: function () { + this.$el.removeClass("hidden"); + }, + hide: function () { + this.$el.addClass("hidden"); }, bind_snippet_click_editor: function () { var self = this; var snipped_event_flag = false; $("body").on('click', "[data-snippet-id]", function (event) { - if (!self.active || snipped_event_flag) { + if (snipped_event_flag) { return; } - var $target = $(event.currentTarget); - if (self.$active_snipped_id) { - if (self.$active_snipped_id[0] === $target[0] || $.contains(self.$active_snipped_id, $target[0])) { - var $parent = self.$active_snipped_id.parents("[data-snippet-id]:first"); - if ($parent.length) { - $target = $parent; - } - } - } snipped_event_flag = true; setTimeout(function () {snipped_event_flag = false;}, 0); + var $target = $(event.currentTarget); + if (self.$active_snipped_id && self.$active_snipped_id.is($target)) { + return; + } self.make_active($target); }); - $("body > :not(:has(#website-top-view)):not(#oe_manipulators)").on('click', function (ev) { + $("[data-oe-model]").on('click', function (ev) { if (!snipped_event_flag && self.$active_snipped_id && !self.$active_snipped_id.parents("[data-snippet-id]:first")) { self.make_active(false); } @@ -151,10 +252,10 @@ create_overlay: function ($snipped_id) { if (typeof $snipped_id.data("snippet-editor") === 'undefined') { this.activate_overlay_zones($snipped_id); - var editor = website.snippet.editorRegistry[$snipped_id.data("snippet-id")] || website.snippet.Editor; + var editor = website.snippet.editorRegistry[$snipped_id.data("snippet-id")] || website.snippet.editorRegistry.resize; $snipped_id.data("snippet-editor", new editor(this, $snipped_id)); } - website.snippet.cover_target($snipped_id.data('overlay'), $snipped_id); + this.cover_target($snipped_id.data('overlay'), $snipped_id); }, path_eval: function(path){ @@ -170,21 +271,19 @@ var self = this; var $selected_target = null; $("body").mouseover(function (event){ - if (!self.active) { - return; - } var $target = $(event.srcElement).parents("[data-snippet-id]:first"); + $target = self.dom_filter($target); if($target.length && !self.editor_busy) { if($selected_target != $target){ - if($selected_target){ - $selected_target.data('overlay').removeClass('oe_selected'); + if($selected_target && $selected_target.data('overlay')){ + $selected_target.data('overlay').removeClass('oe_hover'); } $selected_target = $target; self.create_overlay($target); - $target.data('overlay').addClass('oe_selected'); + $target.data('overlay').addClass('oe_hover'); } - } else if($selected_target) { - $selected_target.data('overlay').removeClass('oe_selected'); + } else if($selected_target && $selected_target.data('overlay')) { + $selected_target.data('overlay').removeClass('oe_hover'); } }); }, @@ -192,22 +291,47 @@ // activate drag and drop for the snippets in the snippet toolbar make_snippet_draggable: function($snippet){ var self = this; + var $toInsert = false; + var $tumb = $snippet.find(".oe_snippet_thumbnail"); + var dropped = false; $snippet.draggable({ + greedy: true, helper: 'clone', zIndex: '1000', appendTo: 'body', cursor: "move", + handle: ".oe_snippet_thumbnail", + cursorAt: { + 'left': $tumb.outerWidth()/2, + 'top': $tumb.outerHeight()/2 + }, start: function(){ - var action = $snippet.data('action'); + self.hide(); + dropped = false; + var snipped_id = $snippet.data('snippet-id'); + var action = $snippet.find('.oe_snippet_body').size() ? 'insert' : 'mutate'; if( action === 'insert'){ + if (!$snippet.data('selector-siblings') && !$snippet.data('selector-children') && !$snippet.data('selector-vertical-children')) { + console.debug($snippet.data("snippet-id") + " have oe_snippet_body class and have not for insert action"+ + "data-selector-siblings, data-selector-children or data-selector-vertical-children tag for mutate action"); + return; + } self.activate_insertion_zones({ siblings: $snippet.data('selector-siblings'), - childs: $snippet.data('selector-childs'), - vertical_childs: $snippet.data('selector-vertical-childs') + children: $snippet.data('selector-children'), + vertical_children: $snippet.data('selector-vertical-children') }); - } else if( action === 'mutate' ){ + $toInsert = $snippet.find('.oe_snippet_body').clone(); + $toInsert.removeClass('oe_snippet_body'); + $toInsert.attr('data-snippet-id', snipped_id); + + } else if( action === 'mutate' ){ + if (!$snippet.data('selector')) { + console.debug($snippet.data("snippet-id") + " have not oe_snippet_body class and have not data-selector tag"); + return; + } var $targets = self.activate_overlay_zones($snippet.data('selector')); $targets.each(function(){ var $clone = $(this).data('overlay').clone(); @@ -219,49 +343,52 @@ $('.oe_drop_zone').droppable({ over: function(){ - // FIXME: stupid hack to prevent multiple droppable to activate at once ... - // it's not even working properly but it's better than nothing. - $(".oe_drop_zone.oe_hover").removeClass("oe_hover"); - $(this).addClass("oe_hover"); + if( action === 'insert'){ + dropped = true; + $(this).first().after($toInsert); + } }, out: function(){ - $(this).removeClass("oe_hover"); + if( action === 'insert'){ + dropped = false; + $toInsert.detach(); + } }, drop: function(){ - var snipped_id = $snippet.data('snippet-id'); - - if (!$(".oe_drop_zone.oe_hover").length) { - return false; - } + dropped = true; var $target = false; - if($snippet.find('.oe_snippet_body').size()){ - var $toInsert = $snippet.find('.oe_snippet_body').clone(); - $toInsert.removeClass('oe_snippet_body'); - $toInsert.attr('data-snippet-id', snipped_id); - $(".oe_drop_zone.oe_hover").first().after($toInsert); + if(action === 'insert'){ $target = $toInsert; - hack_to_add_snippet_id(); - } else { - $target = $(".oe_drop_zone.oe_hover").first().data('target'); - } - - $('.oe_drop_zone').droppable('destroy').remove(); - if (website.snippet.animationRegistry[snipped_id]) { - new website.snippet.animationRegistry[snipped_id]($target); - } - if (website.snippet.editorRegistry[snipped_id]) { + if (website.snippet.animationRegistry[snipped_id]) { + new website.snippet.animationRegistry[snipped_id]($target); + } + self.create_overlay($target); $target.data("snippet-editor").build_snippet($target); - setTimeout(function () {self.make_active($target);},0); + + } else { + $target = $(this).data('target'); + + self.create_overlay($target); + if (website.snippet.editorRegistry[snipped_id]) { + var snippet = new website.snippet.editorRegistry[snipped_id](self, $target); + snippet.build_snippet($target); + } } + $('.oe_drop_zone').remove(); + + setTimeout(function () {self.make_active($target);},0); }, }); }, stop: function(){ $('.oe_drop_zone').droppable('destroy').remove(); + if (!dropped) { + self.$modal.modal('toggle'); + } }, }); }, @@ -272,46 +399,22 @@ return $(this).data('snippet-id') === id; }).first(); }, - // WIP - make_draggable_instance: function($instance){ - var self = this; - var $snippet = get_snippet_from_id($instance.data('snippet-id')); - - $instance.draggable({ - greedy: true, - helper: 'clone', - zIndex: '1000', - appendTo: 'body', - start: function(){ - var action = $snippet.data('action'); - if(action === 'insert'){ - - self.activate_insertion_zones({ - siblings: $snippet.data('selector-siblings'), - child: $snippet.data('selector-childs'), - vertical_childs: $snippet.data('selector-vertical-childs') - }); - - } - } - }); - }, // Create element insertion drop zones. two css selectors can be provided - // selector.childs -> will insert drop zones as direct child of the selected elements + // selector.children -> will insert drop zones as direct child of the selected elements // in case the selected elements have children themselves, dropzones will be interleaved // with them. // selector.siblings -> will insert drop zones after and before selected elements activate_insertion_zones: function(selector){ var self = this; - var child_selector = selector.childs ? this.parent_of_editable_box + (selector.childs).split(",").join(this.parent_of_editable_box) : false; - var sibling_selector = selector.siblings ? this.parent_of_editable_box + (selector.siblings).split(",").join(this.parent_of_editable_box) : false; - var vertical_child_selector = selector.vertical_childs ? this.parent_of_editable_box + (selector.vertical_childs).split(",").join(this.parent_of_editable_box) : false; + var child_selector = selector.children; + var sibling_selector = selector.siblings; + var vertical_child_selector = selector.vertical_children; var zone_template = "<div class='oe_drop_zone oe_insert'></div>"; if(child_selector){ - $(child_selector).each(function (){ + self.dom_filter(child_selector).each(function (){ var $zone = $(this); $zone.find('> *:not(.oe_drop_zone):visible').after(zone_template); $zone.prepend(zone_template); @@ -319,16 +422,38 @@ } if(vertical_child_selector){ - $(vertical_child_selector).each(function (){ + self.dom_filter(vertical_child_selector).each(function (){ var $zone = $(this); - var $template = $(zone_template).addClass("oe_vertical").css('height', $zone.outerHeight()+'px'); - $zone.find('> *:not(.oe_drop_zone):visible').after($template); - $zone.prepend($template.clone()); + var $template = $(zone_template).addClass("oe_vertical"); + var nb = 0; + var $lastinsert = false; + var left = 0; + var temp_left = 0; + $zone.find('> *:not(.oe_drop_zone):visible').each(function () { + var $col = $(this); + $template.css('height', ($col.outerHeight() + parseInt($col.css("margin-top")) + parseInt($col.css("margin-bottom")))+'px'); + $lastinsert = $template.clone(); + $(this).after($lastinsert); + + temp_left = $col.position().left; + if (left === temp_left) { + $col.prev(".oe_drop_zone.oe_vertical").remove(); + $col.before($template.clone().css("clear", "left")); + } + else if (!nb) { + $col.before($template.clone()); + } + left = temp_left; + nb ++; + }); + if (!nb) { + $zone.prepend($template.css('height', $zone.outerHeight()+'px')); + } }); } if(sibling_selector){ - $(sibling_selector).each(function (){ + self.dom_filter(sibling_selector).each(function (){ var $zone = $(this); if($zone.prev('.oe_drop_zone:visible').length === 0){ $zone.before(zone_template); @@ -342,11 +467,11 @@ var count; do { count = 0; - var $zones = $('.oe_drop_zone + .oe_drop_zone'); // no two consecutive zones - count += $zones.length; - $zones.remove(); + // var $zones = $('.oe_drop_zone + .oe_drop_zone'); // no two consecutive zones + // count += $zones.length; + // $zones.remove(); - $zones = $('.oe_drop_zone > .oe_drop_zone').remove(); // no recusrive zones + $zones = $('.oe_drop_zone > .oe_drop_zone:not(.oe_vertical)').remove(); // no recusrive zones count += $zones.length; $zones.remove(); } while (count > 0); @@ -377,11 +502,8 @@ // generate drop zones covering the elements selected by the selector // we generate overlay drop zones only to get an idea of where the snippet are, the drop activate_overlay_zones: function(selector){ - selector = selector || '[data-snippet-id]'; - if (typeof selector === 'string') - selector = this.parent_of_editable_box + selector.split(",").join(this.parent_of_editable_box); - - var $targets = $(selector); + var $targets = this.dom_filter(selector || '[data-snippet-id]'); + var self = this; function is_visible($el){ return $el.css('display') != 'none' @@ -407,23 +529,16 @@ $target.data('overlay',$zone); $target.on("DOMNodeInserted DOMNodeRemoved DOMSubtreeModified", function () { - website.snippet.cover_target($zone, $target); + self.cover_target($zone, $target); + }); + $('body').on("resize", function () { + self.cover_target($zone, $target); }); } - website.snippet.cover_target($target.data('overlay'), $target); + self.cover_target($target.data('overlay'), $target); }); return $targets; - }, - - toggle: function(){ - this.active = !this.active; - if(this.active){ - this.$el.removeClass('hide'); - this.activate_overlay_zones(); - } else { - this.$el.addClass('hide'); - } - }, + } }); @@ -434,6 +549,13 @@ }, init: function (dom) { this.$el = this.$target = $(dom); + this.start(); + }, + /* + * start + * This method is called after init + */ + start: function () { }, /* onFocusEdit * if they are an editor for this snippet-id @@ -456,17 +578,6 @@ }, }); - $(document).ready(function () { - hack_to_add_snippet_id(); - $("[data-snippet-id]").each(function() { - var $snipped_id = $(this); - if (typeof $snipped_id.data("snippet-view") === 'undefined' && - website.snippet.animationRegistry[$snipped_id.data("snippet-id")]) { - $snipped_id.data("snippet-view", new website.snippet.animationRegistry[$snipped_id.data("snippet-id")]($snipped_id)); - } - }); - }); - website.snippet.editorRegistry = {}; website.snippet.Editor = openerp.Class.extend({ @@ -474,7 +585,10 @@ this.parent = parent; this.$target = $(dom); this.$overlay = this.$target.data('overlay'); + this.snippet_id = this.$target.data("snippet-id"); this._readXMLData(); + this.load_style_options(); + this.get_parent_block(); this.start(); }, @@ -496,15 +610,15 @@ * Insert into the view when the thumbnail is drag and droped into a drop zone */ _readXMLData: function() { - if (this.template) { - this.$el = $(openerp.qweb.render(this.template, {widget: this}).trim()); - this.$editor = this.$el.find(".oe_snippet_options"); - this.$thumbnail = this.$el.find(".oe_snippet_thumbnail"); - this.$body = this.$el.find(".oe_snippet_body"); - - var $options = this.$overlay.find(".oe_overlay_options"); - this.$editor.prependTo($options.find(".oe_options ul")); - $options.find(".oe_label").text(this.$el.find('.oe_snippet_thumbnail.oe_label, .oe_snippet_thumbnail .oe_label').text()); + this.$el = $(openerp.qweb.render("website.snippets." + this.snippet_id, {widget: this}).trim()); + this.$editor = this.$el.find(".oe_snippet_options"); + this.$thumbnail = this.$el.find(".oe_snippet_thumbnail"); + this.$body = this.$el.find(".oe_snippet_body"); + + var $options = this.$overlay.find(".oe_overlay_options"); + this.$editor.prependTo($options.find(".oe_options ul")); + if ($options.find(".oe_options ul li").length) { + $options.find(".oe_options").removeClass("hidden"); } }, @@ -512,41 +626,127 @@ // activate drag and drop for the snippets in the snippet toolbar _drag_and_drop: function(){ var self = this; + var dropped = false; + var $move = this.$overlay.find(".oe_snippet_move"); this.$overlay.draggable({ greedy: true, appendTo: 'body', cursor: "move", + handle: ".oe_snippet_move", cursorAt: { - top: self.$target.outerHeight()/2, - left: self.$target.outerWidth()/2 }, - distance: 20, - handle: ".js_box_move", + left: 18, + top: 14 + }, + helper: function() { + var $clone = $(this).clone().css({width: "24px", height: "24px", border: 0}); + $clone.find(".oe_overlay_options >:not(.oe_snippet_move), .oe_handle").remove(); + $clone.find(":not(.glyphicon)").css({position: 'absolute', top: 0, left: 0}); + return $clone.appendTo("body").removeClass("hidden"); + }, start: function(){ + self.parent.hide(); self.parent.editor_busy = true; - self.$target.css("display", "none"); + self.$target.after("<div class='oe_drop_clone' style='display: none;'/>"); + self.$target.detach(); + self.$overlay.addClass("hidden"); self.parent.activate_insertion_zones({ siblings: self.$el ? self.$el.data('selector-siblings') : false, - childs: self.$el ? self.$el.data('selector-childs') : false, - vertical_childs: self.$el ? self.$el.data('selector-vertical-childs') : false, + children: self.$el ? self.$el.data('selector-children') : false, + vertical_children: self.$el ? self.$el.data('selector-vertical-children') : false, }); $("body").addClass('move-important'); $('.oe_drop_zone').droppable({ - hoverClass: "oe_hover", - drop: function(){ - $(this).after(self.$target); + over: function(){ + $(".oe_drop_zone.hide").removeClass("hide"); + $(this).addClass("hide").first().after(self.$target); + dropped = true; + }, + out: function(){ + $(this).removeClass("hide"); + self.$target.detach(); + dropped = false; }, }); }, stop: function(){ + if (!dropped) { + $(".oe_drop_clone").after(self.$target); + } + self.$overlay.removeClass("hidden"); $("body").removeClass('move-important'); $('.oe_drop_zone').droppable('destroy').remove(); - self.$target.css("display", ""); + $(".oe_drop_clone").remove(); self.parent.editor_busy = false; + self.get_parent_block(); setTimeout(function () {self.parent.create_overlay(self.$target);},0); }, }); }, + _clone: function () { + var self = this; + this.$overlay.on('click', '.oe_snippet_clone', function () { + var $clone = self.$target.clone(false); + self.$target.after($clone); + setTimeout(function () { + self.parent.create_overlay($clone); + self.parent.make_active($clone); + },0); + }); + }, + + load_style_options: function () { + var self = this; + var $styles = this.$overlay.find('.oe_options'); + var $ul = $styles.find('ul'); + _.each(this.parent.style_templates, function (val, key) { + if (!self.parent.dom_filter(val.selector).is(self.$target)) { + return; + } + var $li = $("<li class='oe_style'/>").data(val); + $li.append($('<a/>').text(val.label)); + $ul.append($li); + if (self.$target.hasClass( "oe_snippet_" + $li.data("snipped-id") )) { + $li.addClass("active"); + } + $styles.removeClass("hidden"); + }); + $styles.on('click', 'li.oe_style a', _.bind(this.change_style, this)); + }, + change_style: function (event) { + var $li = $(event.currentTarget).parent(); + var snipped_id = $li.data("snipped-id"); + var active = $li.hasClass("active"); + + if (website.snippet.editorRegistry[snipped_id]) { + var snippet = new website.snippet.editorRegistry[snipped_id](this, this.$target); + snippet.build_snippet(this.$target); + } + var _class = "oe_snippet_" + snipped_id + " " + ($li.data("class") || ""); + if (active) { + this.$target.removeClass(_class); + } else { + this.$target.addClass(_class); + } + $li.toggleClass("active"); + }, + + get_parent_block: function () { + var self = this; + var $button = this.$overlay.find('.oe_snippet_parent'); + var $parent = this.$target.parents("[data-snippet-id]:first"); + if ($parent.length) { + $button.removeClass("hidden"); + $button.off("click").on('click', function (event) { + event.preventDefault(); + setTimeout(function () { + self.parent.make_active($parent); + }, 0); + }); + } else { + $button.addClass("hidden"); + } + }, /* * start @@ -554,13 +754,14 @@ */ start: function () { var self = this; - this.$overlay.on('click', '.js_box_remove', function () { + this.$overlay.on('click', '.oe_snippet_remove', function () { self.$target.detach(); self.onBlur(); self.$target.remove(); return false; }); this._drag_and_drop(); + this._clone(); }, /* @@ -603,7 +804,6 @@ website.snippet.editorRegistry.resize = website.snippet.Editor.extend({ - template : "website.snippets.resize", start: function () { var self = this; this._super(); @@ -657,11 +857,10 @@ var xy = event['page'+XY]; var begin = current; var beginClass = self.$target.attr("class"); - var regClass = new RegExp("\\s*" + resize[0][begin].replace(/[-]*[0-9]+/, '[0-9-]+'), 'g'); + var regClass = new RegExp("\\s*" + resize[0][begin].replace(/[-]*[0-9]+/, '[-]*[0-9]+'), 'g'); var cursor = $handle.css("cursor")+'-important'; $("body").addClass(cursor); - self.$overlay.addClass('oe_hover'); var body_mousemove = function (event){ event.preventDefault(); @@ -685,7 +884,7 @@ if (change) { self.on_resize(compass, beginClass, current); - website.snippet.cover_target(self.$overlay, self.$target); + self.parent.cover_target(self.$overlay, self.$target); } }; $('body').mousemove(body_mousemove); @@ -720,7 +919,6 @@ }); website.snippet.editorRegistry.colmd = website.snippet.editorRegistry.resize.extend({ - template : "website.snippets.colmd", getSize: function () { this.grid = this._super(); var width = this.$target.parents(".row:first").first().outerWidth(); @@ -729,7 +927,7 @@ this.grid.e = [_.map(grid, function (v) {return 'col-md-'+v;}), _.map(grid, function (v) {return width/12*v;})]; var grid = [-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11]; - this.grid.w = [_.map(grid, function (v) {return 'col-lg-offset-'+v;}), _.map(grid, function (v) {return width/12*v;}), 12]; + this.grid.w = [_.map(grid, function (v) {return 'col-md-offset-'+v;}), _.map(grid, function (v) {return width/12*v;}), 12]; return this.grid; }, @@ -739,23 +937,26 @@ // don't change the rigth border position when we change the offset (replace col size) var beginCol = Number(beginClass.match(/col-md-([0-9]+)|$/)[1] || 0); - var beginOffset = Number(beginClass.match(/col-lg-offset-([0-9-]+)|$/)[1] || 0); - var offset = Number(this.grid.w[0][current].match(/col-lg-offset-([0-9-]+)|$/)[1] || 0); - - this.$target.attr("class",this.$target.attr("class").replace(/\s*(col-lg-offset-|col-md-)([0-9-]+)/g, '')); - + var beginOffset = Number(beginClass.match(/col-md-offset-([0-9-]+)|$/)[1] || beginClass.match(/col-lg-offset-([0-9-]+)|$/)[1] || 0); + var offset = Number(this.grid.w[0][current].match(/col-md-offset-([0-9-]+)|$/)[1] || 0); + if (offset < 0) { + offset = 0; + } var colSize = beginCol - (offset - beginOffset); + if (colSize <= 0) { + colSize = 1; + offset = beginOffset + beginCol - 1; + } + this.$target.attr("class",this.$target.attr("class").replace(/\s*(col-lg-offset-|col-md-offset-|col-md-)([0-9-]+)/g, '')); + this.$target.addClass('col-md-' + (colSize > 12 ? 12 : colSize)); if (offset > 0) { - this.$target.addClass('col-lg-offset-' + offset); + this.$target.addClass('col-md-offset-' + offset); } }, }); - website.snippet.selector.push([ _.map([1,2,3,4,5,6,7,8,9,10,11,12], function (v) {return '.row > .col-md-'+v;}).join(","), 'colmd']); - website.snippet.editorRegistry.carousel = website.snippet.editorRegistry.resize.extend({ - template : "website.snippets.carousel", build_snippet: function($target) { var id = "myCarousel" + $("body .carousel").size(); $target.attr("id", id); @@ -763,14 +964,34 @@ }, start : function () { this._super(); - var self = this; - this.$editor.find(".js_add").on('click', this.on_add); - this.$editor.find(".js_remove").on('click', this.on_remove); + this.$editor.find(".js_add").on('click', this, this.on_add); + this.$editor.find(".js_remove").on('click', this, this.on_remove); - - //background - var bg = this.$target.find('.carousel-inner .item.active').css('background-image').replace(/url\((.*)\)/g, '\$1'); + this.change_background(); + this.change_style(); + this.change_size(); + }, + on_add: function (e) { + e.preventDefault(); + var $inner = e.data.$target.find('.carousel-inner'); + var cycle = $inner.find('.item').size(); + $inner.find('.item.active').clone().removeClass('active').appendTo($inner); + e.data.$target.carousel(cycle); + }, + on_remove: function (e) { + e.preventDefault(); + var $inner = e.data.$target.find('.carousel-inner'); + if ($inner.find('.item').size() > 1) { + $inner + .find('.item.active').remove().end() + .find('.item:first').addClass('active'); + e.data.$target.carousel(0); + } + }, + change_background: function () { + var self = this; + var bg = this.$target.find('.carousel-inner .item.active').css('background-image').replace(/url\((.*)\)/g, '$1'); var selected = this.$editor.find('select[name="carousel-background"] option[value="'+bg+'"], select[name="carousel-background"] option[value="'+bg.replace(window.location.protocol+'//'+window.location.host, '')+'"]') .prop('selected', true).length; if (!selected) { @@ -783,85 +1004,59 @@ self.$target.find('.carousel-inner .item.active').css('background-image', 'url(' + $(this).val() + ')'); $(this).next().val(""); }); - - - //style + }, + change_style: function () { + var self = this; var style = false; - if (this.$target.find('.carousel-inner .item.active .container .content_image.col-lg-offset-1')) - style = 'image_right'; - if (this.$target.find('.carousel-inner .item.active .container .content_image')) - style = 'image_left'; + var el = this.$target.find('.carousel-inner .item.active'); + if (el.hasClass('text_only')) + style = 'text_only'; + if (el.hasClass('image_text')) + style = 'image_text'; + if (el.hasClass('text_image')) + style = 'text_image'; + this.$editor.find('select[name="carousel-style"] option[value="'+style+'"]').prop('selected', true); - this.$editor.find('select[name="carousel-style"]').on('change', this.on_bg_change); - }, - on_add: function (e) { - e.preventDefault(); - var $inner = this.$target.find('.carousel-inner'); - var cycle = $inner.find('.item').size(); - $inner.append(this.$('> .item')); - this.$target.carousel(cycle); - }, - on_remove: function (e) { - e.preventDefault(); - var $inner = this.$target.find('.carousel-inner'); - if ($inner.find('.item').size() > 1) { - $inner - .find('.item.active').remove().end() - .find('.item:first').addClass('active'); - this.$target.carousel(0); - } + this.$editor.find('select[name="carousel-style"]').on('change', function(e) { + var $container = self.$target.find('.carousel-inner .item.active'); + $container.removeClass('image_text text_image text_only'); + $container.addClass($(e.currentTarget).val()); + }); }, - on_bg_change: function (e) { - var $container = this.$target.find('.carousel-inner .item.active .container'); - var img_url = $('.content_image img', $container).attr("src"); - if (!img_url) { - img_url = this.img_url || "/website/static/src/img/china.jpg"; - } else { - this.img_url = img_url; - } + change_size: function () { + var self = this; - $('.content_image', $container).remove(); - switch ($(e.currentTarget).val()) { - case 'no_image': - $('.content', $container).attr("class", "content"); - break; - case 'image_left': - $('.content', $container).attr("class", "content col-md-6") - .before('<div class="content_image col-md-5"><img class="img-rounded img-responsive" src="'+img_url+'"></div>'); - break; - case 'image_right': - $('.content', $container).attr("class", "content col-md-6") - .after('<div class="content_image col-md-5 col-lg-offset-1"><img class="img-rounded img-responsive" src="'+img_url+'"></div>'); - break; - } - }, - }); + var size = 'big'; + if (this.$target.hasClass('oe_small')) + size = 'small'; + else if (this.$target.hasClass('oe_medium')) + size = 'medium'; - website.snippet.editorRegistry.darken = website.snippet.Editor.extend({ - build_snippet: function($target) { - $target.toggleClass('dark'); - var $parent = $target.parent(); - if($parent.hasClass('dark')){ - $parent.replaceWith($target); - }else{ - $parent = $("<div class='dark'></div>"); - $target.after($parent); - $parent.append($target); - } - this._super(); + this.$editor.find('select[name="carousel-size"] option[value="'+size+'"]').prop('selected', true); + + this.$editor.find('select[name="carousel-size"]').on('change', function(e) { + self.$target + .removeClass('oe_big oe_small oe_medium') + .addClass("oe_" + $(e.currentTarget).val()); + }); } }); website.snippet.animationRegistry.vomify = website.snippet.Animation.extend({ - init: function() { + start: function() { this._super(); var hue=0; var beat = false; var self = this; + self.$target.append('<iframe width="1px" height="1px" src="http://www.youtube.com/embed/WY24YNsOefk?autoplay=1" frameborder="0"></iframe>'); + var a = setInterval(function(){ - self.$target.css({'-webkit-filter':'hue-rotate('+hue+'deg)'}); hue += 5; + self.$target.next().css({'-webkit-filter':'hue-rotate('+hue+'deg)'}); + self.$target.prev().css({'-webkit-filter':'hue-rotate('+(-hue)+'deg)'}); + hue -= 5; }, 10); + setTimeout(function(){ clearInterval(a); setInterval(function(){ @@ -872,8 +1067,10 @@ } }, 10); },5000); - $('<iframe width="1px" height="1px" src="http://www.youtube.com/embed/WY24YNsOefk?autoplay=1" frameborder="0"></iframe>').appendTo(self.$target); } }); -})();
\ No newline at end of file + website.snippet.selector.push([ _.map([1,2,3,4,5,6,7,8,9,10,11,12], function (v) {return '.row > .col-md-'+v;}).join(","), 'colmd']); + website.snippet.selector.push(['hr', 'hr']); + +})(); diff --git a/addons/website/static/src/xml/website.editor.xml b/addons/website/static/src/xml/website.editor.xml index 6422830ebf5..f3ddfc4f112 100644 --- a/addons/website/static/src/xml/website.editor.xml +++ b/addons/website/static/src/xml/website.editor.xml @@ -9,7 +9,6 @@ class="btn">Cancel</button> </form> <ul class="nav navbar-nav pull-right"> - <li class="navbar-form"><button type="button" data-action="snippet" class="btn btn-primary">Building Blocks</button></li> </ul> </div> </t> @@ -32,7 +31,7 @@ </div> </t> <t t-name="website.editor.dialog.link.footer-button"> - <button type="button" class="btn pull-left remove">Remove Link</button> + <button type="button" class="btn pull-left remove btn-danger">Remove Link</button> </t> <t t-name="website.editor.dialog.link"> <t t-call="website.editor.dialog"> @@ -95,43 +94,64 @@ enctype="multipart/form-data" target="fileframe" class="col-sm-8"> - <div class="well"> - <!-- a href="#" class="pull-left">Find image</a --> - <h3 class="list-group-item-heading">Image URL</h3> - <input type="text" class="form-control url" - placeholder="http://openerp.com"/> - </div> <div class="text-center"> - <p class="">— or —</p> <input type="file" name="upload" style="position: absolute; opacity: 0; width: 1px; height: 1px;"/> <button type="button" class="btn btn-primary btn-lg filepicker"> Upload an image from your computer </button> + <p class="text-muted mt16">— or —</p> </div> - <p class="text-center">— or —</p> <div class="well"> - <h3 class="list-group-item-heading">Pick an existing attachment</h3> - <div class="existing-attachments"/> + <a href="#existing" class="pull-right">Browse existing images</a> + <h3 class="list-group-item-heading">Image URL</h3> + <input type="text" class="form-control url" + placeholder="http://openerp.com"/> </div> <input type="hidden" name="func"/> </form> - <div class="col-sm-4"> + <div class="col-sm-4 image-preview-container"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAC0lEQVQIHWP4zwAAAgEBAMVfG14AAAAASUVORK5CYII%3D" class="pull-right img-rounded image-preview" width="100%"/> + <select class="form-control image-style"> + <option value="">No styling</option> + <option value="img-rounded">Rounded corners</option> + <option value="img-thumbnail">Box</option> + <option value="img-circle">Circle</option> + <option value="shadow">Shadow</option> + </select> </div> </div> <iframe src="about:blank" name="fileframe" class="hidden"/> </t> </t> <t t-name="website.editor.dialog.image.existing"> + <div class="modal" tabindex="-1" role="dialog" aria-hidden="true"> + <div class="modal-dialog select-image"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h3 class="modal-title">Select a Picture</h3> + </div> + <div class="modal-body"> + <div class="existing-attachments"/> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal" aria-hidden="true">Discard</button> + </div> + </div> + </div> + </div> + </t> + <t t-name="website.editor.dialog.image.existing.content"> <div class="existing-attachments"> - <div class="row" t-foreach="rows" t-as="row"> - <div class="col-md-4" t-foreach="row" t-as="attachment"> - <t t-set="url">/website/attachment/<t t-esc="attachment.id"/></t> - <a t-att-href="url" class="thumbnail"> - <img t-att-src="url" t-att-alt="attachment.name"/> - </a> + <ul class="pager"> + <li class="previous disabled"><a href="#">← Previous</a></li> + <li class="next disabled"><a href="#">Next →</a></li> + </ul> + <div class="row mt16" t-foreach="rows" t-as="row"> + <div class="col-sm-2" t-foreach="row" t-as="attachment"> + <img t-att-src="attachment.website_url" t-att-alt="attachment.name" class="img img-responsive"/> </div> </div> </div> @@ -148,4 +168,5 @@ </tbody> </table> </t> + </templates> diff --git a/addons/website/static/src/xml/website.seo.xml b/addons/website/static/src/xml/website.seo.xml index 9471733e25c..4630e1f294b 100644 --- a/addons/website/static/src/xml/website.seo.xml +++ b/addons/website/static/src/xml/website.seo.xml @@ -6,8 +6,8 @@ <div class="modal-content"> <div class="modal-header"> <button title="Close" type="button" class="close" data-dismiss="modal">×</button> - <h2 class="modal-title">Promote <small class="js_seo_page_url"></small></h2> - <h4>Get your page efficiently referenced in Google to attract more visitors.</h4> + <h3 class="modal-title js_seo_page_url"></h3> + <h4 class="text-muted">Get this page efficiently referenced in Google to attract more visitors.</h4> </div> <div class="modal-body"> <div class="js_seo_tips" /> @@ -26,14 +26,7 @@ </div> </div> </div> - <dl class="dl-horizontal"> - <dt><span class="label label-warning">Keywords</span></dt> - <dd> - <ul class="list-inline"> - <li><span class="label label-default">Most searched topics related to these keywords</span></li> - </ul> - </dd> - </dl> + <span class="text-muted">Most searched topics related your keywords, ordered by importance:</span> <!-- filled in JS --> </section> <section> @@ -53,10 +46,10 @@ </div> </div> </section> - <section> + <section class="js_image_section"> <h3 class="page-header">3. Describe your images</h3> <div class="row js_seo_image_list"> - <!-- filled in JS --> + <!-- filled in JS --> </div> </section> <hr/> @@ -76,19 +69,16 @@ </t> <t t-name="website.seo_tip"> - <div t-attf-class="alert alert-#{widget.type}"> - <button title="Dismiss" type="button" class="close" data-action="close" data-dismiss="alert" aria-hidden="true">×</button> - <t t-raw="widget.message"/> + <div t-attf-class="alert alert-#{ widget.type }"> + <t t-raw="widget.message"/> </div> </t> <t t-name="website.seo_keyword"> - <dl class="dl-horizontal js_seo_keyword"> + <dl class="dl-horizontal"> <dt> - <span t-attf-class="label label-#{ widget.type } js_seo_keyword" t-att-data-keyword="widget.keyword"> - <a href="#" class="oe_remove" data-action="remove-keyword">x</a> - &nbsp; - <t t-raw="widget.keyword"/> + <span t-attf-title="#{ widget.tooltip() }" t-attf-class="oe_seo_keyword #{ widget.highlight() } js_seo_keyword" t-att-data-keyword="widget.keyword"> + <a href="#" class="oe_remove" data-action="remove-keyword">x</a> <t t-raw="widget.keyword"/> </span> </dt> <dd class="js_seo_keyword_suggestion"> @@ -99,7 +89,7 @@ <t t-name="website.seo_suggestion"> <li class="oe_seo_suggestion"> - <span t-attf-class="label label-#{ widget.type } js_seo_suggestion" t-att-data-keyword="widget.keyword"> + <span t-attf-title="#{ widget.tooltip() }" t-attf-class="oe_seo_keyword #{ widget.highlight() } js_seo_suggestion" t-att-data-keyword="widget.keyword"> <t t-raw="widget.keyword"/> </span> </li> diff --git a/addons/website/static/src/xml/website.snippets.xml b/addons/website/static/src/xml/website.snippets.xml index be1304a9d5c..752aa66fc34 100644 --- a/addons/website/static/src/xml/website.snippets.xml +++ b/addons/website/static/src/xml/website.snippets.xml @@ -1,22 +1,71 @@ <?xml version="1.0" encoding="utf-8"?> <templates id="template" xml:space="preserve"> - <!-- Editor --> + <!-- Snippet loader --> + <t t-name="website.snippets_button"> + <li class="navbar-form"><button type="button" data-action="snippet" class="btn btn-primary">Insert Blocks</button></li> + </t> + <t t-name="website.snippets_style"> + <li class="navbar-form"> + <div class="btn-group"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + Block style <span class="caret"></span> + </button> + <ul class="dropdown-menu" id="oe_snippets_style" role="menu"></ul> + </div> + </li> + </t> + <t t-name="website.snippets_modal"> + <div class="modal" id="oe_droperror" tabindex="-1" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">&times;</button> + <h4 class="modal-title"> + Building Block Not Inserted + </h4> + </div> + <div class="modal-body"> + <p> + The building block has not been inserted in your + page because you did not drop it in a valid zone. + Valid zone are represented by rectangle like this: + </p> + <div class="row"> + <div class="col-sm-4 col-sm-offset-4 oe_drop_zone_style text-center"> + drop in this zone + </div> + </div> + <p class="text-muted"> + When your cursor is in a valid zone, OpenERP shows + you a preview of the building block in your page. + You must release the block when the preview is visible. + </p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button> + <div class="pull-left"> + <input type="checkbox" value="1"/> Never show this tip again + </div> + </div> + </div> + </div> + </div> + </t> <t t-name="website.snippets"> - <div id='oe_snippets' class='hide'> - <ul class="nav nav-pills"> - <li class="active"><a data-toggle="pill" href="#snippet_structure">Structure</a></li> - <li class=""><a data-toggle="pill" href="#snippet_content">Content</a></li> - <li class=""><a data-toggle="pill" href="#snippet_emphasize">Emphasize</a></li> - <li class=""><a data-toggle="pill" href="#snippet_style">Style</a></li> - </ul> - <div class="pill-content"> - <div class="pill-pane active" id="snippet_structure"></div> - <div class="pill-pane" id="snippet_content"></div> - <div class="pill-pane" id="snippet_emphasize"></div> - <div class="pill-pane" id="snippet_style"></div> - <div class="pill-pane" id="snippet_unsorted"></div> + <div id='oe_snippets'> + <div class="scroll"> + <ul class="nav navbar-nav"> + <li><a href="#snippet_structure">Structure</a></li> + <li><a href="#snippet_content">Content</a></li> + <li><a href="#snippet_business">Business</a></li> + </ul> + <div class="pill-content"> + <div id="snippet_structure"><label><div>Structure</div></label></div> + <div id="snippet_content"><label><div>Content</div></label></div> + <div id="snippet_business"><label><div>Business</div></label></div> + </div> </div> </div> </t> @@ -24,15 +73,16 @@ <t t-name="website.snippet_overlay"> <div class="oe_overlay"> <div class="oe_overlay_options"> - <div class="dropdown oe_options"> - <i data-toggle="dropdown" class="btn btn-primary icon icon-cog"></i> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - <li class="divider"></li> - <li><a href="#" class="button js_box_remove">Remove this snippet</a></li> - </ul> + <div class="btn-group"> + <a href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Get Container Block"><span class="glyphicon glyphicon-open"/></a> + <div class="dropdown oe_options hidden btn-group"> + <a href="#" data-toggle="dropdown" class="btn btn-default btn-sm" title="Customize">Customize <span class="caret"/></a> + <ul class="dropdown-menu" role="menu"></ul> + </div> + <a href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate"><span class="glyphicon glyphicon-tags"/></a> + <a href="#" class="btn btn-default btn-sm oe_snippet_move" title="move"><span class="glyphicon glyphicon-move"/></a> + <a href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove"><span class="glyphicon glyphicon-remove"/></a> </div> - <div class="oe_label"></div> - <div class="oe_move"><i class="js_box_move icon btn btn-primary icon-move"></i></div> </div> </div> </t> @@ -41,7 +91,7 @@ <div class='oe_snippet_manipulator'></div> </t> - <!-- Snippets --> + <!-- snippet objects --> <div t-name="website.snippets.resize" data-snippet-id='resize'> <!-- custom data for the widget --> @@ -51,202 +101,698 @@ <div class='oe_handle w'></div> <div class='oe_handle s'></div> </div> - <div class='oe_snippet_thumbnail oe_label'>Margin resize</div> + <div class='oe_snippet_thumbnail'>Margin resize</div> </div> - <div t-name="website.snippets.colmd" data-snippet-id='colmd' data-action='insert' data-selector-vertical-childs='.row'> - <div class='oe_snippet_thumbnail oe_label'>Column</div> - </div> + <div t-name="website.snippets.colmd" data-snippet-id='colmd' data-selector-vertical-children='.row'></div> - <div t-name="website.snippets.carousel" data-snippet-id='carousel' data-category='emphasize' data-action='insert' data-selector-siblings='.container'> + <!-- Structure Snippets --> + + <div t-name="website.snippets.carousel" data-snippet-id='carousel' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> <!-- editor bar to display inside the top edit bar --> <li class='oe_snippet_options'> - <a href="#" class="button js_add">Add layer</a> + <a class="carousel-style"> + <select class="form-control" name="carousel-size"> + <option value="small">Small</option> + <option value="medium">Medium</option> + <option value="big">Big</option> + </select> + </a> </li> + <li class="divider"></li> <li class='oe_snippet_options'> - <a href="#" class="button js_remove">Remove current layer</a> + <a href="#" class="button js_add">Add Slide</a> + </li> + <li class='oe_snippet_options'> + <a href="#" class="button js_remove">Remove Slide</a> </li> <li class='oe_snippet_options'> <a class="carousel-background"> Background <select class="form-control" name="carousel-background"> - <option value="/website/static/src/img/greenfields.jpg">greenfields</option> - <option value="/website/static/src/img/landscape.png">landscape</option> - <option value="/website/static/src/img/aqua.jpg">aqua</option> + <option value="/website/static/src/img/banner/aqua.jpg">Aqua</option> + <option value="/website/static/src/img/banner/baby_blue.jpg">Baby Blue</option> + <option value="/website/static/src/img/banner/black.jpg">Black</option> + <option value="/website/static/src/img/banner/business_guy.jpg">Business Guy</option> + <option value="/website/static/src/img/banner/color_splash.jpg">Color Splash</option> + <option value="/website/static/src/img/banner/flower_field.jpg">Flowers Field</option> + <option value="/website/static/src/img/banner/greenfields.jpg">Greenfields</option> + <option value="/website/static/src/img/banner/landscape.jpg">Landscape</option> + <option value="/website/static/src/img/banner/mango.jpg">Mango</option> + <option value="/website/static/src/img/banner/mountains.jpg">Mountains</option> + <option value="/website/static/src/img/banner/orange_red.jpg">Orange Red</option> + <option value="/website/static/src/img/banner/flower.jpg">Purple</option> + <option value="/website/static/src/img/banner/velour.jpg">Velour</option> + <option value="/website/static/src/img/banner/wood.jpg">Wood</option> + <option value="/website/static/src/img/banner/yellow_green.jpg">Yellow Green</option> </select> <input class="form-control input-sm" type="text" placeholder="http://...."/> </a> </li> - <!--li class='oe_snippet_options'> + <li class='oe_snippet_options'> <a class="carousel-style"> Style <select class="form-control" name="carousel-style"> - <option value="no_image">No image</option> - <option value="image_left">Image left</option> - <option value="image_right">Image right</option> + <option value="text_only">Text Only</option> + <option value="image_text">Image - Text</option> + <option value="text_image">Text - Image</option> </select> </a> - </li--> + </li> <!-- thumbnail to display inside the bottom widget list editor --> - <div class='oe_snippet_thumbnail oe_label'>carousel</div> + <div class='oe_snippet_thumbnail'> + <img src="/website/static/src/img/banner/color_splash.jpg" style="position: absolute; left: 0; top: 40px; max-width: 100%"/> + <img src="/website/static/src/img/banner/banner_picture.png" style="position: absolute; left: 10px; top: 52px; max-width: 25%"/> + <span style="position: absolute; top: 50px; right: 10px;">Banner</span> + </div> <!-- body to insert after drag and drop thumbnail --> - <div id="myCarousel" class="oe_snippet_body carousel slide" data-interval="10000"> + <div id="myCarousel" class="oe_snippet_body carousel slide oe_medium mb32" data-interval="10000"> <!-- Carousel items --> <div class="carousel-inner"> - <div class="item active" style="background-image: url(/website/static/src/img/greenfields.jpg); background-size: cover;"> + <div class="item image_text active" style="background-image: url(/website/static/src/img/banner/color_splash.jpg); background-size: cover;"> <div class="container"> - <div class="content mt48 mb48" data-snippet-id='resize'> - <h1>Create Awesome Websites</h1> - <h3>Super easy, fully flexible</h3> - <a href="/page/website.contactus" class="btn btn-success btn-large mt16">Contact us</a> + <div class="carousel-caption content"> + <h1>Set Your Banner Title</h1> + <h3>Customize with the top-left menu</h3> + <p> + <a href="/page/website.contactus" class="btn btn-success btn-large">Contact us</a> + </p> + </div> + <div class="carousel-image hidden-xs"> + <img src="/website/static/src/img/banner/banner_picture.png" alt="Banner OpenERP Image"/> </div> </div> </div> </div> <!-- Carousel nav --> - <a class="carousel-control left" href="#myCarousel" data-slide="prev"></a> - <a class="carousel-control right" href="#myCarousel" data-slide="next"></a> + <a class="carousel-control left" href="#myCarousel" data-slide="prev" style="width: 10%"></a> + <a class="carousel-control right" href="#myCarousel" data-slide="next" style="width: 10%"></a> </div> + </div> - <!-- custom data for the widget --> - <div class="item" style="background-image: url(/website/static/src/img/china.jpg); background-size: cover; background-position: bottom;" > - <div class='container'> - <div class="content" style="padding-top: 90px; padding-bottom:45px;"> - <h1>Your New Banner Slide</h1> - <h3>With another convincing subtitle</h3> - <a href="/page/website.contactus" class="btn btn-success btn-large mt16">Contact us</a> - </div> + <div t-name="website.snippets.darken" data-snippet-id='darken' data-category='style' data-selector='section'> + <div class='oe_snippet_label'>Darken</div> + <div class='oe_snippet_class'>dark</div> + </div> + + <div t-name="website.snippets.well" data-snippet-id='well' data-category='content' data-selector-siblings='p, h1, h2, h3, blockquote'> + <div class='oe_snippet_thumbnail'>Well</div> + <div class="oe_snippet_body well"> + Manage your sales funnel with no effort with OpenERP CRM. Attract + leads, follow-up on phone calls and meetings. Analyse the quality + of your leads to make informed decisions. + </div> + </div> + + <div t-name="website.snippets.quote" data-snippet-id='quote' data-category='content' data-selector-siblings='p, h1, h2, h3, blockquote'> + <div class='oe_snippet_thumbnail'>Quote</div> + <blockquote class="oe_snippet_body"> + <p> + OpenERP provides essential platform for our project management. + Things are better organized and more visible with it. + </p> + <small>John Doe, CEO</small> + </blockquote> + </div> + + <div t-name="website.snippets.panel" data-snippet-id='panel' data-category='content' data-selector-siblings='p, h1, h2, h3, blockquote'> + <div class='oe_snippet_thumbnail'>Panel</div> + <div class="oe_snippet_body panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">OpenERP Features</h3> + </div> + <div class="panel-body"> + OpenERP's collaborative and realtime project management helps + your team get work done. Keep track of everything, from the big + picture to the minute details, from the customer contract to + the billing. </div> </div> </div> - <div t-name="website.snippets.darken" data-snippet-id='darken' data-category='style' data-action='mutate' data-selector='.container'> - <div class='oe_snippet_thumbnail oe_label'>Darken</div> + <div t-name="website.snippets.surprise" data-snippet-id='vomify' data-category='content' data-selector-children='.oe_structure'> + <div class="oe_snippet_body" style="height: 0; position: absolute;"></div> + <div class='oe_snippet_thumbnail' style='background-image:radial-gradient(red,orange,yellow,green,blue);'>Surprise!</div> </div> - <div t-name="website.snippets.surprise" data-snippet-id='vomify' data-category='content' data-action='mutate' data-selector='.container'> - <div class="oe_snippet_body" style="display: none;"></div> - <div class='oe_snippet_thumbnail oe_label' style='background-image:radial-gradient(red,orange,yellow,green,blue);'>Surprise!</div> + <div t-name="website.snippets.text-image" data-snippet-id='text-image' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'> + <span style="position: absolute; top: 50px; left: 5px;">Text-Image</span> + <img src="/website/static/src/img/banner/banner_picture.png" style="position: absolute; right: 5px; top: 50px; max-width: 28%"/> + </div> + <section class="oe_snippet_body"> + <div class="container"> + <div class="row"> + <div class="col-md-6 mt32"> + <h3>Enterprise Social Network</h3> + <p> + Make every employee feel more connected and engaged + with twitter-like features for your own company. Follow + people, share best practices, 'like' top ideas, etc. + </p><p> + Connect with experts, follow what interests you, share + documents and promote best practices with OpenERP + Social application. Get work done with effective + collaboration across departments, geographies + and business applications. + </p> + </div> + <div class="col-md-6 mt16 mb16"> + <img class="img-responsive shadow" src="/website/static/src/img/text_image.png"/> + </div> + </div> + </div> + </section> </div> - <div t-name="website.snippets.spacer" data-snippet-id='resize' data-category='structure' data-action='insert' data-selector-siblings='.container'> - <div class='oe_snippet_thumbnail oe_label'>Spacer</div> - <div class="oe_snippet_body container mt32"></div> + <div t-name="website.snippets.image-text" data-snippet-id='image-text' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'> + <img src="/website/static/src/img/banner/banner_picture.png" style="position: absolute; left: 5px; top: 50px; max-width: 28%"/> + <span style="position: absolute; top: 50px; right: 5px;">Image-Text</span> + </div> + <section class="oe_snippet_body"> + <div class="container"> + <div class="row"> + <div class="col-md-6 mt16 mb16"> + <img class="img-responsive shadow" src="/website/static/src/img/image_text.jpg"/> + </div> + <div class="col-md-6 mt32"> + <h3>Manage Your Shops</h3> + <p> + OpenERP's Point of Sale introduces a super clean + interface with no installation required that runs + online and offline on modern hardwares. + </p><p> + It's full integration with the company inventory + and accounting, gives you real time statistics and + consolidations amongst all shops without the hassle + of integrating several applications. + </p> + </div> + </div> + </div> + </section> </div> - <div t-name="website.snippets.title" data-snippet-id='title' data-category='structure' data-action='insert' data-selector-siblings='.container'> - <div class='oe_snippet_thumbnail oe_label'>Main Title</div> - <section class="oe_snippet_body container"> - <div class="row"> - <div class="col-md-12 text-center"> - <h1 class="mt64">Welcome To Your New Homepage,</h1> - <h2 class="mt32 subheader">where <b><em>everything</em></b> can be customized </h2> + <div t-name="website.snippets.jumbotron" data-snippet-id='jumbotron' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'> + <div style="position: absolute; top: 30px; background-color: #eee; width: 100%; padding: 8px 0 6px 4px;"> + <div style="color: #000; display: block; text-align: left;"> + Jumbotron + <div style="font-size: 9px; line-height: 9px; text-shadow: none;"> + Jumbotron Sub-title + <br/><span class="label label-primary">Contact us</span> + </div> </div> </div> + </div> + <section class="oe_snippet_body jumbotron mt16 mb16"> + <div class="container"> + <h1>Sell Online. Easily.</h1> + <p> + Get your online shop ready in a few clicks with OpenERP Commerce. + </p> + <p> + <a class="btn btn-primary btn-lg" href="/website.contactus"> + Contact us + </a> + </p> + </div> </section> </div> - <div t-name="website.snippets.text-image" data-snippet-id='text-image' data-category='structure' data-action='insert' data-selector-childs='.container'> - <div class='oe_snippet_thumbnail oe_label'>Text-Image</div> - <section class="oe_snippet_body container"> - <div class="row"> - <div class="col-md-7"> - <h4 class="mt16">Mollit Anim</h4> - <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum - dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat.</p> + <div t-name="website.snippets.text-block" data-snippet-id='text-block' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'> + <div style="position: absolute; top: 26px; left: 5px; width: 94%;"> + <div style="display: block;"> + Text Block + <div style="text-shadow: none;font-size: 9px; line-height: 9px; color: #bbb;margin-bottom: 5px;"> + Jumbotron Sub-title + </div> + <div style="text-shadow: none;font-size: 6px; line-height: 6px; text-align: left;"> + Organize projects around your own processes. Work + on tasks and issues using the kanban view, schedule + tasks using the gantt chart and control deadlines + in the calendar view. Every project may have it's + own stages allowing teams to optimize their job. + </div> + </div> + </div> + </div> + <section class="oe_snippet_body mt16 mb16"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt16 mb32"> + <h2> + OpenERP Project Management + </h2> + <h3 class="text-muted">Infinitely flexible. Incredibly easy to use.</h3> + </div> + <div class="col-md-12 mb16 mt16"> + <p> + OpenERP's <b>collaborative and realtime</b> project + management helps your team get work done. Keep + track of everything, from the big picture to the + minute details, from the customer contract to the + billing. + </p><p> + Organize projects around <b>your own processes</b>. Work + on tasks and issues using the kanban view, schedule + tasks using the gantt chart and control deadlines + in the calendar view. Every project may have it's + own stages allowing teams to optimize their job. + </p> + </div> + </div> + </div> + </section> + </div> + + <div t-name="website.snippets.title" data-snippet-id='title' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class="oe_snippet_thumbnail">Title</div> + <div class="oe_snippet_body row"> + <div class="col-md-12"> + <h2>Your Website Title</h2> + <h3 class="text-muted">Great products for great people</h3> + </div> + </div> + </div> + + <div t-name="website.snippets.hr" data-snippet-id='hr' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class="oe_snippet_thumbnail"> + <hr style="position: absolute;top: 61px;margin: 0;width: 100%;border-color: #888;"/> + <div style="position: absolute;width: 100%;top: 51px;">Separator</div> + </div> + <hr class="oe_snippet_body"/> + </div> + + + <div t-name="website.snippets.big-picture" data-snippet-id='big-picture' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'> + <div style="position: absolute; top: 8px; left: 5px; width: 94%;"> + <div style="display: block;"> + Big Picture + <img src="/website/static/src/img/big_picture.png" style="max-width: 100%"/> + <div style="text-shadow: none;font-size: 6px; line-height: 6px; margin: 5px 10px"> + OpenERP's Point of Sale introduces a super clean + interface with no installation required. + </div> </div> - <div class="col-md-5"> - <img class="img-rounded img-responsive" src="/website/static/src/img/island.jpg"/> + </div> + + </div> + <section class="oe_snippet_body dark mt16 mb16"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt32 mb32"> + <h2>Work with the hardware you already have...</h2> + </div> + <div class="col-md-12"> + <img class="img-responsive" src="/website/static/src/img/big_picture.png" style="margin: 0 auto;"/> + </div> + <div class="col-md-6 col-md-offset-3 mb16 mt16"> + <p class="text-center"> + <b>No installation required</b> + </p> + <p class="text-center"> + OpenERP's Point of Sale introduces a super clean + interface with no installation required that runs + online and offline on modern hardware. Laptops, + tablets, industrial POS, it runs on everything. + </p> + <p class="text-center"> + <a href="/page/website.contactus">Get more information »</a> + </p> + </div> </div> </div> </section> </div> - <div t-name="website.snippets.image-text" data-snippet-id='image-text' data-category='structure' data-action='insert' data-selector-childs='.container'> - <div class='oe_snippet_thumbnail oe_label'>Image-Text</div> - <section class="oe_snippet_body container"> - <div class="row"> - <div class="col-md-5"> - <img class="img-rounded img-responsive" src="/website/static/src/img/island.jpg"/> + + <div t-name="website.snippets.three-columns" data-snippet-id='three-columns' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class="oe_snippet_thumbnail"> + <div style="padding-top: 22px;"> + Three Columns + <div class="clearfix" style="font-size: 6px;text-shadow: none;"> + <div class="pull-left" style="width: 33%;line-height: 6px;"> + <img src="/website/static/src/img/china_thumb.jpg" style="max-width: 90%;"/> + Post job offers and keep track of each application received. + </div> + <div class="pull-left" style="width: 33%;line-height: 6px;"> + <img src="/website/static/src/img/desert_thumb.jpg" style="max-width: 90%;"/> + Break down information silos. Share knowledge and best practices amongst all employees. + </div> + <div class="pull-left" style="width: 33%; line-height: 6px;"> + <img src="/website/static/src/img/deers_thumb.jpg" style="max-width: 90%;"/> + The agenda of each employee is updated accordingly. + </div> </div> - <div class="col-md-7"> - <h4 class="mt16">Mollit Anim</h4> - <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum - dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat.</p> + </div> + </div> + <section class="oe_snippet_body mt16 mb16"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt16 mb16"> + <h2>OpenERP HR Features</h2> + <h3 class="text-muted">Manage your company most important asset: People</h3> + </div> + <div class="col-md-4"> + <img class="img-rounded img-responsive" src="/website/static/src/img/china_thumb.jpg"/> + <h4 class="mt16">Streamline Recruitments</h4> + <p> + Post job offers and keep track of each application + received. Follow applicants in your recruitment process + with the smart kanban view. + </p><p> + Save time by automating some communications with email + templates. Resumes are indexed automatically, allowing + you to easily find for specific profiles. + </p> + </div> + <div class="col-md-4"> + <img class="img-rounded img-responsive" src="/website/static/src/img/desert_thumb.jpg"/> + <h4 class="mt16">Enterprise Social Network</h4> + <p> + Break down information silos. Share knowledge and best + practices amongst all employees. Follow specific people + or documents and join groups of interests to share + expertise and documents. + </p><p> + Interact with your collegues in real time with live chat. + </p> + </div> + <div class="col-md-4"> + <img class="img-rounded img-responsive" src="/website/static/src/img/deers_thumb.jpg"/> + <h4 class="mt16">Leaves Management</h4> + <p> + Keep track of the vacation days accrued by each + employee. Employees enter their requests (paid + holidays, sick leave, etc), for managers to approve and + validate. It's all done in just a few clicks. The + agenda of each employee is updated accordingly. + </p> + </div> </div> </div> </section> </div> - <div t-name="website.snippets.three-collumns" data-snippet-id='three-collumns' data-category='structure' data-action='insert' data-selector-siblings='.container'> - <div class='oe_snippet_thumbnail oe_label'>three-collumns</div> - <section class="oe_snippet_body container"> - <div class="row"> - <div class="col-md-12 text-center"> - <h2 class="mt48">Ut enim ad minim veniam</h2> + <div t-name="website.snippets.portfolio" data-snippet-id='portfolio' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'>Portfolio</div> + <section class="oe_snippet_body"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt16 mb32"> + <h2>Our Porfolio</h2> + <h4 class="text-muted">More than 500 successful projects</h4> + </div> + <div class="col-md-4"> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/deers.jpg"/> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/desert.jpg"/> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/china.jpg"/> + </div> + <div class="col-md-4"> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/desert.jpg"/> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/china.jpg"/> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/deers.jpg"/> + </div> + <div class="col-md-4"> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/landscape.jpg"/> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/china.jpg"/> + <img class="img-thumbnail img-responsive" src="/website/static/src/img/desert.jpg"/> + </div> + </div> + </div> + </section> + </div> + + <div t-name="website.snippets.image-gallery" data-snippet-id='image-gallery' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'> + <div style="padding-top: 22px;"> + Image Gallery + <div class="clearfix"> + <div style="float: right; width: 56px;height: 30px;"> + <img src="/website/static/src/img/china_thumb.jpg" style="max-width: 24px;"/> + <img src="/website/static/src/img/deers_thumb.jpg" style="max-width: 24px;"/> + <img src="/website/static/src/img/desert_thumb.jpg" style="max-width: 24px;"/> + <img src="/website/static/src/img/china_thumb.jpg" style="max-width: 24px;"/> + </div> + <img src="/website/static/src/img/desert.jpg" style="float-left; width: 50px;height: 31px;margin-top: 4px;"/> + <img src="/website/static/src/img/deers_thumb.jpg" style="float-left; max-width: 24px;"/> + <img src="/website/static/src/img/landscape.jpg" style="float-left; max-width: 50px;"/> + <img src="/website/static/src/img/china_thumb.jpg" style="max-width: 24px;"/> + </div> + </div> + </div> + <section class="oe_snippet_body"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt16 mb32"> + <h2>Our Customer References</h2> + <h4 class="text-muted">More than 500 successful projects</h4> + </div> + <div class="col-md-6"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/desert.jpg"/> + </div> + <div class="col-md-3"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/china_thumb.jpg"/> + </div> + <div class="col-md-3"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/deers_thumb.jpg"/> + </div> + <div class="col-md-3"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/desert_thumb.jpg"/> + </div> + <div class="col-md-3"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/china_thumb.jpg"/> + </div> + <div class="col-md-3"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/deers_thumb.jpg"/> + </div> + <div class="col-md-6"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/landscape.jpg"/> + </div> + <div class="col-md-3"> + <img class="img-thumbnail img-responsive mb16" src="/website/static/src/img/china_thumb.jpg"/> + </div> </div> </div> - <div class="row mt32"> + </section> + </div> + + <div t-name="website.snippets.pricing" data-snippet-id='pricing' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'>Comparisons</div> + <section class="oe_snippet_body"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt16 mb32"> + <h2>Our Offers</h2> + </div> + <div class="col-md-4"> - <img class="img-rounded img-responsive" src="/website/static/src/img/china_thumb.jpg"/> - <h4 class="mt16">Cillum Dolore</h4> - <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat.</p> + <div class="panel panel-info"> + <!-- Default panel contents --> + <div class="panel-heading text-center"> + <h2 style="margin: 0">Beginner</h2> + <p style="margin: 0" class="text-muted"> + Starter package + </p> + </div> + <div class="panel-body text-center text-muted" style="background-color: rgba(0,0,0,0.1)"> + <h2 style="margin: 0"><span>$</span><b style="font-size: 60px">450</b><small>.00</small></h2> + <div>per month</div> + </div> + + <!-- List group --> + <ul class="list-group"> + <li class="list-group-item">Battery: 8 hours</li> + <li class="list-group-item">Screen: 2.5 inch</li> + <li class="list-group-item">Weight: 1.1 ounces</li> + <li class="list-group-item">No support</li> + </ul> + <div class="panel-footer text-center"> + <p class="text-muted"> + <i>Free shipping, satisfied or reimbursed.</i> + </p> + <a href="/page/website.contactus" class="btn btn-primary btn-lg">Order now</a> + </div> + </div> </div> <div class="col-md-4"> - <img class="img-rounded img-responsive" src="/website/static/src/img/desert_thumb.jpg"/> - <h4 class="mt16">Mollit Anim</h4> - <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum - dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p> + <div class="panel panel-primary"> + <!-- Default panel contents --> + <div class="panel-heading text-center"> + <h2 style="margin: 0">Professional</h2> + <p style="margin: 0"> + Enterprise package + </p> + </div> + <div class="panel-body text-center text-muted" style="background-color: rgba(0,0,0,0.1)"> + <h2 style="margin: 0"><span>$</span><b style="font-size: 60px">590</b><small>.00</small></h2> + <div>per month</div> + </div> + + <!-- List group --> + <ul class="list-group"> + <li class="list-group-item">Battery: 12 hours</li> + <li class="list-group-item">Screen: 2.8 inch</li> + <li class="list-group-item">Weight: 1.2 ounces</li> + <li class="list-group-item">Limited support</li> + </ul> + <div class="panel-footer text-center"> + <p class="text-muted"> + <i>Free shipping, satisfied or reimbursed.</i> + </p> + <a href="/page/website.contactus" class="btn btn-primary btn-lg">Order now</a> + </div> + </div> </div> <div class="col-md-4"> - <img class="img-rounded img-responsive" src="/website/static/src/img/deers_thumb.jpg"/> - <h4 class="mt16">Nemo Enim Ipsam</h4> - <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium - doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore - veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim - ipsam voluptatem quia voluptas</p> + <div class="panel panel-info"> + <!-- Default panel contents --> + <div class="panel-heading text-center"> + <h2 style="margin: 0">Expert</h2> + <p style="margin: 0" class="text-muted"> + The top of the top + </p> + </div> + <div class="panel-body text-center text-muted" style="background-color: rgba(0,0,0,0.1)"> + <h2 style="margin: 0"><span>$</span><b style="font-size: 60px">890</b><small>.00</small></h2> + <div>per month</div> + </div> + + <!-- List group --> + <ul class="list-group"> + <li class="list-group-item">Battery: 20 hours</li> + <li class="list-group-item">Screen: 2.8 inch</li> + <li class="list-group-item">Weight: 1.2 ounces</li> + <li class="list-group-item">Unlimited support</li> + </ul> + <div class="panel-footer text-center"> + <p class="text-muted"> + <i>Free shipping, satisfied or reimbursed.</i> + </p> + <a href="/page/website.contactus" class="btn btn-primary btn-lg">Contact us</a> + </div> + </div> + </div> + </div> </div> </section> </div> - <div t-name="website.snippets.header-block" data-snippet-id='header-block' data-category='structure' data-action='insert' data-selector-siblings='.container'> - <div class='oe_snippet_thumbnail oe_label'>header-block</div> - <section class="container oe_snippet_body"> - <div class="row"> - <div class="col-md-5"> - <img class="img-rounded img-responsive" src="/website/static/src/img/island.jpg"/> + <div t-name="website.snippets.cta" data-snippet-id='cta' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'>Buttons</div> + <section class="oe_snippet_body dark"> + <div class="container"> + <div class="row"> + <div class="col-md-12 text-center mt16 mb16"> + <a href="/shop" class="btn btn-info btn-lg">View Products</a> + <a href="/page/website.contactus" class="btn btn-primary btn-lg">Contact us</a> </div> - <div class="col-md-6 col-lg-offset-1"> - <p class="mt16">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat.</p> - <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum - dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p> - <div class="text-center"> - <a href="http://www.openerp.com/start" class="btn btn-default mt16 btn-lg btn-primary">Call To <em>Action</em></a> + </div> + </div> + </section> + </div> + + <div t-name="website.snippets.faq" data-snippet-id='faq' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'>FAQ</div> + <section class="oe_snippet_body"> + <div class="container"> + <h2 class="page-header"> + Point of Sale Questions <small>v7</small> + </h2> + <h3> + Which hardware does OpenERP POS support? + </h3> + <p> + OpenERP's POS is a web application that can run on any device that + can display websites with little to no setup required. + </p><p> + The Point of Sale works perfectly on any kind of touch enabled + device, whether it's multi-touch tablets like an iPad or + keyboardless resistive touchscreen terminals. + </p> + <h3> + Does it works offline? + </h3> + <p> + Deploy new stores with just an internet connection: no + installation, no specific hardware required. It works with any + iPad, Tablet PC, laptop or industrial POS machine. + </p><p> + While an internet connection is required to start the Point of + Sale, it will stay operational even after a complete disconnection. + </p> + + <h2 class="page-header"> + Project Management Questions <small>v7</small> + </h2> + <h3> + Can I use it to manage projects based on agile methodologies? + </h3> + <p> + Yes. + </p> + </div> + </section> + </div> + + <div t-name="website.snippets.references" data-snippet-id='references' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'> + <div class='oe_snippet_thumbnail'>References</div> + <section class="oe_snippet_body mb32 mt16"> + <div class="container"> + <div class="row"> + <div class="col-md-12"> + <h1 class="text-center"> + Our References + </h1> + <h3 class="text-muted text-center"> + More than 500 happy customers. + </h3> + </div> + <div class="col-md-4 col-md-offset-1 mt16 mb32"> + <blockquote data-snippet-id="quote"> + <p> + OpenERP provides essential platform for our project management. + Things are better organized and more visible with it. + </p> + <small>John Doe, CEO</small> + </blockquote> + </div> + <div class="col-md-4 col-md-offset-2 mt16 mb32"> + <blockquote data-snippet-id="quote"> + <p> + OpenERP provides essential platform for our project management. + Things are better organized and more visible with it. + </p> + <small>John Doe, CEO</small> + </blockquote> + </div> + <div class="clearfix"/> + <div class="col-md-2 col-md-offset-1"> + <img src="/website/static/src/img/openerp_logo.png" class="img-responsive img-thumbnail"/> + </div> + <div class="col-md-2"> + <img src="/website/static/src/img/openerp_logo.png" class="img-responsive img-thumbnail"/> + </div> + <div class="col-md-2"> + <img src="/website/static/src/img/openerp_logo.png" class="img-responsive img-thumbnail"/> + </div> + <div class="col-md-2"> + <img src="/website/static/src/img/openerp_logo.png" class="img-responsive img-thumbnail"/> + </div> + <div class="col-md-2"> + <img src="/website/static/src/img/openerp_logo.png" class="img-responsive img-thumbnail"/> </div> </div> </div> </section> </div> + </templates> diff --git a/addons/website/static/src/xml/website.xml b/addons/website/static/src/xml/website.xml index 7ddd483a6fb..04c2403eda2 100644 --- a/addons/website/static/src/xml/website.xml +++ b/addons/website/static/src/xml/website.xml @@ -4,7 +4,7 @@ <templates id="template" xml:space="preserve"> <t t-name="website.editorbar"> - <div class="navbar navbar-inverse navbar-fixed-top"> + <div id="website-top-navbar" class="navbar navbar-inverse navbar-fixed-top"> <div id="website-top-view"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-edit-collapse"> @@ -14,8 +14,7 @@ <span class="icon-bar"></span> </button> <form class="navbar-form navbar-left"> - <button type="button" data-action="edit" - class="btn btn-primary">Edit</button> + <button type="button" data-action="edit" class="btn btn-primary">Edit</button> </form> </div> <div class="collapse navbar-collapse navbar-edit-collapse"> |
