From 89d959fe4f1c40cdee953632aaf6e0a717dec561 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 10:52:38 +0100 Subject: [PATCH 01/34] Download all sphinx design examples --- doc/source/python.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 doc/source/python.py diff --git a/doc/source/python.py b/doc/source/python.py new file mode 100644 index 00000000..0601943a --- /dev/null +++ b/doc/source/python.py @@ -0,0 +1,44 @@ +"""Sample module to download examples.""" +from bs4 import BeautifulSoup +import requests + +# specify the URL of the archive here +archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" + + +def get_example_links(): + """Initialize to get examples link.""" + r = requests.get(archive_url) + soup = BeautifulSoup(r.content, "html5lib") + links = soup.findAll("a") + example_links = [ + "https://raw.githubusercontent.com" + link["href"] + for link in links + if link["href"].endswith("txt") + ] + words = [w.replace("/blob/", "/") for w in example_links] + return words + + +def download_example_series(example_links): + """Initialize to download examples.""" + file_name = "some_file.rst" + with open(file_name, "wb") as f: + for link in example_links: + print("Downloading file:%s" % file_name) + r = requests.get(link) + f.write(r.content) + print("%s downloaded!\n" % link) + print("All examples downloaded!") + return + + +# + +if __name__ == "__main__": + + # getting all example links + example_links = get_example_links() + + # download all examples + download_example_series(example_links) From 1bf5a327855c2873a5646e06c8317a6372095fe4 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 12:22:01 +0100 Subject: [PATCH 02/34] Add the examples in doc --- doc/source/conf.py | 1 + doc/source/examples/examples.rst | 307 +++++++++++++++++++++++++++++++ doc/source/examples/index.rst | 10 + doc/source/index.rst | 1 + doc/source/python.py | 11 +- pyproject.toml | 1 + 6 files changed, 326 insertions(+), 5 deletions(-) create mode 100644 doc/source/examples/examples.rst create mode 100644 doc/source/examples/index.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index ce646a1d..e2cc1da6 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -68,6 +68,7 @@ "sphinx.ext.intersphinx", "notfound.extension", "sphinx_copybutton", + "sphinx_design", ] # Intersphinx mapping diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst new file mode 100644 index 00000000..d3d9eeb5 --- /dev/null +++ b/doc/source/examples/examples.rst @@ -0,0 +1,307 @@ +.. article-info:: + :avatar: images/ebp-logo.png + :avatar-link: https://executablebooks.org/ + :avatar-outline: muted + :author: Executable Books + :date: Jul 24, 2021 + :read-time: 5 min read + :class-container: sd-p-2 sd-outline-muted sd-rounded-1 +:bdg:`plain badge` + +:bdg-primary:`primary`, :bdg-primary-line:`primary-line` + +:bdg-secondary:`secondary`, :bdg-secondary-line:`secondary-line` + +:bdg-success:`success`, :bdg-success-line:`success-line` + +:bdg-info:`info`, :bdg-info-line:`info-line` + +:bdg-warning:`warning`, :bdg-warning-line:`warning-line` + +:bdg-danger:`danger`, :bdg-danger-line:`danger-line` + +:bdg-light:`light`, :bdg-light-line:`light-line` + +:bdg-dark:`dark`, :bdg-dark-line:`dark-line` +:bdg-link-primary:`https://example.com` + +:bdg-link-primary-line:`explicit title ` +.. button-link:: https://example.com + +.. button-link:: https://example.com + + Button text + +.. button-link:: https://example.com + :color: primary + :shadow: + +.. button-link:: https://example.com + :color: primary + :outline: + +.. button-link:: https://example.com + :color: secondary + :expand: +.. card:: Card Title + + Card content +.. card-carousel:: 2 + + .. card:: card 1 + + content + + .. card:: card 2 + + Longer + + content + + .. card:: card 3 + + .. card:: card 4 + + .. card:: card 5 + + .. card:: card 6 +.. card:: Card Title + + Header + ^^^ + Card content + +++ + Footer +.. grid:: 2 3 3 4 + + .. grid-item:: + + .. card:: Title + :img-background: images/particle_background.jpg + :class-card: sd-text-black + + Text + + .. grid-item-card:: Title + :img-top: images/particle_background.jpg + + Header + ^^^ + Content + +++ + Footer + + .. grid-item-card:: Title + :img-bottom: images/particle_background.jpg + + Header + ^^^ + Content + +++ + Footer +.. _cards-clickable: + +Cards Clickable +............... + +.. card:: Clickable Card (external) + :link: https://example.com + + The entire card can be clicked to navigate to https://example.com. + +.. card:: Clickable Card (internal) + :link: cards-clickable + :link-type: ref + + The entire card can be clicked to navigate to the ``cards`` reference target. +.. _target: +.. card:: Card Title https://example.com :ref:`link ` + + Card content +.. div:: sd-text-center sd-font-italic sd-text-primary + + Some CSS styled text +.. dropdown:: + + Dropdown content + +.. dropdown:: Dropdown title + + Dropdown content + +.. dropdown:: Open dropdown + :open: + + Dropdown content +.. dropdown:: Title + :name: target + :color: info + :icon: alert + :margin: 1 + :class-container: class-container + :class-title: class-title + :class-body: class-body + + Dropdown content + +:ref:`target`, :ref:`text ` +.. grid:: 1 2 3 4 + :outline: + + .. grid-item:: + + A + + .. grid-item:: + + B + + .. grid-item:: + + C + + .. grid-item:: + + D +.. grid:: 2 + + .. grid-item-card:: + :columns: auto + + A + + .. grid-item-card:: + :columns: 12 6 6 6 + + B + + .. grid-item-card:: + :columns: 12 + + C +.. grid:: 2 + + .. grid-item-card:: Title 1 + + A + + .. grid-item-card:: Title 2 + + B +.. grid:: 2 + :gutter: 1 + + .. grid-item-card:: + + A + + .. grid-item-card:: + + B + +.. grid:: 2 + :gutter: 3 3 4 5 + + .. grid-item-card:: + + A + + .. grid-item-card:: + + B +.. grid:: 1 1 2 2 + :gutter: 1 + + .. grid-item:: + + .. grid:: 1 1 1 1 + :gutter: 1 + + .. grid-item-card:: Item 1.1 + + Multi-line + + content + + .. grid-item-card:: Item 1.2 + + Content + + .. grid-item:: + + .. grid:: 1 1 1 1 + :gutter: 1 + + .. grid-item-card:: Item 2.1 + + Content + + .. grid-item-card:: Item 2.2 + + Content + + .. grid-item-card:: Item 2.3 + + Content +An icon :fas:`spinner;sd-bg-primary sd-bg-text-primary`, some more text. +- A regular icon: :material-regular:`data_exploration;2em`, some more text +- A coloured regular icon: :material-regular:`settings;3em;sd-text-success`, some more text. +- A coloured outline icon: :material-outlined:`settings;3em;sd-text-success`, some more text. +- A coloured sharp icon: :material-sharp:`settings;3em;sd-text-success`, some more text. +- A coloured round icon: :material-round:`settings;3em;sd-text-success`, some more text. +- A coloured two-tone icon: :material-twotone:`settings;3em;sd-text-success`, some more text. +- A fixed size icon: :material-regular:`data_exploration;24px`, some more text. +A coloured icon: :octicon:`report;1em;sd-text-info`, some more text. +.. tab-set:: + + .. tab-item:: Label1 + + Content 1 + + .. tab-item:: Label2 + + Content 2 +.. tab-set-code:: + + .. literalinclude:: ./snippet.py + :language: python + + .. code-block:: javascript + + a = 1; +.. tab-set:: + :class: class-set + + .. tab-item:: Label + :name: target + :selected: + :class-container: class-container + :class-label: class-label + :class-content: class-content + + Content + +:ref:`target`, :ref:`text ` +.. tab-set:: + + .. tab-item:: Label1 + :sync: key1 + + Content 1 + + .. tab-item:: Label2 + :sync: key2 + + Content 2 + +.. tab-set:: + + .. tab-item:: Label1 + :sync: key1 + + Content 1 + + .. tab-item:: Label2 + :sync: key2 + + Content 2 diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst new file mode 100644 index 00000000..a007decd --- /dev/null +++ b/doc/source/examples/index.rst @@ -0,0 +1,10 @@ +======== +Examples +======== +Contains the examples. + +.. toctree:: + :hidden: + :maxdepth: 2 + + examples \ No newline at end of file diff --git a/doc/source/index.rst b/doc/source/index.rst index 5a2fd9de..93cac011 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -10,3 +10,4 @@ Ansys Sphinx Theme documentation |version| getting_started/index.rst user_guide/index.rst + examples/index.rst diff --git a/doc/source/python.py b/doc/source/python.py index 0601943a..9923ed8a 100644 --- a/doc/source/python.py +++ b/doc/source/python.py @@ -1,10 +1,15 @@ """Sample module to download examples.""" +from pathlib import Path + from bs4 import BeautifulSoup import requests # specify the URL of the archive here archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" +this_path = Path(__file__).parents[0].absolute() +example_path = str((this_path / "examples" / "examples.rst").absolute()) + def get_example_links(): """Initialize to get examples link.""" @@ -22,10 +27,8 @@ def get_example_links(): def download_example_series(example_links): """Initialize to download examples.""" - file_name = "some_file.rst" - with open(file_name, "wb") as f: + with open(example_path, "wb") as f: for link in example_links: - print("Downloading file:%s" % file_name) r = requests.get(link) f.write(r.content) print("%s downloaded!\n" % link) @@ -33,8 +36,6 @@ def download_example_series(example_links): return -# - if __name__ == "__main__": # getting all example links diff --git a/pyproject.toml b/pyproject.toml index 4d8d748a..bc9c4020 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ doc = [ "Sphinx==5.3.0", "sphinx-copybutton==0.5.1", "sphinx-notfound-page==0.8.3", + "sphinx-design", ] [project.entry-points."sphinx.html_themes"] From 969e089f389c697e0bc9770cd4b56c00e4732f3d Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 14:41:34 +0100 Subject: [PATCH 03/34] Move the scripts --- .gitignore | 1 + doc/source/examples/examples.rst | 310 +----------------- .../download_examples.py} | 13 +- 3 files changed, 10 insertions(+), 314 deletions(-) rename doc/source/{python.py => scripts/download_examples.py} (74%) diff --git a/.gitignore b/.gitignore index 3c297384..71dcbc6a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ share/python-wheels/ .installed.cfg *.egg MANIFEST +sphinx_examples.rst # PyInstaller # Usually these files are written by a python script from a template diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index d3d9eeb5..de67ca88 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -1,307 +1,3 @@ -.. article-info:: - :avatar: images/ebp-logo.png - :avatar-link: https://executablebooks.org/ - :avatar-outline: muted - :author: Executable Books - :date: Jul 24, 2021 - :read-time: 5 min read - :class-container: sd-p-2 sd-outline-muted sd-rounded-1 -:bdg:`plain badge` - -:bdg-primary:`primary`, :bdg-primary-line:`primary-line` - -:bdg-secondary:`secondary`, :bdg-secondary-line:`secondary-line` - -:bdg-success:`success`, :bdg-success-line:`success-line` - -:bdg-info:`info`, :bdg-info-line:`info-line` - -:bdg-warning:`warning`, :bdg-warning-line:`warning-line` - -:bdg-danger:`danger`, :bdg-danger-line:`danger-line` - -:bdg-light:`light`, :bdg-light-line:`light-line` - -:bdg-dark:`dark`, :bdg-dark-line:`dark-line` -:bdg-link-primary:`https://example.com` - -:bdg-link-primary-line:`explicit title ` -.. button-link:: https://example.com - -.. button-link:: https://example.com - - Button text - -.. button-link:: https://example.com - :color: primary - :shadow: - -.. button-link:: https://example.com - :color: primary - :outline: - -.. button-link:: https://example.com - :color: secondary - :expand: -.. card:: Card Title - - Card content -.. card-carousel:: 2 - - .. card:: card 1 - - content - - .. card:: card 2 - - Longer - - content - - .. card:: card 3 - - .. card:: card 4 - - .. card:: card 5 - - .. card:: card 6 -.. card:: Card Title - - Header - ^^^ - Card content - +++ - Footer -.. grid:: 2 3 3 4 - - .. grid-item:: - - .. card:: Title - :img-background: images/particle_background.jpg - :class-card: sd-text-black - - Text - - .. grid-item-card:: Title - :img-top: images/particle_background.jpg - - Header - ^^^ - Content - +++ - Footer - - .. grid-item-card:: Title - :img-bottom: images/particle_background.jpg - - Header - ^^^ - Content - +++ - Footer -.. _cards-clickable: - -Cards Clickable -............... - -.. card:: Clickable Card (external) - :link: https://example.com - - The entire card can be clicked to navigate to https://example.com. - -.. card:: Clickable Card (internal) - :link: cards-clickable - :link-type: ref - - The entire card can be clicked to navigate to the ``cards`` reference target. -.. _target: -.. card:: Card Title https://example.com :ref:`link ` - - Card content -.. div:: sd-text-center sd-font-italic sd-text-primary - - Some CSS styled text -.. dropdown:: - - Dropdown content - -.. dropdown:: Dropdown title - - Dropdown content - -.. dropdown:: Open dropdown - :open: - - Dropdown content -.. dropdown:: Title - :name: target - :color: info - :icon: alert - :margin: 1 - :class-container: class-container - :class-title: class-title - :class-body: class-body - - Dropdown content - -:ref:`target`, :ref:`text ` -.. grid:: 1 2 3 4 - :outline: - - .. grid-item:: - - A - - .. grid-item:: - - B - - .. grid-item:: - - C - - .. grid-item:: - - D -.. grid:: 2 - - .. grid-item-card:: - :columns: auto - - A - - .. grid-item-card:: - :columns: 12 6 6 6 - - B - - .. grid-item-card:: - :columns: 12 - - C -.. grid:: 2 - - .. grid-item-card:: Title 1 - - A - - .. grid-item-card:: Title 2 - - B -.. grid:: 2 - :gutter: 1 - - .. grid-item-card:: - - A - - .. grid-item-card:: - - B - -.. grid:: 2 - :gutter: 3 3 4 5 - - .. grid-item-card:: - - A - - .. grid-item-card:: - - B -.. grid:: 1 1 2 2 - :gutter: 1 - - .. grid-item:: - - .. grid:: 1 1 1 1 - :gutter: 1 - - .. grid-item-card:: Item 1.1 - - Multi-line - - content - - .. grid-item-card:: Item 1.2 - - Content - - .. grid-item:: - - .. grid:: 1 1 1 1 - :gutter: 1 - - .. grid-item-card:: Item 2.1 - - Content - - .. grid-item-card:: Item 2.2 - - Content - - .. grid-item-card:: Item 2.3 - - Content -An icon :fas:`spinner;sd-bg-primary sd-bg-text-primary`, some more text. -- A regular icon: :material-regular:`data_exploration;2em`, some more text -- A coloured regular icon: :material-regular:`settings;3em;sd-text-success`, some more text. -- A coloured outline icon: :material-outlined:`settings;3em;sd-text-success`, some more text. -- A coloured sharp icon: :material-sharp:`settings;3em;sd-text-success`, some more text. -- A coloured round icon: :material-round:`settings;3em;sd-text-success`, some more text. -- A coloured two-tone icon: :material-twotone:`settings;3em;sd-text-success`, some more text. -- A fixed size icon: :material-regular:`data_exploration;24px`, some more text. -A coloured icon: :octicon:`report;1em;sd-text-info`, some more text. -.. tab-set:: - - .. tab-item:: Label1 - - Content 1 - - .. tab-item:: Label2 - - Content 2 -.. tab-set-code:: - - .. literalinclude:: ./snippet.py - :language: python - - .. code-block:: javascript - - a = 1; -.. tab-set:: - :class: class-set - - .. tab-item:: Label - :name: target - :selected: - :class-container: class-container - :class-label: class-label - :class-content: class-content - - Content - -:ref:`target`, :ref:`text ` -.. tab-set:: - - .. tab-item:: Label1 - :sync: key1 - - Content 1 - - .. tab-item:: Label2 - :sync: key2 - - Content 2 - -.. tab-set:: - - .. tab-item:: Label1 - :sync: key1 - - Content 1 - - .. tab-item:: Label2 - :sync: key2 - - Content 2 +Sphinx design +============= +.. include:: ../scripts/examples.rst diff --git a/doc/source/python.py b/doc/source/scripts/download_examples.py similarity index 74% rename from doc/source/python.py rename to doc/source/scripts/download_examples.py index 9923ed8a..5be9f415 100644 --- a/doc/source/python.py +++ b/doc/source/scripts/download_examples.py @@ -1,4 +1,4 @@ -"""Sample module to download examples.""" +"""Script to download examples.""" from pathlib import Path from bs4 import BeautifulSoup @@ -7,8 +7,9 @@ # specify the URL of the archive here archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" -this_path = Path(__file__).parents[0].absolute() -example_path = str((this_path / "examples" / "examples.rst").absolute()) +THIS_PATH = Path(__file__).parent.resolve() + +example_path = str((THIS_PATH / "examples.rst").absolute()) def get_example_links(): @@ -21,8 +22,8 @@ def get_example_links(): for link in links if link["href"].endswith("txt") ] - words = [w.replace("/blob/", "/") for w in example_links] - return words + raw_link = [w.replace("/blob/", "/") for w in example_links] + return raw_link def download_example_series(example_links): @@ -31,8 +32,6 @@ def download_example_series(example_links): for link in example_links: r = requests.get(link) f.write(r.content) - print("%s downloaded!\n" % link) - print("All examples downloaded!") return From bdd5a640ab04b824fc385aa80f2eeb58daea41eb Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 14:47:27 +0100 Subject: [PATCH 04/34] Update ci/cd --- .github/workflows/ci_cd.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 07e0576b..9dca8310 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -42,6 +42,8 @@ jobs: runs-on: ubuntu-latest needs: doc-style steps: + - name: "Run download examples" + run: python doc/source/scripts/download_examples.py - name: "Run Ansys documentation building action" uses: pyansys/actions/doc-build@v3 with: From 5ac3ee75473a2df18efb8bc536552f2b7cd47e7f Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 15:02:43 +0100 Subject: [PATCH 05/34] Modify workflow --- .github/workflows/ci_cd.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 9dca8310..8a1d1386 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -42,8 +42,17 @@ jobs: runs-on: ubuntu-latest needs: doc-style steps: + - name: "Install Git and checkout the project" + uses: actions/checkout@v3 + + - name: "Install Python ${{ env.MAIN_PYTHON_VERSION }}" + uses: actions/setup-python@v4 + with: + python-version: ${{ env.MAIN_PYTHON_VERSION }} - name: "Run download examples" - run: python doc/source/scripts/download_examples.py + working-directory: doc + run: | + python source/scripts/download_examples.py - name: "Run Ansys documentation building action" uses: pyansys/actions/doc-build@v3 with: From b47b03f5dab06559cab560ce5484fc39ef2232c0 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 15:37:58 +0100 Subject: [PATCH 06/34] Modify the images --- .github/workflows/ci_cd.yml | 3 +++ doc/source/examples/examples.rst | 5 ++++- doc/source/examples/images/ebp-logo.png | Bin 0 -> 11440 bytes .../examples/images/particle_background.jpg | Bin 0 -> 39240 bytes doc/source/examples/index.rst | 2 +- doc/source/scripts/download_examples.py | 2 +- requirements/requirement_script.txt | 2 ++ 7 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 doc/source/examples/images/ebp-logo.png create mode 100644 doc/source/examples/images/particle_background.jpg create mode 100644 requirements/requirement_script.txt diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 8a1d1386..9ea4a33c 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -49,6 +49,9 @@ jobs: uses: actions/setup-python@v4 with: python-version: ${{ env.MAIN_PYTHON_VERSION }} + - name: "Install script dependencies" + run: | + python -m pip install -r requirements/requirement_script.txt - name: "Run download examples" working-directory: doc run: | diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index de67ca88..eb6616b7 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -1,3 +1,6 @@ Sphinx design ============= -.. include:: ../scripts/examples.rst +The rendering of sphinx design with ansys sphinx theme. To use this see +the full document of `sphinx design `_. + +.. include:: ../scripts/sphinx_examples.rst diff --git a/doc/source/examples/images/ebp-logo.png b/doc/source/examples/images/ebp-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9e37db361076568c132603c63886a79344ba29d8 GIT binary patch literal 11440 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≧XD3f`!ViHx8K7UImD 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 literal 0 HcmV?d00001 diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst index a007decd..b8489e02 100644 --- a/doc/source/examples/index.rst +++ b/doc/source/examples/index.rst @@ -1,7 +1,7 @@ ======== Examples ======== -Contains the examples. +This show how the different extensions get rendered in ansys-sphinx-theme. This is for testing purpose. .. toctree:: :hidden: diff --git a/doc/source/scripts/download_examples.py b/doc/source/scripts/download_examples.py index 5be9f415..16820d07 100644 --- a/doc/source/scripts/download_examples.py +++ b/doc/source/scripts/download_examples.py @@ -9,7 +9,7 @@ THIS_PATH = Path(__file__).parent.resolve() -example_path = str((THIS_PATH / "examples.rst").absolute()) +example_path = str((THIS_PATH / "sphinx_examples.rst").absolute()) def get_example_links(): diff --git a/requirements/requirement_script.txt b/requirements/requirement_script.txt new file mode 100644 index 00000000..f69f6d60 --- /dev/null +++ b/requirements/requirement_script.txt @@ -0,0 +1,2 @@ +bs4==0.0.1 +requests==2.28.2 From a85ed66f4f9d96672fc3036b205355d419ba753e Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 17:06:54 +0100 Subject: [PATCH 07/34] Add additional lines --- doc/source/scripts/download_examples.py | 1 + requirements/requirement_script.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/source/scripts/download_examples.py b/doc/source/scripts/download_examples.py index 16820d07..f0dd14bd 100644 --- a/doc/source/scripts/download_examples.py +++ b/doc/source/scripts/download_examples.py @@ -32,6 +32,7 @@ def download_example_series(example_links): for link in example_links: r = requests.get(link) f.write(r.content) + f.write(b"\n") return diff --git a/requirements/requirement_script.txt b/requirements/requirement_script.txt index f69f6d60..d952f5a9 100644 --- a/requirements/requirement_script.txt +++ b/requirements/requirement_script.txt @@ -1,2 +1,3 @@ bs4==0.0.1 +html5lib requests==2.28.2 From 32e087cbc7a668773150aba2f500b5b2f08bc3ba Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Thu, 2 Feb 2023 18:04:50 +0100 Subject: [PATCH 08/34] Add the docs source --- .github/workflows/ci_cd.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 9ea4a33c..fa5a1063 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -53,9 +53,8 @@ jobs: run: | python -m pip install -r requirements/requirement_script.txt - name: "Run download examples" - working-directory: doc run: | - python source/scripts/download_examples.py + python doc/source/scripts/download_examples.py - name: "Run Ansys documentation building action" uses: pyansys/actions/doc-build@v3 with: From 566ef1bf33c213724d9e66786883acba23c59245 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Fri, 3 Feb 2023 10:39:19 +0100 Subject: [PATCH 09/34] Add the scripts inside conf file --- .github/workflows/ci_cd.yml | 13 ------ doc/source/conf.py | 44 ++++++++++++++++++ doc/source/examples/examples.rst | 2 +- doc/source/examples/images/ebp-logo.png | Bin 11440 -> 0 bytes .../examples/images/particle_background.jpg | Bin 39240 -> 33524 bytes doc/source/scripts/download_examples.py | 4 +- pyproject.toml | 3 ++ 7 files changed, 50 insertions(+), 16 deletions(-) delete mode 100644 doc/source/examples/images/ebp-logo.png diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index fa5a1063..07e0576b 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -42,19 +42,6 @@ jobs: runs-on: ubuntu-latest needs: doc-style steps: - - name: "Install Git and checkout the project" - uses: actions/checkout@v3 - - - name: "Install Python ${{ env.MAIN_PYTHON_VERSION }}" - uses: actions/setup-python@v4 - with: - python-version: ${{ env.MAIN_PYTHON_VERSION }} - - name: "Install script dependencies" - run: | - python -m pip install -r requirements/requirement_script.txt - - name: "Run download examples" - run: | - python doc/source/scripts/download_examples.py - name: "Run Ansys documentation building action" uses: pyansys/actions/doc-build@v3 with: diff --git a/doc/source/conf.py b/doc/source/conf.py index e2cc1da6..a2a064a7 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -2,7 +2,10 @@ from datetime import datetime import os +from pathlib import Path +from bs4 import BeautifulSoup +import requests from sphinx.builders.latex import LaTeXBuilder LaTeXBuilder.supported_image_types = ["image/png", "image/pdf", "image/svg+xml"] @@ -19,6 +22,10 @@ watermark, ) +THIS_PATH = Path(__file__).parent.resolve() + +EXAMPLE_PATH = str((THIS_PATH / "examples" / "sphinx_examples.rst").absolute()) + # Project information project = "ansys_sphinx_theme" copyright = f"(c) {datetime.now().year} ANSYS, Inc. All rights reserved" @@ -131,3 +138,40 @@ "body": generate_404(), } notfound_no_urls_prefix = True + +# specify the URL of the archive here +archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" + + +def get_example_links(): + """Initialize to get examples link.""" + r = requests.get(archive_url) + soup = BeautifulSoup(r.content, "html5lib") + links = soup.findAll("a") + example_links = [ + "https://raw.githubusercontent.com" + link["href"] + for link in links + if link["href"].endswith("txt") + ] + raw_link = [w.replace("/blob/", "/") for w in example_links] + return raw_link + + +def download_example_series(example_links): + """Initialize to download examples.""" + with open(EXAMPLE_PATH, "wb") as f: + for link in example_links: + if link.endswith("article-info.txt"): + continue + else: + r = requests.get(link) + f.write(r.content) + f.write(b"\n") + f.write(b"") + return + + +example_links = get_example_links() + +# download all examples +download_example_series(example_links) diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index eb6616b7..e800e5a0 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -3,4 +3,4 @@ Sphinx design The rendering of sphinx design with ansys sphinx theme. To use this see the full document of `sphinx design `_. -.. include:: ../scripts/sphinx_examples.rst +.. include:: sphinx_examples.rst diff --git a/doc/source/examples/images/ebp-logo.png b/doc/source/examples/images/ebp-logo.png deleted file mode 100644 index 9e37db361076568c132603c63886a79344ba29d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11440 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 k{}28HcJ1LQ2=wrw*I-XF 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≧XD3f`!ViHx8K7UImD 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 diff --git a/doc/source/scripts/download_examples.py b/doc/source/scripts/download_examples.py index f0dd14bd..86a6c104 100644 --- a/doc/source/scripts/download_examples.py +++ b/doc/source/scripts/download_examples.py @@ -7,9 +7,9 @@ # specify the URL of the archive here archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" -THIS_PATH = Path(__file__).parent.resolve() +THIS_PATH = Path(__file__).parents[1].resolve() -example_path = str((THIS_PATH / "sphinx_examples.rst").absolute()) +example_path = str((THIS_PATH / "examples" / "sphinx_examples.rst").absolute()) def get_example_links(): diff --git a/pyproject.toml b/pyproject.toml index bc9c4020..361989ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,9 @@ doc = [ "sphinx-copybutton==0.5.1", "sphinx-notfound-page==0.8.3", "sphinx-design", + "bs4==0.0.1", + "html5lib", + "requests==2.28.2", ] [project.entry-points."sphinx.html_themes"] From 5be58a4e352b6e03dd435d153a5cdd77b1f0cda8 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Fri, 3 Feb 2023 12:33:35 +0100 Subject: [PATCH 10/34] Modify workflow --- .github/workflows/ci_cd.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 07e0576b..e37cdb67 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -45,7 +45,8 @@ jobs: - name: "Run Ansys documentation building action" uses: pyansys/actions/doc-build@v3 with: - python-version: ${{ env.MAIN_PYTHON_VERSION }} + python-version: ${{ env.MAIN_PYTHON_VERSION }} + sphinxopts: '-j auto' doc-deploy-development: name: Doc dev version deploy From 335a28f350f6b55c73c44b6155c7776445890dc8 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Mon, 6 Feb 2023 12:18:24 +0100 Subject: [PATCH 11/34] Add the sphinx jinja --- .gitignore | 1 + doc/source/conf.py | 30 +++++++++++++++++------------- doc/source/examples/examples.rst | 16 +++++++++++++++- pyproject.toml | 1 + 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 71dcbc6a..23c0ccad 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,4 @@ cython_debug/ # Sphinx auto-generated doc/source/_autosummary/ +doc/source/examples/sphinx_examples/ diff --git a/doc/source/conf.py b/doc/source/conf.py index d9692a5f..09f0264d 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -24,7 +24,7 @@ THIS_PATH = Path(__file__).parent.resolve() -EXAMPLE_PATH = str((THIS_PATH / "examples" / "sphinx_examples.rst").absolute()) +EXAMPLE_PATH = (THIS_PATH / "examples" / "sphinx_examples").resolve() # Project information project = "ansys_sphinx_theme" @@ -74,6 +74,7 @@ "notfound.extension", "sphinx_copybutton", "sphinx_design", + "sphinx_jinja", ] # Intersphinx mapping @@ -137,9 +138,12 @@ } notfound_no_urls_prefix = True + # specify the URL of the archive here archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" +file_names = [] + def get_example_links(): """Initialize to get examples link.""" @@ -155,21 +159,21 @@ def get_example_links(): return raw_link -def download_example_series(example_links): +def download_example_series(): """Initialize to download examples.""" - with open(EXAMPLE_PATH, "wb") as f: - for link in example_links: - if link.endswith("article-info.txt"): - continue - else: + example_links = get_example_links() + for link in example_links: + file_name = link.split("/")[-1] + if link.endswith("article-info.txt"): + continue + else: + file_path = str((EXAMPLE_PATH / file_name).absolute()) + with open(file_path, "wb") as f: r = requests.get(link) f.write(r.content) f.write(b"\n") - f.write(b"") - return - + file_names.append(file_name) + return file_names -example_links = get_example_links() -# download all examples -download_example_series(example_links) +jinja_contexts = {"examples": {"inputs_examples": download_example_series()}} diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index e800e5a0..a0a35970 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -3,4 +3,18 @@ Sphinx design The rendering of sphinx design with ansys sphinx theme. To use this see the full document of `sphinx design `_. -.. include:: sphinx_examples.rst +.. jinja:: examples + + {% for filename in inputs_examples %} + + {{filename.upper().split('.')[0]}} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + .. literalinclude:: sphinx_examples/{{ filename }} + :language: bash + + This directive renders the above code as: + + .. include:: sphinx_examples/{{ filename }} + + {% endfor %} diff --git a/pyproject.toml b/pyproject.toml index 358042e3..91b38969 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ doc = [ "bs4==0.0.1", "html5lib", "requests==2.28.2", + "sphinx-jinja", ] [project.entry-points."sphinx.html_themes"] From 5295be5f920b8c6c29461db50116321cb0c0bce7 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Mon, 6 Feb 2023 14:07:59 +0100 Subject: [PATCH 12/34] Add the sentance case --- doc/source/examples/examples.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index a0a35970..424be1fc 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -6,8 +6,9 @@ the full document of `sphinx design Date: Mon, 6 Feb 2023 14:41:55 +0100 Subject: [PATCH 13/34] Add the docstrings --- doc/source/conf.py | 18 ++++++++++++------ doc/source/examples/examples.rst | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 09f0264d..d12bb183 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -140,19 +140,25 @@ # specify the URL of the archive here +# Url for sphinx-design archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" file_names = [] def get_example_links(): - """Initialize to get examples link.""" - r = requests.get(archive_url) - soup = BeautifulSoup(r.content, "html5lib") - links = soup.findAll("a") + """Get all the file links from the url. + + Returns + ------- + list + list of links of files. + """ + request = requests.get(archive_url) + soup = BeautifulSoup(request.content, "html5lib").findAll("a") example_links = [ "https://raw.githubusercontent.com" + link["href"] - for link in links + for link in soup if link["href"].endswith("txt") ] raw_link = [w.replace("/blob/", "/") for w in example_links] @@ -160,7 +166,7 @@ def get_example_links(): def download_example_series(): - """Initialize to download examples.""" + """Download the example series and save the file.""" example_links = get_example_links() for link in example_links: file_name = link.split("/")[-1] diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index 424be1fc..da48be87 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -14,7 +14,7 @@ the full document of `sphinx design Date: Mon, 6 Feb 2023 17:02:22 +0100 Subject: [PATCH 14/34] Add example dir --- .gitignore | 1 - doc/source/conf.py | 7 ++++--- doc/source/examples/sphinx_examples/.gitignore | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 doc/source/examples/sphinx_examples/.gitignore diff --git a/.gitignore b/.gitignore index 23c0ccad..71dcbc6a 100644 --- a/.gitignore +++ b/.gitignore @@ -158,4 +158,3 @@ cython_debug/ # Sphinx auto-generated doc/source/_autosummary/ -doc/source/examples/sphinx_examples/ diff --git a/doc/source/conf.py b/doc/source/conf.py index d12bb183..5bffb0fd 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -165,9 +165,8 @@ def get_example_links(): return raw_link -def download_example_series(): +def download_example_series(example_links): """Download the example series and save the file.""" - example_links = get_example_links() for link in example_links: file_name = link.split("/")[-1] if link.endswith("article-info.txt"): @@ -182,4 +181,6 @@ def download_example_series(): return file_names -jinja_contexts = {"examples": {"inputs_examples": download_example_series()}} +example_links = get_example_links() + +jinja_contexts = {"examples": {"inputs_examples": download_example_series(example_links)}} diff --git a/doc/source/examples/sphinx_examples/.gitignore b/doc/source/examples/sphinx_examples/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/doc/source/examples/sphinx_examples/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file From 6da723d5eb4c1fc7101852aab7dc1c3bacdac08a Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 7 Feb 2023 18:13:29 +0100 Subject: [PATCH 15/34] Add the docstrings --- doc/source/conf.py | 67 ++++++++++++++++++++++------------ doc/source/examples/snippet.py | 33 +++++++++++++++++ 2 files changed, 76 insertions(+), 24 deletions(-) create mode 100644 doc/source/examples/snippet.py diff --git a/doc/source/conf.py b/doc/source/conf.py index 5bffb0fd..17bfd7fe 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -3,6 +3,7 @@ from datetime import datetime import os from pathlib import Path +from typing import List from bs4 import BeautifulSoup import requests @@ -143,44 +144,62 @@ # Url for sphinx-design archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" -file_names = [] +def extract_example_links(archive_url: str) -> List[str]: + """ + Extract example links from a specific URL. -def get_example_links(): - """Get all the file links from the url. + Parameters + ---------- + archive_url : str + The URL of the archive to retrieve the example links from. Returns ------- list - list of links of files. + List of example links. """ - request = requests.get(archive_url) - soup = BeautifulSoup(request.content, "html5lib").findAll("a") + response = requests.get(archive_url) + soup = BeautifulSoup(response.content, "html5lib") + links = soup.find_all("a") example_links = [ - "https://raw.githubusercontent.com" + link["href"] - for link in soup - if link["href"].endswith("txt") + "https://raw.githubusercontent.com" + link["href"].replace("/blob/", "/") + for link in links + if link["href"].endswith(".txt") and not "article-info.txt" in link["href"] ] - raw_link = [w.replace("/blob/", "/") for w in example_links] - return raw_link + return example_links + + +def download_and_process_files(example_links: List[str]) -> List[str]: + """Download and process a series of example files. + + This function downloads a series of example files using a + list of links and processes each file. + Parameters + ---------- + example_links : List[str] + List of links to the example files to be downloaded. -def download_example_series(example_links): - """Download the example series and save the file.""" + Returns + ------- + list + List of the names of the processed files. + """ + file_names = [] for link in example_links: file_name = link.split("/")[-1] - if link.endswith("article-info.txt"): - continue - else: - file_path = str((EXAMPLE_PATH / file_name).absolute()) - with open(file_path, "wb") as f: - r = requests.get(link) - f.write(r.content) - f.write(b"\n") - file_names.append(file_name) + file_path = str((EXAMPLE_PATH / file_name).absolute()) + with open(file_path, "wb") as f: + response = requests.get(link) + content = response.content.decode() + lines = content.splitlines() + f.write(b"\n".join([line.replace("target", file_name).encode() for line in lines])) + file_names.append(file_name) return file_names -example_links = get_example_links() +example_links = extract_example_links(archive_url) +file_names = download_and_process_files(example_links) -jinja_contexts = {"examples": {"inputs_examples": download_example_series(example_links)}} +jinja_contexts = {"examples": {"inputs_examples": file_names}} diff --git a/doc/source/examples/snippet.py b/doc/source/examples/snippet.py new file mode 100644 index 00000000..211fa14e --- /dev/null +++ b/doc/source/examples/snippet.py @@ -0,0 +1,33 @@ +"""Sample functions for ansys-sphinx-theme.""" + + +def func(arg1, arg2): + """Summary line . + + Extended description of function. Can span multiple lines and + provides a general overview of the function. + + .. warning:: + Use the ``.. warning::`` directive within the doc-string for any + warnings you would like to explicitly state. For example, if + this method will be deprecated in the next release. + + Parameters + ---------- + arg1 : int + Description of arg1. + arg2 : str + Description of arg2. + + Returns + ------- + bool + Description of return value. + + Examples + -------- + >>> func(1, 'foo') + True + + """ + return True From e22f265606b5d4a65e52b49e1e0a511092bce8d9 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 7 Feb 2023 20:21:46 +0100 Subject: [PATCH 16/34] remove all warnings --- .github/workflows/ci_cd.yml | 1 - doc/source/conf.py | 10 +++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index e37cdb67..975c3438 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -46,7 +46,6 @@ jobs: uses: pyansys/actions/doc-build@v3 with: python-version: ${{ env.MAIN_PYTHON_VERSION }} - sphinxopts: '-j auto' doc-deploy-development: name: Doc dev version deploy diff --git a/doc/source/conf.py b/doc/source/conf.py index 17bfd7fe..dba0beab 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -194,7 +194,15 @@ def download_and_process_files(example_links: List[str]) -> List[str]: response = requests.get(link) content = response.content.decode() lines = content.splitlines() - f.write(b"\n".join([line.replace("target", file_name).encode() for line in lines])) + # Customised only to remove the warnings on docs build. + filtered_lines = [ + line + for line in lines + if not line.startswith("Cards Clickable") and not line.startswith("...............") + ] + f.write( + b"\n".join([line.replace("target", file_name).encode() for line in filtered_lines]) + ) file_names.append(file_name) return file_names From 59908c5efd02462664525ce2e73f40674b9098a7 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 7 Feb 2023 20:24:59 +0100 Subject: [PATCH 17/34] remove all unnecessary files --- doc/source/scripts/download_examples.py | 45 ------------------------- requirements/requirement_script.txt | 3 -- 2 files changed, 48 deletions(-) delete mode 100644 doc/source/scripts/download_examples.py delete mode 100644 requirements/requirement_script.txt diff --git a/doc/source/scripts/download_examples.py b/doc/source/scripts/download_examples.py deleted file mode 100644 index 86a6c104..00000000 --- a/doc/source/scripts/download_examples.py +++ /dev/null @@ -1,45 +0,0 @@ -"""Script to download examples.""" -from pathlib import Path - -from bs4 import BeautifulSoup -import requests - -# specify the URL of the archive here -archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" - -THIS_PATH = Path(__file__).parents[1].resolve() - -example_path = str((THIS_PATH / "examples" / "sphinx_examples.rst").absolute()) - - -def get_example_links(): - """Initialize to get examples link.""" - r = requests.get(archive_url) - soup = BeautifulSoup(r.content, "html5lib") - links = soup.findAll("a") - example_links = [ - "https://raw.githubusercontent.com" + link["href"] - for link in links - if link["href"].endswith("txt") - ] - raw_link = [w.replace("/blob/", "/") for w in example_links] - return raw_link - - -def download_example_series(example_links): - """Initialize to download examples.""" - with open(example_path, "wb") as f: - for link in example_links: - r = requests.get(link) - f.write(r.content) - f.write(b"\n") - return - - -if __name__ == "__main__": - - # getting all example links - example_links = get_example_links() - - # download all examples - download_example_series(example_links) diff --git a/requirements/requirement_script.txt b/requirements/requirement_script.txt deleted file mode 100644 index d952f5a9..00000000 --- a/requirements/requirement_script.txt +++ /dev/null @@ -1,3 +0,0 @@ -bs4==0.0.1 -html5lib -requests==2.28.2 From b374a715abd725cdb908e905d39c703b3c43c42a Mon Sep 17 00:00:00 2001 From: Revathy Venugopal <104772255+Revathyvenugopal162@users.noreply.github.com> Date: Tue, 14 Feb 2023 09:47:04 +0100 Subject: [PATCH 18/34] Update .github/workflows/ci_cd.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jorge Martínez <28702884+jorgepiloto@users.noreply.github.com> --- .github/workflows/ci_cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 21d49aac..56fc3912 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -45,7 +45,7 @@ jobs: - name: "Run Ansys documentation building action" uses: pyansys/actions/doc-build@v3 with: - python-version: ${{ env.MAIN_PYTHON_VERSION }} + python-version: ${{ env.MAIN_PYTHON_VERSION }} doc-deploy-development: name: Doc dev version deploy From 07d2dc7cc97526bb270af6c1b1072fbf1bdcb885 Mon Sep 17 00:00:00 2001 From: Revathy Venugopal <104772255+Revathyvenugopal162@users.noreply.github.com> Date: Tue, 14 Feb 2023 09:58:03 +0100 Subject: [PATCH 19/34] Update doc/source/examples/examples.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jorge Martínez <28702884+jorgepiloto@users.noreply.github.com> --- doc/source/examples/examples.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index da48be87..a6fb397f 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -12,7 +12,7 @@ the full document of `sphinx design Date: Tue, 14 Feb 2023 10:37:23 +0100 Subject: [PATCH 20/34] Add the sphinx card --- .gitignore | 1 - doc/source/conf.py | 13 +++++-------- doc/source/examples/index.rst | 12 +++++++++++- .../examples/{examples.rst => sphinx_design.rst} | 2 +- pyproject.toml | 4 ++-- 5 files changed, 19 insertions(+), 13 deletions(-) rename doc/source/examples/{examples.rst => sphinx_design.rst} (93%) diff --git a/.gitignore b/.gitignore index 71dcbc6a..3c297384 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,6 @@ share/python-wheels/ .installed.cfg *.egg MANIFEST -sphinx_examples.rst # PyInstaller # Usually these files are written by a python script from a template diff --git a/doc/source/conf.py b/doc/source/conf.py index dba0beab..6c047809 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -140,11 +140,6 @@ notfound_no_urls_prefix = True -# specify the URL of the archive here -# Url for sphinx-design -archive_url = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" - - def extract_example_links(archive_url: str) -> List[str]: """ Extract example links from a specific URL. @@ -162,10 +157,11 @@ def extract_example_links(archive_url: str) -> List[str]: response = requests.get(archive_url) soup = BeautifulSoup(response.content, "html5lib") links = soup.find_all("a") + exclude_files = ["article-info.txt"] example_links = [ - "https://raw.githubusercontent.com" + link["href"].replace("/blob/", "/") + f"https://raw.githubusercontent.com{link['href'].replace('/blob/', '/')}" for link in links - if link["href"].endswith(".txt") and not "article-info.txt" in link["href"] + if link["href"].endswith(".txt") and all(file not in link["href"] for file in exclude_files) ] return example_links @@ -207,7 +203,8 @@ def download_and_process_files(example_links: List[str]) -> List[str]: return file_names -example_links = extract_example_links(archive_url) +URL_ARCHIVE = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" +example_links = extract_example_links(URL_ARCHIVE) file_names = download_and_process_files(example_links) jinja_contexts = {"examples": {"inputs_examples": file_names}} diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst index b8489e02..91178882 100644 --- a/doc/source/examples/index.rst +++ b/doc/source/examples/index.rst @@ -3,8 +3,18 @@ Examples ======== This show how the different extensions get rendered in ansys-sphinx-theme. This is for testing purpose. +.. grid:: 2 + + .. grid-item:: + .. card:: sphinx-design + :link: sphinx_design.rst + :link-type: ref + + Examples rendered with sphinx design. + + .. toctree:: :hidden: :maxdepth: 2 - examples \ No newline at end of file + sphinx_design \ No newline at end of file diff --git a/doc/source/examples/examples.rst b/doc/source/examples/sphinx_design.rst similarity index 93% rename from doc/source/examples/examples.rst rename to doc/source/examples/sphinx_design.rst index a6fb397f..882a45c4 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/sphinx_design.rst @@ -9,7 +9,7 @@ the full document of `sphinx design Date: Tue, 14 Feb 2023 10:55:13 +0100 Subject: [PATCH 21/34] Add the sphinx card ref --- doc/source/examples/index.rst | 4 ++-- doc/source/examples/{sphinx_design.rst => sphinx-design.rst} | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) rename doc/source/examples/{sphinx_design.rst => sphinx-design.rst} (96%) diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst index 91178882..3a085620 100644 --- a/doc/source/examples/index.rst +++ b/doc/source/examples/index.rst @@ -7,7 +7,7 @@ This show how the different extensions get rendered in ansys-sphinx-theme. This .. grid-item:: .. card:: sphinx-design - :link: sphinx_design.rst + :link: sphinx-design :link-type: ref Examples rendered with sphinx design. @@ -17,4 +17,4 @@ This show how the different extensions get rendered in ansys-sphinx-theme. This :hidden: :maxdepth: 2 - sphinx_design \ No newline at end of file + sphinx-design \ No newline at end of file diff --git a/doc/source/examples/sphinx_design.rst b/doc/source/examples/sphinx-design.rst similarity index 96% rename from doc/source/examples/sphinx_design.rst rename to doc/source/examples/sphinx-design.rst index 882a45c4..238fe563 100644 --- a/doc/source/examples/sphinx_design.rst +++ b/doc/source/examples/sphinx-design.rst @@ -1,3 +1,5 @@ +.. _sphinx-design: + Sphinx design ============= The rendering of sphinx design with ansys sphinx theme. To use this see From 11a8ba244dbff79734f5bf13315a9c88e8c12618 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 11:51:12 +0100 Subject: [PATCH 22/34] Add the table in examples --- doc/source/examples/index.rst | 12 ++- doc/source/examples/table.rst | 99 +++++++++++++++++++ doc/source/getting_started/index.rst | 2 - src/ansys_sphinx_theme/__init__.py | 3 + .../ansys_sphinx_theme/static/js/table.js | 11 +++ 5 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 doc/source/examples/table.rst create mode 100644 src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst index 3a085620..8bf4304a 100644 --- a/doc/source/examples/index.rst +++ b/doc/source/examples/index.rst @@ -6,15 +6,23 @@ This show how the different extensions get rendered in ansys-sphinx-theme. This .. grid:: 2 .. grid-item:: - .. card:: sphinx-design + .. card:: Sphinx Table :link: sphinx-design :link-type: ref Examples rendered with sphinx design. + .. grid-item:: + .. card:: Table + :link: table + :link-type: ref + + Examples for table with js and rst. + .. toctree:: :hidden: :maxdepth: 2 - sphinx-design \ No newline at end of file + sphinx-design + table \ No newline at end of file diff --git a/doc/source/examples/table.rst b/doc/source/examples/table.rst new file mode 100644 index 00000000..66d76c02 --- /dev/null +++ b/doc/source/examples/table.rst @@ -0,0 +1,99 @@ +.. _table: + +Table +===== +The rendering of table directive with ansys sphinx theme. + +Data table +---------- +Here is the data table. + +.. code:: rst + + .. table:: + :class: datatable + + ===== ===== ======= + A B A and B + ===== ===== ======= + False False False + True False False + False True False + True True True + ===== ===== ======= + +.. table:: + :class: datatable + + ===== ===== ======= + A B A and B + ===== ===== ======= + False False False + True False False + False True False + True True True + ===== ===== ======= + +Longtable-centered +------------------ +Here is the longtable. + +.. code:: rst + + .. table:: + :class: longtable-centered + + +---------------------------+-------------------+ + | | MAPDL Command | + +===========================+===================+ + | **GUI commands** | * ``*ASK`` | + | | | + | **GUI commands** | * ``*ASK`` | + | | | + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + +.. table:: + :class: longtable-centered + + +---------------------------+-------------------+ + | | MAPDL Command | + +===========================+===================+ + | **GUI commands** | * ``*ASK`` | + | | | + | **GUI commands** | * ``*ASK`` | + | | | + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + +Table-centered +-------------- +Here is the table centered. + +.. code:: rst + + .. table:: + :class: table-centered + + +---------------------------+-------------------+ + | | MAPDL Command | + +===========================+===================+ + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + +.. table:: + :class: table-centered + + +---------------------------+-------------------+ + | | MAPDL Command | + +===========================+===================+ + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ + | **GUI commands** | * ``*ASK`` | + +---------------------------+-------------------+ \ No newline at end of file diff --git a/doc/source/getting_started/index.rst b/doc/source/getting_started/index.rst index 6f3d9721..22187f45 100644 --- a/doc/source/getting_started/index.rst +++ b/doc/source/getting_started/index.rst @@ -32,5 +32,3 @@ Consider using the ``conf.py`` for this repository: .. toctree:: :hidden: :maxdepth: 2 - - diff --git a/src/ansys_sphinx_theme/__init__.py b/src/ansys_sphinx_theme/__init__.py index 44eef0ac..ab4f11e2 100644 --- a/src/ansys_sphinx_theme/__init__.py +++ b/src/ansys_sphinx_theme/__init__.py @@ -14,8 +14,10 @@ THEME_PATH = THIS_PATH / "theme" / "ansys_sphinx_theme" STATIC_PATH = THEME_PATH / "static" STYLE_PATH = STATIC_PATH / "css" +JS_PATH = STATIC_PATH / "js" CSS_PATH = STYLE_PATH / "ansys_sphinx_theme.css" TEMPLATES_PATH = THEME_PATH / "_templates" +JS_FILE = JS_PATH / "table.js" # make logo paths available ansys_favicon = str((STATIC_PATH / "ansys-favicon.png").absolute()) @@ -108,6 +110,7 @@ def setup(app: sphinx.application.Sphinx) -> Dict: if not CSS_PATH.exists(): raise FileNotFoundError(f"Unable to locate ansys-sphinx theme at {CSS_PATH.absolute()}") app.add_css_file(str(CSS_PATH.relative_to(STATIC_PATH))) + app.add_js_file(str(JS_FILE.relative_to(STATIC_PATH))) # Add templates for autosummary app.config.templates_path.append(str(TEMPLATES_PATH)) diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js new file mode 100644 index 00000000..e68a37f9 --- /dev/null +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js @@ -0,0 +1,11 @@ +$(document).ready( function () { + $('table.datatable').DataTable(); +} ); + +$(document).ready( function () { + $('table.gridtable').GridTable(); +} ); + +$(document).ready( function () { + $('table.gianttables').GiantTable(); +} ); \ No newline at end of file From 6b51add94b3325f3434ead8978a70a4da14a3240 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 11:54:37 +0100 Subject: [PATCH 23/34] Typo error --- doc/source/examples/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst index 8bf4304a..df4475de 100644 --- a/doc/source/examples/index.rst +++ b/doc/source/examples/index.rst @@ -6,7 +6,7 @@ This show how the different extensions get rendered in ansys-sphinx-theme. This .. grid:: 2 .. grid-item:: - .. card:: Sphinx Table + .. card:: Sphinx design :link: sphinx-design :link-type: ref From 179c4a9e7587138e9736af9ecfe83fa865381338 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 11:57:28 +0100 Subject: [PATCH 24/34] Typo error --- doc/source/examples/table.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/examples/table.rst b/doc/source/examples/table.rst index 66d76c02..e47afec4 100644 --- a/doc/source/examples/table.rst +++ b/doc/source/examples/table.rst @@ -36,7 +36,7 @@ Here is the data table. Longtable-centered ------------------ -Here is the longtable. +Here is the long table. .. code:: rst From b0fc2f472b7444701dd2731c596444c48091da52 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 13:26:12 +0100 Subject: [PATCH 25/34] Add the sphinx styles --- .github/workflows/ci_cd.yml | 2 +- .../ansys_sphinx_theme/static/css/ansys_sphinx_theme.css | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 56fc3912..1cef69e7 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -49,7 +49,7 @@ jobs: doc-deploy-development: name: Doc dev version deploy - if: ${{ github.ref == 'refs/heads/main' }} + # if: ${{ github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest needs: doc-build steps: diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css index 05293e85..0b5c7afd 100644 --- a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css @@ -93,8 +93,9 @@ html[data-theme="light"] { --pst-color-target: rgb(255, 255, 255); /* color for sphinx-gallery-code output*/ --pst-color-codecell: #fafae2; - --pst-color-codeout:var(--pst-color-inline-code); - --pst-color-sig:#0965C8; + --pst-color-codeout: var(--pst-color-inline-code); + --pst-color-sig: #0965C8; + --sd-color-primary : var(--pst-color-text-base) } html[data-theme="dark"] { @@ -296,6 +297,7 @@ Sphinx-design .bd-content .sd-tab-set>input:checked+label, .bd-content .sd-tab-set>input:not(:checked)+label:hover { color: var(--pst-color-text-base); + border-color: var(--pst-color-text-base); } From b5d429bbf789fb4f7206c07c296e6bb0008d92a5 Mon Sep 17 00:00:00 2001 From: Revathy Venugopal <104772255+Revathyvenugopal162@users.noreply.github.com> Date: Tue, 14 Feb 2023 13:27:25 +0100 Subject: [PATCH 26/34] Update src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js --- .../theme/ansys_sphinx_theme/static/js/table.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js index e68a37f9..fc7a88ee 100644 --- a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/js/table.js @@ -1,11 +1,3 @@ $(document).ready( function () { $('table.datatable').DataTable(); } ); - -$(document).ready( function () { - $('table.gridtable').GridTable(); -} ); - -$(document).ready( function () { - $('table.gianttables').GiantTable(); -} ); \ No newline at end of file From 9c1177f34eefb0f45564fbc73332f6f991b3bf81 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 14:10:35 +0100 Subject: [PATCH 27/34] Add the table color --- .../static/css/ansys_sphinx_theme.css | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css index 0b5c7afd..72cfcd03 100644 --- a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css @@ -37,8 +37,8 @@ * * Colors are defined in rgb string way, "red, green, blue" **/ - --ansysGold: 255, 183, 27; /* #FFB71B */ - --ansysBronze: 200, 146, 17; /* #C89211 */ + --ansysGold: rgb(255, 183, 27); /* #FFB71B */ + --ansysBronze: rgb(200, 146, 17); /* #C89211 */ --pythonBlue: 57, 114, 161; /* #3972a1 */ --pst-color-active-navigation: 200, 146, 17; /* --ansysBronze */ @@ -95,7 +95,8 @@ html[data-theme="light"] { --pst-color-codecell: #fafae2; --pst-color-codeout: var(--pst-color-inline-code); --pst-color-sig: #0965C8; - --sd-color-primary : var(--pst-color-text-base) + --sd-color-primary : var(--pst-color-text-base); + --pst-color-table-hover: var(--pst-color-border); } html[data-theme="dark"] { @@ -134,6 +135,7 @@ html[data-theme="dark"] { --pst-color-codecell: #495057; --pst-color-codeout: #f2f4f6; --pst-color-sig:#d6ab1e; + --pst-color-table-hover: var(--pst-color-target); } body { @@ -280,7 +282,6 @@ Sphinx-design color: var(--pst-color-text-base); } - .sd-tab-set>input:checked+label+.sd-tab-content { display: block; font-size: medium; @@ -343,12 +344,12 @@ th { background-color: rgb(255, 183, 27, 0.55); } -tr:nth-child(odd){ +tr:nth-child(odd), tr:nth-child(even){ background-color: var(--pst-color-background); } -tr:nth-child(even){ -background-color: rgb(255, 183, 27, 0.15); +.table tr:hover td { + background-color: var(--pst-color-table-hover); } /* @@ -394,21 +395,20 @@ table.table-centered { } .table-centered th { - background-color: var(--pst-color-border); + background-color: rgb(255, 183, 27, 0.55); text-align: center; } -.table-centered tr:nth-child(odd){ +.table-centered tr:nth-child(odd), .table-centered tr:nth-child(even){ text-align: center; background-color: var(--pst-color-background); } -.table-centered tr:nth-child(even){ - background-color: var(--pst-color-border); +.table-centered tr:hover td { + background-color: var(--pst-color-table-hover); text-align: center; } - /* ######################### longtable-centered @@ -451,7 +451,7 @@ table.longtable-centered { } table.longtable-centered tr:hover td { - background-color: var(--pst-color-border); + background-color: var(--pst-color-table-hover); text-align: center; } @@ -466,18 +466,14 @@ I do not think we will be able to call this class. .dataframe tr{ background-color: var(--pst-color-background); - } +} -.dataframe tr:nth-child(odd){ +.dataframe tr:nth-child(odd), .dataframe tr:nth-child(even){ background-color: var(--pst-color-background) !important; - } - -.dataframe tr:nth-child(even){ - background-color: var(--pst-color-border); } .dataframe tr:hover td { - background-color: var(--pst-color-border); + background-color: var(--pst-color-table-hover); } /* From e467bf8880018f75df150d81a871090f9c4f5adb Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 14:50:38 +0100 Subject: [PATCH 28/34] Add the toml and arrange css styles --- doc/source/conf.py | 7 +- doc/source/examples/sphinx-design.rst | 5 +- doc/source/examples/table.rst | 18 +- pyproject.toml | 2 +- .../static/css/ansys_sphinx_theme.css | 449 +++++++++--------- 5 files changed, 241 insertions(+), 240 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 6c047809..bfa7ad4b 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -140,7 +140,7 @@ notfound_no_urls_prefix = True -def extract_example_links(archive_url: str) -> List[str]: +def extract_example_links(archive_url: str, exclude_files: List[str]) -> List[str]: """ Extract example links from a specific URL. @@ -148,6 +148,8 @@ def extract_example_links(archive_url: str) -> List[str]: ---------- archive_url : str The URL of the archive to retrieve the example links from. + exclude_files : list of str + A list of files to exclude from the returned example links. Returns ------- @@ -157,7 +159,6 @@ def extract_example_links(archive_url: str) -> List[str]: response = requests.get(archive_url) soup = BeautifulSoup(response.content, "html5lib") links = soup.find_all("a") - exclude_files = ["article-info.txt"] example_links = [ f"https://raw.githubusercontent.com{link['href'].replace('/blob/', '/')}" for link in links @@ -205,6 +206,6 @@ def download_and_process_files(example_links: List[str]) -> List[str]: URL_ARCHIVE = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" example_links = extract_example_links(URL_ARCHIVE) -file_names = download_and_process_files(example_links) +file_names = download_and_process_files(example_links, exclude_files=["article-info.txt"]) jinja_contexts = {"examples": {"inputs_examples": file_names}} diff --git a/doc/source/examples/sphinx-design.rst b/doc/source/examples/sphinx-design.rst index 238fe563..c90e91fb 100644 --- a/doc/source/examples/sphinx-design.rst +++ b/doc/source/examples/sphinx-design.rst @@ -2,8 +2,9 @@ Sphinx design ============= -The rendering of sphinx design with ansys sphinx theme. To use this see -the full document of `sphinx design `_. +The rendering of sphinx design with ansys sphinx theme. +To access the full documentation for the sphinx design package, +please refer `sphinx design `_. .. jinja:: examples diff --git a/doc/source/examples/table.rst b/doc/source/examples/table.rst index e47afec4..e7a2b066 100644 --- a/doc/source/examples/table.rst +++ b/doc/source/examples/table.rst @@ -2,11 +2,16 @@ Table ===== -The rendering of table directive with ansys sphinx theme. +The table directive with ansys sphinx theme allows for rendering of tables. +There are different types of tables, such as the data table, longtable-centered, +and table-centered, each serving different purposes. Data table ---------- -Here is the data table. +This is an example of a data table that can be rendered using the table directive. +It consists of three columns representing the variables A, B, and A and B respectively. +Each row represents a different combination of True and False for variables A and B. +The `datatable` class can be used to style the data table. .. code:: rst @@ -36,7 +41,10 @@ Here is the data table. Longtable-centered ------------------ -Here is the long table. +The longtable-centered class can be used to create a table that +spans multiple pages and is centered horizontally. +This is useful for tables that have a large number of rows or columns. +Here is an example of a longtable-centered: .. code:: rst @@ -68,7 +76,9 @@ Here is the long table. Table-centered -------------- -Here is the table centered. +The table-centered class can be used to create a table that is horizontally centered. +This is useful for tables that have only a few columns. +Here is an example of a table-centered: .. code:: rst diff --git a/pyproject.toml b/pyproject.toml index a5091d86..6ee6c79b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ doc = [ "sphinx-notfound-page==0.8.3", "sphinx-design==0.3.0", "bs4==0.0.1", - "html5lib", + "html5lib==0.5.1", "requests==2.28.2", "sphinx-jinja==2.0.2", ] diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css index 72cfcd03..858898d5 100644 --- a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css @@ -137,66 +137,27 @@ html[data-theme="dark"] { --pst-color-sig:#d6ab1e; --pst-color-table-hover: var(--pst-color-target); } +/* +################# +body and content +################# +*/ body { font-family: 'Open Sans', sans-serif; } -body::-webkit-scrollbar { - width: 1rem; - height: 1rem; -} - -body::-webkit-scrollbar-thumb { - background: var(--pst-color-border); - border-radius: inherit; -} - -body::-webkit-scrollbar-track { - background: var(--pst-color-background); -} - -.bd-sidebar::-webkit-scrollbar { - width: .5rem; - height: .5rem; -} - -.bd-sidebar::-webkit-scrollbar-thumb { - background: var(--pst-color-border); - border-radius: inherit; - visibility: hidden !important; -} - -.bd-sidebar::-webkit-scrollbar-track { - background: var(--pst-color-border); - visibility: hidden !important; -} - -.bd-toc::-webkit-scrollbar { - width: .5rem; - height: .5rem; -} - -.bd-toc::-webkit-scrollbar-thumb { - background: var(--pst-color-border); - border-radius: inherit; -} - -.bd-toc::-webkit-scrollbar-track { - background: var(--pst-color-border); -} - h1, h2 { color: var(--pst-color-text-base); } -.admonition, div.admonition{ - background-color: var( --pst-color-on-surface); -} -.bd-header .navbar-nav li a.nav-link { - color: #ddd; -} + +/* +########## +Codecell +########## +*/ dt:target, span.highlighted { background-color: var(--pst-color-border)!important; @@ -248,13 +209,6 @@ code.literal { color: var(--pst-color-sig); } -/* make the github logo white */ - -i.fa-github-square:before, i.fa-square-github:before { - color: white; - font-size: 2rem; -} - /* Increase empty-space around classes, methods, properties, etc. that are descendants of other items */ dl.class dl.py { @@ -268,58 +222,10 @@ p.rubric { margin-bottom: 0.75em; } - -/* -############## -Sphinx-design -############## -*/ - -.sd-tab-set>input:not(.focus-visible)+label { - outline: none; - font-size: large; - -webkit-tap-highlight-color: transparent; - color: var(--pst-color-text-base); -} - -.sd-tab-set>input:checked+label+.sd-tab-content { - display: block; - font-size: medium; -} - -.sd-tab-set>input:checked+label+.sd-tab-content { - display: block; - font-size: .9rem; -} - -.sd-tab-content { - font-family: var(--pst-font-family-base); -} - -.bd-content .sd-tab-set>input:checked+label, .bd-content .sd-tab-set>input:not(:checked)+label:hover { - color: var(--pst-color-text-base); - border-color: var(--pst-color-text-base); -} - - -.sd-sphinx-override, .sd-sphinx-override * { - background-color: transparent !important; - font-size: medium; - flex: auto; -} - -html[data-theme=dark] .sd-shadow-sm { - box-shadow: 0 .1rem 1rem rgba(250, 250, 250, .6) !important -} - -html[data-theme=dark] .sd-card-img-top[src*='.png'] { - filter: invert(0.82) brightness(0.8) contrast(1.2); -} - /* -############### - table -############### +######## +Table +######## */ table { @@ -353,26 +259,12 @@ tr:nth-child(odd), tr:nth-child(even){ } /* -##################### - Table-centered -##################### +############### +Table-centered +################ Same as table but with horizontally centered text. - -Use as: - -.. table:: - :class: table-centered - - +---------------------------+-------------------+ - | | MAPDL Command | - +===========================+===================+ - | **GUI commands** | * ``*ASK`` | - | +-------------------+ - | ... - | ... - - +see examples. */ table.table-centered { width:100%; @@ -409,25 +301,14 @@ table.table-centered { text-align: center; } -/* -######################### - longtable-centered -######################### - -Use as: - - -.. table:: - :class: longtable-centered - - +---------------------------+-------------------+ - | | MAPDL Command | - +===========================+===================+ - | **GUI commands** | * ``*ASK`` | - | +-------------------+ - | ... - | ... +table.dataframe { + table-layout: auto !important; +} +/* +################### +longtable-centered +#################### */ table.longtable-centered { @@ -459,9 +340,6 @@ table.longtable-centered tr:hover td { ######### DataFrame ######### -Not sure why the odd columns (white) are rendered gray. - -I do not think we will be able to call this class. */ .dataframe tr{ @@ -477,12 +355,9 @@ I do not think we will be able to call this class. } /* -######################### - DataFrame-centered -######################### -Not sure why the odd columns (white) are rendered gray. - -I do not think we will be able to call this class. +################### +DataFrame-centered +################### */ .dataframe-centered tr{ @@ -510,27 +385,69 @@ I do not think we will be able to call this class. } /* -############### - Autosummary -############### +########## +Scroll-bar +########## */ -/* .autosummary { - text-align: left; - } */ -.autosummary tr:nth-child(odd){ - background-color: var(--pst-color-background); - } +body::-webkit-scrollbar { + width: 1rem; + height: 1rem; +} -.autosummary tr:nth-child(even){ - background-color: var(--pst-color-background); +body::-webkit-scrollbar-thumb { + background: var(--pst-color-border); + border-radius: inherit; +} + +body::-webkit-scrollbar-track { + background: var(--pst-color-background); +} + +.bd-sidebar::-webkit-scrollbar { + width: .5rem; + height: .5rem; +} + +.bd-sidebar::-webkit-scrollbar-thumb { + background: var(--pst-color-border); + border-radius: inherit; + visibility: hidden !important; +} + +.bd-sidebar::-webkit-scrollbar-track { + background: var(--pst-color-border); + visibility: hidden !important; +} + +.bd-toc::-webkit-scrollbar { + width: .5rem; + height: .5rem; } +.bd-toc::-webkit-scrollbar-thumb { + background: var(--pst-color-border); + border-radius: inherit; +} + +.bd-toc::-webkit-scrollbar-track { + background: var(--pst-color-border); +} /* -######################## - ReST :download: links -######################## +############ +Autosummary +############ +*/ + +.autosummary tr:nth-child(odd), .autosummary tr:nth-child(even){ + background-color: var(--pst-color-background); +} + +/* +##################### +ReST :download: links +##################### */ a > code.download { @@ -541,9 +458,9 @@ a > code.download } /* -######################## - Sphinx gallery output -######################## +##################### +Sphinx gallery output +##################### */ .sphx-glr-script-out .highlight pre{ background-color: var(--pst-color-codecell) !important; @@ -616,6 +533,26 @@ a.headerlink { color: #222; } +@media (min-width:1200px) { + .container, + .container-lg, + .container-md, + .container-sm, + .container-xl { + max-width: 1200px + } +} + +@media (min-width:1600px) { + .container, + .container-lg, + .container-md, + .container-sm, + .container-xl { + max-width: 1600px + } +} + /* ############################################ Navigation column (according to side column) @@ -627,6 +564,19 @@ Navigation column (according to side column) padding-right: 5px; padding-left: 20px; } +.bd-main .bd-content { + display: flex; + height: 100%; + justify-content: end; +} + +.bd-main .bd-content .bd-article-container .bd-article { + padding-left: 1rem; + padding-top: 1rem; +} +.bd-header .navbar-nav li a.nav-link { + color: #ddd; +} /* ################################# @@ -679,7 +629,7 @@ nav.bd-links li>a:hover { /* ################## -icon styles button +icon, button, logo ################## */ @@ -715,6 +665,30 @@ html[data-theme=light] .theme-switch-button span:hover { color: #0d0d0d; } +/* make the github logo white */ + +i.fa-github-square:before, i.fa-square-github:before { + color: white; + font-size: 2rem; +} + +.version-switcher__menu a.list-group-item:hover { + background-color: #D09735!important; + border-color: var(--pst-color-text-base)!important; + color: #000!important; +} + +.version-switcher__menu a.list-group-item { + background-color: #f8f9fa; + border-color: var(--pst-color-border); + color: #000; +} + +.fa-wrench:before { + content: "\f0ad"; + color: white; +} + /* ############################## image padding before and after @@ -773,25 +747,51 @@ html[data-theme="dark"] .highlight pre { color: var(--pst-color-text-base)!important; } -table.dataframe { - table-layout: auto !important; + +/* +############## +Sphinx design +############## +*/ +.sd-sphinx-override, .sd-sphinx-override * { + background-color: transparent !important; + font-size: medium; + flex: auto; } +/* +Sphinx-design tab +*/ -.sd-card { - border-radius: 0; - padding: 10px 10px 10px 10px; - font-family: var(--pst-font-family-base)!important; +.sd-tab-set>input:not(.focus-visible)+label { + outline: none; + font-size: large; + -webkit-tap-highlight-color: transparent; + color: var(--pst-color-text-base); } -details.sd-dropdown .sd-summary-title { - border: 1px solid var(--pst-color-text-base) !important; - color: var(--sd-color-card-text) !important; - font-family: var(monospace)!important; +.sd-tab-set>input:checked+label+.sd-tab-content { + display: block; font-size: medium; - text-align: left; - padding-left: 1rem; } +.sd-tab-set>input:checked+label+.sd-tab-content { + display: block; + font-size: .9rem; +} + +.sd-tab-content { + font-family: var(--pst-font-family-base); +} + +.bd-content .sd-tab-set>input:checked+label, .bd-content .sd-tab-set>input:not(:checked)+label:hover { + color: var(--pst-color-text-base); + border-color: var(--pst-color-text-base); +} + +/* +Sphinx-design card +*/ + .sd-card .sd-card-text { font-family: var(--pst-font-family-base)!important; } @@ -813,14 +813,31 @@ margin-right: auto; font-family: var(--pst-font-family-base); } -div.deprecated { - border-color: var(--pst-color-danger); - background-color: #dc354514; +html[data-theme=dark] .sd-shadow-sm { + box-shadow: 0 .1rem 1rem rgba(250, 250, 250, .6) !important } -div.versionadded { - border-color: var(--pst-color-success); - background: #88ca881f; +html[data-theme=dark] .sd-card-img-top[src*='.png'] { + filter: invert(0.82) brightness(0.8) contrast(1.2); +} + +.sd-card { + border-radius: 0; + padding: 10px 10px 10px 10px; + font-family: var(--pst-font-family-base)!important; +} + +/* +Sphinx-design dropdown +*/ + +details.sd-dropdown .sd-summary-title { + border: 1px solid var(--pst-color-text-base) !important; + color: var(--sd-color-card-text) !important; + font-family: var(monospace)!important; + font-size: medium; + text-align: left; + padding-left: 1rem; } /* @@ -859,50 +876,22 @@ Right side toctree color and font font-weight: 600; } -.version-switcher__menu a.list-group-item:hover { - background-color: #D09735!important; - border-color: var(--pst-color-text-base)!important; - color: #000!important; -} - -.version-switcher__menu a.list-group-item { - background-color: #f8f9fa; - border-color: var(--pst-color-border); - color: #000; -} - -@media (min-width:1200px) { - .container, - .container-lg, - .container-md, - .container-sm, - .container-xl { - max-width: 1200px - } -} - -@media (min-width:1600px) { - .container, - .container-lg, - .container-md, - .container-sm, - .container-xl { - max-width: 1600px - } -} +/* +########### +Directives +########### +*/ -.fa-wrench:before { - content: "\f0ad"; - color: white; +div.deprecated { + border-color: var(--pst-color-danger); + background-color: #dc354514; } -.bd-main .bd-content { - display: flex; - height: 100%; - justify-content: end; +div.versionadded { + border-color: var(--pst-color-success); + background: #88ca881f; } -.bd-main .bd-content .bd-article-container .bd-article { - padding-left: 1rem; - padding-top: 1rem; +.admonition, div.admonition{ + background-color: var( --pst-color-on-surface); } \ No newline at end of file From 1d014561a61c6764e10083f445d46a28331ca130 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 14:51:39 +0100 Subject: [PATCH 29/34] Modify the parameters --- doc/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index bfa7ad4b..da4e46b0 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -205,7 +205,7 @@ def download_and_process_files(example_links: List[str]) -> List[str]: URL_ARCHIVE = "https://github.com/executablebooks/sphinx-design/tree/main/docs/snippets/rst" -example_links = extract_example_links(URL_ARCHIVE) -file_names = download_and_process_files(example_links, exclude_files=["article-info.txt"]) +example_links = extract_example_links(URL_ARCHIVE, exclude_files=["article-info.txt"]) +file_names = download_and_process_files(example_links) jinja_contexts = {"examples": {"inputs_examples": file_names}} From ddcf7f90091d5e3420b026dd0261a00309df1b94 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 15:00:44 +0100 Subject: [PATCH 30/34] Resolves vale error --- doc/styles/Vocab/ANSYS/accept.txt | 3 +- .../static/css/ansys_sphinx_theme.css | 40 ++++++++++++------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index b159062a..8f6c7f7b 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -2,4 +2,5 @@ ANSYS Ansys ansys Ansys Sphinx Theme -boolean \ No newline at end of file +boolean +datatable \ No newline at end of file diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css index 858898d5..021f2beb 100644 --- a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/ansys_sphinx_theme.css @@ -1,4 +1,5 @@ /* Provided by the Sphinx base theme template at build time */ + @import "../basic.css"; @import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;0,900;1,400;1,700;1,900&family=Open+Sans:ital,wght@0,400;0,600;1,400;1,600&display=swap'); @import "../sg_gallery.css"; @@ -39,12 +40,12 @@ **/ --ansysGold: rgb(255, 183, 27); /* #FFB71B */ --ansysBronze: rgb(200, 146, 17); /* #C89211 */ - --pythonBlue: 57, 114, 161; /* #3972a1 */ + --pythonBlue: rgb(57, 114, 161); /* #3972a1 */ - --pst-color-active-navigation: 200, 146, 17; /* --ansysBronze */ - --pst-color-navbar-link: 255, 255, 255; - --pst-color-navbar-link-hover: 200, 146, 17; /* --ansysBronze */ - --pst-color-navbar-link-active: 255, 183, 27; /* --ansysBronze */ + --pst-color-active-navigation: var(--ansysBronze); /* --ansysBronze */ + --pst-color-navbar-link: rgb(255, 255, 255); + --pst-color-navbar-link-hover: var(--ansysBronze); /* --ansysBronze */ + --pst-color-navbar-link-active: var(--ansysGold); /* --ansysBronze */ --pst-font-size-h1: 48px; --pst-font-size-h2: 36px; --pst-font-size-h3: 28px; @@ -68,11 +69,6 @@ html[data-theme="light"] { /***************************************************************************** * depth colors - * - * background: the more in depth color - * on-background: the object directly set on the background, use of shadows in light theme - * surface: object set on the background (without shadows) - * on_surface: object set on surface object (without shadows) */ --pst-color-on-background: rgb(0, 0, 0); --pst-color-on-surface: #f2f2f2; @@ -91,11 +87,21 @@ html[data-theme="light"] { --pst-color-link-hover:#32cfea; --pst-color-inline-code: #000; --pst-color-target: rgb(255, 255, 255); - /* color for sphinx-gallery-code output*/ + + /***************************************************************************** + * color for sphinx-gallery-code output + */ --pst-color-codecell: #fafae2; --pst-color-codeout: var(--pst-color-inline-code); --pst-color-sig: #0965C8; + /***************************************************************************** + * sphinx design primary color + */ --sd-color-primary : var(--pst-color-text-base); + + /***************************************************************************** + * table hovering + */ --pst-color-table-hover: var(--pst-color-border); } @@ -131,12 +137,20 @@ html[data-theme="dark"] { --pst-color-link-hover:#12B2E2; --pst-color-inline-code: #fff; --pst-color-target: rgb(71, 39, 0); - /* color for sphinx-gallery-code output*/ + + /***************************************************************************** + * color for sphinx-gallery-code output + */ --pst-color-codecell: #495057; --pst-color-codeout: #f2f4f6; --pst-color-sig:#d6ab1e; + + /***************************************************************************** + * table hovering + */ --pst-color-table-hover: var(--pst-color-target); } + /* ################# body and content @@ -151,8 +165,6 @@ h1, h2 { color: var(--pst-color-text-base); } - - /* ########## Codecell From e154ea72d32f8d4bd85006a29664d979843278f4 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 15:05:08 +0100 Subject: [PATCH 31/34] Add the docs for css --- pyproject.toml | 2 +- .../ansys_sphinx_theme/static/css/breadcrumbs.css | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6ee6c79b..2edc908b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ doc = [ "sphinx-notfound-page==0.8.3", "sphinx-design==0.3.0", "bs4==0.0.1", - "html5lib==0.5.1", + "html5lib==1.1", "requests==2.28.2", "sphinx-jinja==2.0.2", ] diff --git a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/breadcrumbs.css b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/breadcrumbs.css index 1dcafde1..3aad8f25 100644 --- a/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/breadcrumbs.css +++ b/src/ansys_sphinx_theme/theme/ansys_sphinx_theme/static/css/breadcrumbs.css @@ -1,5 +1,14 @@ +/* Provided by the Sphinx base theme template at build time, +styles exclusively for the ansys-sphinx-theme classes. */ + @import "ansys-sphinx-theme.css"; +/* +############ +breadcrumbs +############ +*/ + #breadcrumbs-spacer { border-right: 10rem solid var(--pst-color-background); } @@ -13,6 +22,12 @@ div.related > ul { box-sizing: border-box; } +/* +########################### +vesrion warning announcement +############################ +*/ + #announcement_msg { display: flex; justify-content: center; From 9bb99854c03bb4d81e6c5910719e6fdcd7cf2e47 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 15:10:37 +0100 Subject: [PATCH 32/34] change the docs --- doc/source/examples/index.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/source/examples/index.rst b/doc/source/examples/index.rst index df4475de..08ec60ca 100644 --- a/doc/source/examples/index.rst +++ b/doc/source/examples/index.rst @@ -10,14 +10,15 @@ This show how the different extensions get rendered in ansys-sphinx-theme. This :link: sphinx-design :link-type: ref - Examples rendered with sphinx design. + Examples of the sphinx design rendered using the `ansys-sphinx-theme`. .. grid-item:: .. card:: Table :link: table :link-type: ref - Examples for table with js and rst. + Examples of tables with JavaScript and RST rendered using the `ansys-sphinx-theme`. + It also recommends improving documentation with RST. .. toctree:: From 29879ddfde0c03031ab6fd41de85d6f040b83948 Mon Sep 17 00:00:00 2001 From: Revathyvenugopal162 Date: Tue, 14 Feb 2023 16:44:26 +0100 Subject: [PATCH 33/34] change the table --- src/ansys_sphinx_theme/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ansys_sphinx_theme/__init__.py b/src/ansys_sphinx_theme/__init__.py index ab4f11e2..1c8d2ccc 100644 --- a/src/ansys_sphinx_theme/__init__.py +++ b/src/ansys_sphinx_theme/__init__.py @@ -111,7 +111,8 @@ def setup(app: sphinx.application.Sphinx) -> Dict: raise FileNotFoundError(f"Unable to locate ansys-sphinx theme at {CSS_PATH.absolute()}") app.add_css_file(str(CSS_PATH.relative_to(STATIC_PATH))) app.add_js_file(str(JS_FILE.relative_to(STATIC_PATH))) - + app.add_js_file("https://cdn.datatables.net/1.10.23/js/jquery.dataTables.min.js") + app.add_css_file("https://cdn.datatables.net/1.10.23/css/jquery.dataTables.min.css") # Add templates for autosummary app.config.templates_path.append(str(TEMPLATES_PATH)) From aea7ad4f3867904318b5825bcf1d4d3ef0a26f59 Mon Sep 17 00:00:00 2001 From: Roberto Pastor Muela <37798125+RobPasMue@users.noreply.github.com> Date: Tue, 14 Feb 2023 17:12:29 +0100 Subject: [PATCH 34/34] Update .github/workflows/ci_cd.yml --- .github/workflows/ci_cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 1cef69e7..56fc3912 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -49,7 +49,7 @@ jobs: doc-deploy-development: name: Doc dev version deploy - # if: ${{ github.ref == 'refs/heads/main' }} + if: ${{ github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest needs: doc-build steps: