From 3a2df5513b5a092678dd89f12b6b46e899b1ac9d Mon Sep 17 00:00:00 2001 From: rottbers Date: Fri, 8 Feb 2019 10:20:19 +0100 Subject: [PATCH] Initial commit --- .gitignore | 2 + LICENSE | 201 ++ README.md | 147 + assets/dropdown-arrow.svg | 4 + assets/loader.gif | Bin 0 -> 9666 bytes bin/compile.rb | 26 + bin/stylesheet_compiler.rb | 106 + bin/update-translations.js | 35 + manifest.json | 231 ++ package.json | 11 + script.js | 129 + settings/community_background_image.svg | 1 + settings/community_image.svg | 1 + settings/favicon.ico | Bin 0 -> 79 bytes settings/homepage_background_image.svg | 1 + settings/logo.png | Bin 0 -> 5632 bytes style.css | 4063 +++++++++++++++++++++++ styles/_actions.scss | 29 + styles/_article.scss | 279 ++ styles/_attachments.scss | 35 + styles/_base.scss | 125 + styles/_blocks.scss | 82 + styles/_breadcrumbs.scss | 27 + styles/_buttons.scss | 88 + styles/_category.scss | 58 + styles/_collapsible-nav.scss | 97 + styles/_collapsible-sidebar.scss | 39 + styles/_comments.scss | 161 + styles/_community.scss | 137 + styles/_footer.scss | 20 + styles/_forms.scss | 109 + styles/_header.scss | 87 + styles/_hero.scss | 16 + styles/_home-page.scss | 78 + styles/_icons.scss | 109 + styles/_metadata.scss | 19 + styles/_mixins.scss | 91 + styles/_my-activities.scss | 251 ++ styles/_page_header.scss | 47 + styles/_pagination.scss | 62 + styles/_post.scss | 156 + styles/_recent-activity.scss | 87 + styles/_request.scss | 186 ++ styles/_search.scss | 47 + styles/_search_results.scss | 88 + styles/_section.scss | 18 + styles/_share.scss | 48 + styles/_status-label.scss | 86 + styles/_striped_list.scss | 78 + styles/_sub-nav.scss | 22 + styles/_tables.scss | 43 + styles/_user-profiles.scss | 581 ++++ styles/_user.scss | 77 + styles/_variables.scss | 41 + styles/_vote.scss | 54 + styles/index.scss | 38 + templates/article_page.hbs | 229 ++ templates/category_page.hbs | 56 + templates/community_post_list_page.hbs | 139 + templates/community_post_page.hbs | 217 ++ templates/community_topic_list_page.hbs | 85 + templates/community_topic_page.hbs | 109 + templates/contributions_page.hbs | 65 + templates/document_head.hbs | 1 + templates/error_page.hbs | 21 + templates/footer.hbs | 22 + templates/header.hbs | 15 + templates/home_page.hbs | 71 + templates/new_community_post_page.hbs | 49 + templates/new_request_page.hbs | 22 + templates/request_page.hbs | 225 ++ templates/requests_page.hbs | 122 + templates/search_results.hbs | 103 + templates/section_page.hbs | 46 + templates/subscriptions_page.hbs | 66 + templates/user_profile_page.hbs | 297 ++ thumbnail.png | Bin 0 -> 77091 bytes translations.yml | 347 ++ translations/ar.json | 66 + translations/bg.json | 66 + translations/bn.json | 30 + translations/bs.json | 30 + translations/ca.json | 30 + translations/cs.json | 66 + translations/cy.json | 30 + translations/da.json | 66 + translations/de.json | 66 + translations/el.json | 66 + translations/en-ca.json | 66 + translations/en-gb.json | 66 + translations/en-us.json | 66 + translations/en-x-keys.json | 30 + translations/en-x-pseu.json | 30 + translations/es-419.json | 66 + translations/es-es.json | 66 + translations/es.json | 66 + translations/et.json | 30 + translations/fa.json | 30 + translations/fi.json | 66 + translations/fil.json | 30 + translations/fr-ca.json | 66 + translations/fr.json | 66 + translations/ga.json | 30 + translations/he.json | 66 + translations/hi.json | 66 + translations/hr.json | 30 + translations/hu.json | 66 + translations/hy.json | 30 + translations/id.json | 66 + translations/is.json | 30 + translations/it.json | 66 + translations/ja.json | 66 + translations/ka.json | 30 + translations/ko.json | 66 + translations/lt.json | 30 + translations/lv.json | 30 + translations/ms.json | 30 + translations/nl.json | 66 + translations/nn.json | 30 + translations/no.json | 66 + translations/pl.json | 66 + translations/pt-br.json | 66 + translations/pt.json | 66 + translations/ro.json | 66 + translations/ru.json | 66 + translations/sk.json | 30 + translations/sl.json | 30 + translations/sr.json | 30 + translations/sv.json | 66 + translations/th.json | 66 + translations/tl.json | 30 + translations/tr.json | 66 + translations/uk.json | 66 + translations/ur.json | 30 + translations/vi.json | 66 + translations/zh-cn.json | 66 + translations/zh-tw.json | 66 + yarn.lock | 28 + 138 files changed, 14055 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/dropdown-arrow.svg create mode 100644 assets/loader.gif create mode 100644 bin/compile.rb create mode 100644 bin/stylesheet_compiler.rb create mode 100644 bin/update-translations.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 script.js create mode 100644 settings/community_background_image.svg create mode 100644 settings/community_image.svg create mode 100644 settings/favicon.ico create mode 100644 settings/homepage_background_image.svg create mode 100644 settings/logo.png create mode 100644 style.css create mode 100644 styles/_actions.scss create mode 100644 styles/_article.scss create mode 100644 styles/_attachments.scss create mode 100644 styles/_base.scss create mode 100644 styles/_blocks.scss create mode 100644 styles/_breadcrumbs.scss create mode 100644 styles/_buttons.scss create mode 100644 styles/_category.scss create mode 100644 styles/_collapsible-nav.scss create mode 100644 styles/_collapsible-sidebar.scss create mode 100644 styles/_comments.scss create mode 100644 styles/_community.scss create mode 100644 styles/_footer.scss create mode 100644 styles/_forms.scss create mode 100644 styles/_header.scss create mode 100644 styles/_hero.scss create mode 100644 styles/_home-page.scss create mode 100644 styles/_icons.scss create mode 100644 styles/_metadata.scss create mode 100644 styles/_mixins.scss create mode 100644 styles/_my-activities.scss create mode 100644 styles/_page_header.scss create mode 100644 styles/_pagination.scss create mode 100644 styles/_post.scss create mode 100644 styles/_recent-activity.scss create mode 100644 styles/_request.scss create mode 100644 styles/_search.scss create mode 100644 styles/_search_results.scss create mode 100644 styles/_section.scss create mode 100644 styles/_share.scss create mode 100644 styles/_status-label.scss create mode 100644 styles/_striped_list.scss create mode 100644 styles/_sub-nav.scss create mode 100644 styles/_tables.scss create mode 100644 styles/_user-profiles.scss create mode 100644 styles/_user.scss create mode 100644 styles/_variables.scss create mode 100644 styles/_vote.scss create mode 100644 styles/index.scss create mode 100644 templates/article_page.hbs create mode 100644 templates/category_page.hbs create mode 100644 templates/community_post_list_page.hbs create mode 100644 templates/community_post_page.hbs create mode 100644 templates/community_topic_list_page.hbs create mode 100644 templates/community_topic_page.hbs create mode 100644 templates/contributions_page.hbs create mode 100644 templates/document_head.hbs create mode 100644 templates/error_page.hbs create mode 100644 templates/footer.hbs create mode 100644 templates/header.hbs create mode 100644 templates/home_page.hbs create mode 100644 templates/new_community_post_page.hbs create mode 100644 templates/new_request_page.hbs create mode 100644 templates/request_page.hbs create mode 100644 templates/requests_page.hbs create mode 100644 templates/search_results.hbs create mode 100644 templates/section_page.hbs create mode 100644 templates/subscriptions_page.hbs create mode 100644 templates/user_profile_page.hbs create mode 100644 thumbnail.png create mode 100644 translations.yml create mode 100644 translations/ar.json create mode 100644 translations/bg.json create mode 100644 translations/bn.json create mode 100644 translations/bs.json create mode 100644 translations/ca.json create mode 100644 translations/cs.json create mode 100644 translations/cy.json create mode 100644 translations/da.json create mode 100644 translations/de.json create mode 100644 translations/el.json create mode 100644 translations/en-ca.json create mode 100644 translations/en-gb.json create mode 100644 translations/en-us.json create mode 100644 translations/en-x-keys.json create mode 100644 translations/en-x-pseu.json create mode 100644 translations/es-419.json create mode 100644 translations/es-es.json create mode 100644 translations/es.json create mode 100644 translations/et.json create mode 100644 translations/fa.json create mode 100644 translations/fi.json create mode 100644 translations/fil.json create mode 100644 translations/fr-ca.json create mode 100644 translations/fr.json create mode 100644 translations/ga.json create mode 100644 translations/he.json create mode 100644 translations/hi.json create mode 100644 translations/hr.json create mode 100644 translations/hu.json create mode 100644 translations/hy.json create mode 100644 translations/id.json create mode 100644 translations/is.json create mode 100644 translations/it.json create mode 100644 translations/ja.json create mode 100644 translations/ka.json create mode 100644 translations/ko.json create mode 100644 translations/lt.json create mode 100644 translations/lv.json create mode 100644 translations/ms.json create mode 100644 translations/nl.json create mode 100644 translations/nn.json create mode 100644 translations/no.json create mode 100644 translations/pl.json create mode 100644 translations/pt-br.json create mode 100644 translations/pt.json create mode 100644 translations/ro.json create mode 100644 translations/ru.json create mode 100644 translations/sk.json create mode 100644 translations/sl.json create mode 100644 translations/sr.json create mode 100644 translations/sv.json create mode 100644 translations/th.json create mode 100644 translations/tl.json create mode 100644 translations/tr.json create mode 100644 translations/uk.json create mode 100644 translations/ur.json create mode 100644 translations/vi.json create mode 100644 translations/zh-cn.json create mode 100644 translations/zh-tw.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d94cbc6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.sass-cache/ +style.css.map diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9c856c0 --- /dev/null +++ b/README.md @@ -0,0 +1,147 @@ +# Copenhagen Theme by Zendesk + +The Copenhagen theme is a responsive theme for Zendesk Guide. It is designed to be used together with [Theming Center](https://support.zendesk.com/hc/en-us/community/topics/115000528387-Zendesk-Guide-beta-Theming-Center) + +You can see the theme live [here](https://copenhagentheme.zendesk.com/hc/en-us). + +The Copenhagen theme for Help Center consists of a [set of templates](#templates), [styles](#styles), a Javascript file used mainly for interactions and an [assets folder](#assets). + +## How to use +This is the latest version of the Copenhagen theme available for Guide. It is possible to use this repository as a starting point to build your own custom theme. You can fork this repository as you see fit. + +## Customizing your theme +Once you have forked this repository you can feel free to edit templates, CSS in `style.css` (if you would like to use SASS go to the [Using SASS section](#using-sass)), javascript and manage assets. + +### Manifest file +The manifest allows you to define a group of settings for your theme that can then be changed via the UI in Theming Center. +For example, if you update the manifest file to look like this and you then import your theme to Theming Center: +```js +{ + "name": "Copenhagen", + "author": "Zendesk", + "version": "1.0.1", + "api_version": 1, + "settings": [{ + "label": "Colors", + "variables": [{ + "identifier": "brand_color", + "type": "color", + "description": "Brand color for major navigational elements", + "label": "Brand color", + "value": "#7B7B7B" + }] + }, { + "label": "Custom setting group", + "variables": [{ + "identifier": "custom_var", + "type": "text", + "description": "Custom variable to change the title", + "label": "Title", + "value": "Welcome to our Help Center" + }] + }] +} + +``` +You would see two setting groups with a variable each in your theme inside Theming Center with the correct input types: +![Manifest](https://zendesk.box.com/s/7hq7ohd7dt5buh56izawxipybi41fs80) + +You can read more about the manifest file [here](https://support.zendesk.com/hc/en-us/articles/115012547687--THEMING-CENTER-BETA-Settings-manifest-reference) + +### Settings folder +If you have a variable of type file, you need to provide a default file for that variable in the `/settings` folder. This file will be used on the settings panel by default and users can upload a different file if they like. +Ex. +If you would like to have a variable for the background image of a section, the variable in your manifest file would look something like this: + +```js +{ + ... + "settings": [{ + "label": "Images", + "variables": [{ + "identifier": "background_image", + "type": "file", + "description": "Background image for X section", + "label": "Background image", + }] + }] +} + +``` + +And this would look for a file inside the settings folder named: `background_image` +You can find more information about adding assets [here](https://support.zendesk.com/hc/en-us/articles/115012399428--THEMING-CENTER-BETA-Using-your-own-theme-assets-for-Help-Center) + +### Adding assets +You can add assets to the asset folder and use them in your CSS, Javascript and templates. +You can read more about assets [here](https://support.zendesk.com/hc/en-us/articles/115012399428--THEMING-CENTER-BETA-Using-your-own-theme-assets-for-Help-Center) + + +## Publishing your theme +After you have customized your theme you can download the repository as a `zip` file and import it into Theming Center. + +You can follow the documentation for importing [here](https://support.zendesk.com/hc/en-us/articles/115012794168--THEMING-CENTER-BETA-Importing-and-exporting-your-theme-and-manifest-file#topic_jpd_zdc_hbb). + +You can also preview your theme before you import it to Theming Center with the Zendesk App Tools framework, you can read more about local preview [here](https://support.zendesk.com/hc/en-us/community/posts/115007717507-Local-Theme-Preview-via-Zendesk-Application-Tools) + +## Templates +The theme includes all the templates that are used for a Help Center that has *all* the features available. +List of templates in the theme: +* Article page +* Category page +* Community post list page +* Community post page +* Community topic list page +* Community topic page +* Contributions page +* Document head +* Error page +* Footer +* Header +* Home page +* New community post page +* New request page +* Requests page +* Search results page +* Section page +* Subscriptions page +* User profile page + +## Styles +The styles that Theming Center needs to use in the theme are in the `style.css` file in the root folder. + +The styles for the theme are split using Sass partials, all the partials are under [styles/](/blob/master/styles/), they are all included in the "main" file [index.scss](/blob/master/styles/index.scss) and then compiled to CSS. +If you wish to use SASS you can go to the [using SASS section](#using-sass) + +## Assets +These are the images and font files that are needed for the theme. +These includes: +* Default Favicon +* Home page banner image +* Community banner image (for Community topics list page) +* Community image (for Community section in Home page) +* Copenhagen icons font +* Entypo icon font +* Dropdown arrow + +# Using SASS +In order to use SASS for development, you just need to compile it into the CSS that Theming Center understands. +Note: Zendesk App Tools [theme preview](#publishing-your-theme) currently does not support live SASS compilation. + +## Requirements + +- Install Ruby, we use `sassc` gem to compile our `.scss` files. You can see how to install Ruby [here](https://www.ruby-lang.org/en/documentation/installation/). +- Install `sassc` gem. You can run: +``` + gem install sassc +``` + +Now you can compile your SASS files running: +``` +./bin/compile.rb +``` +Which will take all the `scss` files inside the `styles/` folder and create the `style.css` file that is consumable by Theming Center. + +# Contributing +Bug reports and pull requests are welcome on GitHub at https://github.com/zendesk/copenhagen_theme +Please mention @zendesk/delta when creating a bug report or a pull request. diff --git a/assets/dropdown-arrow.svg b/assets/dropdown-arrow.svg new file mode 100644 index 0000000..ffc752a --- /dev/null +++ b/assets/dropdown-arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/loader.gif b/assets/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe353d2e8fa3c8cf4a6001ffa5436e1b7b8190ff GIT binary patch literal 9666 zcmb7}S5y;Pqpj0PLNQc9Q9=oXDj*;rXh3=su+TA7LlFV#H4tj(J@n9flU@x~nt}*O z?;v2q2B=%P{%4GH&p!9g5{N&{1@bGYNZ*OaBYh7JkSy@?jc6NMx{F5h7&d$yN|DT8VjNU-~?wwmIhU(H1 zl3?K9>%2c8P&fbu5CZ^!fKWgP00%uo3nbb*6%eXZ2ex|LpVWFiT9?1Tt@r6_vjs>) zOwm0FXfwv9 zYVE=Pf#7?5S1ahVCpfLNdiYvFl&rP4!X{eHT?wlnKl|6Nskc&?2$kVnZQhDeFbBO+<8d@4Cr}|T`*U@2Y zN~@))7}5Rf;9&R;)p(Y!uGB)>r>A)zod|h4aJU$us&bDgXAt$O(+v&Gm&eDlze_JR ze{3BoLe3BZn)jl#_GB~b8aD@s_g1_wI!+P?lj+a&C&Qbx?0O}@g8mI3o7ys!Lph>T zzS8>T^hAgJRK4xgtIdDM4=q7n*IniD+kX3VB6b)eybV|*s6Q4Ib-Wrb$~|YhXMSTXV~^DBOyx3(xC`_VLQtO%J=ju5 zBR14liY&F#K-UoHhy6BLpYK(>}SBq&S0EtnUG z5z>VmjR}#rE)lZh9t-L)r9YO{w8|G>twI(ba4x}9mbILx97D&oVDX`3=7ds%c#t#a zu%z=8#ZnRTz@3jqF|=;5{z)!#(Qntua@yqJ)V=8gc5+NnXTApcn^M$RAN9u;TuEqySa>hj-cq~)}bTVhv7Tr3X^-l|tEhP1i#9(?wT zNji0VIO-ew%_W~K37?$cQkKaE_wVzni1jYA5bfBlr5VLV$}@qwJn&z;b?!7-82ywzN|Ng2`qE#~A=v93A%{G|K)+Df3HG>UEd)#~!60Kq?z zGI2We+%d7>)T3{S3o`;lARYHKfk~`{c?hmGq4a?5Ri+e9kS?C9jole!^=|TaWm%KV z6O7?^q_WBImB}ZX3M?LWs_c8fY3AU<#I<2I>y1nG__lG;h%rr2L=NtrkwnsTI5T59 z!;iDjp(U_zPUcss;^w@Y3c?W`#Sx^aF`U}Y_S_IWz zUru)>>%-#TFWI4T14VJkB6lVkzSFT56q5=R_<>|j(Vk?iYDcpE>;OBD?&l`K;lt?Z z5p^xAF(%}d(unDnGIFW@Ve;rc8O56|tK&A5T1~SrQal(-jj&7o?p(@QW|zCV;o_<5 zKHiZBEmiYAa=}tC;_ctdEmSqLx>qu=Rx|ydccrblH!;7{ow)7g8id_)E&{_2>eNK4 zeUEG%8ukSn>EcOgOLuL6`NA(VQ4iC0y%uVxI}=dn9=-M2Bz4`i_$)@4{aaVKT2D zh=SfwI`8DIga!_EGsrOP!~!fH9U%9x8x10m&#`Ofu8VhQ?s%Liy;kPZ0*^PZGPL_-rIuwho`5>7{$PMGUGBS$ty~k ze1~O&*S27$C4P1z^Yh4G)0w75m>4Ua7%@B4pv zTRBRV(!EG9cpR2w@Q7$_Mg52BEM+i@R&Y_A8R8CYf-5KV6Rl5t)O_fD6YvXng6_{7$2Z^m-ZaYI)4 zP3k{$aARPW;0J*}4~{czLZ>x{USrCpHPiq<*gKZ+7s|pZY~XKdt1O|~9XSNK1gM7P zWu5!??lEV|pLY=Y0xTkXX1}rJyp)OEj!#^Ov5ON3 zs0fb-)+V2mi!dWKS5~9iJHon4O6B~X#UlC#hulX>*q4y_c2?ark3izy%u5G96UA{D)fYU72)3AQU?b4JF}~CzU8T9 z8(%0BAtVrW}>r_5n~QXRG>J zq-_WoBk+V9ut9AA2lInkF6q(UDMVo3B}zh>-5EiQ|LFKA5hXWEWKUJDSDOy$`}kkI zlB~DXuh*7|I7h3st!QJ;M>NU=@u?ilj9xBX`|XouL@F`PuxfinzrI{%RkW5LKpbE* zDtd7}Rl~qA$o;yyMo2dhvbTX~lnbLklCToImULNv)Bw#Dmb4ts!Ov z{?AZT&ftw#$N74y48G(YyCd%NXx}Yn&VnbRIJ*snjd&<4_}mRba>QoB`Bnb&o+WrS z3J<;t$r_fUDMvXbdc zMo-6>3xfT%hvHcNARgxE)gp=$tSE~%;3v|&m|zU!G(RBFQ|iDi<>_a~py4`|N((jU zDZfx|n}fZiXy);bZg4q<->6U#03hAo{doz@D1+Wd@%~Hjm;Qop`)|Q-8`g^PQr*R- zye`qXzGU+GbcTy@GxdWejZ%q~`~rp3+2rgv^9EsO_6c_7#5<3Q;({6A`(dv*=KmlO zkpn1n5@cT~K;Pv~Fx)d7X=ep|7!aTwqNfZakq`zZz}QSB*?2YOAQ02zMYq*eqTRh=1dI(g@oQT`%B;K2{ z&fE4sUtD#xEfQm$Si>~(gI4Q8FD+)namgr6`0C!-A}fh+?)noUUOzAB%of5IqT=aK zbiatm75w6`eEyDYODIkoh2>&JtKQevl%MoTc>&138USJw=Hu^7xPcVI<9x!V^x$*q zk%nL1H$m*TQ@wN9ZF(yu#`@o5+CPQ!TvgZCRiu{ov%*G>Kj@~zZg=x##w-e^bE$Db z*sfUrGf3!SE|1>`(gc6pdyPN;<6;(s-D%HrmpbsPY%nEd= zZ|srKk1j$nYqL>+`}4cLOQ3t-&qG5%5^cmTf0#KlKHQVn@HWXrEQ<>IYQzbNaA2=2 zV&|4V<>e^v%%Vl`d-4(k>Fp`DEazr4HsXGpjdCWy65AI;gWMZ_c zVAW2lo(3>F#ZW_dH~lW(qCFBIPyH{!?`D~UHf)nXM5n#%2VW|7K!mnfM<0{ajlDd_ z5i?M}pN~^Tp8s*@TX^u#A3~6@Jq2u0D}u=^mB)BI6&9wrtB&uNS;zs5 z{^fCnzc_3BO)US(D-h)YT;5w$jO)9;zc@F zlZdr)Q}eli@c@@QZq#j&nv$Wy7lWXq|9}MlRhZbAuHXU(f)1o%n zhjD5tow4iCiQvbwc+CJ|(gH=#xPaV!EB?3c<32Cd7o zUCHoHPLQQR8F_b`&zlcqzY>sc$I%dP&4%v&zLOR5&=QqAK3};kqqQYDVSYlG@&kgp zIhRi`pyJPHf;fXz|LV{c_|*^s;0r@n8uQ&&G21V=p}gz2L%0>AUUr4*eyXf7^FB9r zot5Yv`~&N>ROz?n2>NyOQ4qwyEf4tF{&{=!jLY<8Pv_US(+@*g8;N1x-z_w|th)vG z@5#({#_=QthdDrYUZ-gS6ncK1EWQwmx_$Hd&d*b>m8sjIH_uM~{LZ>;kAzbSK*{WQ z^r(NkHfb$Q5}45{iQr?RZYKe>PAtGTITmTY_3TxpV8jY#Csik^<6^q599rO^g0YzZSW8f& zG*d^e(;^dp2q&hOF&{Z(D-Lwz0$n*`H{8TVv`fr75Hw=G#AQtYASlz%fdGdn5}c3= ziw;hpT5Sig2nPV05w~@}BK1l2C@5RT`Db{JVtHjTFf9{XU9mig0{u@&(FVZ(Milq| z4k-u(SOuPR(C7ZX+*y3okBQ#($gcE;W9L2FOe

