{"id":773,"date":"2023-03-27T16:44:24","date_gmt":"2023-03-27T20:44:24","guid":{"rendered":"https:\/\/brightsign2425.wpenginepowered.com\/?page_id=773"},"modified":"2024-11-26T12:23:13","modified_gmt":"2024-11-26T17:23:13","slug":"%e8%bd%af%e4%bb%b6%e4%b8%8b%e8%bd%bd","status":"publish","type":"page","link":"https:\/\/www.brightsign.biz\/zh\/resources\/software-downloads\/","title":{"rendered":"\u8f6f\u4ef6"},"content":{"rendered":"\n<section\n  id=\"hero-block_019adfb2c775037fbea163c320daddca\"\n  class=\"hero custom-block\"\n  data-form-url=\"\"\n>\n  <!-- Backgrounds: cover full section, center position (extended via SCSS) -->\n        <div id=\"hero-desktop-background\" style=\"background-image: url('https:\/\/www.brightsign.biz\/wp-content\/uploads\/2023\/04\/BSNCloudVideo_Hero-1920x900.jpg'); background-size: cover; background-position: center center; background-repeat: no-repeat;\"><\/div>\n        <div id=\"hero-mobile-background\" style=\"background-image: url('https:\/\/www.brightsign.biz\/wp-content\/uploads\/2023\/04\/BSNCloudVideo_Hero-1920x900.jpg'); background-size: cover; background-position: center center; background-repeat: no-repeat;\"><\/div>\n  \n  <div class=\"hero-gradient\" aria-hidden=\"true\"><\/div>\n  <div class=\"block-inner medium\">\n    <div class=\"block-inner-content grid-x grid-margin-y\">\n\n      <!-- MOBILE-only layout -->\n      <div class=\"cell small-12 show-for-small-only\">\n        \n        \n        \n        \n        <div class=\"mobile-content form-content\"><h1>Software <strong>Downloads<\/strong><\/h1>\n<p>Stay up-to-date with the latest software versions.<\/p>\n<\/div>      <\/div>\n      <!-- end MOBILE-only -->\n\n      <!-- DESKTOP text cell -->\n      <div class=\"cell small-12 medium-12 large-6 hide-for-small-only\">\n        \n        <h1>Software <strong>Downloads<\/strong><\/h1>\n<p>Stay up-to-date with the latest software versions.<\/p>\n      <\/div>\n      <!-- end DESKTOP text cell -->\n\n      <!-- DESKTOP form\/video cell -->\n      <div class=\"cell small-12 medium-12 large-6 center-play hide-for-small-only\">\n        \n              <\/div>\n      <!-- end DESKTOP form\/video cell -->\n\n    <\/div><!-- .block-inner-content -->\n  <\/div><!-- .block-inner -->\n<\/section><!-- hero -->\n\n\n\n\n<section id=\"filtered-grid-block_7a79b4b110b86d6bd96fdfe054157a99\" class=\"filtered-grid custom-block\">\n\n<div class=\"block-inner\">\n\n    <div class=\"fg-intro\"><h2>Software for BrightSign Players<\/h2>\n<p>Download the latest software for your BrightSign player.<\/p>\n<\/div>\n\n    <h5 class=\"filter-heading text-center\">Select a player: <\/h5>\n    <div class=\"filter-container\">\n        <!-- Filter buttons will be dynamically added here -->\n    <\/div>\n    <div id=\"active-fg-filter\"><\/div>\n    <div class=\"card-container\">\n        <!-- Cards for each app will be dynamically added here -->\n    <\/div>\n\n<\/div><!-- block-inner -->\n\n<script>\njQuery(document).ready(function ($) {\n    \/\/ Hide the filtering system initially\n    $('.filter-container, .card-container').hide();\n\n    \/\/ Fetch JSON data\n    $.ajax({\n        url: 'https:\/\/brightsign-builds.s3.us-east-1.amazonaws.com\/web\/bs-download-versions.json',\n        method: 'GET',\n        dataType: 'json',\n        cache: false,\n        success: function (data) {\n            initializeFilters(data);\n            initializeCards(data);\n            $('.filter-container, .card-container').fadeIn(); \/\/ Fade in once markup is constructed\n        },\n        error: function () {\n            console.log(\"Error fetching JSON data\");\n        }\n    });\n\n    function initializeFilters(data) {\n        \/\/ Prepare the container and create the <ul> element for filters\n        $('.filter-container').append('<ul class=\"small-buttons fg-filters\"><\/ul>');\n\n        \/\/ Iterate over each family in the JSON data\n        $.each(data.family, function (familyKey, family) {\n            \/\/ Construct title and class for each family based on its models\n            let title = family.model.join('\/').toUpperCase();\n            let cssClass = `filter-${familyKey}`;\n\n            \/\/ Append each family as a single <li> filter button\n            $('.fg-filters').append(`\n                <li class=\"fg-filter-trigger\" \n                    data-title=\"${title}\" \n                    data-class=\"${cssClass}\">\n                    ${title}\n                <\/li>\n            `);\n        });\n\n        \/\/ Set up click events for each filter button\n        $('.fg-filter-trigger').on('click', function () {\n            $('.fg-filter-trigger').removeClass('active');\n            $(this).addClass('active');\n\n            \/\/ Get the selected family key from the class and call filterCards\n            let selectedFamily = $(this).data('class').replace('filter-', '');\n            filterCards(data, selectedFamily);\n        });\n        \/\/ Trigger the click event for the XC5 filter (raptor family) on page load\n        $(`.fg-filter-trigger[data-class=\"filter-${Object.keys(data.family)[0]}\"]`).trigger('click');\n    }\n\n    function initializeCards(data) {\n        \/\/ Generate cards for each app in the general section\n        $.each(data.general, function (appKey, appData) {\n            \/\/ Skip creating a separate card for bac-multi\n            if (appKey === 'bac-multi') return;\n\n            let families = Object.keys(data.family).filter(familyKey => data.family[familyKey].app.includes(appKey));\n            let filterClasses = families.map(familyKey => `filter-${familyKey}`).join(' ');\n\n            \/\/ Determine the correct image URL\n            let imageUrl = appData['image-url'] || '';\n\n            \/\/ Embed bac-multi information inside bac card if it exists\n            let bacMultiHtml = '';\n            if (appKey === 'bac' && data.general['bac-multi']) {\n                let bacMultiData = data.general['bac-multi'];\n                bacMultiHtml = `\n                    <h4 class=\"releaseTitle\"><strong>Multilingual Version: ${bacMultiData.version} (${bacMultiData['release-date']}) \n                        <a class=\"not-cta\" href=\"${bacMultiData['release-notes']}\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a><\/strong>\n                    <\/h4>\n                    <ul>\n                        <li><a class=\"not-cta\" href=\"${bacMultiData.link}\" target=\"_blank\" rel=\"noopener\">Download<\/a><\/li>\n                    <\/ul>\n                `;\n            }\n\n            \/\/ Construct the main app card, adding bac-multi information if present\n            let cardHtml = `\n                <div class=\"fg-item cell small-12 medium-4 ${filterClasses}\">\n                    <div class=\"fg-item-image\">\n                        <img decoding=\"async\" src=\"${imageUrl}\" alt=\"\">\n                    <\/div>\n                    <h3>${appKey === 'bacon' ? 'brightAuthor connected' : appKey === 'bac' ? 'brightAuthor classic' : appKey.toUpperCase()}<\/h3>\n                    <h4><strong>Latest Release: ${appData.version} (${appData['release-date']}) \n                        <a class=\"not-cta\" href=\"${appData['release-notes']}\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a><\/strong>\n                    <\/h4>\n                    <ul>\n                        ${appData['pc-link'] ? `<li><a class=\"not-cta\" href=\"${appData['pc-link']}\" target=\"_blank\" rel=\"noopener\">Download for PC<\/a><\/li>` : ''}\n                        ${appData['mac-link'] ? `<li><a class=\"not-cta\" href=\"${appData['mac-link']}\" target=\"_blank\" rel=\"noopener\">Download for Mac<\/a><\/li>` : ''}\n                        ${appKey === 'bac' && appData['link'] ? `<li><a class=\"not-cta\" href=\"${appData['link']}\" target=\"_blank\" rel=\"noopener\">Download<\/a><\/li>` : ''}\n                    <\/ul>\n                    \n                    ${bacMultiHtml}\n                    <p><strong>NOTES<br><\/strong>\n                        Requirements: ${appData['sys-requirements'] ? appData['sys-requirements'].join(', ') : ''}\n                    <\/p>\n                    ${appKey === 'bac' ? `<p><a class=\"not-cta\" href=\"${appData['additional-requirements']}\" target=\"_blank\" rel=\"noopener\">Additional Requirements<\/a><\/p>` : ''}\n                <\/div>\n            `;\n\n            $('.card-container').append(cardHtml);\n        });\n\n        \/\/ Initialize OS card for each family\n        $.each(data.family, function (familyKey, familyData) {\n            let osImageUrl = data.general.os['image-url'] || '';\n\n            \/\/ Build Beta section HTML if it exists\n            let betaHtml = '';\n            if (familyData.beta) {\n                betaHtml = `\n                    <h4 class=\"beta-release\"><strong>\n                        Beta Release: ${familyData.beta.version} (${familyData.beta['release-date']})\n                        <a class=\"not-cta\" href=\"${familyData.beta['release-notes']}\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a>\n                    <\/strong><\/h4>\n                    <ul>\n                        <li><a class=\"not-cta\" href=\"${familyData.beta.link}\" target=\"_blank\" rel=\"noopener\">Download for this model<\/a><\/li>\n                    <\/ul>\n                `;\n            }\n\n            let osCardHtml = `\n                <div class=\"fg-item cell small-12 medium-4 filter-${familyKey}\">\n                    <div class=\"fg-item-image\">\n                        <img decoding=\"async\" src=\"${osImageUrl}\" alt=\"\">\n                    <\/div>\n                    <h3>BrightSignOS<sup>&trade;<\/sup><\/h3>\n                    <h4><strong>\n                        <span class=\"releaseTitle\">Latest Release: ${familyData.version}<\/span>\n                        <span class=\"releaseDate right\"> (${familyData['release-date']})\n                            <a class=\"not-cta\" href=\"${familyData['release-notes']}\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a>\n                        <\/span>\n                    <\/strong><\/h4>\n                    <ul>\n                        <li><a class=\"not-cta\" href=\"${familyData.link}\" target=\"_blank\" rel=\"noopener\">Download for this model<\/a><\/li>\n                    <\/ul>\n                    ${betaHtml}\n                    <p><strong>NOTES<\/strong><br>\n                        Please read the\n                        <a class=\"not-cta\" href=\"${data.general.os['install-instruction']}\" target=\"_blank\" rel=\"noopener\">Installation Instructions<\/a>.<br>\n                        Previous OS versions for this player model can be found <a href=\"${data.general.os['previous-os']}\" target='_blank'>here<\/a>.\n                    <\/p>\n                <\/div>\n            `;\n            $('.card-container').append(osCardHtml);\n        });\n\n        \/\/ Initialize with the first family in the JSON file as default\n        const firstFamilyKey = Object.keys(data.family)[0];\n        filterCards(data, firstFamilyKey);\n    }\n\n    function filterCards(data, selectedFamily) {\n        \/\/ Hide all cards initially\n        $('.fg-item').hide();\n\n        \/\/ Show cards with the selected family's filter class\n        $(`.fg-item.filter-${selectedFamily}`).show();\n\n        \/\/ Update and show OS card with family-specific version details\n        if (data.family[selectedFamily]) {\n            let familyData = data.family[selectedFamily];\n            $('.os-card').show().find('.os-version').html(`\n                <strong>Latest Release: ${familyData.version} (${familyData['release-date']})\n                <a href=\"${familyData['release-notes']}\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a><\/strong>\n            `);\n\n            \/\/ Add the download link to the OS card\n            $('.os-card').find('ul').append(`\n                <li><a href=\"${familyData.link}\" target=\"_blank\" rel=\"noopener\">Download<\/a><\/li>\n            `);\n\n            \/\/ If there\u2019s a beta, update the OS card\u2019s beta section as well\n            if (familyData.beta) {\n                $('.os-card').find('.beta-release').remove(); \/\/ remove any previous beta markup\n                $('.os-card').find('ul.beta-download').remove(); \/\/ remove previous beta download link\n                \n                $('.os-card').append(`\n                    <h4 class=\"beta-release\"><strong>\n                        Beta Release: ${familyData.beta.version} (${familyData.beta['release-date']})\n                        <a href=\"${familyData.beta['release-notes']}\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a>\n                    <\/strong><\/h4>\n                    <ul class=\"beta-download\">\n                        <li><a href=\"${familyData.beta.link}\" target=\"_blank\" rel=\"noopener\">Download for this model<\/a><\/li>\n                    <\/ul>\n                `);\n            }\n\n            \/\/ Update the active-fg-filter div with the image title\n            let imageTitle = familyData.model.join('\/').toUpperCase(); \/\/ Get the model(s) as the image title\n            $('#active-fg-filter').html(`<h3>${imageTitle}<\/h3>`);\n        } else {\n            \/\/ Clear the active-fg-filter and OS card if no valid family is selected\n            $('#active-fg-filter').empty();\n            $('.os-card').find('ul li:last-child').remove(); \/\/ Remove previous download link\n        }\n    }\n});\n<\/script>\n\n\n<\/section><!-- filtered-grid -->\n\n\n<!-- repeater 2 closed -->\n\n\n\n\n<section id=\"ticker-block_6cbb26d21021623d787c07246231b775\" class=\"ticker custom-block white-bg   \">\n\n            <h4>Trusted by Industry Leaders<\/h4>\n    \n    <div class=\"block-inner\">\n        <div class=\"swiper ticker-swiper\">\n            <div class=\"swiper-wrapper\">\n\n                                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/PlugPowerGrayscale.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/GoPro_logo_light.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/lg.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/bestbuy.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/bose.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/PlugPowerGrayscale.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/GoPro_logo_light.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/lg.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/bestbuy.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                    \n                        <div class=\"swiper-slide\">\n                                                            <img decoding=\"async\" src=\"https:\/\/www.brightsign.biz\/wp-content\/uploads\/2024\/05\/bose.svg\" alt=\"\" \/>\n                                                                                <\/div>\n\n                                    \n            <\/div><!-- swiper-wrapper -->\n        <\/div><!-- swiper -->\n    <\/div><!-- block-inner -->\n<\/section><!-- ticker -->\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":556,"menu_order":70,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":true,"_searchwp_excluded":"","footnotes":""},"class_list":["post-773","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/pages\/773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/comments?post=773"}],"version-history":[{"count":0,"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/pages\/773\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/pages\/556"}],"wp:attachment":[{"href":"https:\/\/www.brightsign.biz\/zh\/wp-json\/wp\/v2\/media?parent=773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}