You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ossie.apache.org by jb...@apache.org on 2026/08/07 13:32:18 UTC

(ossie-website) branch main updated: Add vendor support details modal to Ecosystem page (#14)

This is an automated email from the ASF dual-hosted git repository.

jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ossie-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 2d72572  Add vendor support details modal to Ecosystem page (#14)
2d72572 is described below

commit 2d725723e00ae531b524b55c33f1d70f8a8acba0
Author: jklahr <jk...@yahoo.com>
AuthorDate: Fri Aug 7 06:32:13 2026 -0700

    Add vendor support details modal to Ecosystem page (#14)
---
 data/ecosystem.yml                   |  15 ++++
 docs/assets/javascripts/ecosystem.js |  40 ++++++++++
 docs/assets/stylesheets/home.css     | 138 +++++++++++++++++++++++++++++++++++
 overrides/ecosystem.html             |  36 +++++++++
 4 files changed, 229 insertions(+)

diff --git a/data/ecosystem.yml b/data/ecosystem.yml
index 59a0d37..81b3a7d 100644
--- a/data/ecosystem.yml
+++ b/data/ecosystem.yml
@@ -121,6 +121,21 @@ ecosystem:
       logo: "sigma-logo.png"
     - name: "Snowflake"
       logo: "snowflake-logo.png"
+      details:
+        description: "Snowflake is committed to keeping Semantic Views and other semantic context interoperable with Apache Ossie."
+        features:
+          - title: "Export to Ossie"
+            description: "Convert any Snowflake Semantic View to an Ossie YAML file."
+            url: "https://docs.snowflake.com/en/sql-reference/functions/system_read_ossie_yaml_from_semantic_view"
+            url_label: "Documentation"
+          - title: "Import from Ossie"
+            description: "Create a Snowflake Semantic View from an Ossie YAML file."
+            url: "https://docs.snowflake.com/en/sql-reference/stored-procedures/system_create_semantic_view_from_ossie_yaml"
+            url_label: "Documentation"
+          - title: "Snowflake Converter"
+            description: "Programmatic conversion tooling maintained in the Ossie repository."
+            url: "https://github.com/apache/ossie/tree/main/converters/snowflake"
+            url_label: "View on GitHub"
     - name: "Starburst Data"
       logo: "starburst-logo.png"
     - name: "Strategy"
diff --git a/docs/assets/javascripts/ecosystem.js b/docs/assets/javascripts/ecosystem.js
new file mode 100644
index 0000000..47a42d6
--- /dev/null
+++ b/docs/assets/javascripts/ecosystem.js
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+document.addEventListener("DOMContentLoaded", function () {
+  document.querySelectorAll(".ossie-details-link").forEach(function (btn) {
+    btn.addEventListener("click", function () {
+      var name = btn.getAttribute("data-vendor").toLowerCase().replace(/ /g, "-");
+      var modal = document.getElementById("modal-" + name);
+      if (modal) modal.showModal();
+    });
+  });
+
+  document.querySelectorAll(".ossie-vendor-modal__close").forEach(function (btn) {
+    btn.addEventListener("click", function () {
+      btn.closest("dialog").close();
+    });
+  });
+
+  document.querySelectorAll(".ossie-vendor-modal").forEach(function (modal) {
+    modal.addEventListener("click", function (e) {
+      if (e.target === modal) modal.close();
+    });
+  });
+});
diff --git a/docs/assets/stylesheets/home.css b/docs/assets/stylesheets/home.css
index c28fa96..1934b0c 100644
--- a/docs/assets/stylesheets/home.css
+++ b/docs/assets/stylesheets/home.css
@@ -768,3 +768,141 @@
   font-size: 0.8rem;
   line-height: 1.6;
 }
+
+
+/* ==========================================================================
+   Ecosystem — Vendor Details Modal
+   ========================================================================== */
+
+.ossie-details-link {
+  background: none;
+  border: none;
+  color: var(--ossie-blue, #2563eb);
+  font-size: 0.6rem;
+  font-weight: 500;
+  cursor: pointer;
+  margin-top: 0.25rem;
+  padding: 0;
+  border-radius: 4px;
+  transition: color 0.15s;
+  line-height: 1;
+}
+
+.ossie-details-link:hover {
+  color: var(--ossie-blue-dark, #1d4ed8);
+  text-decoration: underline;
+}
+
+.ossie-vendor-modal {
+  border: none;
+  border-radius: 12px;
+  padding: 0;
+  max-width: 520px;
+  width: 90vw;
+  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.2);
+  animation: ossie-modal-in 0.2s ease-out;
+}
+
+.ossie-vendor-modal::backdrop {
+  background: rgba(0, 0, 0, 0.5);
+  animation: ossie-backdrop-in 0.2s ease-out;
+}
+
+@keyframes ossie-modal-in {
+  from { opacity: 0; transform: translateY(16px) scale(0.97); }
+  to   { opacity: 1; transform: translateY(0) scale(1); }
+}
+
+@keyframes ossie-backdrop-in {
+  from { opacity: 0; }
+  to   { opacity: 1; }
+}
+
+.ossie-vendor-modal__content {
+  padding: 1.25rem 1.5rem;
+  position: relative;
+}
+
+.ossie-vendor-modal__header {
+  display: flex;
+  align-items: flex-start;
+  margin-bottom: 0.75rem;
+  padding-bottom: 0.75rem;
+  border-bottom: 1px solid var(--ossie-gray-200, #e2e8f0);
+}
+
+.ossie-vendor-modal__logo {
+  max-width: 160px;
+  max-height: 50px;
+  object-fit: contain;
+}
+
+.ossie-vendor-modal__title {
+  font-size: 1rem;
+  font-weight: 700;
+  margin: 0;
+  flex: 1;
+}
+
+.ossie-vendor-modal__close {
+  background: none;
+  border: none;
+  font-size: 1rem;
+  cursor: pointer;
+  color: var(--ossie-gray-500, #6c757d);
+  line-height: 1;
+  padding: 0.15rem 0.35rem;
+  border-radius: 4px;
+  position: absolute;
+  top: 0.75rem;
+  right: 0.75rem;
+}
+
+.ossie-vendor-modal__close:hover {
+  background: var(--ossie-gray-100, #f1f5f9);
+}
+
+.ossie-vendor-modal__desc {
+  font-size: 0.72rem;
+  color: var(--ossie-gray-700, #374151);
+  line-height: 1.6;
+  margin-bottom: 1.25rem;
+}
+
+.ossie-vendor-modal__features {
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.ossie-vendor-modal__features li {
+  display: flex;
+  flex-direction: column;
+  gap: 0.15rem;
+  padding: 0.75rem 1rem;
+  background: var(--ossie-gray-50, #f8fafc);
+  border-radius: 8px;
+}
+
+.ossie-vendor-modal__features li strong {
+  font-size: 0.68rem;
+}
+
+.ossie-vendor-modal__features li span {
+  font-size: 0.64rem;
+  color: var(--ossie-gray-600, #4b5563);
+}
+
+.ossie-vendor-modal__features li a {
+  font-size: 0.64rem;
+  font-weight: 500;
+  color: var(--ossie-blue, #2563eb);
+  text-decoration: none;
+}
+
+.ossie-vendor-modal__features li a:hover {
+  text-decoration: underline;
+}
diff --git a/overrides/ecosystem.html b/overrides/ecosystem.html
index 2c420ba..4bfc8e1 100644
--- a/overrides/ecosystem.html
+++ b/overrides/ecosystem.html
@@ -51,9 +51,40 @@
                      loading="lazy"
                      class="ossie-member-card__logo">
                 <span class="ossie-member-card__name mt-2">{{ vendor.name }}</span>
+                {% if vendor.details %}
+                  <button class="ossie-details-link" data-vendor="{{ vendor.name | e }}">See Details</button>
+                {% endif %}
               </div>
             </div>
           </div>
+          {% if vendor.details %}
+          <dialog class="ossie-vendor-modal" id="modal-{{ vendor.name | lower | replace(' ', '-') }}">
+            <div class="ossie-vendor-modal__content">
+              <div class="ossie-vendor-modal__header">
+                <img src="{{ ('assets/images/logos/' ~ vendor.logo) | url }}"
+                     alt="{{ vendor.name }}"
+                     class="ossie-vendor-modal__logo">
+                <button class="ossie-vendor-modal__close" aria-label="Close">&times;</button>
+              </div>
+              {% if vendor.details.description %}
+                <p class="ossie-vendor-modal__desc">{{ vendor.details.description }}</p>
+              {% endif %}
+              {% if vendor.details.features %}
+                <ul class="ossie-vendor-modal__features">
+                  {% for feature in vendor.details.features %}
+                    <li>
+                      <strong>{{ feature.title }}</strong>
+                      <span>{{ feature.description }}</span>
+                      {% if feature.url %}
+                        <a href="{{ feature.url }}" target="_blank" rel="noopener">{{ feature.url_label | default("Learn more") }} &rarr;</a>
+                      {% endif %}
+                    </li>
+                  {% endfor %}
+                </ul>
+              {% endif %}
+            </div>
+          </dialog>
+          {% endif %}
         {% endfor %}
       </div>
 
@@ -71,3 +102,8 @@
 {% block content %}
   {{ super() }}
 {% endblock %}
+
+{% block scripts %}
+  {{ super() }}
+  <script src="{{ 'assets/javascripts/ecosystem.js' | url }}"></script>
+{% endblock %}