f!H$uC)TwjaTKRYN47dBOhBOxyxvWBGr5HTWF7i7Y8IAIhW2WPbQOqFS*pjK+D zi($R>U^wHlx0qS2TsC0ekKjIJkYvz=-+id@qik6(3N1D|Z>qE&$Xf+$JT z9>4w(8jMrdF&V#C22B&L|fcToyJCA$QyJW$=QI_qnNATwNvq*#I z`$5-bEftXgQ&E>ppmJ*i%CF^K)54z6)tJF<8+1u00_Y1|Obm;Oj}Ei14a!q{dq~ew ze55J8Jc$3-rHdP?eIfnyr+dq{e)d^21OM5p+F1=?IHkk;zv^|T)dy_;<4g6)R3YB= zM5F>}q$#OnFz}z&VC4iDvFjBM>u`iswm(E9FdGwj0I4|f4+jbNalcm9vkhF zZV#|wqJD}G5aR)URZ#$?89zjp!P2Zij$A^l4MiqD_CYpU8BWk&++-=mn^JkpbRy#&jIJ zxmlZYS^HpmJQC7s?%bXY6@5PP^hbP~%^OGC+~Y`6_7nEmkg1y4AVtp*A@499$p|bl z8tg|FjEYtO+a?Rf`;fAP($bakumzB$qPT?2a^axdYMe`5y>xczQ{~k3wwtN3UFu*O zwQq1}Sd%t7_IDvnECNDb&HQH}d_55IW_e{k8N9l=+CnNV>pgBVm+tA0uCY77aa(2oE`j^f`!BNl?qBG2!ac-7bR++K zqpOXWsT5=Gapgw?Nev7P$tVE3i(bkj6wxZqXNXwrsBchbjPGCSZc-Y_a4Dm$K0_K> zuIB!2xX*mwCW?2P0QH$c9P$*sP8AC{7*p^vx{PS{XlK8`BB99=9AdAvgxrs0=M73L!vmt9_?cctG8M~NUKBBIGmn{O zXSRzK!4fY=Sgmlb^YB)`iAcIyIcybtA0>PXAnq(!njr9p@G8*`t8gnV^s{MXhBTUU zCC<`ac+jV1Zh=I>1;yH=D|2=(rfE=xNr}EdPQlz8obH?;gH>%?9n`2(Jazaztne|h zPouzDI5z51D!=;t#S-Dje<92bQ22i*k@~QW|3r*_=XJjuOlqIbXw=4Q(_Bd%bdN_} z|G>_bdMUEVHy8lD11)Wz(fE9Wz`0>NEr*kWmFwllTn6XIUU>h!louU%qGucI1SA^B zlAP~HshY<=28Kp~W0EqnDA_p{k;;j=Q~@xww5+fwr=+X~l2Ms?uI6c}VMAth^V5np zFJR|0Xnl_}g!asB@bSn<>zLidME6Ur>5016cRJ>tFBlImPa3TXOJJ5ZI%kZ5^h_Ta z!|myi-;hv&$bH(IyFkW|fJqD8<3DHq@iCJz>M7?hB_4UFvZ-8z-4C!g1oeYpxUi)=@H;zdp0bat;ndf5 zB$1mW9S59o1hJTpwS3z2gI0Jsb0IlK@t*TQjp-E;jLlPXU2YIfLk3^rY6j&;l`3n! z85ww_$vFyz<0F9G4!-Y|D?dU^%%n|FoD7EVY=(@rCoO8JB8ksS69LrsxZ0QrN?7KG z-lw{Rpymq|INXwo(rlG38$S5%^9Oe{D5)d5plgn-SI)c4F;f*-pso6xn%vQ?;jQjl zsmHGJ-qWlB3OpU9p6)gWYxi<-6AIFKpjN9wgQ>4Wd&4VVCdYQRnNfh>U3)9Rm6?EA`JL^SGGCFO~ggVa#g>$1UgNB&+nSW z5h9K4l)%4_k`u&S9?k0V!=q^(|J@0`jbtm2w9|xb$&@1L%PAxF=_)a*vFocuTXT^_ zV43Ax;i_%M%Mx;Y=hG9iK^cdu?mYL=mw`N{638DICiXr$j)eUe{v;Ji4Dl_;w7(iR z69E=GnDLE4D;glC)2UkI)@Sd?6Nd&K$U9q-g}HLv#-YFi#zW!r_Ppi$mBw(x!@J7G zit2zH`m${0|L%rxfcF0yMKaX_>RsPGy~W+*^?`#}ay|OP8J~)?JO!9kqhj~`J#V4l zrn@5X1{hgBZ_}bm_gYeA<2!HLvic8U_B(GRRGE6~20}mf{Jy~=c0gbZlEeE4obv@D zi1C3W@u(C#7rOXNNYa(m6m>&LXeN=8EgqR0pb26qDk_zDR1qypt}Q~;OO!Xcf$b&e zp0pB?9Rk4TF~Qw=Rv4Xuc*YVwI6VUcqR#~gfv!OlQC$-@n?U;Mco+ux<|6~#;T(AV z``-4>tv(?2z`PxU>IrPeU&;-D)63AOPBCVy|7nq&mb0bN;yxQ=)Z`O}dZHflNdu=- z)VkxqgJ*LKl;q;8$s%fpqkhEzo%j(30Yh4vPl{x}C_kjSF4@UcE$GpO?GYnwFH%rDtkx65FrBhzCv01R zxj->jDGjGV&UX(v_F99~C$2c`K^mRY))y3p!uvaCri2+dYmF547Lj zVRN8HQ|~1$cUW0}^lkHjw)HP!EPf501;LMIIyOt>8&(6h*-KQ)3+e0UpcfH;c868h zeZcjo`|hdY_jwqe%Mw(>Y=6(MMbM{~=Z8e|9$)g|u16CeF=w`OJv>P1u;wo9H7N+n zThv^S6E7V$3F%m1TZul5tk8}G+m7D#5*65Apl|z386$g(C-a44GFi5XhK^dKRO32G zc6_P5|LYj~`-=myK|pPC%K27P!9*Ddb~e2fg{LxFM#;sQJ9o`+-!X85S2(Id&GmfG z8?~2Z-{PAU3L%oW~cStu) zqQZh=6&WMr)6z5k+T9$So1HHOp=T(j7c0mIA&RSu%gQt9YMSEe)1XC7P4Jc|aC=9G zLAQ6+vth)5J8XEOxPSCP+vMb}DKju~W@dKI5Wcv$VhHP7A5Ps=d$l`Bx35SOkK#h0H=MycKPhu0P2R zhyui8Mb9oEj+!vN{5ygYev4aZop@B7pX))RKzd4vTwjL|tKBdVnkw@9B)nn*i~Ihf z!$hWN7NFBCQuemR!Qdk34dzIp1a~jqxV2h*qt<1D?l!2_0!PyzHgi@XOlw*{GPW~0 zEfFz~!gRRKf8KiSO=_6u5Ci^-W4W4@l1Bdg=+>cWRa`z1`UZ>FYhlPGm#J>7m{snK zt=c16RnS-ait5t(2&YRj2|&2cq@e1(Cd2uB8=}uI_Ti9nT^*b-{ z^h(V#h&R3BwdVMvVaG@p)i#p+PlSBAM?okY#$;6iXc>C~I$e~8>a{q6tx&QAhB9JJcCZWS{1c;3Pr!=5=rbBFLM4#SQBUD>)e-qVm_LiB)B zNcroSwqFS_w%tC6@(b*?KVzU1!ZlRNCfrsrN*Wv%Yv&s;2?HdXBh#bbJr#1&f&v5we{fCdA4(UU34vvmb-jC$KPk*0!q#gdaxM0A;9}Zu3 z(iu(eABckUsB&XHY;Wo##f~Rrs)!mvR>#2+bf~*w@%(dV!tk-WvWcuB$Rvr&4giA6 zvr z)CA&`bn!6@YjACU8m|s;w(K0JUTY=e*GNDph*k2t!w2gcM0l(p4&As70$*-v3hdao zWG3?5yzi>+vRkOH4Vl)<`O4Z+_^XegXMWYjzL0&NVJ=6eh7JV7FDq}f#w=v%Dpfwp zjrh1ailDOFoJ!p1%#OXD>7}ILx$etM3E{PBE(FZiJwCt5<#9B(%9Dgbttm3h>IKFd z@c3Q+bv#=1z>0~~hi5t2%woi-J3Wj5{9!lL>LG$`ZD>F`IA+lOPxc5pBu6dFn*MxS zg?2c>n{!Q|_SM_)n2%iH)X;_^3O7GOXWup?l(1lh1${iGi~N=#G!U=2WmDoM1yI0W z{QBzodXmCrCym%u?GEcSW4FNkeP}E{@O|udrq-pyyM=dT&GzNyS}U++r{V`J zZW%1ox$yrDG~M4R#Pff8WH}B+c-Pl3E#Hzx^K*mgd=TwI*KUX^!UjrX3EyPX4UJwC zVgwPd`OtVq+vYxtYbVe*kZo?7rCq59%qQV{$cvq+uA0gELkoIO8Ou;?xLhO_5lx5{ zbn#2njrL0A_jLti3V@>Fx%|rE5t3jy0s+;D#!12%8XM`WRp8ND640h@21JK*xIeL{ zr_esSMTl-_h(1J;Av^~=IY*x%o*zCX&@eY=D-o9>xW30gccowG?OwCEhpU?){fCdw zFch-|e%SHb5uGEar_{*s(6=42a2X6Y@-e&)!&;Q2p~4MfQTwMHz;la^@n{ok_?W-h z%bVdWU8YmlCJTTv8xWD%pz6W+)|1n-uVN-N5_el9L3wl6j(5Sve(T zai~fFUK zSTw@>V-7fmQ#zVf1QPk%k$j6%JL9oe>@Md)`W^dyJ!b#uY5x#MD?Q+NX(J+Q2`PU* zUciVUK3d|3l-|1_2MBBJDZGL0o_|lO?}{r-s1qW3wuWB%9a4~4Sg<)8rx}{2^lRzE zm5RW#dd+`MTOT(Tn!HrfJo)bW{50x89_;}Te81&zqEe#(a zGBDw&@F8A8rZ=A?VH0^y$B)Ag1@Yr0VF{;bNMA6)<~CgVZBgvceAK2NTV^9V4%F7V z7Q@e}#ZThy8@=pueV#J$+7ZQ@J#@WT|4h~@57WdcI9Fv#0aI~*=t z{b*``Uh%TRy)3~*C-qpz8_t9EloE>b(6Dhx^D$qnU~z@{ms9T` r%!RP`_p(P)NE#kOsaEXB3RAPE^2-Gf`J7RA*#METVwJ!1$o2mNp6UyD literal 0 HcmV?d00001 diff --git a/bin/compile.rb b/bin/compile.rb new file mode 100644 index 0000000..27158f1 --- /dev/null +++ b/bin/compile.rb @@ -0,0 +1,26 @@ +#!/usr/bin/env ruby +require 'json' +require_relative 'stylesheet_compiler' + +base_dir = File.join(File.dirname(__FILE__), "..") + +manifest = File.read(File.join(base_dir, "manifest.json")) +styles_dir = File.join(base_dir, "styles") +styles_path = File.join(styles_dir, "index.scss") +styles = File.read(styles_path) + +manifest = JSON.parse(manifest) + +scss_variables = manifest["settings"].flat_map { |setting_group| setting_group["variables"] }.map { |variable| variable["identifier"] } + +assets = Dir.glob(File.join(base_dir, 'assets', '*.*')) +asset_variables = assets.map { |asset| File.join('assets', File.basename(asset)).gsub(/[^a-z0-9\-_]+/, '-') } +scss_variables.concat(asset_variables) + +compiler = StylesheetCompiler.new([styles_dir], scss_variables) +result = compiler.compile(styles) + +result_path = File.join(base_dir, "style.css") +File.open(result_path, 'w+') {|f| f.write(result) } + +puts "Done :)! Created /style.css file" diff --git a/bin/stylesheet_compiler.rb b/bin/stylesheet_compiler.rb new file mode 100644 index 0000000..df692e7 --- /dev/null +++ b/bin/stylesheet_compiler.rb @@ -0,0 +1,106 @@ +require 'sassc' + +# Compiles SCSS to CSS, while allowing some variables to be ignored. This is +# nice if you have a different way of inserting some variables, e.g. user +# settings. +# +# Example +# +# scss = "$color: #424242; h1 { color: $color; }" +# ThemeStylesheet.compile(scss) +# #=> "h1 { color: #424242; }" +# +# scss = "$color: #424242; h1 { color: $color; font-size: $size; }" +# ThemeStylesheet.compile(scss, ["size"]) +# #=> "h1 { color: #424242; font-size: $size; }" +# +class StylesheetCompiler + def self.compile(scss, ignored_variables = []) + new([], ignored_variables).compile(scss) + end + + # Builds a new StylesheetCompiler. + # + # load_paths - An Array of String load paths from which Sass modules + # should be looked up. + # ignored_variables - An Array of String variable names that should be + # ignored. + # + def initialize(load_paths = [], ignored_variables = []) + @load_paths = load_paths + @ignored_variables = ignored_variables + end + + # Compiles the SCSS into CSS. + # + # scss - A String containing SCSS. + # + # Returns a new CSS String. + def compile(scss) + # this comes in as a single string + stylesheet = "#{preamble}\n#{scss}" + options = { + syntax: :scss, + style: :expanded, + load_paths: @load_paths, + filename: "style.scss", + } + + SassC::Engine.new(stylesheet, options).render.tap do |css| + unescape_variables!(css) + convert_zass_functions!(css) + end + end + + private + + # The preamble assigns all the ignored variables to an escaped version of + # the variable name itself, e.g. + # + # $foo: \$foo; + # + # This makes Sass replace occurences of the variable with the escaped name. + # + # Afterwards, the escaped names can be unescaped, yielding a CSS file with + # the ignored variables intact. + # + # Returns a String preamble. + def preamble + @ignored_variables. + map {|name| escape_variable(name) }. + join("\n") + end + + # Escapes that variable by generating a Sass variable assignment. + # + # Returns a String Sass variable assignment. + def escape_variable(name) + "$#{name}: \\$#{name};" + end + + # Unescapes an escaped variable. + # + # Returns a String. + def unescape_variables!(css) + css.gsub!("\\$", "$") + end + + # Converts darken and lighten filter so that zass will process + # them and user can see them as normal sass css function in the editor. + # + # Note: we are prefixing them with `zass-` because we don't want + # the Sass-c compiler to execute them since we want the end-users + # to see those function in the editor when customizing their template. + # + # Returns a String. + def convert_zass_functions!(css) + keys_regex = /(zass-darken|zass-lighten)/ + + substitution_hash = { + 'zass-darken' => 'darken', + 'zass-lighten' => 'lighten' + } + + css.gsub!(keys_regex, substitution_hash) + end +end diff --git a/bin/update-translations.js b/bin/update-translations.js new file mode 100644 index 0000000..bef24f2 --- /dev/null +++ b/bin/update-translations.js @@ -0,0 +1,35 @@ +#!/usr/bin/env node + +const fetch = require('node-fetch'); +const path = require('path'); +const fs = require('fs'); +const yaml = require('js-yaml'); + +const LOCALE_ENDPOINT = `https://support.zendesk.com/api/v2/locales`; + +const translationDefinitions = yaml.safeLoad(fs.readFileSync('translations.yml', 'utf8')).parts; +const obsoleteKeys = translationDefinitions + .filter(part => part.translation.obsolete) + .reduce((acc, part) => acc.concat(part.translation.key), []); + +(async function() { + const resp = await fetch(`${LOCALE_ENDPOINT}/default`); + const locales = await resp.json(); + const localeIds = locales.locales.map(locale => locale.locale); + + for (const localeId of localeIds) { + console.log(`Downloading ${localeId}...`); + + const resp = await fetch(`${LOCALE_ENDPOINT}/${localeId}.json?include=translations&packages=help_center_copenhagen_theme`); + const translations = await resp.json(); + + const formattedTranslations = Object.entries(translations.locale.translations).reduce((accumulator, [key, value]) => { + if (obsoleteKeys.includes(key)) return accumulator; + + accumulator[key.replace(/.+\./, '')] = value; + return accumulator; + }, {}); + + fs.writeFileSync(path.join('translations', `${localeId}.json`), JSON.stringify(formattedTranslations, null, 2) + '\n', 'utf8'); + } +})(); diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..31138e8 --- /dev/null +++ b/manifest.json @@ -0,0 +1,231 @@ +{ + "name": "Copenhagen", + "author": "Zendesk", + "version": "1.4.4", + "api_version": 1, + "default_locale": "en-us", + "settings": [{ + "label": "colors_group_label", + "variables": [{ + "identifier": "brand_color", + "type": "color", + "description": "brand_color_description", + "label": "brand_color_label", + "value": "#0072EF" + }, { + "identifier": "brand_text_color", + "type": "color", + "description": "brand_text_color_description", + "label": "brand_text_color_label", + "value": "#FFFFFF" + }, { + "identifier": "text_color", + "type": "color", + "description": "text_color_description", + "label": "text_color_label", + "value": "#333333" + }, { + "identifier": "link_color", + "type": "color", + "description": "link_color_description", + "label": "link_color_label", + "value": "#0072EF" + }, { + "identifier": "background_color", + "type": "color", + "description": "background_color_description", + "label": "background_color_label", + "value": "#FFFFFF" + }] + }, { + "label": "fonts_group_label", + "variables": [{ + "identifier": "heading_font", + "type": "list", + "description": "heading_font_description", + "label": "heading_font_label", + "options": [ + { "label": "System", "value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif" }, + { "label": "Arial", "value": "Arial, 'Helvetica Neue', Helvetica, sans-serif" }, + { "label": "Arial Black", "value": "'Arial Black', Arial, 'Helvetica Neue', Helvetica, sans-serif" }, + { "label": "Baskerville", "value": "Baskerville, 'Times New Roman', Times, serif" }, + { "label": "Century Gothic", "value": "'Century Gothic', AppleGothic, sans-serif" }, + { "label": "Copperplate Light", "value": "'Copperplate Light', 'Copperplate Gothic Light', serif" }, + { "label": "Courier New", "value": "'Courier New', Courier, monospace" }, + { "label":"Futura", "value": "Futura, 'Century Gothic', AppleGothic, sans-serif" }, + { "label":"Garamond", "value": "Garamond, 'Hoefler Text', 'Times New Roman', Times, serif" }, + { "label":"Geneva", "value": "Geneva, 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif" }, + { "label":"Georgia", "value": "Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif" }, + { "label": "Helvetica", "value": "Helvetica, Arial, sans-serif" }, + { "label": "Helvetica Neue", "value": "'Helvetica Neue', Arial, Helvetica, sans-serif" }, + { "label":"Impact", "value": "Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif" }, + { "label":"Lucida Grande", "value": "'Lucida Grande', 'Lucida Sans', 'Lucida Sans Unicode', sans-serif" }, + { "label":"Trebuchet MS", "value": "'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif" } + ], + "value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif" + }, { + "identifier": "text_font", + "type": "list", + "description": "text_font_description", + "label": "text_font_label", + "options": [ + { "label": "System", "value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif"}, + { "label": "Arial", "value": "Arial, 'Helvetica Neue', Helvetica, sans-serif"}, + { "label": "Arial Black", "value": "'Arial Black', Arial, 'Helvetica Neue', Helvetica, sans-serif"}, + { "label": "Baskerville", "value": "Baskerville, 'Times New Roman', Times, serif"}, + { "label": "Century Gothic", "value": "'Century Gothic', AppleGothic, sans-serif"}, + { "label": "Copperplate Light", "value": "'Copperplate Light', 'Copperplate Gothic Light', serif"}, + { "label": "Courier New", "value": "'Courier New', Courier, monospace"}, + { "label":"Futura", "value": "Futura, 'Century Gothic', AppleGothic, sans-serif"}, + { "label":"Garamond", "value": "Garamond, 'Hoefler Text', 'Times New Roman', Times, serif"}, + { "label":"Geneva", "value": "Geneva, 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif"}, + { "label":"Georgia", "value": "Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif" }, + { "label": "Helvetica", "value": "Helvetica, Arial, sans-serif" }, + { "label": "Helvetica Neue", "value": "'Helvetica Neue', Arial, Helvetica, sans-serif" }, + { "label":"Impact", "value": "Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif" }, + { "label":"Lucida Grande", "value": "'Lucida Grande', 'Lucida Sans', 'Lucida Sans Unicode', sans-serif" }, + { "label":"Trebuchet MS", "value": "'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif" } + ], + "value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif" + }] + }, { + "label": "brand_group_label", + "variables": [{ + "identifier": "logo", + "type": "file", + "description": "logo_description", + "label": "logo_label" + }, { + "identifier": "favicon", + "type": "file", + "description": "favicon_description", + "label": "favicon_label" + }] + }, { + "label": "images_group_label", + "variables": [{ + "identifier": "homepage_background_image", + "type": "file", + "description": "homepage_background_image_description", + "label": "homepage_background_image_label" + }, { + "identifier": "community_background_image", + "type": "file", + "description": "community_background_image_description", + "label": "community_background_image_label" + }, { + "identifier": "community_image", + "type": "file", + "description": "community_image_description", + "label": "community_image_label" + }] + }, { + "label": "search_group_label", + "variables":[{ + "identifier": "instant_search", + "type": "checkbox", + "description": "instant_search_description", + "label": "instant_search_label", + "value": true + }, { + "identifier": "scoped_kb_search", + "type": "checkbox", + "description": "scoped_knowledge_base_search_description", + "label": "scoped_knowledge_base_search_label", + "value": true + }, { + "identifier": "scoped_community_search", + "type": "checkbox", + "description": "scoped_community_search_description", + "label": "scoped_community_search_label", + "value": true + }] + }, { + "label": "home_page_group_label", + "variables": [{ + "identifier": "show_recent_activity", + "type": "checkbox", + "description": "recent_activity_description", + "label": "recent_activity_label", + "value": true + }] + }, { + "label": "article_page_group_label", + "variables": [{ + "identifier": "show_articles_in_section", + "type": "checkbox", + "description": "articles_in_section_description", + "label": "articles_in_section_label", + "value": true + }, { + "identifier": "show_article_author", + "type": "checkbox", + "description": "article_author_description", + "label": "article_author_label", + "value": true + }, { + "identifier": "show_article_comments", + "type": "checkbox", + "description": "article_comments_description", + "label": "article_comments_label", + "value": true + }, { + "identifier": "show_follow_article", + "type": "checkbox", + "description": "follow_article_description", + "label": "follow_article_label", + "value": true + }, { + "identifier": "show_recently_viewed_articles", + "type": "checkbox", + "description": "recently_viewed_articles_description", + "label": "recently_viewed_articles_label", + "value": true + }, { + "identifier": "show_related_articles", + "type": "checkbox", + "description": "related_articles_description", + "label": "related_articles_label", + "value": true + }, { + "identifier": "show_article_sharing", + "type": "checkbox", + "description": "article_sharing_description", + "label": "article_sharing_label", + "value": true + }] + }, { + "label": "section_page_group_label", + "variables": [{ + "identifier": "show_follow_section", + "type": "checkbox", + "description": "follow_section_description", + "label": "follow_section_label", + "value": true + }] + }, { + "label": "community_post_group_label", + "variables": [{ + "identifier": "show_follow_post", + "type": "checkbox", + "description": "follow_post_description", + "label": "follow_post_label", + "value": true + }, { + "identifier": "show_post_sharing", + "type": "checkbox", + "description": "post_sharing_description", + "label": "post_sharing_label", + "value": true + }] + }, { + "label": "community_topic_group_label", + "variables": [{ + "identifier": "show_follow_topic", + "type": "checkbox", + "description": "follow_topic_description", + "label": "follow_topic_label", + "value": true + }] + }] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b6eb12b --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "copenhagen_theme", + "version": "1.0.0", + "repository": "git@github.com:zendesk/copenhagen_theme.git", + "dependencies": { + "node-fetch": "^2.1.2" + }, + "devDependencies": { + "js-yaml": "^3.12.0" + } +} diff --git a/script.js b/script.js new file mode 100644 index 0000000..2203890 --- /dev/null +++ b/script.js @@ -0,0 +1,129 @@ +/* + * jQuery v1.9.1 included + */ + +$(document).ready(function() { + + // social share popups + $(".share a").click(function(e) { + e.preventDefault(); + window.open(this.href, "", "height = 500, width = 500"); + }); + + // show form controls when the textarea receives focus or backbutton is used and value exists + var $commentContainerTextarea = $(".comment-container textarea"), + $commentContainerFormControls = $(".comment-form-controls, .comment-ccs"); + + $commentContainerTextarea.one("focus", function() { + $commentContainerFormControls.show(); + }); + + if ($commentContainerTextarea.val() !== "") { + $commentContainerFormControls.show(); + } + + // Expand Request comment form when Add to conversation is clicked + var $showRequestCommentContainerTrigger = $(".request-container .comment-container .comment-show-container"), + $requestCommentFields = $(".request-container .comment-container .comment-fields"), + $requestCommentSubmit = $(".request-container .comment-container .request-submit-comment"); + + $showRequestCommentContainerTrigger.on("click", function() { + $showRequestCommentContainerTrigger.hide(); + $requestCommentFields.show(); + $requestCommentSubmit.show(); + $commentContainerTextarea.focus(); + }); + + // Mark as solved button + var $requestMarkAsSolvedButton = $(".request-container .mark-as-solved:not([data-disabled])"), + $requestMarkAsSolvedCheckbox = $(".request-container .comment-container input[type=checkbox]"), + $requestCommentSubmitButton = $(".request-container .comment-container input[type=submit]"); + + $requestMarkAsSolvedButton.on("click", function () { + $requestMarkAsSolvedCheckbox.attr("checked", true); + $requestCommentSubmitButton.prop("disabled", true); + $(this).attr("data-disabled", true).closest("form").submit(); + }); + + // Change Mark as solved text according to whether comment is filled + var $requestCommentTextarea = $(".request-container .comment-container textarea"); + + $requestCommentTextarea.on("input", function() { + if ($requestCommentTextarea.val() !== "") { + $requestMarkAsSolvedButton.text($requestMarkAsSolvedButton.data("solve-and-submit-translation")); + $requestCommentSubmitButton.prop("disabled", false); + } else { + $requestMarkAsSolvedButton.text($requestMarkAsSolvedButton.data("solve-translation")); + $requestCommentSubmitButton.prop("disabled", true); + } + }); + + // Disable submit button if textarea is empty + if ($requestCommentTextarea.val() === "") { + $requestCommentSubmitButton.prop("disabled", true); + } + + // Submit requests filter form in the request list page + $("#request-status-select, #request-organization-select") + .on("change", function() { + search(); + }); + + // Submit requests filter form in the request list page + $("#quick-search").on("keypress", function(e) { + if (e.which === 13) { + search(); + } + }); + + function search() { + window.location.search = $.param({ + query: $("#quick-search").val(), + status: $("#request-status-select").val(), + organization_id: $("#request-organization-select").val() + }); + } + + function toggleNavigation(toggleElement) { + var menu = document.getElementById("user-nav"); + var isExpanded = menu.getAttribute("aria-expanded") === "true"; + menu.setAttribute("aria-expanded", !isExpanded); + toggleElement.setAttribute("aria-expanded", !isExpanded); + } + + $(".header .icon-menu").on("click", function(e) { + e.stopPropagation(); + toggleNavigation(this); + }); + + $(".header .icon-menu").on("keyup", function(e) { + if (e.keyCode === 13) { // Enter key + e.stopPropagation(); + toggleNavigation(this); + } + }); + + $("#user-nav").on("keyup", function(e) { + if (e.keyCode === 27) { // Escape key + e.stopPropagation(); + this.setAttribute("aria-expanded", false); + $(".header .icon-menu").attr("aria-expanded", false); + } + }); + + if ($("#user-nav").children().length === 0) { + $(".header .icon-menu").hide(); + } + + // Submit organization form in the request page + $("#request-organization select").on("change", function() { + this.form.submit(); + }); + + // Toggles expanded aria to collapsible elements + $(".collapsible-nav, .collapsible-sidebar").on("click", function(e) { + e.stopPropagation(); + var isExpanded = this.getAttribute("aria-expanded") === "true"; + this.setAttribute("aria-expanded", !isExpanded); + }); +}); diff --git a/settings/community_background_image.svg b/settings/community_background_image.svg new file mode 100644 index 0000000..e05da04 --- /dev/null +++ b/settings/community_background_image.svg @@ -0,0 +1 @@ +Artboard 1 \ No newline at end of file diff --git a/settings/community_image.svg b/settings/community_image.svg new file mode 100644 index 0000000..7433e12 --- /dev/null +++ b/settings/community_image.svg @@ -0,0 +1 @@ +Artboard 1 \ No newline at end of file diff --git a/settings/favicon.ico b/settings/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..54fbde8c3104a68ee328a1f07db5bfa275cfe29d GIT binary patch literal 79 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx?BpA#)4xIr~VxBIJAr*|t4UBHbsw|Qw{6E;D a#>C7}HHlT}#a~SekV;QiKbLh*2~7ZhRTFCf literal 0 HcmV?d00001 diff --git a/settings/homepage_background_image.svg b/settings/homepage_background_image.svg new file mode 100644 index 0000000..c5f0ece --- /dev/null +++ b/settings/homepage_background_image.svg @@ -0,0 +1 @@ +Artboard 1 \ No newline at end of file diff --git a/settings/logo.png b/settings/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..27d915c5350207bdd9027a8307ab09fd42e0240d GIT binary patch literal 5632 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 main { + min-height: 65vh; + } +} + +h1, h2, h3, h4, h5, h6 { + font-family: $heading_font; + font-weight: 400; + margin-top: 0; +} + +h1 { + font-size: 32px; +} + +h2 { + font-size: 22px; +} + +h3 { + font-size: 18px; + font-weight: 600; +} + +h4 { + font-size: 16px; +} + +a { + color: $link_color; + text-decoration: none; +} + +a:hover, a:active, a:focus { + text-decoration: underline; +} + +input, +textarea { + color: #000; + font-size: 14px; +} + +input { + font-weight: 300; + max-width: 100%; + box-sizing: border-box; + outline: none; + transition: border .12s ease-in-out; +} + +input:focus { + border: 1px solid $brand_color; +} + +input[disabled] { + background-color: #ddd; +} + +select { + -webkit-appearance: none; + -moz-appearance: none; + background: url($assets-dropdown-arrow-svg) no-repeat #fff; + background-position: right 10px center; + border: 1px solid #ddd; + border-radius: 4px; + padding: 8px 30px 8px 10px; + outline: none; + color: #555; + width: 100%; +} + +select:focus { + border: 1px solid $brand_color; +} + +select::-ms-expand { + display: none; +} + +textarea { + border: 1px solid #ddd; + border-radius: 2px; + resize: vertical; + width: 100%; + outline: none; + padding: 10px; +} + +textarea:focus { + border: 1px solid $brand_color; +} + +.container { + max-width: 1160px; + margin: 0 auto; + padding: 0 5%; +} + +@media (min-width: 1160px) { + .container { + padding: 0; + width: 90%; + } +} + +.container-divider { + border-top: 1px solid #ddd; + margin-bottom: 20px; +} + +ul { + list-style: none; + margin: 0; + padding: 0; +} + +.error-page { + max-width: 1160px; + margin: 0 auto; + padding: 0 5%; +} + +@media (min-width: 1160px) { + .error-page { + padding: 0; + width: 90%; + } +} + +.dropdown-toggle::after { + color: inherit; +} + +/***** Buttons *****/ +.button, [role="button"] { + border: 1px solid $brand_color; + border-radius: 4px; + color: $brand_color; + cursor: pointer; + display: inline-block; + font-size: 12px; + line-height: 2.34; + margin: 0; + padding: 0 20px; + text-align: center; + transition: background-color .12s ease-in-out, border-color .12s ease-in-out, color .15s ease-in-out; + user-select: none; + white-space: nowrap; + width: 100%; + -webkit-touch-callout: none; +} + +@media (min-width: 768px) { + .button, [role="button"] { + width: auto; + } +} + +.button::after, [role="button"]::after { + color: $brand_color; +} + +.button:hover, .button:active, .button:focus, .button[aria-selected="true"], [role="button"]:hover, [role="button"]:active, [role="button"]:focus, [role="button"][aria-selected="true"] { + background-color: $brand_color; + color: $brand_text_color; + text-decoration: none; +} + +.button[aria-selected="true"]:hover, .button[aria-selected="true"]:focus, .button[aria-selected="true"]:active, [role="button"][aria-selected="true"]:hover, [role="button"][aria-selected="true"]:focus, [role="button"][aria-selected="true"]:active { + background-color: darken($brand_color, 20%); + border-color: darken($brand_color, 20%); +} + +.button[data-disabled], [role="button"][data-disabled] { + cursor: default; +} + +.button-large, input[type="submit"] { + background-color: $brand_color; + border: 0; + border-radius: 4px; + color: $brand_text_color; + font-size: 14px; + font-weight: 400; + line-height: 2.72; + min-width: 190px; + padding: 0 1.9286em; + width: 100%; +} + +@media (min-width: 768px) { + .button-large, input[type="submit"] { + width: auto; + } +} + +.button-large:hover, .button-large:active, .button-large:focus, input[type="submit"]:hover, input[type="submit"]:active, input[type="submit"]:focus { + background-color: darken($brand_color, 20%); +} + +.button-large[disabled], input[type="submit"][disabled] { + background-color: #ddd; +} + +.button-secondary { + color: lighten($text_color, 20%); + border: 1px solid #ddd; + background-color: transparent; +} + +.button-secondary:hover, .button-secondary:focus, .button-secondary:active { + color: $text_color; + border: 1px solid #ddd; + background-color: darken($background_color, 3%); +} + +/***** Tables *****/ +.table { + width: 100%; + table-layout: fixed; +} + +@media (min-width: 768px) { + .table { + table-layout: auto; + } +} + +.table th, +.table th a { + color: lighten($text_color, 20%); + font-size: 13px; + font-weight: 300; + text-align: left; +} + +[dir="rtl"] .table th, [dir="rtl"] +.table th a { + text-align: right; +} + +.table tr { + border-bottom: 1px solid #ddd; + display: block; + padding: 20px 0; +} + +@media (min-width: 768px) { + .table tr { + display: table-row; + } +} + +.table td { + display: block; +} + +@media (min-width: 768px) { + .table td { + display: table-cell; + } +} + +@media (min-width: 1024px) { + .table td, .table th { + padding: 20px 30px; + } +} + +@media (min-width: 768px) { + .table td, .table th { + padding: 10px 20px; + height: 60px; + } +} + +/***** Forms *****/ +.form { + max-width: 650px; +} + +.form-field ~ .form-field { + margin-top: 25px; +} + +.form-field label { + display: block; + font-size: 13px; + margin-bottom: 5px; +} + +.form-field input { + border: 1px solid #ddd; + border-radius: 4px; + padding: 10px; + width: 100%; +} + +.form-field input:focus { + border: 1px solid $brand_color; +} + +.form-field input[type="text"] { + border: 1px solid #ddd; + border-radius: 4px; +} + +.form-field input[type="text"]:focus { + border: 1px solid $brand_color; +} + +.form-field input[type="checkbox"] { + width: auto; +} + +.form-field .nesty-input { + border-radius: 4px; + height: 40px; + line-height: 40px; + outline: none; + vertical-align: middle; +} + +.form-field .nesty-input:focus { + border: 1px solid $brand_color; + text-decoration: none; +} + +.form-field .hc-multiselect-toggle:focus { + outline: none; + border: 1px solid $brand_color; + text-decoration: none; +} + +.form-field textarea { + vertical-align: middle; +} + +.form-field input[type="checkbox"] + label { + margin: 0 0 0 10px; +} + +.form-field.required > label::after { + content: "*"; + color: #f00; + margin-left: 2px; +} + +.form-field p { + color: lighten($text_color, 20%); + font-size: 12px; + margin: 5px 0; +} + +[data-loading="true"] input, +[data-loading="true"] textarea { + background: transparent url($assets-loader-gif) 99% 50% no-repeat; + background-size: 16px 16px; +} + +.form footer { + margin-top: 40px; + padding-top: 30px; +} + +.form footer a { + color: lighten($text_color, 20%); + cursor: pointer; + margin-right: 15px; +} + +.form .suggestion-list { + font-size: 13px; + margin-top: 30px; +} + +.form .suggestion-list label { + border-bottom: 1px solid #ddd; + display: block; + padding-bottom: 5px; +} + +.form .suggestion-list li { + padding: 10px 0; +} + +.form .suggestion-list li a:visited { + color: darken($link_color, 20%); +} + +/***** Header *****/ +.header { + max-width: 1160px; + margin: 0 auto; + padding: 0 5%; + position: relative; + align-items: center; + display: flex; + height: 71px; + justify-content: space-between; +} + +@media (min-width: 1160px) { + .header { + padding: 0; + width: 90%; + } +} + +.logo img { + max-height: 37px; +} + +.user-nav { + display: inline-block; + position: absolute; + white-space: nowrap; +} + +@media (min-width: 768px) { + .user-nav { + position: relative; + } +} + +.user-nav[aria-expanded="true"] { + background-color: #fff; + box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.15), 0 4px 10px 0 rgba(0, 0, 0, 0.1); + border: solid 1px #ddd; + right: 0; + left: 0; + top: 71px; + z-index: 1; +} + +.user-nav[aria-expanded="true"] > a { + display: block; + margin: 20px; +} + +.nav-wrapper a { + border: 0; + color: $link_color; + display: none; + font-size: 14px; + padding: 0 20px 0 0; + width: auto; +} + +@media (min-width: 768px) { + .nav-wrapper a { + display: inline-block; + } +} + +[dir="rtl"] .nav-wrapper a { + padding: 0 0 0 20px; +} + +.nav-wrapper a:hover, .nav-wrapper a:focus, .nav-wrapper a:active { + background-color: transparent; + color: $link_color; + text-decoration: underline; +} + +.nav-wrapper a.login { + display: inline-block; +} + +.nav-wrapper .icon-menu { + border: 0; + color: $link_color; + cursor: pointer; + display: inline-block; + margin-right: 10px; + padding: 0; + width: auto; +} + +@media (min-width: 768px) { + .nav-wrapper .icon-menu { + display: none; + } +} + +[dir="rtl"] .nav-wrapper .icon-menu { + margin-left: 10px; + margin-right: 0; +} + +.nav-wrapper .icon-menu:hover, .nav-wrapper .icon-menu:focus, .nav-wrapper .icon-menu:active { + background-color: transparent; + color: $link_color; +} + +/***** User info in header *****/ +.user-info { + display: inline-block; +} + +.user-info .dropdown-toggle::after { + display: none; +} + +@media (min-width: 768px) { + .user-info .dropdown-toggle::after { + display: inline-block; + } +} + +.user-info > [role="button"] { + border: 0; + color: $link_color; + min-width: 0; + padding: 0; + white-space: nowrap; +} + +.user-info > [role="button"]:hover, .user-info > [role="button"]:focus { + color: $link_color; + background-color: transparent; +} + +.user-info > [role="button"]::after { + color: $link_color; + padding-right: 15px; +} + +[dir="rtl"] .user-info > [role="button"]::after { + padding-left: 15px; + padding-right: 0; +} + +#user #user-name { + display: none; + font-size: 14px; +} + +@media (min-width: 768px) { + #user #user-name { + display: inline-block; + } +} + +#user #user-name:hover { + text-decoration: underline; +} + +/***** User avatar *****/ +.user-avatar { + height: 25px; + width: 25px; + border-radius: 50%; + display: inline-block; + vertical-align: middle; +} + +.avatar { + display: inline-block; + position: relative; +} + +.avatar img { + height: 40px; + width: 40px; +} + +.avatar .icon-agent::before { + background-color: $brand_color; + border: 2px solid #fff; + border-radius: 50%; + bottom: -4px; + color: $brand_text_color; + content: "\1F464"; + font-size: 14px; + height: 14px; + line-height: 14px; + position: absolute; + right: -2px; + text-align: center; + width: 14px; +} + +/***** Footer *****/ +.footer { + border-top: 1px solid #ddd; + margin-top: 60px; + padding: 30px 0; +} + +.footer a { + color: lighten($text_color, 20%); +} + +.footer-inner { + max-width: 1160px; + margin: 0 auto; + padding: 0 5%; + display: flex; + justify-content: space-between; +} + +@media (min-width: 1160px) { + .footer-inner { + padding: 0; + width: 90%; + } +} + +.footer-language-selector { + color: lighten($text_color, 20%); + display: inline-block; + font-weight: 300; +} + +/***** Breadcrumbs *****/ +.breadcrumbs { + margin: 0 0 15px 0; + padding: 0; +} + +@media (min-width: 768px) { + .breadcrumbs { + margin: 0; + } +} + +.breadcrumbs li { + color: lighten($text_color, 20%); + display: inline; + font-weight: 300; + font-size: 13px; + max-width: 450px; + overflow: hidden; + text-overflow: ellipsis; +} + +.breadcrumbs li + li::before { + content: ">"; + margin: 0 4px; +} + +.breadcrumbs li a:visited { + color: $link_color; +} + +/***** Search field *****/ +.search { + position: relative; +} + +.search input[type="search"] { + border: 1px solid #ddd; + border-radius: 30px; + box-sizing: border-box; + color: #999; + height: 40px; + padding-left: 40px; + padding-right: 20px; + -webkit-appearance: none; + width: 100%; +} + +[dir="rtl"] .search input[type="search"] { + padding-right: 40px; + padding-left: 20px; +} + +.search input[type="search"]:focus { + border: 1px solid $brand_color; + color: #555; +} + +.search::before { + position: relative; + top: 50%; + transform: translateY(-50%); + background-color: #fff; + color: #777; + content: "\1F50D"; + font-size: 18px; + position: absolute; + left: 15px; +} + +[dir="rtl"] .search::before { + right: 15px; + left: auto; +} + +.search-full input[type="search"] { + border: 1px solid #fff; +} + +/***** Hero component *****/ +.hero { + background-image: url($homepage_background_image); + background-position: center; + background-size: cover; + height: 300px; + padding: 0 20px; + text-align: center; + width: 100%; +} + +.hero-inner { + position: relative; + top: 50%; + transform: translateY(-50%); + max-width: 610px; + margin: 0 auto; +} + +.page-header { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + margin: 10px 0; +} + +@media (min-width: 768px) { + .page-header { + align-items: baseline; + flex-direction: row; + margin: 0; + } +} + +.page-header .section-subscribe { + flex-shrink: 0; + margin-bottom: 10px; +} + +@media (min-width: 768px) { + .page-header .section-subscribe { + margin-bottom: 0; + } +} + +.page-header h1 { + flex-grow: 1; + margin-bottom: 10px; +} + +.page-header-description { + font-style: italic; + font-weight: 300; + margin: 0 0 30px 0; + word-break: break-word; +} + +@media (min-width: 1024px) { + .page-header-description { + flex-basis: 100%; + } +} + +.page-header .icon-lock::before { + content: "\1F512"; + font-size: 20px; + position: relative; + left: -5px; + vertical-align: baseline; +} + +.sub-nav { + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 30px; + min-height: 50px; + padding-bottom: 15px; +} + +@media (min-width: 768px) { + .sub-nav { + align-items: baseline; + flex-direction: row; + } +} + +@media (min-width: 768px) { + .sub-nav input[type="search"] { + min-width: 300px; + } +} + +.sub-nav input[type="search"]::after { + font-size: 15px; +} + +/***** Blocks *****/ +/* Used in Homepage#categories and Community#topics */ +.blocks-list { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + list-style: none; + padding: 0; +} + +@media (min-width: 768px) { + .blocks-list { + margin: 0 -15px; + } +} + +.blocks-item { + border: 1px solid $brand_color; + border-radius: 4px; + box-sizing: border-box; + color: $brand_color; + display: flex; + flex: 1 0 340px; + flex-direction: column; + justify-content: center; + margin: 0 0 30px; + max-width: 100%; + text-align: center; +} + +@media (min-width: 768px) { + .blocks-item { + margin: 0 15px 30px; + } +} + +.blocks-item:hover, .blocks-item:focus, .blocks-item:active { + background-color: $brand_color; +} + +.blocks-item:hover *, .blocks-item:focus *, .blocks-item:active * { + color: $brand_text_color; + text-decoration: none; +} + +.blocks-item-internal { + background-color: transparent; + border: 1px solid #ddd; +} + +.blocks-item-internal .icon-lock::before { + content: "\1F512"; + font-size: 15px; + bottom: 5px; + position: relative; +} + +.blocks-item-internal a { + color: $text_color; +} + +.blocks-item-link { + color: $brand_color; + padding: 20px 30px; +} + +.blocks-item-link:hover, .blocks-item-link:focus, .blocks-item-link:active { + text-decoration: none; +} + +.blocks-item-title { + margin-bottom: 0; +} + +.blocks-item-description { + font-weight: 300; + margin: 0; +} + +.blocks-item-description:not(:empty) { + margin-top: 10px; +} + +/***** Homepage *****/ +.section { + margin-bottom: 40px; +} + +@media (min-width: 768px) { + .section { + margin-bottom: 60px; + } +} + +.section h2 { + margin-bottom: 10px; + text-align: center; +} + +/***** Promoted articles *****/ +.promoted-articles { + display: flex; + flex-direction: column; + flex-wrap: wrap; +} + +@media (min-width: 1024px) { + .promoted-articles { + flex-direction: row; + } +} + +.promoted-articles-item { + flex: 1 0 auto; + border-bottom: 1px solid #ddd; + padding: 15px 0; +} + +@media (min-width: 1024px) { + .promoted-articles-item { + align-self: flex-end; + flex: 0 0 auto; + margin-right: 30px; + width: 33%; + /* Three columns on desktop */ + } + [dir="rtl"] .promoted-articles-item { + margin: 0 0 0 30px; + } +} + +.promoted-articles-item:nth-child(3n) { + margin-right: 0; +} + +.promoted-articles-item a { + color: $text_color; +} + +.promoted-articles-item .icon-lock::before { + vertical-align: baseline; +} + +.promoted-articles-item:last-child { + border: 0; +} + +@media (min-width: 1024px) { + .promoted-articles-item:last-child { + border-bottom: 1px solid #ddd; + } +} + +/***** Community section in homepage *****/ +.community { + text-align: center; +} + +.community-image { + min-height: 300px; + background-image: url($community_image); + background-position: center; + background-repeat: no-repeat; + max-width: 100%; +} + +.community, +.activity { + border-top: 1px solid #ddd; + padding: 30px 0; +} + +/***** Recent activity *****/ +.recent-activity-header { + margin-bottom: 10px; + text-align: center; +} + +.recent-activity-list { + padding: 0; +} + +.recent-activity-item { + border-bottom: 1px solid #ddd; + overflow: auto; + padding: 20px 0; +} + +.recent-activity-item-parent { + font-size: 16px; +} + +.recent-activity-item-parent, .recent-activity-item-link { + margin: 6px 0; + color: $text_color; + display: inline-block; + width: 100%; +} + +@media (min-width: 768px) { + .recent-activity-item-parent, .recent-activity-item-link { + width: 70%; + margin: 0; + } +} + +.recent-activity-item-link { + font-size: 14px; + font-weight: 300; +} + +.recent-activity-item-meta { + margin: 15px 0 0 0; + float: none; +} + +@media (min-width: 768px) { + .recent-activity-item-meta { + margin: 0; + float: right; + } + [dir="rtl"] .recent-activity-item-meta { + float: left; + } +} + +.recent-activity-item-time, .recent-activity-item-comment { + color: lighten($text_color, 20%); + display: inline-block; + font-size: 13px; + font-weight: 300; +} + +.recent-activity-item-comment { + padding-left: 5px; +} + +[dir="rtl"] .recent-activity-item-comment { + padding: 0 5px 0 0; +} + +.recent-activity-item-comment::before { + display: inline-block; +} + +.recent-activity-item-comment span::before { + color: $brand_color; + content: "\1F4AC"; + display: inline-block; + font-size: 15px; + padding-right: 3px; + vertical-align: middle; +} + +[dir="rtl"] .recent-activity-item-comment span::before { + padding-left: 3px; +} + +.recent-activity-controls { + padding-top: 15px; +} + +/***** Category pages *****/ +.category-container { + display: flex; + justify-content: flex-end; +} + +.category-content { + flex: 1; +} + +@media (min-width: 1024px) { + .category-content { + flex: 0 0 80%; + } +} + +.section-tree { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; +} + +@media (min-width: 768px) { + .section-tree { + flex-direction: row; + } +} + +.section-tree .section { + flex: initial; +} + +@media (min-width: 768px) { + .section-tree .section { + flex: 0 0 45%; + /* Two columns for tablet and desktop. Leaving 5% separation between columns */ + } +} + +.section-tree-title { + margin-bottom: 0; +} + +.section-tree-title a { + color: $text_color; +} + +.section-tree .see-all-articles { + display: block; + padding: 15px 0; +} + +.article-list-item { + border-bottom: 1px solid #ddd; + font-size: 16px; + padding: 15px 0; +} + +.article-list-item a { + color: $text_color; +} + +.article-list-item .icon-lock::before { + vertical-align: baseline; +} + +.icon-star::before { + color: $brand_color; + font-size: 18px; +} + +/***** Section pages *****/ +.section-container { + display: flex; + justify-content: flex-end; +} + +.section-content { + flex: 1; +} + +@media (min-width: 1024px) { + .section-content { + flex: 0 0 80%; + } +} + +.section-subscribe .dropdown-toggle::after { + display: none; +} + +/***** Article *****/ +.article { + /* + * The article grid is defined this way to optimize readability: + * Sidebar | Content | Free space + * 17% | 66% | 17% + */ + flex: 1 0 auto; +} + +@media (min-width: 1024px) { + .article { + flex: 1 0 66%; + max-width: 66%; + min-width: 640px; + padding: 0 30px; + } +} + +.article-container { + display: flex; + flex-direction: column; +} + +@media (min-width: 1024px) { + .article-container { + flex-direction: row; + } +} + +.article-header { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + margin-bottom: 40px; + margin-top: 20px; +} + +@media (min-width: 768px) { + .article-header { + flex-direction: row; + margin-top: 0; + } +} + +.article-avatar { + margin-right: 10px; +} + +.article-author { + margin-bottom: 10px; +} + +@media (min-width: 768px) { + .article-title { + flex-basis: 100%; + /* Take entire row */ + } +} + +.article-title .icon-lock::before { + content: "\1F512"; + font-size: 20px; + position: relative; + left: -5px; + vertical-align: baseline; +} + +.article [role="button"] { + flex-shrink: 0; + /*Avoid collapsing elements in Safari (https://github.com/philipwalton/flexbugs#1-minimum-content-sizing-of-flex-items-not-honored)*/ + width: 100%; +} + +@media (min-width: 768px) { + .article [role="button"] { + width: auto; + } +} + +.article-info { + max-width: 100%; +} + +.article-meta { + display: inline-block; + vertical-align: middle; +} + +.article-body img { + height: auto; + max-width: 100%; +} + +.article-body ul, .article-body ol { + padding-left: 20px; + list-style-position: outside; + margin: 20px 0 20px 20px; +} + +[dir="rtl"] .article-body ul, [dir="rtl"] .article-body ol { + padding-right: 20px; + padding-left: 0; + margin-left: 0; + margin-right: 20px; +} + +.article-body ul > ul, .article-body ol > ol, .article-body ol > ul, .article-body ul > ol, .article-body li > ul, .article-body li > ol { + margin: 0; +} + +.article-body ul { + list-style-type: disc; +} + +.article-body a:visited { + color: darken($link_color, 20%); +} + +.article-body code { + background: darken($background_color, 3%); + border: 1px solid #ddd; + border-radius: 3px; + padding: 0 5px; + margin: 0 2px; +} + +.article-body pre { + background: darken($background_color, 3%); + border: 1px solid #ddd; + border-radius: 3px; + padding: 10px 15px; + overflow: auto; + white-space: pre; +} + +.article-body blockquote { + border-left: 1px solid #ddd; + color: lighten($text_color, 20%); + font-style: italic; + padding: 0 15px; +} + +.article-body > p:last-child { + margin-bottom: 0; +} + +.article-content { + line-height: 1.6; + margin: 40px 0; + word-wrap: break-word; +} + +.article-footer { + align-items: center; + display: flex; + justify-content: space-between; + padding-bottom: 20px; +} + +.article-comment-count { + color: lighten($text_color, 20%); + font-weight: 300; +} + +.article-comment-count:hover { + text-decoration: none; +} + +.article-comment-count .icon-comments { + color: $brand_color; + content: "\1F4AC"; + display: inline-block; + font-size: 18px; + padding: 5px; +} + +.article-sidebar { + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + flex: 1 0 auto; + margin-bottom: 20px; + padding: 0; +} + +@media (min-width: 1024px) { + .article-sidebar { + border: 0; + flex: 0 0 17%; + height: auto; + } +} + +.article-relatives { + border-top: 1px solid #ddd; + display: flex; + flex-direction: column; + padding: 20px 0; +} + +@media (min-width: 768px) { + .article-relatives { + flex-direction: row; + } +} + +.article-relatives > * { + flex: 1 0 auto; + margin-right: 0; +} + +.article-relatives > *:last-child { + margin: 0; +} + +@media (min-width: 768px) { + .article-relatives > * { + margin-right: 20px; + } +} + +.article-votes { + border-top: 1px solid #ddd; + padding: 30px 0; + text-align: center; +} + +.article-vote { + background: transparent; + border: 1px solid $brand_color; + color: $brand_color; + margin: 10px 5px; + min-width: 90px; + width: auto; +} + +.article-vote::before { + font-size: 8px; + margin-right: 10px; +} + +[dir="rtl"] .article-vote::before { + margin-right: 0; + margin-left: 10px; +} + +.article-vote::after { + content: attr(title); + /* Yes/No label*/ +} + +.article-vote:focus, .article-vote:active { + background-color: transparent; + color: $brand_color; +} + +.article-vote:hover { + background-color: $brand_color; +} + +.article-vote:hover::before, .article-vote:hover::after, .article-vote[aria-selected="true"]::before, .article-vote[aria-selected="true"]::after { + color: $brand_text_color; +} + +.article-vote-up::before { + content: "\2713"; +} + +.article-vote-down::before { + content: "\2715"; +} + +.article-more-questions { + margin: 10px 0 20px; + text-align: center; +} + +.article-return-to-top { + border-top: 1px solid #ddd; +} + +@media (min-width: 1024px) { + .article-return-to-top { + display: none; + } +} + +.article-return-to-top a { + color: $text_color; + display: block; + padding: 20px 0; +} + +.article-return-to-top a:hover, .article-return-to-top a:focus { + text-decoration: none; +} + +.article-return-to-top .icon-arrow-up::before { + font-size: 16px; + margin-left: 5px; +} + +[dir="rtl"] .article-return-to-top .icon-arrow-up::before { + margin-right: 10px; +} + +.article-unsubscribe { + background-color: $brand_color; + color: $brand_text_color; + text-decoration: none; +} + +.article-unsubscribe:hover { + background-color: darken($brand_color, 20%); + border-color: darken($brand_color, 20%); +} + +.sidenav-title { + font-size: 15px; + position: relative; +} + +.sidenav-item { + border-radius: 4px; + color: $text_color; + display: block; + font-weight: 300; + margin-bottom: 10px; + padding: 10px; +} + +.sidenav-item.current-article, .sidenav-item:hover { + background-color: $brand_color; + color: $brand_text_color; + text-decoration: none; +} + +.recent-articles h3, +.related-articles h3 { + font-size: 15px; + margin: 20px 0; +} + +.recent-articles li, +.related-articles li { + margin-bottom: 15px; +} + +/***** Attachments *****/ +/* Styles attachments inside posts, articles and comments */ +.attachments .attachment-item { + padding-left: 20px; + position: relative; + margin-bottom: 10px; +} + +.attachments .attachment-item:last-child { + margin-bottom: 0; +} + +.attachments .attachment-item::before { + color: $text_color; + content: "\1F4CE"; + font-size: 15px; + left: 0; + position: absolute; + top: 5px; +} + +[dir="rtl"] .attachments .attachment-item { + padding-left: 0; + padding-right: 20px; +} + +[dir="rtl"] .attachments .attachment-item::before { + left: auto; + right: 0; +} + +.upload-dropzone span { + color: lighten($text_color, 20%); +} + +/***** Social share links *****/ +.share { + padding: 0; + white-space: nowrap; +} + +.share li, .share a { + display: inline-block; +} + +.share a { + border-radius: 50%; + height: 25px; + line-height: 25px; + overflow: hidden; + width: 25px; +} + +.share a::before { + color: lighten($text_color, 20%); + display: block; + font-size: 23px; + text-align: center; + width: 100%; +} + +.share a:hover { + text-decoration: none; +} + +.share a:hover::before { + color: $brand_color; +} + +.share-twitter::before { + content: "\e901"; +} + +.share-facebook::before { + content: "\e903"; +} + +.share-linkedin::before { + content: "\e900"; +} + +.share-googleplus::before { + content: "\e902"; +} + +/***** Comments *****/ +/* Styles comments inside articles, posts and requests */ +.comment { + border-bottom: 1px solid #ddd; + padding: 20px 0; +} + +.comment-heading { + margin-bottom: 5px; + margin-top: 0; +} + +.comment-overview { + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + padding: 20px 0; +} + +.comment-overview p { + margin-top: 0; +} + +.comment-callout { + color: lighten($text_color, 20%); + display: inline-block; + font-weight: 300; + font-size: 13px; + margin-bottom: 0; +} + +.comment-callout a { + color: $brand_color; +} + +.comment-sorter { + display: inline-block; + float: right; +} + +.comment-sorter a { + color: lighten($text_color, 20%); + font-weight: 300; + font-size: 13px; + text-decoration: none; +} + +[dir="rtl"] .comment-sorter { + float: left; +} + +.comment-wrapper { + display: flex; + position: relative; +} + +.comment-wrapper.comment-official { + border: 1px solid $brand_color; + padding: 40px 20px 20px; +} + +@media (min-width: 768px) { + .comment-wrapper.comment-official { + padding-top: 20px; + } +} + +.comment-info { + min-width: 0; + padding-right: 20px; + width: 100%; +} + +[dir="rtl"] .comment-info { + padding-right: 0; + padding-left: 20px; +} + +.comment-author { + align-items: flex-end; + display: flex; + flex-wrap: wrap; + margin-bottom: 20px; +} + +@media (min-width: 768px) { + .comment-author { + justify-content: space-between; + } +} + +.comment-avatar { + margin-right: 10px; +} + +[dir="rtl"] .comment-avatar { + margin-left: 10px; + margin-right: 0; +} + +.comment-meta { + flex: 1 0 auto; +} + +.comment-labels { + flex-basis: 100%; +} + +@media (min-width: 768px) { + .comment-labels { + flex-basis: auto; + } +} + +.comment .status-label:not(.status-label-official) { + margin-top: 10px; +} + +@media (min-width: 768px) { + .comment .status-label:not(.status-label-official) { + margin-top: 0; + } +} + +.comment-form { + display: flex; + padding-top: 30px; + word-wrap: break-word; +} + +.comment-container { + width: 100%; +} + +.comment-form-controls { + display: none; + margin-top: 10px; + text-align: left; +} + +@media (min-width: 768px) { + [dir="ltr"] .comment-form-controls { + text-align: right; + } +} + +.comment-form-controls input[type="submit"] { + margin-top: 15px; +} + +@media (min-width: 1024px) { + .comment-form-controls input[type="submit"] { + margin-left: 15px; + } + [dir="rtl"] .comment-form-controls input[type="submit"] { + margin-left: 0; + margin-right: 15px; + } +} + +.comment-form-controls input[type="checkbox"] { + margin-right: 5px; +} + +.comment-form-controls input[type="checkbox"] [dir="rtl"] { + margin-left: 5px; +} + +.comment-ccs { + display: none; +} + +.comment-ccs + textarea { + margin-top: 10px; +} + +.comment-attachments { + margin-top: 10px; +} + +.comment-attachments a { + color: $brand_color; +} + +.comment-body { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + word-break: break-word; + font-family: $text_font; + line-height: 1.6; +} + +.comment-body img { + height: auto; + max-width: 100%; +} + +.comment-body ul, .comment-body ol { + padding-left: 20px; + list-style-position: outside; + margin: 20px 0 20px 20px; +} + +[dir="rtl"] .comment-body ul, [dir="rtl"] .comment-body ol { + padding-right: 20px; + padding-left: 0; + margin-left: 0; + margin-right: 20px; +} + +.comment-body ul > ul, .comment-body ol > ol, .comment-body ol > ul, .comment-body ul > ol, .comment-body li > ul, .comment-body li > ol { + margin: 0; +} + +.comment-body ul { + list-style-type: disc; +} + +.comment-body a:visited { + color: darken($link_color, 20%); +} + +.comment-body code { + background: darken($background_color, 3%); + border: 1px solid #ddd; + border-radius: 3px; + padding: 0 5px; + margin: 0 2px; +} + +.comment-body pre { + background: darken($background_color, 3%); + border: 1px solid #ddd; + border-radius: 3px; + padding: 10px 15px; + overflow: auto; + white-space: pre; +} + +.comment-body blockquote { + border-left: 1px solid #ddd; + color: lighten($text_color, 20%); + font-style: italic; + padding: 0 15px; +} + +.comment-mark-as-solved { + display: inline-block; +} + +/***** Vote *****/ +/* Used in article comments, post comments and post */ +.vote { + display: inline-block; + text-align: center; + width: 35px; +} + +.vote a { + outline: none; +} + +.vote a:active, .vote a:hover, .vote a:focus { + text-decoration: none; +} + +.vote-sum { + color: lighten($text_color, 20%); + display: block; + margin: 3px 0; +} + +[dir="rtl"] .vote-sum { + direction: ltr; + unicode-bidi: bidi-override; +} + +.vote-up:hover::before, +.vote-down:hover::before { + color: $brand_color; +} + +.vote-up::before, .vote-down::before { + color: lighten($text_color, 20%); + font-size: 24px; +} + +.vote-up::before { + content: "\2B06"; +} + +.vote-down::before { + content: "\2B07"; +} + +.vote-voted::before { + color: $brand_color; +} + +.vote-voted:hover::before { + color: darken($brand_color, 20%); +} + +/***** Actions *****/ +/* Styles admin and en user actions(edit, delete, change status) in comments and posts */ +.actions { + text-align: center; + flex-shrink: 0; + /*Avoid collapsing elements in Safari*/ +} + +.actions .dropdown-toggle { + font-size: 0; + margin: 15px 0; +} + +.actions .dropdown-toggle:hover::before, .actions .dropdown-toggle:focus::before, .actions .dropdown-toggle:active::before { + background-color: darken($background_color, 3%); +} + +.actions .dropdown-toggle::before { + background-color: transparent; + border-radius: 50%; + color: lighten($text_color, 20%); + content: "\2699"; + display: block; + font-size: 13px; + margin: auto; + padding: 5px; +} + +/***** Community *****/ +.community-hero { + background-image: url($community_background_image); + margin-bottom: 10px; +} + +.community-footer { + padding-top: 50px; + text-align: center; +} + +.community-featured-posts, .community-activity { + padding-top: 40px; + width: 100%; +} + +.community-header { + margin-bottom: 30px; +} + +.community-header h4 { + margin-bottom: 0; +} + +.post-to-community { + margin-top: 10px; +} + +@media (min-width: 768px) { + .post-to-community { + margin: 0; + } +} + +/* Community topics grid */ +.topics { + max-width: none; + width: 100%; +} + +.topics-item .meta-group { + justify-content: center; + margin-top: 20px; +} + +/* Community topic page */ +.topic-header { + border-bottom: 1px solid #ddd; + font-size: 13px; +} + +@media (min-width: 768px) { + .topic-header { + padding-bottom: 10px; + } +} + +.topic-header .dropdown { + display: block; + border-top: 1px solid #ddd; + padding: 10px 0; +} + +@media (min-width: 768px) { + .topic-header .dropdown { + border-top: 0; + display: inline-block; + margin-right: 20px; + padding: 0; + } +} + +.no-posts-with-filter { + margin-top: 20px; + margin-bottom: 20px; +} + +/* Topic, post and user follow button */ +.community-follow { + margin-bottom: 10px; + width: 100%; +} + +@media (min-width: 768px) { + .community-follow { + margin-bottom: 0; + width: auto; + } +} + +.community-follow .dropdown { + width: 100%; +} + +.community-follow [role="button"] { + line-height: 30px; + padding: 0 10px 0 15px; + position: relative; + width: 100%; +} + +@media (min-width: 768px) { + .community-follow [role="button"] { + width: auto; + } +} + +.community-follow [role="button"]:hover { + background-color: $brand_color; +} + +.community-follow [role="button"]:hover::after, .community-follow [role="button"]:focus::after { + border-color: $brand_text_color; + color: $brand_text_color; +} + +.community-follow [role="button"][aria-selected="true"] { + background-color: $brand_color; + color: $brand_text_color; +} + +.community-follow [role="button"][aria-selected="true"]::after { + border-left: 1px solid $brand_text_color; + color: $brand_text_color; +} + +.community-follow [role="button"][aria-selected="true"]:hover { + background-color: darken($brand_color, 20%); + border-color: darken($brand_color, 20%); +} + +.community-follow [role="button"]::after { + border-left: 1px solid $brand_color; + content: attr(data-follower-count); + color: $brand_color; + display: inline-block; + font-family: $heading_font; + margin-left: 15px; + padding-left: 10px; + position: absolute; + right: 10px; +} + +@media (min-width: 768px) { + .community-follow [role="button"]::after { + position: static; + } +} + +[dir="rtl"] .community-follow [role="button"]::after { + border-left: 0; + border-right: 1px solid $brand_color; + margin: 0 10px 0 0; + padding: 0 10px 0 0; +} + +/***** Striped list *****/ +/* Used in community posts list and requests list */ +.striped-list { + padding: 0; +} + +.striped-list-item { + align-items: flex-start; + border-bottom: 1px solid #ddd; + display: flex; + flex-direction: column; + justify-content: flex-end; + padding: 20px 0; +} + +@media (min-width: 768px) { + .striped-list-item { + align-items: center; + flex-direction: row; + } +} + +.striped-list-info { + flex: 2; +} + +.striped-list-title { + color: $link_color; + margin-bottom: 10px; + margin-right: 5px; +} + +.striped-list-title:hover, .striped-list-title:focus, .striped-list-title:active { + text-decoration: underline; +} + +.striped-list-title:visited { + color: darken($link_color, 20%); +} + +.striped-list .meta-group { + margin: 5px 0; +} + +.striped-list-count { + color: lighten($text_color, 20%); + font-weight: 300; + font-size: 13px; + justify-content: flex-start; + text-transform: capitalize; +} + +@media (min-width: 768px) { + .striped-list-count { + display: flex; + flex: 1; + justify-content: space-around; + } +} + +.striped-list-count-item::after { + content: "·"; + display: inline-block; + padding: 0 5px; +} + +@media (min-width: 768px) { + .striped-list-count-item::after { + display: none; + } +} + +.striped-list-count-item:last-child::after { + display: none; +} + +.striped-list-number { + font-weight: 300; + text-align: center; +} + +@media (min-width: 768px) { + .striped-list-number { + color: $text_color; + display: block; + font-weight: 400; + } +} + +/***** Status labels *****/ +/* Styles labels used in posts, articles and requests */ +.status-label { + background-color: #1eb848; + border-radius: 4px; + color: #fff; + font-size: 12px; + margin-right: 2px; + padding: 3px 10px; + vertical-align: middle; + white-space: nowrap; + display: inline-block; +} + +.status-label:hover, .status-label:active, .status-label:focus { + text-decoration: none; +} + +.status-label-pinned, .status-label-featured, .status-label-official { + background-color: $brand_color; +} + +.status-label-official { + border-radius: 0; + margin-right: 0; + position: absolute; + right: 0; + text-align: center; + top: 0; + width: 100%; +} + +@media (min-width: 768px) { + .status-label-official { + border-radius: 0 0 4px 4px; + right: 30px; + width: auto; + } +} + +[dir="rtl"] .status-label-official { + left: 30px; + right: auto; +} + +.status-label-pending, .status-label-not-planned { + background-color: #eee; + color: lighten($text_color, 20%); +} + +.status-label-pending { + text-align: center; +} + +.status-label-open { + background-color: #cc3340; +} + +.status-label-closed { + background-color: #ddd; +} + +.status-label-solved { + background-color: #999; +} + +.status-label-new { + background-color: #ffd12a; +} + +.status-label-hold { + background-color: #000; +} + +.status-label-open, .status-label-closed, .status-label-solved, .status-label-new, .status-label-hold, .status-label-answered { + text-transform: lowercase; +} + +/***** Post *****/ +/* +* The post grid is defined this way: +* Content | Sidebar +* 70% | 30% +*/ +.post { + flex: 1; + margin-bottom: 10px; +} + +@media (min-width: 1024px) { + .post { + flex: 1 0 70%; + max-width: 70%; + } +} + +.post-container { + display: flex; + flex-direction: column; +} + +@media (min-width: 1024px) { + .post-container { + flex-direction: row; + } +} + +.post-header { + align-items: center; + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 10px; +} + +@media (min-width: 768px) { + .post-header { + align-items: baseline; + flex-direction: row; + } +} + +.post-header .status-label { + vertical-align: super; +} + +.post-title { + margin-bottom: 20px; + width: 100%; +} + +@media (min-width: 768px) { + .post-title { + margin-bottom: 0; + padding-right: 10px; + } +} + +.post-title h1 { + display: inline; + vertical-align: middle; +} + +@media (min-width: 768px) { + .post-title h1 { + margin-right: 5px; + } +} + +.post-author { + align-items: flex-start; + display: flex; + justify-content: space-between; +} + +.post-avatar { + margin-bottom: 30px; +} + +.post-content { + font-family: $text_font; + line-height: 1.6; + word-break: break-word; +} + +.post-info-container { + display: flex; + margin-bottom: 40px; +} + +.post-info { + min-width: 0; + padding-right: 20px; + width: 100%; +} + +[dir="rtl"] .post-info { + padding-right: 0; + padding-left: 20px; +} + +.post-meta { + display: inline-block; + flex: 1; + margin-left: 10px; + vertical-align: middle; +} + +[dir="rtl"] .post-meta { + margin-left: 0; + margin-right: 10px; +} + +.post-body img { + height: auto; + max-width: 100%; +} + +.post-body ul, .post-body ol { + padding-left: 20px; + list-style-position: outside; + margin: 20px 0 20px 20px; +} + +[dir="rtl"] .post-body ul, [dir="rtl"] .post-body ol { + padding-right: 20px; + padding-left: 0; + margin-left: 0; + margin-right: 20px; +} + +.post-body ul > ul, .post-body ol > ol, .post-body ol > ul, .post-body ul > ol, .post-body li > ul, .post-body li > ol { + margin: 0; +} + +.post-body ul { + list-style-type: disc; +} + +.post-body a:visited { + color: darken($link_color, 20%); +} + +.post-body code { + background: darken($background_color, 3%); + border: 1px solid #ddd; + border-radius: 3px; + padding: 0 5px; + margin: 0 2px; +} + +.post-body pre { + background: darken($background_color, 3%); + border: 1px solid #ddd; + border-radius: 3px; + padding: 10px 15px; + overflow: auto; + white-space: pre; +} + +.post-body blockquote { + border-left: 1px solid #ddd; + color: lighten($text_color, 20%); + font-style: italic; + padding: 0 15px; +} + +.post-footer { + align-items: center; + display: flex; + justify-content: space-between; + padding-bottom: 20px; +} + +.post-comment-count { + color: lighten($text_color, 20%); + font-weight: 300; +} + +.post-comment-count:hover { + text-decoration: none; +} + +.post-comment-count .icon-comments { + color: $brand_color; + content: "\1F4AC"; + display: inline-block; + font-size: 18px; + padding: 5px; +} + +.post-sidebar { + border-top: 1px solid #ddd; + flex: 1; + padding: 30px 0; + text-align: center; +} + +@media (min-width: 1024px) { + .post-sidebar { + border: 0; + flex: 1 0 30%; + padding: 0 0 0 50px; + text-align: initial; + } + [dir="rtl"] .post-sidebar { + padding: 0 50px 0 0; + } +} + +.post-sidebar h5 { + font-weight: 600; +} + +@media (min-width: 1024px) { + .post-sidebar h5 { + border-bottom: 1px solid #ddd; + padding-bottom: 20px; + } +} + +.post-comments { + margin-bottom: 20px; +} + +@media (min-width: 1024px) { + .post-comments { + margin-bottom: 0; + } +} + +/* Navigation element that collapses on mobile */ +.collapsible-nav { + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + flex-direction: column; + max-height: 45px; + overflow: hidden; + font-size: 14px; +} + +@media (min-width: 768px) { + .collapsible-nav { + border: 0; + height: auto; + flex-direction: row; + max-height: none; + } +} + +.collapsible-nav-list { + display: flex; + flex-direction: column; +} + +@media (min-width: 768px) { + .collapsible-nav-list { + flex-direction: row; + } +} + +.collapsible-nav-list li { + color: $text_color; + line-height: 45px; + order: 1; +} + +@media (min-width: 768px) { + .collapsible-nav-list li { + line-height: normal; + margin-right: 30px; + } + [dir="rtl"] .collapsible-nav-list li { + margin-left: 30px; + margin-right: 0; + } + .collapsible-nav-list li a { + text-decoration: none; + padding: 15px 0; + } +} + +.collapsible-nav-list li a { + color: $text_color; + display: block; +} + +@media (min-width: 768px) { + .collapsible-nav-list li:hover { + border-bottom: 4px solid #ddd; + } + .collapsible-nav-list li:hover a { + padding: 15px 0 11px 0; + text-decoration: none; + } +} + +.collapsible-nav-list li[aria-selected="true"] { + order: 0; + position: relative; +} + +@media (min-width: 768px) { + .collapsible-nav-list li[aria-selected="true"] { + border-bottom: 4px solid $brand_color; + order: 1; + padding: 15px 0 11px 0; + } +} + +.collapsible-nav-list li[aria-selected="true"] a { + color: $text_color; +} + +.collapsible-nav-list li[aria-selected="true"]::after { + position: relative; + top: 50%; + transform: translateY(-50%); + content: "\25BE"; + position: absolute; + right: 0; +} + +@media (min-width: 768px) { + .collapsible-nav-list li[aria-selected="true"]::after { + display: none; + } +} + +[dir="rtl"] .collapsible-nav-list li[aria-selected="true"]::after { + left: 0; + right: auto; +} + +.collapsible-nav[aria-expanded="true"] { + max-height: none; +} + +.collapsible-nav[aria-expanded="true"] li[aria-selected="true"]::after { + content: "\2715"; +} + +/* Sidebar navigation that collapses on mobile */ +.collapsible-sidebar { + flex: 1; + max-height: 45px; + overflow: hidden; + padding: 10px 0; + position: relative; +} + +@media (min-width: 1024px) { + .collapsible-sidebar { + max-height: none; + padding: 0; + } +} + +.collapsible-sidebar[aria-expanded="true"] { + max-height: none; +} + +.collapsible-sidebar[aria-expanded="true"] .collapsible-sidebar-title::after { + content: "\2715"; +} + +@media (min-width: 1024px) { + .collapsible-sidebar[aria-expanded="true"] .collapsible-sidebar-title::after { + display: none; + } +} + +.collapsible-sidebar-title { + margin-top: 0; +} + +.collapsible-sidebar-title::after { + position: relative; + top: 50%; + transform: translateY(-50%); + content: "\25BE"; + position: absolute; + right: 10px; +} + +@media (min-width: 1024px) { + .collapsible-sidebar-title::after { + display: none; + } +} + +[dir="rtl"] .collapsible-sidebar-title::after { + left: 10px; + right: auto; +} + +/***** My activities *****/ +.my-activities-nav { + background-color: darken($background_color, 5%); + border: 0; + margin-bottom: 20px; +} + +.my-activities-sub-nav { + background-color: transparent; + border-bottom: 1px solid #ddd; + margin-bottom: 30px; +} + +@media (min-width: 768px) { + .my-activities-sub-nav li:hover { + border-bottom: 4px solid #ddd; + } +} + +.my-activities-sub-nav li[aria-selected="true"] { + border-color: $brand_color; +} + +.my-activities-table .striped-list-title { + /* My activities tables */ + display: block; + margin-bottom: 10px; + max-width: 350px; + white-space: normal; +} + +@media (min-width: 1024px) { + .my-activities-table .striped-list-title { + margin-bottom: 0; + max-width: 500px; + min-width: 350px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +.my-activities-table thead { + display: none; +} + +@media (min-width: 768px) { + .my-activities-table thead { + display: table-header-group; + } +} + +.my-activities-table th:first-child, +.my-activities-table td:first-child { + padding-left: 0; +} + +@media (min-width: 1024px) { + .my-activities-table th:first-child, + .my-activities-table td:first-child { + width: 500px; + } +} + +.my-activities-table th:last-child, +.my-activities-table td:last-child { + padding-right: 0; +} + +.my-activities-table td:not(:first-child) { + display: none; +} + +@media (min-width: 768px) { + .my-activities-table td:not(:first-child) { + display: table-cell; + } +} + +/* Requests table */ +.requests-search { + width: 100%; +} + +.requests-table-toolbar { + align-items: flex-end; + display: flex; + flex-direction: column; +} + +@media (min-width: 768px) { + .requests-table-toolbar { + flex-direction: row; + } +} + +.requests-table-toolbar .search { + flex: 1; + width: 100%; +} + +.requests-table-toolbar .request-table-filter { + width: 100%; +} + +@media (min-width: 768px) { + .requests-table-toolbar .request-table-filter { + width: auto; + } +} + +.requests-table-toolbar .request-filter { + display: block; +} + +@media (min-width: 768px) { + .requests-table-toolbar .request-filter { + margin: 0 0 0 30px; + } + [dir="rtl"] .requests-table-toolbar .request-filter { + margin: 0 30px 0 0; + } +} + +.requests-table-toolbar .request-filter-label { + font-size: 13px; + margin-top: 30px; +} + +@media (min-width: 768px) { + .requests-table-toolbar .request-filter-label { + margin-top: 0; + } +} + +.requests-table-toolbar select { + max-height: 40px; + margin-bottom: 30px; + width: 100%; +} + +@media (min-width: 768px) { + .requests-table-toolbar select { + margin-bottom: 0; + max-width: 300px; + width: auto; + } +} + +.requests-table-toolbar .organization-subscribe, +.requests-table-toolbar .organization-unsubscribe { + line-height: 40px; + max-height: 40px; + padding: 0 20px; +} + +@media (min-width: 768px) { + .requests-table-toolbar .organization-subscribe, + .requests-table-toolbar .organization-unsubscribe { + margin-left: 10px; + } + [dir="rtl"] .requests-table-toolbar .organization-subscribe, [dir="rtl"] + .requests-table-toolbar .organization-unsubscribe { + margin: 0 10px 0 0; + } +} + +.requests-table-toolbar .organization-unsubscribe { + background-color: $brand_color; + color: $brand_text_color; +} + +.requests-table-toolbar + .requests-search-info { + margin-top: 15px; +} + +.requests-table-toolbar + .requests-search-info.meta-data::after { + content: ""; + margin: 0; +} + +.requests-table-toolbar + .requests-search-info + .requests { + margin-top: 20px; +} + +.requests-table-toolbar + .requests { + margin-top: 40px; +} + +.requests .requests-table-meta { + display: block; +} + +@media (min-width: 768px) { + .requests .requests-table-meta { + display: none; + } +} + +.requests .requests-table thead { + display: none; +} + +@media (min-width: 768px) { + .requests .requests-table thead { + display: table-header-group; + } +} + +.requests .requests-table-info { + display: block; +} + +@media (min-width: 768px) { + .requests .requests-table-info { + display: table-cell; + vertical-align: middle; + width: auto; + } +} + +.requests .requests-table .requests-link { + position: relative; +} + +.requests .requests-table .requests-sort-symbol { + position: absolute; + left: calc(100% + 3px); + bottom: 0; + font-size: 10px; +} + +/* Following table */ +.subscriptions-unsubscribe a { + background: $brand_color; + border-radius: 4px; + color: $brand_text_color; + display: inline-block; + font-size: 12px; + line-height: 2.34; + padding: 0 20px; + text-align: center; + width: 100%; +} + +@media (min-width: 768px) { + .subscriptions-unsubscribe a { + width: auto; + } +} + +.subscriptions-unsubscribe a:hover { + background-color: darken($brand_color, 20%); + text-decoration: none; +} + +.subscriptions-table td:last-child { + display: block; +} + +@media (min-width: 768px) { + .subscriptions-table td:last-child { + display: table-cell; + } +} + +.subscriptions-table td:first-child { + display: flex; + align-items: center; +} + +.subscriptions-table .user-avatar { + margin-right: 10px; +} + +.subscriptions .striped-list-title { + display: inline-block; + vertical-align: middle; +} + +/* Contributions table */ +.contributions-table td:last-child { + color: lighten($text_color, 20%); + font-size: 13px; + font-weight: 300; +} + +@media (min-width: 768px) { + .contributions-table td:last-child { + color: inherit; + font-size: inherit; + font-weight: inherit; + } +} + +.no-activities { + color: lighten($text_color, 20%); +} + +/***** Request *****/ +.request-container { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; +} + +@media (min-width: 1024px) { + .request-container { + align-items: flex-start; + flex-direction: row; + } +} + +.request-container .comment-container { + min-width: 0; +} + +.request-breadcrumbs { + margin-bottom: 40px; +} + +@media (min-width: 1024px) { + .request-breadcrumbs { + margin-bottom: 60px; + } +} + +.request-main { + flex: 1 0 auto; + order: 1; +} + +.request-main .comment-fields, .request-main .request-submit-comment { + display: none; +} + +.request-main .comment-fields.shown { + display: block; +} + +.request-main .request-submit-comment.shown { + display: inline; +} + +@media (min-width: 1024px) { + .request-main { + flex: 0 0 66%; + order: 0; + min-width: 0; + } +} + +.request-main .comment-form-controls { + display: block; +} + +.request-main .comment-ccs { + display: block; +} + +.request-main .comment-show-container { + border-radius: 2px; + border: 1px solid #ddd; + cursor: pointer; + display: flex; + padding: 8px 15px; + width: 100%; +} + +.request-main .comment-show-container.hidden { + display: none; +} + +.request-main .comment-show-container-content { + align-self: center; + color: lighten($text_color, 20%); + margin-left: 10px; +} + +.request-main .form-field.comment-ccs > ul { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; +} + +.request-main .form-field.comment-ccs > ul[data-hc-focus="true"] { + border: 1px solid $brand_color; +} + +.request-main .form-field.comment-ccs > input[type="text"] { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; +} + +.request-main .comment-ccs + textarea { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.request-main .comment-ccs + textarea:focus { + border-top: 1px solid $brand_color; +} + +.request-main input#mark_as_solved { + display: none; +} + +.request-title { + width: 100%; +} + +@media (min-width: 1024px) { + .request-title { + border-bottom: 1px solid #ddd; + margin-bottom: 0; + max-width: 66%; + padding-bottom: 20px; + } +} + +.request-sidebar { + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + flex: 1 0 auto; + order: 0; +} + +@media (min-width: 1024px) { + .request-sidebar { + background-color: darken($background_color, 3%); + border: 0; + font-size: 13px; + flex: 0 0 auto; + padding: 0 20px; + width: 30%; + } +} + +.request-sidebar h5 { + font-size: 15px; + font-weight: 600; + position: relative; +} + +@media (min-width: 1024px) { + .request-sidebar h5 { + display: none; + } +} + +.request-details { + border-bottom: 1px solid #ddd; + font-size: 0; + margin: 0; + padding-bottom: 20px; +} + +.request-details:last-child { + border: 0; +} + +.request-details dt, .request-details dd { + display: inline-block; + vertical-align: top; + font-size: 13px; + margin: 20px 0 0 0; +} + +.request-details dd { + padding: 0 10px; + width: 60%; +} + +.request-details dd::after { + content: "\A"; + white-space: pre; +} + +.request-details dt { + color: lighten($text_color, 20%); + font-weight: 300; + width: 40%; +} + +.request-details .request-collaborators { + display: inline-block; +} + +.request-attachments dt, .request-attachments dd { + width: 100%; +} + +.request-attachments dd { + margin: 10px 0 0 0; +} + +.request-form textarea { + min-height: 120px; +} + +.request-follow-up { + padding-top: 20px; +} + +/***** Pagination *****/ +.pagination { + margin: 20px 0; + text-align: center; +} + +.pagination * { + display: inline-block; +} + +.pagination li { + border-radius: 50%; + height: 40px; + float: left; + margin-left: 5px; + width: 40px; +} + +@media (min-width: 768px) { + .pagination li { + height: 30px; + width: 30px; + } +} + +[dir="rtl"] .pagination li { + float: right; +} + +.pagination li:hover:not(.pagination-current) { + background-color: #f3f3f3; +} + +.pagination li:hover:not(.pagination-current) span, .pagination li:hover:not(.pagination-current) a { + color: $text_color; + text-decoration: none; +} + +.pagination a, .pagination span { + font-size: 15px; + color: lighten($text_color, 20%); + padding: 10px 12px; +} + +@media (min-width: 768px) { + .pagination a, .pagination span { + font-size: 13px; + padding: 5px 12px; + } +} + +.pagination-current { + background-color: $brand_color; +} + +.pagination-current a, .pagination-current span { + color: $brand_text_color; +} + +.pagination-first { + border-radius: 3px 0 0 3px; +} + +[dir="rtl"] .pagination-first { + border-radius: 0 3px 3px 0; +} + +.pagination-last { + border-radius: 0 3px 3px 0; +} + +[dir="rtl"] .pagination-last { + border-radius: 3px 0 0 3px; +} + +/***** Metadata *****/ +.meta-group { + display: block; +} + +.meta-group * { + display: inline; +} + +.meta-data { + color: lighten($text_color, 20%); + font-size: 13px; + font-weight: 300; +} + +.meta-data:not(:last-child)::after { + content: "\00B7"; + margin: 0 5px; +} + +/***** Icons *****/ +[class^="icon-"]::before, +[class*=" icon-"]::before, +.icon, +.search::before, +.recent-activity-item-comment span::before, +.article-vote::before, +.attachments .attachment-item::before, +.share a::before, +.vote-up::before, +.vote-down::before, +.actions .dropdown-toggle::before, +.collapsible-nav-list li[aria-selected="true"]::after, +.collapsible-sidebar-title::after, +.search-result-votes::before, +.search-result-meta-count::before { + font-family: "copenhagen-icons"; + font-style: normal; + font-weight: normal; + speak: none; + line-height: 1em; + vertical-align: middle; + -webkit-font-smoothing: antialiased; +} + +.icon-lock::before { + content: "\1F512"; +} + +.icon-star::before { + content: "\2605"; +} + +.icon-linkedin::before { + content: "\e900"; +} + +.icon-twitter::before { + content: "\e901"; +} + +.icon-googleplus-::before { + content: "\e902"; +} + +.icon-facebook::before { + content: "\e903"; +} + +.icon-agent::before { + content: "\1F464"; +} + +.icon-close::before { + content: "\2715"; +} + +.icon-arrow-up::before { + content: "\2B06"; +} + +.icon-arrow-down::before { + content: "\2B07"; +} + +.icon-attachments::before { + content: "\1F4CE"; +} + +.icon-comments::before { + content: "\1F4AC"; +} + +.icon-search::before { + content: "\1F50D"; +} + +.icon-vote::before { + content: "\1F44D"; +} + +.icon-handle::before { + content: "\25BE"; +} + +.icon-check::before { + content: "\2713"; +} + +.icon-gear::before { + content: "\2699"; +} + +.icon-menu::before { + content: "\2630"; +} + +.icon-article::before { + content: "\1F4C4"; +} + +.icon-post::before { + content: "\1F4D4"; +} + +.icon-notification-alert::before { + content: "\26A0"; +} + +.icon-notification-error::before { + content: "\00D7"; +} + +.icon-notification-info::before { + content: "\2139"; +} + +.icon-notification-success::before { + content: "\2714"; +} + +/* User Profiles */ +.profile-header { + padding: 30px 0; + background-color: darken($background_color, 3%); +} + +.profile-header .container { + display: flex; + flex-wrap: wrap; +} + +@media (min-width: 768px) { + .profile-header .container { + flex-wrap: nowrap; + } +} + +.profile-header .profile-info { + flex-basis: 100%; + display: flex; + flex-wrap: wrap; + min-width: 0; +} + +.profile-avatar { + position: relative; + line-height: 0; + align-self: center; + margin-right: 10px; +} + +[dir="rtl"] .profile-avatar { + margin-left: 10px; + margin-right: 0; +} + +.profile-avatar .user-avatar { + width: 65px; + height: 65px; +} + +.profile-avatar .icon-agent::before { + bottom: 0; + right: 0; +} + +.profile-header .basic-info { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + word-break: break-word; + display: flex; + flex-direction: column; + justify-content: center; + flex-grow: 1; + flex-basis: 0; + min-width: 0; +} + +.profile-header .basic-info .name { + margin: 0; +} + +.profile-header .options { + display: flex; + flex-basis: 100%; + margin-top: 12px; + align-items: flex-start; + flex-wrap: wrap; +} + +@media (min-width: 768px) { + .profile-header .options { + flex-wrap: nowrap; + flex-basis: auto; + margin-top: 0; + margin-left: 10px; + } + [dir="rtl"] .profile-header .options { + margin-left: 0; + margin-right: 10px; + } + .profile-header .options > :not(:last-child) { + margin-bottom: 0; + margin-right: 10px; + } + [dir="rtl"] .profile-header .options > :not(:last-child) { + margin-left: 10px; + margin-right: 0; + } +} + +.profile-header .options [data-action="edit-profile"] { + background-color: $brand_color; + border: 0; + color: $brand_text_color; + line-height: normal; + padding: 8px 20px; + outline-color: $brand_color; +} + +.profile-header .description { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + word-break: break-word; + margin: 15px 0; + flex-basis: 100%; +} + +.profile-stats { + font-size: 13px; + display: flex; + flex-direction: column; + flex-basis: 100%; +} + +.profile-stats .stat { + display: flex; + margin-bottom: 10px; +} + +.profile-stats .stat-label { + color: lighten($text_color, 20%); + font-weight: 300; + flex: 0 0 100px; + margin-right: 10px; +} + +[dir="rtl"] .profile-stats .stat-label { + margin-left: 10px; + margin-right: 0; +} + +.profile-stats-activity { + border-top: solid 1px #ddd; + margin-top: 15px; +} + +@media (min-width: 768px) { + .profile-stats-activity { + border-top: 0; + flex-direction: row; + } +} + +@media (min-width: 768px) { + .profile-stats-activity .stat { + flex-direction: column; + } +} + +.profile-stats-activity .stat:first-child { + margin-top: 10px; +} + +@media (min-width: 768px) { + .profile-stats-activity .stat:first-child { + margin-top: 0; + } +} + +@media (min-width: 768px) { + .profile-stats-activity .stat:not(:last-child) { + margin-right: 40px; + } + [dir="rtl"] .profile-stats-activity .stat:not(:last-child) { + margin-left: 40px; + margin-right: 0; + } +} + +@media (min-width: 768px) { + .profile-stats-activity .stat-label { + flex: 0 1 auto; + } +} + +.profile-stats-counters { + border-bottom: solid 1px #ddd; +} + +@media (min-width: 768px) { + .profile-stats-counters { + flex: 0 0 200px; + border-bottom: 0; + margin-left: 40px; + } + [dir="rtl"] .profile-stats-counters { + margin-left: 0; + margin-right: 40px; + } +} + +@media (min-width: 1024px) { + .profile-stats-counters { + flex: 0 0 270px; + margin-left: 60px; + } + [dir="rtl"] .profile-stats-counters { + margin-right: 60px; + margin-left: 0; + } +} + +@media (min-width: 768px) { + .profile-stats-counters .stat { + flex-direction: column; + } +} + +@media (min-width: 1024px) { + .profile-stats-counters .stat { + flex-direction: row; + } +} + +@media (min-width: 768px) { + .profile-stats-counters .stat:not(:last-child) { + margin-bottom: 15px; + } +} + +@media (min-width: 768px) { + .profile-stats-counters .stat-label { + flex: 0 1 auto; + } +} + +@media (min-width: 1024px) { + .profile-stats-counters .stat-label { + flex: 0 0 100px; + } +} + +.profile-private-badge { + flex-basis: 100%; + border: solid 1px $brand_color; + border-radius: 4px; + color: $brand_color; + padding: 5px 20px; + font-size: 12px; + text-align: center; +} + +.profile-private-badge::after { + content: "\1f512"; + margin-left: 5px; + font-family: "copenhagen-icons"; + vertical-align: middle; + line-height: 15px; +} + +@media (min-width: 768px) { + .profile-private-badge { + flex-basis: auto; + } +} + +.profile-nav { + background-color: darken($background_color, 5%); + border: 0; + margin-bottom: 37px; +} + +.profile-section { + width: 100%; +} + +@media (min-width: 1024px) { + .profile-section { + width: calc(100% - 330px); + } +} + +.profile-section-header { + display: flex; + flex-wrap: wrap; +} + +.profile-section-title { + flex-basis: 100%; + margin-bottom: 0; +} + +.profile-section-description { + flex-basis: 100%; + padding: 10px 0; + color: lighten($text_color, 20%); + font-weight: 300; + font-size: 13px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +@media (min-width: 768px) { + .profile-section-description { + flex: 1 0 50%; + padding-bottom: 0; + } +} + +.profile-section-sorter { + flex-basis: 100%; + border-top: solid 1px #eee; + font-size: 13px; +} + +.profile-section-sorter .dropdown-toggle { + padding: 10px 0; + width: 100%; +} + +.profile-section-sorter .dropdown-toggle::after { + position: absolute; + right: 0; +} + +[dir="rtl"] .profile-section-sorter .dropdown-toggle::after { + left: 0; + right: initial; +} + +@media (min-width: 768px) { + .profile-section-sorter .dropdown-toggle::after { + position: relative; + } +} + +@media (min-width: 768px) { + .profile-section-sorter { + flex: 0 1 auto; + padding-top: 0; + border-top: 0; + margin-left: 20px; + } + [dir="rtl"] .profile-section-sorter { + margin-left: 0; + margin-right: 20px; + } +} + +.profile-contribution { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + word-break: break-word; + padding: 20px 0; + position: relative; +} + +.profile-contribution-header { + margin-bottom: 5px; +} + +.profile-contribution-title { + margin: 0 0 5px 0; + display: inline; + line-height: 21px; + font-size: 15px; + vertical-align: middle; +} + +.profile-contribution-body { + margin: 10px 0; +} + +.profile-contribution-list > .profile-contribution { + border-top: 1px solid #eee; +} + +@media (min-width: 768px) { + .profile-contribution-list > .profile-contribution { + padding-left: 30px; + } + [dir="rtl"] .profile-contribution-list > .profile-contribution { + padding-right: 30px; + padding-left: 0; + } +} + +.profile-contribution-list > .profile-contribution:last-child { + border-bottom: 1px solid #eee; +} + +.profile-contribution-list > .profile-contribution::before { + left: 0; + position: absolute; + font-size: 16px; + color: #ccc; + font-family: "copenhagen-icons"; + line-height: 25px; +} + +[dir="rtl"] .profile-contribution-list > .profile-contribution::before { + right: 0; +} + +.profile-contribution-list .profile-contribution-header { + margin-left: 30px; +} + +[dir="rtl"] .profile-contribution-list .profile-contribution-header { + padding-right: 30px; + padding-left: 0; +} + +@media (min-width: 768px) { + .profile-contribution-list .profile-contribution-header { + margin-left: 0; + } + [dir="rtl"] .profile-contribution-list .profile-contribution-header { + padding-right: 0; + } +} + +.profile-comments .profile-contribution-breadcrumbs { + margin-left: 30px; +} + +[dir="rtl"] .profile-comments .profile-contribution-breadcrumbs { + padding-right: 30px; + padding-left: 0; +} + +@media (min-width: 768px) { + .profile-comments .profile-contribution-breadcrumbs { + margin-left: 0; + } + [dir="rtl"] .profile-comments .profile-contribution-breadcrumbs { + padding-right: 0; + } +} + +.profile-section .no-activity, +.profile-section .private-activity { + display: block; + margin-top: 40px; + color: #999; +} + +.profile-section .private-activity::before { + content: "\1f512"; + font-family: "copenhagen-icons"; + font-style: normal; + font-size: 12px; + font-weight: normal; + vertical-align: middle; + margin-right: 10px; +} + +[dir="rtl"] .profile-section .private-activity::before { + margin-right: 0; + margin-left: 10px; +} + +.profile-activity-list { + margin-top: 25px; +} + +.profile-activity { + position: relative; + padding-bottom: 30px; +} + +@media (min-width: 768px) { + .profile-activity { + padding-left: 20px; + } + [dir="rtl"] .profile-activity { + padding-right: 20px; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .profile-activity:not(:last-child) { + border-left: 1px solid #ddd; + } + [dir="rtl"] .profile-activity:not(:last-child) { + border-left: 0; + border-right: 1px solid #ddd; + } +} + +.profile-activity-header { + display: flex; + align-items: center; + margin-left: 35px; +} + +[dir="rtl"] .profile-activity-header { + margin-left: 0; + margin-right: 35px; +} + +@media (min-width: 768px) { + .profile-activity-header { + margin-left: 0; + } + [dir="rtl"] .profile-activity-header { + margin-right: 0; + } +} + +.profile-activity-header .user-avatar { + width: 40px; + height: 40px; + margin-right: 10px; + min-width: 40px; + align-self: flex-start; +} + +[dir="rtl"] .profile-activity-header .user-avatar { + margin-left: 10px; + margin-right: 0; +} + +.profile-activity-description { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + word-break: break-word; + margin: 0; + min-width: 0; + width: 100%; +} + +.profile-activity-description span:first-child { + font-weight: 600; + display: inline; +} + +.profile-activity-contribution { + padding: 20px; + margin-top: 10px; + border-radius: 8px; + background-color: darken($background_color, 3%); +} + +@media (min-width: 768px) { + .profile-activity-contribution { + margin-top: 0; + margin-left: 50px; + } + [dir="rtl"] .profile-activity-contribution { + margin-left: 0; + margin-right: 50px; + } +} + +.profile-activity::before { + position: absolute; + left: 0; + width: 28px; + border-radius: 50%; + content: ""; + background-size: 14px 14px; + background-repeat: no-repeat; + background-color: $background_color; + background-position: 50% 50%; + text-align: center; + line-height: 40px; + font-size: 16px; + color: #ccc; + font-family: "copenhagen-icons"; +} + +[dir="rtl"] .profile-activity::before { + right: 0; +} + +@media (min-width: 768px) { + .profile-activity::before { + left: -14px; + } + [dir="rtl"] .profile-activity::before { + right: -14px; + } +} + +.profile-articles > .profile-contribution::before, +.profile-activity-list > li[class$="-article"]::before { + content: "\1f4c4"; +} + +.profile-posts > .profile-contribution::before, +.profile-activity-list > li[class$="-post"]::before { + content: "\1f4d4"; +} + +.profile-comments > .profile-contribution::before, +.profile-activity-list > li[class$="-comment"]::before { + content: "\1f4ac"; + line-height: 35px; +} + +/***** Search results *****/ +.search-results { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; +} + +@media (min-width: 1024px) { + .search-results { + flex-direction: row; + } +} + +.search-results-column { + flex: 1; +} + +@media (min-width: 1024px) { + .search-results-column { + flex: 0 0 45%; + } +} + +.search-results-list { + margin-bottom: 25px; +} + +.search-results-list > li { + border-bottom: 1px solid #ddd; + padding: 20px 0; +} + +.search-results-list > li:first-child { + border-top: 1px solid #ddd; +} + +.search-result-description { + margin-top: 15px; +} + +.search-result-votes, .search-result-meta-count { + color: lighten($text_color, 20%); + display: inline-block; + font-size: 13px; + font-weight: 300; + padding: 4px 5px; + position: relative; +} + +.search-result-votes::before, .search-result-meta-count::before { + color: $brand_color; +} + +[dir="ltr"] .search-result-votes, [dir="ltr"] .search-result-meta-count { + margin-left: 5px; +} + +[dir="ltr"] .search-result-votes::before, [dir="ltr"] .search-result-meta-count::before { + margin-right: 3px; +} + +[dir="rtl"] .search-result-votes, [dir="rtl"] .search-result-meta-count { + margin-right: 5px; +} + +[dir="rtl"] .search-result-votes::before, [dir="rtl"] .search-result-meta-count::before { + margin-left: 3px; +} + +.search-result-votes::before { + content: "\1F44D"; +} + +.search-result-meta-count::before { + content: "\1F4AC"; +} + +.search-result .meta-group { + align-items: center; +} + +.search-result-breadcrumbs { + margin: 0; +} + +.search-result-breadcrumbs li:last-child::after { + content: "·"; + display: inline-block; + margin: 0 5px; +} diff --git a/styles/_actions.scss b/styles/_actions.scss new file mode 100644 index 0000000..0547d72 --- /dev/null +++ b/styles/_actions.scss @@ -0,0 +1,29 @@ +/***** Actions *****/ +/* Styles admin and en user actions(edit, delete, change status) in comments and posts */ +.actions { + text-align: center; + flex-shrink: 0; /*Avoid collapsing elements in Safari*/ + + .dropdown-toggle { + font-size: 0; + margin: 15px 0; + + &:hover::before, + &:focus::before, + &:active::before { + background-color: $primary-shade; + } + + &::before { + @extend .icon; + background-color: transparent; + border-radius: 50%; + color: $secondary-text-color; + content: "\2699"; + display: block; + font-size: $font-size-small; + margin: auto; + padding: 5px; + } + } +} diff --git a/styles/_article.scss b/styles/_article.scss new file mode 100644 index 0000000..35c2518 --- /dev/null +++ b/styles/_article.scss @@ -0,0 +1,279 @@ +/***** Article *****/ +.article { + /* + * The article grid is defined this way to optimize readability: + * Sidebar | Content | Free space + * 17% | 66% | 17% + */ + @include desktop { + flex: 1 0 66%; + max-width: 66%; + min-width: 640px; + padding: 0 30px; + } + + flex: 1 0 auto; //Explicit values needed whith flex-direction: column for IE11 + + &-container { + @include desktop { + flex-direction: row; + } + + display: flex; + flex-direction: column; + } + + &-header { + @include tablet { + flex-direction: row; + margin-top: 0; + } + + align-items: flex-start; + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + margin-bottom: 40px; + margin-top: 20px; + } + + &-avatar { + margin-right: 10px; + } + + &-author { + margin-bottom: 10px; + } + + &-title { + @include tablet { + flex-basis: 100%; /* Take entire row */ + } + + .icon-lock::before { + content: "\1F512"; + font-size: 20px; + position: relative; + left: -5px; + vertical-align: baseline; + } + } + + [role="button"] { + @include tablet { width: auto; } + flex-shrink: 0; /*Avoid collapsing elements in Safari (https://github.com/philipwalton/flexbugs#1-minimum-content-sizing-of-flex-items-not-honored)*/ + width: 100%; + } + + &-info { + max-width: 100%; + } + + &-meta { + display: inline-block; + vertical-align: middle; + } + + &-body { + @include content-body; + > p:last-child { margin-bottom: 0; } + } + + &-content { + line-height: 1.6; + margin: 40px 0; + word-wrap: break-word; + } + + &-footer { + align-items: center; + display: flex; + justify-content: space-between; + padding-bottom: 20px; + } + + &-comment-count { + color: $secondary-text-color; + font-weight: $font-weight-light; + + &:hover { + text-decoration: none; + } + + .icon-comments { + color: $brand_color; + content: "\1F4AC"; + display: inline-block; + font-size: 18px; + padding: 5px; + } + } + + &-sidebar { + @include desktop { + border: 0; + flex: 0 0 17%; + height: auto; + } + + border-bottom: 1px solid $border-color; + border-top: 1px solid $border-color; + flex: 1 0 auto; //Explicit values needed whith flex-direction: column for IE11 + margin-bottom: 20px; + padding: 0; + } + + &-relatives { + @include tablet { + flex-direction: row; + } + + border-top: 1px solid $border-color; + display: flex; + flex-direction: column; + padding: 20px 0; + + > * { + flex: 1 0 auto; //Explicit values needed whith flex-direction: column for IE11 + margin-right: 0; + + &:last-child { margin: 0; } + + @include tablet { margin-right: 20px; } + } + } + + + &-votes { + border-top: 1px solid $border-color; + padding: 30px 0; + text-align: center; + } + + &-vote { + background: transparent; + border: 1px solid $brand_color; + color: $brand_color; + margin: 10px 5px; + min-width: 90px; + width: auto; + + &::before { + @extend .icon; + font-size: 8px; + margin-right: 10px; + + [dir="rtl"] & { + margin-right: 0; + margin-left: 10px; + } + } + + &::after { + content: attr(title); /* Yes/No label*/ + } + + &:focus, + &:active { + background-color: transparent; + color: $brand_color; + } + + &:hover { + background-color: $brand_color; + } + + &:hover::before, + &:hover::after, + &[aria-selected="true"]::before, + &[aria-selected="true"]::after { + color: $brand_text_color; + } + } + + &-vote-up::before { + content: "\2713"; + } + + &-vote-down::before { + content: "\2715"; + } + + &-more-questions { + margin: 10px 0 20px; + text-align: center; + } + + &-return-to-top { + @include desktop { display: none; } + + border-top: 1px solid $border-color; + + a { + color: $text_color; + display: block; + padding: 20px 0; + + &:hover, + &:focus { + text-decoration: none; + } + } + + .icon-arrow-up::before { + font-size: 16px; + margin-left: 5px; + + [dir="rtl"] & { + margin-right: 10px; + } + } + } + + &-unsubscribe { + background-color: $button-color; + color: $brand_text_color; + text-decoration: none; + + &:hover { + background-color: $hover-button-color; + border-color: $hover-button-color; + } + } +} + +.sidenav { + &-title { + font-size: $font-size-base; + position: relative; + } + + &-item { + border-radius: 4px; + color: $text_color; + display: block; + font-weight: $font-weight-light; + margin-bottom: 10px; + padding: 10px; + + &.current-article, + &:hover { + background-color: $brand_color; + color: $brand_text_color; + text-decoration: none; + } + } +} + +.recent-articles, +.related-articles { + h3 { + font-size: $font-size-base; + margin: 20px 0; + } + + li { + margin-bottom: 15px; + } +} diff --git a/styles/_attachments.scss b/styles/_attachments.scss new file mode 100644 index 0000000..532eb84 --- /dev/null +++ b/styles/_attachments.scss @@ -0,0 +1,35 @@ +/***** Attachments *****/ +/* Styles attachments inside posts, articles and comments */ +.attachments { + .attachment-item { + padding-left: 20px; + position: relative; + margin-bottom: 10px; + + &:last-child { margin-bottom: 0; } + + &::before { + @extend .icon; + color: $text_color; + content: "\1F4CE"; + font-size: $font-size-base; + left: 0; + position: absolute; + top: 5px; + } + + [dir="rtl"] & { + padding-left: 0; + padding-right: 20px; + + &::before { + left: auto; + right: 0; + } + } + } +} + +.upload-dropzone span { + color: $secondary-text-color; +} diff --git a/styles/_base.scss b/styles/_base.scss new file mode 100644 index 0000000..5463b3f --- /dev/null +++ b/styles/_base.scss @@ -0,0 +1,125 @@ +/***** Base *****/ +* { + box-sizing: border-box; +} + +body { + background-color: $background_color; + color: $text_color; + font-family: $text_font; + font-size: $font-size-base; + font-weight: $font-weight-base; + line-height: 1.5; + -webkit-font-smoothing: antialiased; + + > main { + @include desktop { + min-height: 65vh; + } + } +} + +h1, h2, h3, h4, h5, h6 { + font-family: $heading_font; + font-weight: $font-weight-base; + margin-top: 0; +} + +h1 { font-size: 32px; } +h2 { font-size: 22px; } +h3 { + font-size: 18px; + font-weight: $font-weight-semibold; +} + +h4 { font-size: 16px; } + +a { + color: $link_color; + text-decoration: none; + + &:hover, + &:active, + &:focus { + text-decoration: underline; + } +} + +input, +textarea { + color: #000; + font-size: $input-font-size; +} + +input { + font-weight: $font-weight-light; + max-width: 100%; + box-sizing: border-box; + outline: none; + transition: border .12s ease-in-out; + + &:focus { + border: 1px solid $brand_color; + } +} + +input[disabled] { + background-color: #ddd; +} + +select { + -webkit-appearance: none; + -moz-appearance: none; + background: url($assets-dropdown-arrow-svg) no-repeat #fff; + background-position: right 10px center; + border: 1px solid $border-color; + border-radius: 4px; + padding: 8px 30px 8px 10px; + outline: none; + color: $field-text-focus-color; + width: 100%; + + &:focus { + border: 1px solid $brand_color; + } + + &::-ms-expand { + display: none; + } +} + +textarea { + border: 1px solid $border-color; + border-radius: 2px; + resize: vertical; + width: 100%; + outline: none; + padding: 10px; + + &:focus { + border: 1px solid $brand_color; + } +} + +.container { + @include max-width-container; +} + +.container-divider { + border-top: 1px solid $border-color; + margin-bottom: 20px; +} + +ul { + list-style: none; + margin: 0; + padding: 0; +} + +.error-page { + @include max-width-container; +} + +.dropdown-toggle::after { + color: inherit; +} diff --git a/styles/_blocks.scss b/styles/_blocks.scss new file mode 100644 index 0000000..f37a1a9 --- /dev/null +++ b/styles/_blocks.scss @@ -0,0 +1,82 @@ +/***** Blocks *****/ +/* Used in Homepage#categories and Community#topics */ +.blocks { + &-list { + @include tablet { + margin: 0 -15px; + } + + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + list-style: none; + padding: 0; + } + + &-item { + @include tablet { + margin: 0 15px 30px; + } + + border: 1px solid $brand_color; + border-radius: 4px; + box-sizing: border-box; + color: $brand_color; + display: flex; + flex: 1 0 340px; + flex-direction: column; + justify-content: center; + margin: 0 0 30px; + max-width: 100%; + text-align: center; + + &:hover, + &:focus, + &:active { + background-color: $brand_color; + + * { + color: $brand_text_color; + text-decoration: none; + } + } + + &-internal { + background-color: transparent; + border: 1px solid $border-color; + + .icon-lock::before { + content: "\1F512"; + font-size: 15px; + bottom: 5px; + position: relative; + } + + a { color: $text_color; } + } + } + + &-item-link { + color: $brand_color; + padding: 20px 30px; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } + } + + &-item-title { + margin-bottom: 0; + } + + &-item-description { + font-weight: $font-weight-light; + margin: 0; + } + + &-item-description:not(:empty) { + margin-top: 10px; + } +} diff --git a/styles/_breadcrumbs.scss b/styles/_breadcrumbs.scss new file mode 100644 index 0000000..e09be7b --- /dev/null +++ b/styles/_breadcrumbs.scss @@ -0,0 +1,27 @@ +/***** Breadcrumbs *****/ +.breadcrumbs { + @include tablet { + margin: 0; + } + + margin: 0 0 15px 0; + padding: 0; + + li { + color: $secondary-text-color; + display: inline; + font-weight: $font-weight-light; + font-size: $font-size-small; + max-width: 450px; + overflow: hidden; + text-overflow: ellipsis; + + + li::before { + content: ">"; + margin: 0 4px; + } + a:visited { + color: $link_color; + } + } +} diff --git a/styles/_buttons.scss b/styles/_buttons.scss new file mode 100644 index 0000000..075af5a --- /dev/null +++ b/styles/_buttons.scss @@ -0,0 +1,88 @@ +/***** Buttons *****/ +.button, [role="button"] { + @include tablet { width: auto; } + + border: 1px solid $button-color; + border-radius: 4px; + color: $button-color; + cursor: pointer; + display: inline-block; + font-size: 12px; + line-height: 2.34; //Taken from Zendesk garden bedrock + margin: 0; + padding: 0 20px; + text-align: center; + transition: background-color .12s ease-in-out, border-color .12s ease-in-out, color .15s ease-in-out; + user-select: none; + white-space: nowrap; + width: 100%; + -webkit-touch-callout: none; + + &::after { + color: $button-color; + } + + &:hover, + &:active, + &:focus, + &[aria-selected="true"] { + background-color: $brand_color; + color: $brand_text_color; + text-decoration: none; + } + + &[aria-selected="true"] { + &:hover, + &:focus, + &:active { + background-color: $hover-button-color; + border-color: $hover-button-color; + } + } + + &[data-disabled] { + cursor: default; + } +} + +.button-large, input[type="submit"] { + @include tablet { + width: auto; + } + + background-color: $button-color; + border: 0; + border-radius: 4px; + color: $brand_text_color; + font-size: 14px; + font-weight: $font-weight-base; + line-height: 2.72; + min-width: 190px; + padding: 0 1.9286em; + width: 100%; + + &:hover, + &:active, + &:focus { + background-color: $hover-button-color; + } + + + &[disabled] { + background-color: #ddd; + } +} + +.button-secondary { + color: $secondary-text-color; + border: 1px solid $border-color; + background-color: transparent; + + &:hover, + &:focus, + &:active { + color: $text_color; + border: 1px solid $border-color; + background-color: $primary-shade; + } +} diff --git a/styles/_category.scss b/styles/_category.scss new file mode 100644 index 0000000..34101bc --- /dev/null +++ b/styles/_category.scss @@ -0,0 +1,58 @@ +/***** Category pages *****/ +.category { + &-container { + display: flex; + justify-content: flex-end; + } + + &-content { + @include desktop { + flex: 0 0 80%; + } + + flex: 1; + } +} + +.section-tree { + @include tablet { flex-direction: row; } + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + + .section { + @include tablet { flex: 0 0 45%; /* Two columns for tablet and desktop. Leaving 5% separation between columns */ } + flex: initial; + } + + &-title { + margin-bottom: 0; + + a { color: $text_color; } + } + + .see-all-articles { + display: block; + padding: 15px 0; + } +} + +.article-list { + &-item { + border-bottom: 1px solid $border-color; + font-size: $font-size-bigger; + padding: 15px 0; + + a { color: $text_color; } + + .icon-lock::before { + vertical-align: baseline; + } + } +} + +.icon-star::before { + color: $brand_color; + font-size: 18px; +} diff --git a/styles/_collapsible-nav.scss b/styles/_collapsible-nav.scss new file mode 100644 index 0000000..e2c8072 --- /dev/null +++ b/styles/_collapsible-nav.scss @@ -0,0 +1,97 @@ +/* Navigation element that collapses on mobile */ +.collapsible-nav { + @include tablet { + border: 0; + height: auto; + flex-direction: row; + max-height: none; + } + + border-bottom: 1px solid $border-color; + border-top: 1px solid $border-color; + flex-direction: column; + max-height: 45px; + overflow: hidden; + font-size: $font-size-navigation; +} + +.collapsible-nav-list { + @include tablet { + flex-direction: row; + } + + display: flex; + flex-direction: column; + + li { + @include tablet { + line-height: normal; + margin-right: 30px; + + [dir="rtl"] & { + margin-left: 30px; + margin-right: 0; + } + + a { + text-decoration: none; + padding: 15px 0; + } + } + + color: $text_color; + line-height: 45px; + order: 1; // All elements have the same order + + a { + color: $text_color; + display: block; + } + } + + li:hover { + @include tablet { + border-bottom: 4px solid #ddd; + + a { + padding: 15px 0 11px 0; + text-decoration: none; + } + } + } + + li[aria-selected="true"] { + @include tablet { + border-bottom: 4px solid $brand_color; + order: 1; + padding: 15px 0 11px 0; + } + + order: 0; //Move to top of menu + position: relative; + + a { color: $text_color; } + } + + li[aria-selected="true"]::after { + @extend .icon; + @include tablet { display: none; } + @include vertical-align; + content: "\25BE"; + position: absolute; + right: 0; + + [dir="rtl"] & { + left: 0; + right: auto; + } + } +} + +.collapsible-nav[aria-expanded="true"] { + max-height: none; + + li[aria-selected="true"]::after { + content: "\2715"; + } +} diff --git a/styles/_collapsible-sidebar.scss b/styles/_collapsible-sidebar.scss new file mode 100644 index 0000000..4c5a92a --- /dev/null +++ b/styles/_collapsible-sidebar.scss @@ -0,0 +1,39 @@ +/* Sidebar navigation that collapses on mobile */ +.collapsible-sidebar { + @include desktop { + max-height: none; + padding: 0; + } + flex: 1; + max-height: 45px; + overflow: hidden; + padding: 10px 0; + position: relative; + + &[aria-expanded="true"] { + max-height: none; + + .collapsible-sidebar-title::after { + @include desktop { display: none; } + content: "\2715"; + } + } + + &-title { + margin-top: 0; + + &::after { + @extend .icon; + @include desktop { display: none; } + @include vertical-align; + content: "\25BE"; + position: absolute; + right: 10px; + + [dir="rtl"] & { + left: 10px; + right: auto; + } + } + } +} diff --git a/styles/_comments.scss b/styles/_comments.scss new file mode 100644 index 0000000..09d761c --- /dev/null +++ b/styles/_comments.scss @@ -0,0 +1,161 @@ +/***** Comments *****/ +/* Styles comments inside articles, posts and requests */ +.comment { + border-bottom: 1px solid $border-color; + padding: 20px 0; + + &-heading { + margin-bottom: 5px; + margin-top: 0; + } + + &-overview { + border-bottom: 1px solid $border-color; + border-top: 1px solid $border-color; + padding: 20px 0; + + p { margin-top: 0; } + } + + &-callout { + color: $secondary-text-color; + display: inline-block; + font-weight: $font-weight-light; + font-size: $font-size-small; + margin-bottom: 0; + + a { color: $brand_color; } + } + + + &-sorter { + display: inline-block; + float: right; + + a { + color: $secondary-text-color; + font-weight: $font-weight-light; + font-size: $font-size-small; + text-decoration: none; + } + + [dir="rtl"] & { + float: left; + } + } + + &-wrapper { + display: flex; + position: relative; + + &.comment-official { + @include tablet { padding-top: 20px; } + + border: 1px solid $brand_color; + padding: 40px 20px 20px; // 20 + 20 of official commment badge + } + } + + &-info { + min-width: 0; + padding-right: 20px; + width: 100%; + + [dir="rtl"] & { + padding-right: 0; + padding-left: 20px; + } + } + + &-author { + align-items: flex-end; + display: flex; + flex-wrap: wrap; + margin-bottom: 20px; + + @include tablet { justify-content: space-between; } + } + + &-avatar { + margin-right: 10px; + + [dir="rtl"] & { + margin-left: 10px; + margin-right: 0; + } + } + + &-meta { + flex: 1 0 auto; + } + + &-labels { + flex-basis: 100%; + + @include tablet { + flex-basis: auto; + } + } + + .status-label:not(.status-label-official) { + margin-top: 10px; + + @include tablet { margin-top: 0; } + } + + &-form { + display: flex; + padding-top: 30px; + word-wrap: break-word; + } + + &-container { width: 100%; } + + &-form-controls { + @include tablet { + [dir="ltr"] & { + text-align: right; + } + } + display: none; + margin-top: 10px; + text-align: left; + + input[type="submit"] { + @include desktop { + margin-left: 15px; + [dir="rtl"] & { + margin-left: 0; + margin-right: 15px; + } + } + margin-top: 15px; + } + + input[type="checkbox"] { + margin-right: 5px; + + [dir="rtl"] { margin-left: 5px; } + } + } + + &-ccs { display: none; } + &-ccs + textarea { margin-top: 10px; } + + &-attachments { + margin-top: 10px; + + a { color: $brand_color; } + } + + &-body { + @include text-overflow; + @include content-body; + font-family: $text_font; + line-height: 1.6; + } + + &-mark-as-solved { + display: inline-block; + } +} diff --git a/styles/_community.scss b/styles/_community.scss new file mode 100644 index 0000000..adbdc90 --- /dev/null +++ b/styles/_community.scss @@ -0,0 +1,137 @@ +/***** Community *****/ +.community { + &-hero { + background-image: url($community_background_image); + margin-bottom: 10px; + } + + &-footer { + padding-top: 50px; + text-align: center; + } + + &-featured-posts, + &-activity { + padding-top: 40px; + width: 100%; + } + + &-header { + margin-bottom: 30px; + + h4 { margin-bottom: 0; } + } +} + +.post-to-community { + @include tablet { margin: 0; } + margin-top: 10px; +} + +/* Community topics grid */ +.topics { + max-width: none; + width: 100%; + + &-item { + .meta-group { + justify-content: center; + margin-top: 20px; + } + } +} + +/* Community topic page */ + +.topic-header { + @include tablet { padding-bottom: 10px; } + border-bottom: 1px solid $border-color; + font-size: $font-size-small; + + .dropdown { + @include tablet { + border-top: 0; + display: inline-block; + margin-right: 20px; + padding: 0; + } + + display: block; + border-top: 1px solid $border-color; + padding: 10px 0; + } +} + +.no-posts-with-filter { + margin-top: 20px; + margin-bottom: 20px; +} + +/* Topic, post and user follow button */ +.community-follow { + @include tablet { + margin-bottom: 0; + width: auto; + } + + margin-bottom: 10px; + width: 100%; + + .dropdown { + width: 100%; + } + + [role="button"] { + @include tablet { width: auto;} + + line-height: 30px; + padding: 0 10px 0 15px; + position: relative; + width: 100%; + + &:hover { background-color: $brand_color; } + + &:hover::after, &:focus::after { + border-color: $brand_text_color; + color: $brand_text_color; + } + + &[aria-selected="true"] { + background-color: $brand_color; + color: $brand_text_color; + + &::after { + border-left: 1px solid $brand_text_color; + color: $brand_text_color; + } + + &:hover { + background-color: $hover-button-color; + border-color: $hover-button-color; + } + } + + &::after { + @include tablet { + position: static; + } + + border-left: 1px solid $button-color; + content: attr(data-follower-count); + color: $button-color; + display: inline-block; + font-family: $heading_font; + margin-left: 15px; + padding-left: 10px; + position: absolute; + right: 10px; + + [dir="rtl"] & { + border-left: 0; + border-right: 1px solid $button-color; + margin: 0 10px 0 0; + padding: 0 10px 0 0; + } + } + } +} diff --git a/styles/_footer.scss b/styles/_footer.scss new file mode 100644 index 0000000..f2b7843 --- /dev/null +++ b/styles/_footer.scss @@ -0,0 +1,20 @@ +/***** Footer *****/ +.footer { + border-top: 1px solid $border-color; + margin-top: 60px; + padding: 30px 0; + + a { color: $secondary-text-color; } + + &-inner { + @include max-width-container; + display: flex; + justify-content: space-between; + } + + &-language-selector { + color: $secondary-text-color; + display: inline-block; + font-weight: $font-weight-light; + } +} diff --git a/styles/_forms.scss b/styles/_forms.scss new file mode 100644 index 0000000..ccd290b --- /dev/null +++ b/styles/_forms.scss @@ -0,0 +1,109 @@ +/***** Forms *****/ + +.form { + max-width: 650px; +} + +.form-field ~ .form-field { + margin-top: 25px; +} + +.form-field label { + display: block; + font-size: $font-size-small; + margin-bottom: 5px; +} + +.form-field input { + border: 1px solid $border-color; + border-radius: 4px; + padding: 10px; + width: 100%; + + &:focus { border: 1px solid $brand_color; } +} + +.form-field input[type="text"] { + border: 1px solid $border-color; + border-radius: 4px; + + &:focus { border: 1px solid $brand_color; } +} + +.form-field input[type="checkbox"] { + width: auto; +} + +// Select box +.form-field .nesty-input { + border-radius: 4px; + height: 40px; + line-height: 40px; + outline: none; + vertical-align: middle; + + &:focus { + border: 1px solid $brand_color; + text-decoration: none; + } +} + +.form-field .hc-multiselect-toggle:focus { + outline: none; + border: 1px solid $brand_color; + text-decoration: none; +} + +.form-field textarea { + vertical-align: middle; +} + +.form-field input[type="checkbox"] + label { + margin: 0 0 0 10px; +} + +.form-field.required > label::after { + content: "*"; + color: #f00; + margin-left: 2px; +} + +.form-field p { + color: $secondary-text-color; + font-size: 12px; + margin: 5px 0; +} + +[data-loading="true"] input, +[data-loading="true"] textarea { + background: transparent url($assets-loader-gif) 99% 50% no-repeat; + background-size: 16px 16px; +} + +.form footer { + margin-top: 40px; + padding-top: 30px; +} + +.form footer a { + color: $secondary-text-color; + cursor: pointer; + margin-right: 15px; +} + +.form .suggestion-list { + font-size: $font-size-small; + margin-top: 30px; + + label { + border-bottom: 1px solid $border-color; + display: block; + padding-bottom: 5px; + } + + li { + padding: 10px 0; + + a:visited { color: $visited-link-color; } + } +} diff --git a/styles/_header.scss b/styles/_header.scss new file mode 100644 index 0000000..4d33704 --- /dev/null +++ b/styles/_header.scss @@ -0,0 +1,87 @@ +/***** Header *****/ +$header-height: 71px; + +.header { + @include max-width-container; + position: relative; + align-items: center; + display: flex; + height: $header-height; + justify-content: space-between; +} + +.logo img { + max-height: 37px; +} + +.user-nav { + @include tablet { position: relative; } + display: inline-block; + position: absolute; + white-space: nowrap; + + &[aria-expanded="true"] { + background-color: #fff; + box-shadow: 0 0 4px 0 rgba(0, 0, 0, .15), 0 4px 10px 0 rgba(0, 0, 0, .1); + border: solid 1px #ddd; + right: 0; + left: 0; + top: $header-height; + z-index: 1; + + > a { + display: block; + margin: 20px; + } + } +} + +.nav-wrapper { + a { + @include tablet { + display: inline-block; + } + + border: 0; + color: $link_color; + display: none; + font-size: 14px; + padding: 0 20px 0 0; + width: auto; + + [dir="rtl"] & { padding: 0 0 0 20px;} + + &:hover, + &:focus, + &:active { + background-color: transparent; + color: $link_color; + text-decoration: underline; + } + + &.login { display: inline-block; } + } + + .icon-menu { + @include tablet { display: none; } + border: 0; + color: $link_color; + cursor: pointer; + display: inline-block; + margin-right: 10px; + padding: 0; + width: auto; + + [dir="rtl"] & { + margin-left: 10px; + margin-right: 0; + } + + &:hover, + &:focus, + &:active { + background-color: transparent; + color: $link_color; + } + } +} diff --git a/styles/_hero.scss b/styles/_hero.scss new file mode 100644 index 0000000..bb89c3e --- /dev/null +++ b/styles/_hero.scss @@ -0,0 +1,16 @@ +/***** Hero component *****/ +.hero { + background-image: url($homepage_background_image); + background-position: center; + background-size: cover; + height: 300px; + padding: 0 20px; + text-align: center; + width: 100%; + + &-inner { + @include vertical-align; + max-width: 610px; + margin: 0 auto; + } +} diff --git a/styles/_home-page.scss b/styles/_home-page.scss new file mode 100644 index 0000000..2278072 --- /dev/null +++ b/styles/_home-page.scss @@ -0,0 +1,78 @@ +/***** Homepage *****/ + +.section { + @include tablet { + margin-bottom: 60px; + } + + margin-bottom: 40px; +} + +.section h2 { + margin-bottom: 10px; + text-align: center; +} + +/***** Promoted articles *****/ + +.promoted-articles { + @include desktop { flex-direction: row; } + display: flex; + flex-direction: column; + flex-wrap: wrap; + + &-item { + @include desktop { + align-self: flex-end; + flex: 0 0 auto; + margin-right: 30px; + width: 33%; /* Three columns on desktop */ + + [dir="rtl"] & { margin: 0 0 0 30px; } + } + + flex: 1 0 auto; + border-bottom: 1px solid $border-color; + padding: 15px 0; + + &:nth-child(3n) { + margin-right: 0; + } + + a { + color: $text_color; + } + + .icon-lock::before { + vertical-align: baseline; + } + + &:last-child { + @include desktop { + border-bottom: 1px solid $border-color; + } + + border: 0; + } + } + +} + +/***** Community section in homepage *****/ +.community { + text-align: center; + + &-image { + min-height: 300px; + background-image: url($community_image); + background-position: center; + background-repeat: no-repeat; + max-width: 100%; + } +} + +.community, +.activity { + border-top: 1px solid $border-color; + padding: 30px 0; +} diff --git a/styles/_icons.scss b/styles/_icons.scss new file mode 100644 index 0000000..dcf3744 --- /dev/null +++ b/styles/_icons.scss @@ -0,0 +1,109 @@ +/***** Icons *****/ + +[class^="icon-"]::before, +[class*=" icon-"]::before, +.icon { + font-family: "copenhagen-icons"; + font-style: normal; + font-weight: normal; + speak: none; + line-height: 1em; + vertical-align: middle; + -webkit-font-smoothing: antialiased; +} + +.icon-lock::before { + content: "\1F512"; +} + +.icon-star::before { + content: "\2605"; +} + +.icon-linkedin::before { + content: "\e900"; +} + +.icon-twitter::before { + content: "\e901"; +} + +.icon-googleplus-::before { + content: "\e902"; +} + +.icon-facebook::before { + content: "\e903"; +} + +.icon-agent::before { + content: "\1F464"; +} + +.icon-close::before { + content: "\2715"; +} + +.icon-arrow-up::before { + content: "\2B06"; +} + +.icon-arrow-down::before { + content: "\2B07"; +} + +.icon-attachments::before { + content: "\1F4CE"; +} + +.icon-comments::before { + content: "\1F4AC"; +} + +.icon-search::before { + content: "\1F50D"; +} + +.icon-vote::before { + content: "\1F44D"; +} + +.icon-handle::before { + content: "\25BE"; +} + +.icon-check::before { + content: "\2713"; +} + +.icon-gear::before { + content: "\2699"; +} + +.icon-menu::before { + content: "\2630"; +} + +.icon-article::before { + content: "\1F4C4"; +} + +.icon-post::before { + content: "\1F4D4"; +} + +.icon-notification-alert::before { + content: "\26A0"; +} + +.icon-notification-error::before { + content: "\00D7"; +} + +.icon-notification-info::before { + content: "\2139"; +} + +.icon-notification-success::before { + content: "\2714"; +} diff --git a/styles/_metadata.scss b/styles/_metadata.scss new file mode 100644 index 0000000..b331a93 --- /dev/null +++ b/styles/_metadata.scss @@ -0,0 +1,19 @@ +/***** Metadata *****/ +.meta-group { + display: block; +} + +.meta-group * { + display: inline; +} + +.meta-data { + color: $secondary-text-color; + font-size: $font-size-small; + font-weight: $font-weight-light; + + &:not(:last-child)::after { + content: "\00B7"; + margin: 0 5px; + } +} diff --git a/styles/_mixins.scss b/styles/_mixins.scss new file mode 100644 index 0000000..b4863d3 --- /dev/null +++ b/styles/_mixins.scss @@ -0,0 +1,91 @@ +// Mixins +@mixin tablet { + @media (min-width: #{$tablet-width}) { + @content; + } +} + +@mixin desktop { + @media (min-width: #{$desktop-width}) { + @content; + } +} + +@mixin max-width-container { + @media (min-width: #{$max-width-container}) { + padding: 0; + width: 90%; + } + + max-width: $max-width-container; + margin: 0 auto; + padding: 0 5%; +} + +@mixin vertical-align { + position: relative; + top: 50%; + transform: translateY(-50%); +} + +@mixin text-overflow { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + word-break: break-word; +} + +@mixin content-body { + img { + height: auto; + max-width: 100%; + } + + ul, ol { + padding-left: 20px; + list-style-position: outside; + margin: 20px 0 20px 20px; + + [dir="rtl"] & { + padding-right: 20px; + padding-left: 0; + margin-left: 0; + margin-right: 20px; + } + } + + // Sub level list + ul > ul, ol > ol, ol > ul, ul > ol, li > ul, li > ol { + margin: 0; + } + + ul { + list-style-type: disc; + } + + a:visited { color: $visited-link-color; } + + code { + background: $primary-shade; + border: 1px solid $border-color; + border-radius: 3px; + padding: 0 5px; + margin: 0 2px; + } + + pre { + background: $primary-shade; + border: 1px solid $border-color; + border-radius: 3px; + padding: 10px 15px; + overflow: auto; + white-space: pre; + } + + blockquote { + border-left: 1px solid $border-color; + color: $secondary-text-color; + font-style: italic; + padding: 0 15px; + } +} diff --git a/styles/_my-activities.scss b/styles/_my-activities.scss new file mode 100644 index 0000000..4f3b26c --- /dev/null +++ b/styles/_my-activities.scss @@ -0,0 +1,251 @@ +/***** My activities *****/ +.my-activities { + &-nav { + background-color: $secondary-shade; + border: 0; + margin-bottom: 20px; + } + + &-sub-nav { + @include tablet { + li:hover { border-bottom: 4px solid #ddd; } + } + + background-color: transparent; + border-bottom: 1px solid $border-color; + margin-bottom: 30px; + + li[aria-selected="true"] { border-color: $brand_color; } + } + + &-table { + .striped-list-title { /* My activities tables */ + @include desktop { + margin-bottom: 0; + max-width: 500px; + min-width: 350px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + display: block; + margin-bottom: 10px; + max-width: 350px; + white-space: normal; + } + + thead { + @include tablet { display: table-header-group; } + display: none; + } + + th:first-child, + td:first-child { + @include desktop { width: 500px; } + padding-left: 0; + } + + th:last-child, + td:last-child { + padding-right: 0; + } + + // On mobile, only show the first column + td:not(:first-child) { + @include tablet { display: table-cell; } + + display: none; + } + } +} + +/* Requests table */ +.requests { + &-search { + width: 100%; + } + + &-table-toolbar { + @include tablet { + flex-direction: row; + } + + align-items: flex-end; + display: flex; + flex-direction: column; + + .search { + flex: 1; + width: 100%; + } + + .request-table-filter { + @include tablet { + width: auto; + } + + width: 100%; + } + + .request-filter { + @include tablet { + margin: 0 0 0 30px; + [dir="rtl"] & { margin: 0 30px 0 0; } + } + + display: block; + } + + .request-filter-label { + @include tablet { + margin-top: 0; + } + + font-size: $font-size-small; + margin-top: 30px; + } + + select { + @include tablet { + margin-bottom: 0; + max-width: 300px; + width: auto; + } + + max-height: 40px; + margin-bottom: 30px; + width: 100%; + } + + .organization-subscribe, + .organization-unsubscribe { + @include tablet { + margin-left: 10px; + [dir="rtl"] & { margin: 0 10px 0 0; } + } + + line-height: 40px; + max-height: 40px; + padding: 0 20px; + } + + .organization-unsubscribe { + background-color: $button-color; + color: $brand_text_color; + } + + & + .requests-search-info { + margin-top: 15px; + + &.meta-data::after { + content: ""; + margin: 0; + } + + & + .requests { + margin-top: 20px; + } + } + + & + .requests { + margin-top: 40px; + } + } + + .requests-table { + &-meta { + @include tablet { + display: none; + } + + display: block; + } + + thead { + @include tablet { display: table-header-group; } + display: none; + } + + &-info { + @include tablet { + display: table-cell; + vertical-align: middle; + width: auto; + } + + display: block; + } + + .requests-link { + position: relative; + } + + .requests-sort-symbol { + position: absolute; + left: calc(100% + 3px); + bottom: 0; + font-size: 10px; + } + } +} + +/* Following table */ +.subscriptions { + &-unsubscribe a { + @include tablet { width: auto; } + + background: $button-color; + border-radius: 4px; + color: $brand_text_color; + display: inline-block; + font-size: 12px; + line-height: 2.34; //Taken from Zendesk garden bedrock + padding: 0 20px; + text-align: center; + width: 100%; + + &:hover { + background-color: $hover-button-color; + text-decoration: none; + } + } + + &-table { + td:last-child { + @include tablet { display: table-cell; } + display: block; + } + + td:first-child { + display: flex; + align-items: center; + } + + .user-avatar { + margin-right: 10px; + } + } + + .striped-list-title { + display: inline-block; + vertical-align: middle; + } +} + +/* Contributions table */ +.contributions-table { + td:last-child { + @include tablet { + color: inherit; + font-size: inherit; + font-weight: inherit; + } + + color: $secondary-text-color; + font-size: $font-size-small; + font-weight: $font-weight-light; + } +} + +.no-activities { color: $secondary-text-color; } diff --git a/styles/_page_header.scss b/styles/_page_header.scss new file mode 100644 index 0000000..72e0dd7 --- /dev/null +++ b/styles/_page_header.scss @@ -0,0 +1,47 @@ +// Component made for elements that are separated with space between +.page-header { + + @include tablet { + align-items: baseline; + flex-direction: row; + margin: 0; + } + + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + margin: 10px 0; + + .section-subscribe { + @include tablet { + margin-bottom: 0; + } + + flex-shrink: 0; //Avoid collapsing elements in Safari + margin-bottom: 10px; + } + + h1 { + flex-grow: 1; + margin-bottom: 10px; + } + + &-description { + @include desktop { + flex-basis: 100%; + } + font-style: italic; + font-weight: $font-weight-light; + margin: 0 0 30px 0; + word-break: break-word; + } + + .icon-lock::before { + content: "\1F512"; + font-size: 20px; + position: relative; + left: -5px; + vertical-align: baseline; + } +} diff --git a/styles/_pagination.scss b/styles/_pagination.scss new file mode 100644 index 0000000..9e919d6 --- /dev/null +++ b/styles/_pagination.scss @@ -0,0 +1,62 @@ +/***** Pagination *****/ + +.pagination { + margin: 20px 0; + text-align: center; +} + +.pagination * { + display: inline-block; +} + +.pagination li { + @include tablet { + height: 30px; + width: 30px; + } + + border-radius: 50%; + height: 40px; + float: left; + margin-left: 5px; + width: 40px; + + [dir="rtl"] & { + float: right; + } + + &:hover:not(.pagination-current) { + background-color: #f3f3f3; + + span, a { + color: $text_color; + text-decoration: none; + } + } +} + +.pagination a, .pagination span { + @include tablet { + font-size: $font-size-small; + padding: 5px 12px; + } + + font-size: $font-size-base; + color: $secondary-text-color; + padding: 10px 12px; +} + +.pagination-current { + background-color: $brand_color; + a, span { color: $brand_text_color; } +} + +.pagination-first { + border-radius: 3px 0 0 3px; + [dir="rtl"] & { border-radius: 0 3px 3px 0; } +} + +.pagination-last { + border-radius: 0 3px 3px 0; + [dir="rtl"] & { border-radius: 3px 0 0 3px; } +} diff --git a/styles/_post.scss b/styles/_post.scss new file mode 100644 index 0000000..de2a993 --- /dev/null +++ b/styles/_post.scss @@ -0,0 +1,156 @@ +/***** Post *****/ +/* +* The post grid is defined this way: +* Content | Sidebar +* 70% | 30% +*/ +.post { + @include desktop { + flex: 1 0 70%; + max-width: 70%; + } + + flex: 1; + margin-bottom: 10px; + + &-container { + @include desktop { + flex-direction: row; + } + + display: flex; + flex-direction: column; + } + + &-header { + @include tablet { + align-items: baseline; + flex-direction: row; + } + + align-items: center; + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 10px; + + .status-label { vertical-align: super; } + } + + &-title { + @include tablet { + margin-bottom: 0; + padding-right: 10px; + } + margin-bottom: 20px; + width: 100%; + + h1 { + @include tablet { margin-right: 5px; } + display: inline; + vertical-align: middle; + } + } + + &-author { + align-items: flex-start; + display: flex; + justify-content: space-between; + } + + &-avatar { + margin-bottom: 30px; + } + + &-content { + font-family: $text_font; + line-height: 1.6; + word-break: break-word; + } + + &-info-container { + display: flex; + margin-bottom: 40px; + } + + &-info { + min-width: 0; + padding-right: 20px; + width: 100%; + + [dir="rtl"] & { + padding-right: 0; + padding-left: 20px; + } + } + + &-meta { + display: inline-block; + flex: 1; + margin-left: 10px; + vertical-align: middle; + + [dir="rtl"] & { + margin-left: 0; + margin-right: 10px; + } + } + + &-body { + @include content-body; + } + + &-footer { + align-items: center; + display: flex; + justify-content: space-between; + padding-bottom: 20px; + } + + &-comment-count { + color: $secondary-text-color; + font-weight: $font-weight-light; + + &:hover { + text-decoration: none; + } + + .icon-comments { + color: $brand_color; + content: "\1F4AC"; + display: inline-block; + font-size: 18px; + padding: 5px; + } + } + + &-sidebar { + @include desktop { + border: 0; + flex: 1 0 30%; + padding: 0 0 0 50px; + text-align: initial; + + [dir="rtl"] & { padding: 0 50px 0 0; } + } + + border-top: 1px solid $border-color; + flex: 1; + padding: 30px 0; + text-align: center; + + h5 { + @include desktop { + border-bottom: 1px solid $border-color; + padding-bottom: 20px; + } + + font-weight: $font-weight-semibold; + } + } + + &-comments { + @include desktop { margin-bottom: 0; } + margin-bottom: 20px; + } +} diff --git a/styles/_recent-activity.scss b/styles/_recent-activity.scss new file mode 100644 index 0000000..c36c751 --- /dev/null +++ b/styles/_recent-activity.scss @@ -0,0 +1,87 @@ +/***** Recent activity *****/ + +.recent-activity { + &-header { + margin-bottom: 10px; + text-align: center; + } + + &-list { padding: 0; } + + &-item { + border-bottom: 1px solid $border-color; + overflow: auto; + padding: 20px 0; + } + + &-item-parent { + font-size: $font-size-bigger; + } + + &-item-parent, + &-item-link { + @include tablet { + width: 70%; + margin: 0; + } + + margin: 6px 0; + color: $text_color; + display: inline-block; + width: 100%; + } + + &-item-link { + font-size: 14px; + font-weight: $font-weight-light; + } + + &-item-meta { + @include tablet { + margin: 0; + float: right; + + [dir="rtl"] & { float: left; } + + } + + margin: 15px 0 0 0; + float: none; + } + + &-item-time, + &-item-comment { + color: $secondary-text-color; + display: inline-block; + font-size: $font-size-small; + font-weight: $font-weight-light; + } + + &-item-comment { + padding-left: 5px; + + [dir="rtl"] & { padding: 0 5px 0 0; } + + &::before { + display: inline-block; + } + + span::before { + @extend .icon; + color: $brand_color; + content: "\1F4AC"; + display: inline-block; + font-size: $font-size-base; + padding-right: 3px; + vertical-align: middle; + + [dir="rtl"] & { + padding-left: 3px; + } + } + } + + &-controls { + padding-top: 15px; + } +} diff --git a/styles/_request.scss b/styles/_request.scss new file mode 100644 index 0000000..31567a3 --- /dev/null +++ b/styles/_request.scss @@ -0,0 +1,186 @@ +/***** Request *****/ +.request { + &-container { + @include desktop { + align-items: flex-start; + flex-direction: row; + } + + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + + .comment-container { + min-width: 0; + } + } + + &-breadcrumbs { + @include desktop { margin-bottom: 60px; } + margin-bottom: 40px; + } + + &-main { + flex: 1 0 auto; + order: 1; + + .comment-fields, .request-submit-comment { + display: none; + } + + .comment-fields.shown { display: block; } + .request-submit-comment.shown { display: inline; } + + @include desktop { + flex: 0 0 66%; // 4% spacing + order: 0; + min-width: 0; // Tricky detail to show truncated text https://css-tricks.com/flexbox-truncated-text/ + } + + .comment-form-controls { + display: block; + } + .comment-ccs { display: block; } + + .comment-show-container { + border-radius: 2px; + border: 1px solid $border-color; + cursor: pointer; + display: flex; + padding: 8px 15px; + width: 100%; + + &.hidden { + display: none; + } + + &-content { + align-self: center; + color: $secondary-text-color; + margin-left: 10px; + } + } + + .form-field.comment-ccs { + & > ul { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; + + &[data-hc-focus="true"] { + border: 1px solid $brand_color; + } + } + + & > input[type="text"] { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; + } + } + + .comment-ccs + textarea { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; + + &:focus { + border-top: 1px solid $brand_color; + } + } + + input#mark_as_solved { display: none; } + } + + &-title { + @include desktop { + border-bottom: 1px solid $border-color; + margin-bottom: 0; + max-width: 66%; //Same as main container + padding-bottom: 20px; + } + + width: 100%; + } + + &-sidebar { + @include desktop { + background-color: $primary-shade; + border: 0; + font-size: $font-size-small; + flex: 0 0 auto; + padding: 0 20px; + width: 30%; //IE11 fix + } + + border-bottom: 1px solid $border-color; + border-top: 1px solid $border-color; + flex: 1 0 auto; + order: 0; //Bring to top + + h5 { + @include desktop { + display: none; + } + + font-size: $font-size-base; + font-weight: $font-weight-semibold; + position: relative; + } + } + + &-details { + border-bottom: 1px solid $border-color; + font-size: 0; // To remove whitespace and do a 40%/60% split + margin: 0; + padding-bottom: 20px; + + &:last-child { border: 0; } + + dt, dd { + display: inline-block; + vertical-align: top; + font-size: $font-size-small; + margin: 20px 0 0 0; + } + + dd { + padding: 0 10px; + width: 60%; + + &::after { + content: "\A"; + white-space: pre; + } + } + + dt { + color: $secondary-text-color; + font-weight: $font-weight-light; + width: 40%; + } + + .request-collaborators { + display: inline-block; + } + } + + &-attachments { + dt, dd { + width: 100%; + } + + dd { + margin: 10px 0 0 0; + } + } + + &-form textarea { + min-height: 120px; + } + + &-follow-up { + padding-top: 20px; + } +} diff --git a/styles/_search.scss b/styles/_search.scss new file mode 100644 index 0000000..1077226 --- /dev/null +++ b/styles/_search.scss @@ -0,0 +1,47 @@ +/***** Search field *****/ +.search { + position: relative; + + input[type="search"] { + border: 1px solid $border-color; + border-radius: 30px; + box-sizing: border-box; + color: $field-text-color; + height: 40px; + padding-left: 40px; + padding-right: 20px; + -webkit-appearance: none; + width: 100%; + + [dir="rtl"] & { + padding-right: 40px; + padding-left: 20px; + } + + &:focus { + border: 1px solid $brand_color; + color: $field-text-focus-color; + } + } + + + &::before { + @extend .icon; + @include vertical-align; + background-color: #fff; + color: #777; + content: "\1F50D"; + font-size: 18px; + position: absolute; + left: 15px; + + [dir="rtl"] & { + right: 15px; + left: auto; + } + } + + &-full input[type="search"] { + border: 1px solid #fff; + } +} diff --git a/styles/_search_results.scss b/styles/_search_results.scss new file mode 100644 index 0000000..e421ad4 --- /dev/null +++ b/styles/_search_results.scss @@ -0,0 +1,88 @@ +/***** Search results *****/ +.search-results { + @include desktop { + flex-direction: row; + } + + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: space-between; + + &-column { + @include desktop { + flex: 0 0 45%; + } + + flex: 1; + } + + &-list { + margin-bottom: 25px; + > li { + border-bottom: 1px solid $border-color; + padding: 20px 0; + &:first-child { + border-top: 1px solid $border-color; + } + } + } +} + +.search-result { + + &-description { + margin-top: 15px; + } + + &-votes, + &-meta-count { + color: $secondary-text-color; + display: inline-block; + font-size: $font-size-small; + font-weight: $font-weight-light; + padding: 4px 5px; + position: relative; + + &::before { + @extend .icon; + color: $brand_color; + } + + [dir="ltr"] & { + margin-left: 5px; + &::before { + margin-right: 3px; + } + } + + [dir="rtl"] & { + margin-right: 5px; + &::before { + margin-left: 3px; + } + } + } + + &-votes::before { + content: "\1F44D"; + } + + &-meta-count::before { + content: "\1F4AC"; + } + + .meta-group { + align-items: center; + } + + &-breadcrumbs { + margin: 0; + + li:last-child::after { + content: "·"; + display: inline-block; + margin: 0 5px; + } + } +} diff --git a/styles/_section.scss b/styles/_section.scss new file mode 100644 index 0000000..a19e69b --- /dev/null +++ b/styles/_section.scss @@ -0,0 +1,18 @@ +/***** Section pages *****/ +.section { + &-container { + display: flex; + justify-content: flex-end; + } + + &-content { + @include desktop { + flex: 0 0 80%; + } + flex: 1; + } + + &-subscribe { + .dropdown-toggle::after { display: none; } + } +} diff --git a/styles/_share.scss b/styles/_share.scss new file mode 100644 index 0000000..96c255f --- /dev/null +++ b/styles/_share.scss @@ -0,0 +1,48 @@ +/***** Social share links *****/ + +.share { + padding: 0; + white-space: nowrap; +} + +.share li, .share a { + display: inline-block; +} + +.share a { + border-radius: 50%; + height: 25px; + line-height: 25px; + overflow: hidden; + width: 25px; +} + +.share a::before { + @extend .icon; + color: $secondary-text-color; + display: block; + font-size: 23px; + text-align: center; + width: 100%; +} + +.share a:hover { + text-decoration: none; + &::before { color: $brand_color; } +} + +.share-twitter::before { + content: "\e901"; +} + +.share-facebook::before { + content: "\e903"; +} + +.share-linkedin::before { + content: "\e900"; +} + +.share-googleplus::before { + content: "\e902"; +} diff --git a/styles/_status-label.scss b/styles/_status-label.scss new file mode 100644 index 0000000..7039163 --- /dev/null +++ b/styles/_status-label.scss @@ -0,0 +1,86 @@ +/***** Status labels *****/ +/* Styles labels used in posts, articles and requests */ +.status-label { + background-color: #1eb848; + border-radius: 4px; + color: #fff; + font-size: 12px; + margin-right: 2px; + padding: 3px 10px; + vertical-align: middle; + white-space: nowrap; + display: inline-block; + + &:hover, + &:active, + &:focus { + text-decoration: none; + } + + &-pinned, + &-featured, + &-official { + background-color: $brand_color; + } + + &-official { + border-radius: 0; + margin-right: 0; + position: absolute; + right: 0; + text-align: center; + top: 0; + width: 100%; + + @include tablet { + border-radius: 0 0 4px 4px; + right: 30px; + width: auto; + } + + [dir="rtl"] & { + left: 30px; + right: auto; + } + } + + &-pending, + &-not-planned { + background-color: #eee; + color: $secondary-text-color; + } + + &-pending { + text-align: center; + } + + &-open { + background-color: #cc3340; + } + + + &-closed { + background-color: #ddd; + } + + &-solved { + background-color: #999; + } + + &-new { + background-color: #ffd12a; + } + + &-hold { + background-color: #000; + } + + &-open, + &-closed, + &-solved, + &-new, + &-hold, + &-answered { + text-transform: lowercase; // To be consistent with Lotus + } +} diff --git a/styles/_striped_list.scss b/styles/_striped_list.scss new file mode 100644 index 0000000..409ba07 --- /dev/null +++ b/styles/_striped_list.scss @@ -0,0 +1,78 @@ +/***** Striped list *****/ +/* Used in community posts list and requests list */ +.striped-list { + padding: 0; + + &-item { + @include tablet { + align-items: center; + flex-direction: row; + } + + align-items: flex-start; + border-bottom: 1px solid $border-color; + display: flex; + flex-direction: column; + justify-content: flex-end; + padding: 20px 0; + } + + &-info { + flex: 2; + } + + &-title { + color: $link_color; + margin-bottom: 10px; + margin-right: 5px; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } + + &:visited { color: $visited-link-color; } + } + + .meta-group { + margin: 5px 0; + } + + &-count { + @include tablet { + display: flex; + flex: 1; + justify-content: space-around; + } + + color: $secondary-text-color; + font-weight: $font-weight-light; + font-size: $font-size-small; + justify-content: flex-start; + text-transform: capitalize; + } + + &-count-item { + &::after { + @include tablet { display: none; } + + content: "·"; + display: inline-block; + padding: 0 5px; + } + + &:last-child::after { display: none; } + } + + &-number { + @include tablet { + color: $text_color; + display: block; + font-weight: $font-weight-base; + } + + font-weight: $font-weight-light; + text-align: center; + } +} diff --git a/styles/_sub-nav.scss b/styles/_sub-nav.scss new file mode 100644 index 0000000..827af56 --- /dev/null +++ b/styles/_sub-nav.scss @@ -0,0 +1,22 @@ +.sub-nav { + @include tablet { + align-items: baseline; + flex-direction: row; + } + + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 30px; + min-height: 50px; + padding-bottom: 15px; + + //Inner pages search field + input[type="search"] { + @include tablet { + min-width: 300px; + } + + &::after { font-size: $font-size-base; } + } +} diff --git a/styles/_tables.scss b/styles/_tables.scss new file mode 100644 index 0000000..00a2ad1 --- /dev/null +++ b/styles/_tables.scss @@ -0,0 +1,43 @@ +/***** Tables *****/ +.table { + @include tablet { table-layout: auto; } + + width: 100%; + table-layout: fixed; + + th, + th a { + color: $secondary-text-color; + font-size: $font-size-small; + font-weight: $font-weight-light; + text-align: left; + + [dir="rtl"] & { text-align: right; } + } + + tr { + @include tablet { display: table-row; } + + border-bottom: 1px solid $border-color; + display: block; + padding: 20px 0; + } + + td { + @include tablet { + display: table-cell; + } + + display: block; + } + + td, th { + @include desktop { + padding: 20px 30px; + } + @include tablet { + padding: 10px 20px; + height: 60px; + } + } +} diff --git a/styles/_user-profiles.scss b/styles/_user-profiles.scss new file mode 100644 index 0000000..076eaa1 --- /dev/null +++ b/styles/_user-profiles.scss @@ -0,0 +1,581 @@ +/* User Profiles */ + +// Header + +.profile-header { + padding: 30px 0; + background-color: $primary-shade; +} + +.profile-header .container { + display: flex; + flex-wrap: wrap; + + @include tablet { + flex-wrap: nowrap; + } +} + +.profile-header .profile-info { + flex-basis: 100%; + display: flex; + flex-wrap: wrap; + min-width: 0; +} + +.profile-avatar { + position: relative; + line-height: 0; + align-self: center; + margin-right: 10px; + + [dir="rtl"] & { + margin-left: 10px; + margin-right: 0; + } +} + +.profile-avatar .user-avatar { + width: 65px; + height: 65px; +} + +.profile-avatar .icon-agent::before { + bottom: 0; + right: 0; +} + +.profile-header .basic-info { + @include text-overflow; + display: flex; + flex-direction: column; + justify-content: center; + flex-grow: 1; + flex-basis: 0; + min-width: 0; + + .name { + margin: 0; + } +} + +.profile-header .options { + display: flex; + flex-basis: 100%; + margin-top: 12px; + align-items: flex-start; + flex-wrap: wrap; + + @include tablet { + flex-wrap: nowrap; + flex-basis: auto; + margin-top: 0; + margin-left: 10px; + + [dir="rtl"] & { + margin-left: 0; + margin-right: 10px; + } + + > :not(:last-child) { + margin-bottom: 0; + margin-right: 10px; + + [dir="rtl"] & { + margin-left: 10px; + margin-right: 0; + } + } + } +} + +.profile-header .options [data-action="edit-profile"] { + background-color: $brand_color; + border: 0; + color: $brand_text_color; + line-height: normal; + padding: 8px 20px; + outline-color: $brand_color; +} + +.profile-header .description { + @include text-overflow; + margin: 15px 0; + flex-basis: 100%; +} + +// Stats + +.profile-stats { + font-size: $font-size-small; + display: flex; + flex-direction: column; + flex-basis: 100%; +} + +.profile-stats .stat { + display: flex; + margin-bottom: 10px; +} + +.profile-stats .stat-label { + color: $secondary-text-color; + font-weight: $font-weight-light; + flex: 0 0 100px; + margin-right: 10px; + + [dir="rtl"] & { + margin-left: 10px; + margin-right: 0; + } +} + +.profile-stats-activity { + border-top: solid 1px #ddd; + margin-top: 15px; + + @include tablet { + border-top: 0; + flex-direction: row; + } +} + +.profile-stats-activity .stat { + @include tablet { + flex-direction: column; + } +} + +.profile-stats-activity .stat:first-child { + margin-top: 10px; + + @include tablet { + margin-top: 0; + } +} + +.profile-stats-activity .stat:not(:last-child) { + @include tablet { + margin-right: 40px; + + [dir="rtl"] & { + margin-left: 40px; + margin-right: 0; + } + } +} + +.profile-stats-activity .stat-label { + @include tablet { + flex: 0 1 auto; + } +} + +.profile-stats-counters { + border-bottom: solid 1px #ddd; + + @include tablet { + flex: 0 0 200px; + border-bottom: 0; + margin-left: 40px; + + [dir="rtl"] & { + margin-left: 0; + margin-right: 40px; + } + } + + @include desktop { + flex: 0 0 270px; + margin-left: 60px; + + [dir="rtl"] & { + margin-right: 60px; + margin-left: 0; + } + } +} + +.profile-stats-counters .stat { + @include tablet { + flex-direction: column; + } + + @include desktop { + flex-direction: row; + } +} + +.profile-stats-counters .stat:not(:last-child) { + @include tablet { + margin-bottom: 15px; + } +} + +.profile-stats-counters .stat-label { + @include tablet { + flex: 0 1 auto; + } + + @include desktop { + flex: 0 0 100px; + } +} + +.profile-private-badge { + flex-basis: 100%; + border: solid 1px $brand_color; + border-radius: 4px; + color: $brand_color; + padding: 5px 20px; + font-size: 12px; + text-align: center; + + &::after { + content: "\1f512"; + margin-left: 5px; + font-family: "copenhagen-icons"; + vertical-align: middle; + line-height: 15px; + } + + @include tablet { + flex-basis: auto; + } +} + +// Navigation + +.profile-nav { + background-color: $secondary-shade; + border: 0; + margin-bottom: 37px; +} + +// Sections + +.profile-section { + width: 100%; + + @include desktop { + width: calc(100% - 330px); + } +} + +.profile-section-header { + display: flex; + flex-wrap: wrap; +} + +.profile-section-title { + flex-basis: 100%; + margin-bottom: 0; +} + +.profile-section-description { + flex-basis: 100%; + padding: 10px 0; + color: $secondary-text-color; + font-weight: $font-weight-light; + font-size: $font-size-small; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + @include tablet { + flex: 1 0 50%; + padding-bottom: 0; + } +} + +.profile-section-sorter { + flex-basis: 100%; + border-top: solid 1px #eee; + font-size: $font-size-small; + + .dropdown-toggle { + padding: 10px 0; + width: 100%; + } + + .dropdown-toggle::after { + position: absolute; + right: 0; + + [dir="rtl"] & { + left: 0; + right: initial; + } + + @include tablet { + position: relative; + } + } + + @include tablet { + flex: 0 1 auto; + padding-top: 0; + border-top: 0; + margin-left: 20px; + + [dir="rtl"] & { + margin-left: 0; + margin-right: 20px; + } + } +} + +// Profile contribution + +.profile-contribution { + @include text-overflow; + padding: 20px 0; + position: relative; +} + +.profile-contribution-header { + margin-bottom: 5px; +} + +.profile-contribution-title { + margin: 0 0 5px 0; + display: inline; + line-height: 21px; + font-size: 15px; + vertical-align: middle; +} + +.profile-contribution-body { + margin: 10px 0; +} + +// Profile contribution list + +.profile-contribution-list > .profile-contribution { + border-top: 1px solid #eee; + + @include tablet { + padding-left: 30px; + + [dir="rtl"] & { + padding-right: 30px; + padding-left: 0; + } + } +} + +.profile-contribution-list > .profile-contribution:last-child { + border-bottom: 1px solid #eee; +} + +.profile-contribution-list > .profile-contribution::before { + left: 0; + position: absolute; + font-size: 16px; + color: #ccc; + font-family: "copenhagen-icons"; + line-height: 25px; + + [dir="rtl"] & { + right: 0; + } +} + +.profile-contribution-list .profile-contribution-header { + margin-left: 30px; + + [dir="rtl"] & { + padding-right: 30px; + padding-left: 0; + } + + @include tablet { + margin-left: 0; + + [dir="rtl"] & { + padding-right: 0; + } + } +} + +.profile-comments .profile-contribution-breadcrumbs { + margin-left: 30px; + + [dir="rtl"] & { + padding-right: 30px; + padding-left: 0; + } + + @include tablet { + margin-left: 0; + + [dir="rtl"] & { + padding-right: 0; + } + } +} + +// Empty state + +.profile-section .no-activity, +.profile-section .private-activity { + display: block; + margin-top: 40px; + color: #999; +} + +.profile-section .private-activity::before { + content: "\1f512"; + font-family: "copenhagen-icons"; + font-style: normal; + font-size: 12px; + font-weight: normal; + vertical-align: middle; + margin-right: 10px; + + [dir="rtl"] & { + margin-right: 0; + margin-left: 10px; + } +} + +// Activity List + +.profile-activity-list { + margin-top: 25px; +} + +.profile-activity { + position: relative; + padding-bottom: 30px; + + @include tablet { + padding-left: 20px; + + [dir="rtl"] & { + padding-right: 20px; + padding-left: 0; + } + } +} + +.profile-activity:not(:last-child) { + @include tablet { + border-left: 1px solid #ddd; + + [dir="rtl"] & { + border-left: 0; + border-right: 1px solid #ddd; + } + } +} + +.profile-activity-header { + display: flex; + align-items: center; + margin-left: 35px; + + [dir="rtl"] & { + margin-left: 0; + margin-right: 35px; + } + + @include tablet { + margin-left: 0; + + [dir="rtl"] & { + margin-right: 0; + } + } +} + +.profile-activity-header .user-avatar { + width: 40px; + height: 40px; + margin-right: 10px; + min-width: 40px; + align-self: flex-start; + + [dir="rtl"] & { + margin-left: 10px; + margin-right: 0; + } +} + +.profile-activity-description { + @include text-overflow; + margin: 0; + min-width: 0; + width: 100%; +} + +.profile-activity-description span:first-child { + font-weight: $font-weight-semibold; + display: inline; +} + +.profile-activity-contribution { + padding: 20px; + margin-top: 10px; + border-radius: 8px; + background-color: $primary-shade; + + @include tablet { + margin-top: 0; + margin-left: 50px; + + [dir="rtl"] & { + margin-left: 0; + margin-right: 50px; + } + } +} + +// Icons + +.profile-activity::before { + position: absolute; + left: 0; + width: 28px; + border-radius: 50%; + content: ""; + background-size: 14px 14px; + background-repeat: no-repeat; + background-color: $background_color; + background-position: 50% 50%; + text-align: center; + line-height: 40px; + font-size: 16px; + color: #ccc; + font-family: "copenhagen-icons"; + + [dir="rtl"] & { + right: 0; + } + + @include tablet { + left: -14px; + + [dir="rtl"] & { + right: -14px; + } + } +} + +// Icons + +.profile-articles > .profile-contribution::before, +.profile-activity-list > li[class$="-article"]::before { + content: "\1f4c4"; +} + +.profile-posts > .profile-contribution::before, +.profile-activity-list > li[class$="-post"]::before { + content: "\1f4d4"; +} + +.profile-comments > .profile-contribution::before, +.profile-activity-list > li[class$="-comment"]::before { + content: "\1f4ac"; + line-height: 35px; +} diff --git a/styles/_user.scss b/styles/_user.scss new file mode 100644 index 0000000..d3b01f6 --- /dev/null +++ b/styles/_user.scss @@ -0,0 +1,77 @@ +/***** User info in header *****/ +.user-info { + display: inline-block; + + .dropdown-toggle::after { + @include tablet { display: inline-block;} + display: none; + } + + > [role="button"] { + border: 0; + color: $link_color; + min-width: 0; + padding: 0; + white-space: nowrap; + + &:hover, + &:focus { + color: $link_color; + background-color: transparent; + } + + &::after { + color: $link_color; + padding-right: 15px; + + [dir="rtl"] & { + padding-left: 15px; + padding-right: 0; + } + } + } +} + +// Selector is this strong to override the styles set with ids +#user #user-name { + @include tablet { display: inline-block; } + display: none; + font-size: 14px; + + &:hover { text-decoration: underline; } +} + +/***** User avatar *****/ +.user-avatar { + height: 25px; + width: 25px; + border-radius: 50%; + display: inline-block; + vertical-align: middle; +} + +.avatar { + display: inline-block; + position: relative; + + img { + height: 40px; + width: 40px; + } + + .icon-agent::before { + background-color: $brand_color; + border: 2px solid #fff; + border-radius: 50%; + bottom: -4px; + color: $brand_text_color; + content: "\1F464"; + font-size: 14px; + height: 14px; + line-height: 14px; + position: absolute; + right: -2px; + text-align: center; + width: 14px; + } +} diff --git a/styles/_variables.scss b/styles/_variables.scss new file mode 100644 index 0000000..a4a66a3 --- /dev/null +++ b/styles/_variables.scss @@ -0,0 +1,41 @@ +// Variables + +// Colors +$brand_color: #0072ef !default; +$brand_text_color: #fff !default; //Color for text with an accent color background +$text_color: #333 !default; +$link_color: #0072ef !default; +$background_color: #fff !default; + +$visited-link-color: zass-darken($link_color, 20%); +$hover-button-color: zass-darken($brand_color, 20%); +$secondary-text-color: zass-lighten($text_color, 20%); + +$primary-shade: zass-darken($background_color, 3%); //#f8f8f8 for the default background_color +$secondary-shade: zass-darken($background_color, 5%); //#f2f2f2 for the default background_color + +$font-size-bigger: 16px; +$font-size-base: 15px; +$font-size-navigation: 14px; +$font-size-small: 13px; +$font-size-smaller: 11px; + +$border-color: #ddd; + +$button-color: $brand_color; + +$input-font-size: 14px; +$field-text-color: #999; +$field-text-focus-color: #555; + +// Breakpoints variables +$tablet-width: 768px; +$desktop-width: 1024px; +$max-width-container: 1160px; + +// Fonts +$heading_font: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif !default; +$text_font: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif !default; +$font-weight-base: 400; +$font-weight-light: 300; +$font-weight-semibold: 600; diff --git a/styles/_vote.scss b/styles/_vote.scss new file mode 100644 index 0000000..5d21cb8 --- /dev/null +++ b/styles/_vote.scss @@ -0,0 +1,54 @@ +/***** Vote *****/ +/* Used in article comments, post comments and post */ +.vote { + display: inline-block; + text-align: center; + width: 35px; + a { + outline: none; + + &:active, + &:hover, + &:focus { + text-decoration: none; + } + } +} + +.vote-sum { + color: $secondary-text-color; + display: block; + margin: 3px 0; + + [dir="rtl"] & { + direction: ltr; + unicode-bidi: bidi-override; + } +} + +.vote-up:hover::before, +.vote-down:hover::before { + color: $brand_color; +} + +.vote-up::before, .vote-down::before { + @extend .icon; + color: $secondary-text-color; + font-size: 24px; +} + +.vote-up::before { + content: "\2B06"; +} + +.vote-down::before { + content: "\2B07"; +} + +.vote-voted::before { + color: $brand_color; +} + +.vote-voted:hover::before { + color: $hover-button-color; +} diff --git a/styles/index.scss b/styles/index.scss new file mode 100644 index 0000000..64c4309 --- /dev/null +++ b/styles/index.scss @@ -0,0 +1,38 @@ +@import "variables"; +@import "mixins"; +@import "base"; +@import "buttons"; +@import "tables"; +@import "forms"; +@import "header"; +@import "user"; +@import "footer"; +@import "breadcrumbs"; +@import "search"; +@import "hero"; +@import "page_header"; +@import "sub-nav"; +@import "blocks"; +@import "home-page"; +@import "recent-activity"; +@import "category"; +@import "section"; +@import "article"; +@import "attachments"; +@import "share"; +@import "comments"; +@import "vote"; +@import "actions"; +@import "community"; +@import "striped_list"; +@import "status-label"; +@import "post"; +@import "collapsible-nav"; +@import "collapsible-sidebar"; +@import "my-activities"; +@import "request"; +@import "pagination"; +@import "metadata"; +@import "icons"; +@import "user-profiles"; +@import "search_results" diff --git a/templates/article_page.hbs b/templates/article_page.hbs new file mode 100644 index 0000000..3938528 --- /dev/null +++ b/templates/article_page.hbs @@ -0,0 +1,229 @@ +

+
+ + +
+ + +
+
+

+ {{article.title}} + {{#if article.internal}} + + {{/if}} +

+ + + + {{#if settings.show_follow_article}} + {{subscribe}} + {{/if}} +
+ + + +
+ + {{#with article}} +
+ {{t 'was_this_article_helpful'}} +
+ {{vote 'up' role='radio' class='button article-vote article-vote-up'}} + {{vote 'down' role='radio' class='button article-vote article-vote-down'}} +
+ + {{vote 'label' class='article-vote-label'}} + +
+ {{/with}} + +
+ {{request_callout}} +
+
+ {{t 'return_to_top'}} +
+
+ +
+ {{#if settings.show_recently_viewed_articles}} + {{recent_articles}} + {{/if}} + {{#if settings.show_related_articles}} + {{related_articles}} + {{/if}} +
+ {{#if settings.show_article_comments}} +
+
+
+

+ {{t 'comments'}} +

+

{{t 'comments_count' count=article.comment_count}}

+ {{#if comments}} + + {{/if}} +
+ +
    + {{#each comments}} +
  • +
    +
    +
    +
    + {{#if author.agent}} + + {{/if}} + +
    +
    + + {{#link 'user_profile' id=author.id}} + {{author.name}} + {{/link}} + + +
      + {{#if editor}} + + + {{else}} + + {{/if}} +
    +
    +
    + {{#with ticket}} + + {{t 'request'}}{{id}} + + {{/with}} + {{#if pending}} + {{t 'pending_approval'}} + {{/if}} +
    +
    + +
    {{body}}
    +
    + +
    +
    + {{vote 'up' role='radio' class='vote-up' selected_class='vote-voted'}} + {{vote 'sum' class='vote-sum'}} + {{vote 'down' role='radio' class='vote-down' selected_class='vote-voted'}} +
    +
    + {{actions}} +
    +
    +
    +
  • + {{/each}} +
+ + {{pagination}} + + {{#form 'comment' class='comment-form'}} +
+ {{user_avatar class='user-avatar'}} +
+
+ {{wysiwyg 'body'}} +
+ {{input type='submit'}} +
+
+ {{/form}} + +

{{comment_callout}}

+
+
+ {{/if}} +
+
+
diff --git a/templates/category_page.hbs b/templates/category_page.hbs new file mode 100644 index 0000000..48289dc --- /dev/null +++ b/templates/category_page.hbs @@ -0,0 +1,56 @@ +
+
+ + +
+
+ + +
+ {{#each sections}} +
+

+ {{name}} +

+ {{#if articles}} +
    + {{#each articles}} +
  • + {{#if promoted}} + + {{/if}} + {{title}} + {{#if internal}} + + {{/if}} +
  • + {{/each}} +
+ {{#if more_articles}} + + {{t 'show_all_articles' count=article_count}} + + {{/if}} + {{else}} + + {{t 'empty'}} + + {{/if}} +
+ {{else}} + + {{t 'empty'}} + + {{/each}} +
+
+
+
diff --git a/templates/community_post_list_page.hbs b/templates/community_post_list_page.hbs new file mode 100644 index 0000000..639b334 --- /dev/null +++ b/templates/community_post_list_page.hbs @@ -0,0 +1,139 @@ +
+
+ {{search submit=false class='search search-full' scoped=settings.scoped_community_search}} +
+
+ +
+ + + + +
+ + + + {{current_filter.label}} + + + {{#each filters}} + + {{name}} + + {{/each}} + + + + + {{current_sorter.label}} + + + {{#each sorters}} + + {{name}} + + {{/each}} + + + +
+ +
    + {{#unless posts}} +
    + {{t 'no_posts_with_filter'}} +
    + {{/unless}} + {{#each posts}} +
  • +
    + + {{title}} + + {{#if pinned}} + {{t 'pinned'}} + {{/if}} + + {{#if featured}} + {{t 'featured'}} + {{/if}} + + {{#is status 'none'}} + {{else}} + {{status_name}} + {{/is}} + + +
      + + {{#if editor}} + + + {{else}} + + {{/if}} +
    +
    + +
    + + {{vote_sum}} + {{t 'vote' count=vote_sum}} + + + {{comment_count}} + {{t 'comment' count=comment_count}} + +
    +
    +
  • + {{/each}} +
+ + {{pagination}} + + {{#if featured_posts}} + + {{/if}} + +
+ {{#if help_center.community_enabled}} + {{recent_activity scope='community'}} + {{/if}} +
+ + +
diff --git a/templates/community_post_page.hbs b/templates/community_post_page.hbs new file mode 100644 index 0000000..23cbd1e --- /dev/null +++ b/templates/community_post_page.hbs @@ -0,0 +1,217 @@ +
+
+ + +
+
+
+
+
+

+ {{post.title}} + {{#if post.internal}} + + {{/if}} +

+ {{#if post.pinned}} + {{t 'pinned'}} + {{/if}} + + {{#if post.featured}} + {{t 'featured'}} + {{/if}} + + {{#is post.status 'none'}} + {{else}} + {{post.status_name}} + {{/is}} +
+ {{#if settings.show_follow_post}} +
{{subscribe}}
+ {{/if}} +
+ + + + {{#if settings.show_post_sharing}} + + {{/if}} +
+ +
+

+ {{t 'comments'}} +

+

{{t 'comments_count' count=post.comment_count}}

+ {{#if comments}} + + {{/if}} +
+ +
    + {{#each comments}} +
  • +
    +
    + {{#if official}} + {{t 'official_comment'}} + {{/if}} + +
    +
    + {{#if author.agent}} + + {{/if}} + +
    +
    + + {{#link 'user_profile' id=author.id}} + {{author.name}} + {{/link}} + + +
      + {{#if editor}} + + + {{else}} + + {{/if}} +
    +
    +
    + {{#with ticket}} + + {{t 'request'}} {{id}} + + {{/with}} + {{#if pending}} + {{t 'pending_approval'}} + {{/if}} +
    +
    + +
    {{body}}
    +
    + +
    + {{#unless official}} +
    + {{vote 'up' role='radio' class='vote-up' selected_class='vote-voted'}} + {{vote 'sum' class='vote-sum'}} + {{vote 'down' role='radio' class='vote-down' selected_class='vote-voted'}} +
    + {{/unless}} +
    + {{actions}} +
    +
    +
    +
  • + {{/each}} +
+ + {{pagination}} + +
+ {{#form 'comment' class='comment-form'}} +
+ {{user_avatar class='user-avatar'}} +
+
+ {{wysiwyg 'body'}} +
+ {{checkbox 'official'}} + {{label 'official'}} + {{input type='submit'}} +
+
+ {{/form}} +
+ +

{{comment_callout}}

+
+ + +
+
diff --git a/templates/community_topic_list_page.hbs b/templates/community_topic_list_page.hbs new file mode 100644 index 0000000..cc7dc99 --- /dev/null +++ b/templates/community_topic_list_page.hbs @@ -0,0 +1,85 @@ +
+
+ {{search submit=false class='search search-full' scoped=settings.scoped_community_search}} +
+
+ +
+ + + + + {{#unless topics}} +

{{t 'no_content'}}

+ {{/unless}} + + + + {{pagination}} + + {{#if featured_posts}} + + {{/if}} + +
+ {{#if help_center.community_enabled}} + {{recent_activity scope='community'}} + {{/if}} +
+ + +
diff --git a/templates/community_topic_page.hbs b/templates/community_topic_page.hbs new file mode 100644 index 0000000..effa144 --- /dev/null +++ b/templates/community_topic_page.hbs @@ -0,0 +1,109 @@ +
+
+ + + +
+

{{topic.description}}

+ {{#if settings.show_follow_topic}} +
+ {{subscribe}} +
+ {{/if}} +
+ +
+ + + + {{current_filter.label}} + + + {{#each filters}} + + {{name}} + + {{/each}} + + + + + {{current_sorter.label}} + + + {{#each sorters}} + + {{name}} + + {{/each}} + + + +
+ +
    + {{#each posts}} +
  • +
    + + {{title}} + + {{#if pinned}} + {{t 'pinned'}} + {{/if}} + + {{#if featured}} + {{t 'featured'}} + {{/if}} + + {{#is status 'none'}} + {{else}} + {{status_name}} + {{/is}} + + +
      + + {{#if editor}} + + + {{else}} + + {{/if}} +
    +
    + +
    + + {{vote_sum}} + {{t 'vote' count=vote_sum}} + + + {{comment_count}} + {{t 'comment' count=comment_count}} + +
    +
    +
  • + {{/each}} +
+ {{pagination}} +
+ + diff --git a/templates/contributions_page.hbs b/templates/contributions_page.hbs new file mode 100644 index 0000000..647b901 --- /dev/null +++ b/templates/contributions_page.hbs @@ -0,0 +1,65 @@ + + +
+
+

{{t 'contributions'}}

+ +
+ + +
+ {{#if contributions}} + + + + + + + + + + + + {{#each contributions}} + + + + + + + + {{/each}} + +
{{t 'title'}}{{t 'type'}}{{t 'vote_sum'}}{{t 'last_activity'}}{{t 'created'}}
+ + {{excerpt title characters=60}} + + {{type}}{{vote_sum}}{{date last_activity_at}}{{date created_at}}
+ {{else}} +

{{t 'no_contributions'}}

+ {{/if}} +
+ + {{pagination}} + +
diff --git a/templates/document_head.hbs b/templates/document_head.hbs new file mode 100644 index 0000000..3df26f4 --- /dev/null +++ b/templates/document_head.hbs @@ -0,0 +1 @@ + diff --git a/templates/error_page.hbs b/templates/error_page.hbs new file mode 100644 index 0000000..a9581c3 --- /dev/null +++ b/templates/error_page.hbs @@ -0,0 +1,21 @@ +
+
+

{{t 'oops'}}

+ + {{#is error 'unauthorized'}} +

{{link 'sign_in'}}

+ {{/is}} + + {{#is error 'forbidden'}} +

{{t 'not_authorized'}}

+ {{/is}} + + {{#is error 'not_found'}} +

{{t 'nonexistent_page'}}

+

{{t 'mistyped_address_or_moved_page'}}

+ {{/is}} + + {{#link 'help_center'}} + {{t 'back_to_homepage'}} + {{/link}} +
diff --git a/templates/footer.hbs b/templates/footer.hbs new file mode 100644 index 0000000..636f91c --- /dev/null +++ b/templates/footer.hbs @@ -0,0 +1,22 @@ + diff --git a/templates/header.hbs b/templates/header.hbs new file mode 100644 index 0000000..f53c471 --- /dev/null +++ b/templates/header.hbs @@ -0,0 +1,15 @@ +
+ + +
diff --git a/templates/home_page.hbs b/templates/home_page.hbs new file mode 100644 index 0000000..1ccb23b --- /dev/null +++ b/templates/home_page.hbs @@ -0,0 +1,71 @@ +
+
+ {{search submit=false instant=settings.instant_search class='search search-full'}} +
+
+ +
+
+
+ + {{pagination}} +
+ + {{#if promoted_articles}} +
+

{{t 'promoted_articles'}}

+ +
+ {{/if}} +
+ + {{#if help_center.community_enabled}} +
+

{{t 'community'}}

+ {{#link 'community' class='community-link'}} + {{t 'join_conversation'}} + {{/link}} + +
+
+ {{/if}} + +
+ {{#if settings.show_recent_activity}} + {{recent_activity}} + {{/if}} +
+
diff --git a/templates/new_community_post_page.hbs b/templates/new_community_post_page.hbs new file mode 100644 index 0000000..48cb29e --- /dev/null +++ b/templates/new_community_post_page.hbs @@ -0,0 +1,49 @@ +
+
+ + +

+ {{t 'what_is_your_post_about'}} +

+ +
+ {{#form 'post' class='new_community_post'}} +
+ {{label 'title'}} + {{input 'title' autofocus=true}} + {{#validate 'title'}} +
+ {{error 'title'}} +
+ {{/validate}} +
+ + {{suggestion_list class='suggestion-list'}} + +
+ {{label 'details'}} + {{wysiwyg 'details'}} + {{#validate 'details'}} +
+ {{error 'details'}} +
+ {{/validate}} +
+ +
+ {{label 'topic'}} + {{select 'topic'}} + {{#validate 'topic'}} +
+ {{error 'topic'}} +
+ {{/validate}} +
+ +
{{input type='submit'}}
+ {{/form}} +
+
diff --git a/templates/new_request_page.hbs b/templates/new_request_page.hbs new file mode 100644 index 0000000..dac6471 --- /dev/null +++ b/templates/new_request_page.hbs @@ -0,0 +1,22 @@ +
+
+ + +

+ {{t 'submit_a_request'}} + {{#if follow_up}} + + {{/if}} +

+ +
+ {{request_form}} +
+ + {{chat}} +
diff --git a/templates/request_page.hbs b/templates/request_page.hbs new file mode 100644 index 0000000..c6a254e --- /dev/null +++ b/templates/request_page.hbs @@ -0,0 +1,225 @@ + + +
+
{{breadcrumbs}}
+ +

{{request.subject}}

+ +
+
+ {{satisfaction}} +
    + {{#each comments}} +
  • +
    +
    +
    +
    + {{#if author.agent}} + + {{/if}} + +
    + +
    + + {{#link 'user_profile' id=author.id}} + {{author.name}} + {{/link}} + + +
      + +
    +
    +
    + +
    {{body}}
    + + {{#if attachments}} + + {{/if}} +
    +
    +
  • + {{/each}} +
+ + {{pagination}} + + {{#if comment_callout}} +
+ {{comment_callout}} +
+ {{/if}} + + {{#form 'comment' class='comment-form'}} +
+ {{user_avatar class='user-avatar'}} +
+ +
+
+ + {{t 'add_to_conversation'}} + +
+ +
+ {{#if help_center.request_ccs_enabled}} +
+ {{token_field 'ccs' class='ccs-input'}} +
+ {{/if}} + + {{textarea 'body' rows='7'}} + + {{#if upload}} +
+ {{upload}} +
+ {{/if}} +
+ +
+ {{checkbox 'mark_as_solved'}} + + {{#if request.can_be_marked_as_solved}} + + {{t 'mark_as_solved'}} + + {{/if}} + + + {{input type='submit'}} + +
+
+ {{/form}} +
+ +
+
{{t 'ticket_details'}}
+ {{#if request.followup_source_id}} +
+
{{t 'followup'}}
+
{{link 'request' id=request.followup_source_id}}
+
+ {{/if}} +
+
{{t 'requester'}}
+
{{request.requester.name}}
+ +
{{t 'created'}}
+
{{date request.created_at}}
+ +
{{t 'last_activity'}}
+
{{date request.updated_at}}
+ + {{#if collaborators}} +
{{t 'ccs'}}
+
+
    + {{#each collaborators}} +
  • {{name}}
  • + {{/each}} +
+
+ {{/if}} +
+ +
+ {{#if assignee}} +
{{t 'assignee'}}
+
+ {{assignee.name}} +
+ {{/if}} + +
{{t 'id'}}
+
#{{request.id}}
+ + {{#form 'organization' id='request-organization'}} +
{{t 'organization'}}
+
{{select 'organization'}}
+ {{/form}} + + {{#if group}} +
{{t 'group'}}
+
+ {{group.name}} +
+ {{/if}} + +
{{t 'status'}}
+
+ + {{request.status_name}} + +
+ + {{#if request.type}} +
{{t 'type'}}
+
+ {{request.type_name}} + {{#is request.type 'task'}} + {{t 'task_due_date' due_date=request.due_date}} + {{/is}} +
+ {{/if}} + + {{#if request.priority}} +
{{t 'priority'}}
+
+ {{request.priority_name}} +
+ {{/if}} + + {{#each custom_fields}} +
{{title}}
+
+ {{value}} +
+ {{/each}} +
+ + {{#if attachments}} +
+
{{t 'attachments_heading'}}
+
+ +
+
+ {{/if}} +
+
+ {{chat_about_my_ticket}} +
diff --git a/templates/requests_page.hbs b/templates/requests_page.hbs new file mode 100644 index 0000000..081f8e8 --- /dev/null +++ b/templates/requests_page.hbs @@ -0,0 +1,122 @@ + + +
+
+

{{t 'my_requests'}}

+ +
+ + {{#form 'requests_filter' class='requests-table-toolbar'}} + + {{#if help_center.multiple_organizations_enabled}} +
+ {{label 'organization' for='request-organization-select' class='request-filter request-filter-label'}} + {{select 'organization' id='request-organization-select' class='request-filter'}} +
+ {{/if}} + +
+ {{subscribe}} +
+ +
+ {{label 'status' for='request-status-select' class='request-filter request-filter-label'}} + {{select 'status' id='request-status-select' class='request-filter'}} +
+ {{/form}} + + {{#if query}} + + {{else}} + {{#unless requests}} +

{{t 'no_requests'}}

+ {{/unless}} + {{/if}} + +
+ {{#if requests}} + + + + + + + + + + + + + {{#each requests}} + + + + + + + + {{/each}} + +
{{t 'subject'}}{{t 'id'}} + {{#is current_filter.identifier 'my'}} + {{#link 'requests' sort_by='created_at'}}{{t 'created'}}{{/link}} + {{else}} + {{t 'requester'}} + {{/is}} + {{#link 'requests' sort_by='updated_at'}}{{t 'last_activity'}}{{/link}} + {{t 'status'}} +
+ + {{#if subject}} + {{subject}} + {{else}} + {{excerpt description characters=50}} + {{/if}} + + + +
+ + + + {{status_name}} + +
+
#{{id}} + {{#is ../current_filter.identifier 'my'}} + {{date created_at timeago=true}} + {{else}} + {{requester.name}} + {{/is}} + {{date updated_at timeago=true}} + + {{status_name}} + +
+ {{/if}} +
+ + {{pagination}} +
diff --git a/templates/search_results.hbs b/templates/search_results.hbs new file mode 100644 index 0000000..464619c --- /dev/null +++ b/templates/search_results.hbs @@ -0,0 +1,103 @@ +
+
+ + + + +
+
+

+ {{t 'knowledge_base'}} +

+ {{#if article_results}} +
    + {{#each article_results}} +
  • + {{title}} + {{#if vote_sum}} + {{vote_sum}} + {{/if}} +
      +
    • + +
    • + + +
    +
    {{text}}
    +
  • + {{/each}} +
+ {{else}} +

+ {{t 'no_results' query=query}} + {{#link 'help_center'}} + {{t 'browse_knowledge_base'}} + {{/link}} +

+ {{/if}} +
+ + {{#if help_center.community_enabled}} +
+

+ {{t 'community'}} +

+ {{#if post_results}} +
    + {{#each post_results}} +
  • + {{title}} + + {{comment_count}} + +
      +
    • + +
    • + + +
    +
    + {{text}} +
    +
  • + {{/each}} +
+ {{else}} +

+ {{t 'no_results' query=query}} + {{#link 'topics'}} + {{t 'browse_community'}} + {{/link}} +

+ {{/if}} +
+ {{/if}} + +
+ + {{pagination}} +
diff --git a/templates/section_page.hbs b/templates/section_page.hbs new file mode 100644 index 0000000..75612e2 --- /dev/null +++ b/templates/section_page.hbs @@ -0,0 +1,46 @@ +
+
+ + +
+
+ + + + {{#if section.articles}} +
    + {{#each section.articles}} +
  • + {{#if promoted}} + + {{/if}} + {{title}} + {{#if internal}} + + {{/if}} +
  • + {{/each}} +
+ {{else}} + + {{t 'empty'}} + + {{/if}} + + {{pagination}} +
+
+
diff --git a/templates/subscriptions_page.hbs b/templates/subscriptions_page.hbs new file mode 100644 index 0000000..0af8521 --- /dev/null +++ b/templates/subscriptions_page.hbs @@ -0,0 +1,66 @@ + + +
+
+

{{t 'following'}}

+
+ +
+ + + {{current_filter.label}} + + + {{#each filters}} + + {{name}} + + {{/each}} + + +
+ +
+ {{#if subscriptions}} + + + + + + + + + + + {{#each subscriptions}} + + + + + + + {{/each}} + +
{{t 'title'}}{{t 'type'}}{{t 'subscription'}}
+ {{#is type 'user'}} + + {{/is}} + + {{excerpt title characters=60}} + + {{name}}{{subscribe}}{{unsubscribe}}
+ + {{pagination}} + {{else}} +

{{t 'not_following'}}

+ {{/if}} +
+
diff --git a/templates/user_profile_page.hbs b/templates/user_profile_page.hbs new file mode 100644 index 0000000..a6af69a --- /dev/null +++ b/templates/user_profile_page.hbs @@ -0,0 +1,297 @@ +
+
+
+
+ {{#if user.agent}} + + {{/if}} + +
+
+

+ {{#if user.url}} + {{user.name}} + {{else}} + {{user.name}} + {{/if}} +

+
+
+ {{#if private_profile}} + {{t 'private'}} + {{/if}} + {{edit}} +
{{subscribe}}
+
+ + {{#if description}} +

{{description}}

+ {{/if}} + +
    +
  • + {{t 'total_activity'}} + {{total_activity}} +
  • +
  • + {{t 'last_activity'}} + + {{#if last_activity_at}} + {{date last_activity_at timeago=true}} + {{else}} + {{t 'no_activity_yet'}} + {{/if}} + +
  • +
  • + {{t 'member_since'}} + + {{#if member_since}} + {{date member_since format='medium'}} + {{else}} + {{t 'no_activity_yet'}} + {{/if}} + +
  • +
+
+
    +
  • + {{t 'following_users'}} + {{t 'users_count' count=following_count}} +
  • +
  • + {{t 'followed_by'}} + {{t 'users_count' count=follower_count}} +
  • +
  • + {{t 'votes'}} + {{vote_count}} +
  • +
  • + {{t 'subscriptions'}} + {{subscription_count}} +
  • +
+
+
+ +{{#if visible}} + + {{#if member_since}} + + + + {{#is filter_by 'activities'}} +
+
+ + {{#if activities}} + +
+

{{t 'activity_overview'}}

+ {{t 'latest_activity' name=user.name}} +
+ +
    + {{#each activities}} + +
  • +
    + +

    {{label}}

    +
    + + {{#with contribution}} +
    +
    + {{#isnt object_type 'comment'}} +

    {{title}}

    + {{/isnt}} + + {{#isnt status 'none'}} + {{status_name}} + {{/isnt}} + + {{#if pending}} + {{t 'pending_approval'}} + {{/if}} + + {{#if official}} + {{t 'official_comment'}} + {{/if}} +
    + + + +

    {{excerpt body characters=200}}

    + +
      + {{#is object_type 'comment'}} + + {{/is}} + + {{#if editor}} + + + {{else}} + + {{/if}} + {{#each stats}} + + {{/each}} +
    +
    + {{/with}} +
  • + + {{/each}} +
+ + {{/if}} + + {{#unless activities}} + {{t 'no_contributions'}} + {{/unless}} + +
+
+ {{/is}} + + {{#isnt filter_by 'activities'}} +
+
+ + {{#if contributions}} + +
+

{{t filter_by}}

+ {{#if sorters}} + {{sorter_description}} + + + {{current_sorter.label}} + + + {{#each sorters}} + + {{name}} + + {{/each}} + + + {{/if}} +
+ +
    + {{#each contributions}} + +
  • +
    + {{#isnt object_type 'comment'}} +

    {{title}}

    + {{/isnt}} + + {{#isnt status 'none'}} + {{status_name}} + {{/isnt}} + + {{#if pending}} + {{t 'pending_approval'}} + {{/if}} + + {{#if official}} + {{t 'official_comment'}} + {{/if}} +
    + + + +

    {{excerpt body characters=200}}

    + +
      + {{#is object_type 'comment'}} + + {{/is}} + + {{#if editor}} + + + {{else}} + + {{/if}} + {{#each stats}} + + {{/each}} +
    +
  • + + {{/each}} +
+ + {{pagination}} + + {{/if}} + + {{#unless contributions}} + {{t 'no_contributions'}} + {{/unless}} + +
+
+ + {{/isnt}} + + {{/if}} + + {{#unless member_since}} +
+
+ {{t 'no_content_yet'}} +
+
+ {{/unless}} + +{{/if}} + +{{#unless visible}} +
+
+ {{t 'private_activity'}} +
+
+{{/unless}} diff --git a/thumbnail.png b/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..7089f3588561a1d17f5dfc5d275793856b0b8791 GIT binary patch literal 77091 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 xn7*?jxI1DitnrJl>Yu0o-|_!N@xN