mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	plans: Add comparison-switcher logic and styles.
This commit is contained in:
		@@ -14,19 +14,19 @@
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="comparison-tabs">
 | 
			
		||||
        <button class="comparison-tab" data-label="tab-cloud" type="button">
 | 
			
		||||
        <button class="comparison-tab comparison-tab-cloud" data-label="tab-cloud" type="button">
 | 
			
		||||
            <span class="grouped-icons">
 | 
			
		||||
                <i class="icon icon-plan icon-cloud"></i>
 | 
			
		||||
            </span>
 | 
			
		||||
            Cloud
 | 
			
		||||
        </button>
 | 
			
		||||
        <button class="comparison-tab" data-label="tab-hosted" type="button">
 | 
			
		||||
        <button class="comparison-tab comparison-tab-self-hosted" data-label="tab-hosted" type="button">
 | 
			
		||||
            <span class="grouped-icons">
 | 
			
		||||
                <i class="icon icon-plan icon-self-hosted"></i>
 | 
			
		||||
            </span>
 | 
			
		||||
            Self-hosted
 | 
			
		||||
        </button>
 | 
			
		||||
        <button class="comparison-tab" data-label="tab-all" type="button">
 | 
			
		||||
        <button class="comparison-tab comparison-tab-all" data-label="tab-all" type="button">
 | 
			
		||||
            <span class="grouped-icons">
 | 
			
		||||
                <i class="icon icon-plan icon-cloud"></i>
 | 
			
		||||
                <i class="icon icon-plan icon-self-hosted"></i>
 | 
			
		||||
@@ -39,7 +39,7 @@
 | 
			
		||||
    <table class="comparison-table">
 | 
			
		||||
        <colgroup>
 | 
			
		||||
            <col />
 | 
			
		||||
            <col span="7" />
 | 
			
		||||
            <col class="features-col-group" span="7" />
 | 
			
		||||
        </colgroup>
 | 
			
		||||
        <thead>
 | 
			
		||||
            <tr>
 | 
			
		||||
 
 | 
			
		||||
@@ -147,6 +147,19 @@ $(() => {
 | 
			
		||||
        const $pricing_wrapper = $(".portico-pricing");
 | 
			
		||||
        $pricing_wrapper.removeClass("showing-cloud showing-self-hosted");
 | 
			
		||||
        $pricing_wrapper.addClass(`showing-${tab_to_show.slice(1)}`);
 | 
			
		||||
 | 
			
		||||
        const $comparison_table = $(".zulip-plans-comparison");
 | 
			
		||||
 | 
			
		||||
        // Not all pages that show plans include the comparison
 | 
			
		||||
        // table, but when it's present, make sure to align the
 | 
			
		||||
        // comparison table with the current active plans tab
 | 
			
		||||
        if ($comparison_table.length > 0) {
 | 
			
		||||
            const plans_columns_count = tab_to_show.slice(1) === "self-hosted" ? 4 : 3;
 | 
			
		||||
 | 
			
		||||
            // Set the correct values for span and colspan
 | 
			
		||||
            $(".features-col-group").attr("span", plans_columns_count);
 | 
			
		||||
            $(".subheader-filler").attr("colspan", plans_columns_count);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@@ -162,5 +175,41 @@ $(document).on("click", ".pricing-tab", function () {
 | 
			
		||||
    const $pricing_wrapper = $(".portico-pricing");
 | 
			
		||||
    $pricing_wrapper.removeClass("showing-cloud showing-self-hosted");
 | 
			
		||||
    $pricing_wrapper.addClass(`showing-${id}`);
 | 
			
		||||
 | 
			
		||||
    const $comparison_table = $(".zulip-plans-comparison");
 | 
			
		||||
    const comparison_table_id = $comparison_table.attr(id);
 | 
			
		||||
 | 
			
		||||
    // Not all pages that show plans include the comparison
 | 
			
		||||
    // table, but when it's present, make sure to set the
 | 
			
		||||
    // comparison table features to match the current active tab
 | 
			
		||||
    // However, once a user has begun to interact with the
 | 
			
		||||
    // comparison table, giving the `id` attribute a value, we
 | 
			
		||||
    // no longer apply this logic
 | 
			
		||||
    if ($comparison_table.length > 0 && !comparison_table_id) {
 | 
			
		||||
        const plans_columns_count = id === "self-hosted" ? 4 : 3;
 | 
			
		||||
 | 
			
		||||
        // Set the correct values for span and colspan
 | 
			
		||||
        $(".features-col-group").attr("span", plans_columns_count);
 | 
			
		||||
        $(".subheader-filler").attr("colspan", plans_columns_count);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    history.pushState(null, null, `#${id}`);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
$(document).on("click", ".comparison-tab", function () {
 | 
			
		||||
    const plans_columns_counts = {
 | 
			
		||||
        "tab-cloud": 3,
 | 
			
		||||
        "tab-hosted": 4,
 | 
			
		||||
        "tab-all": 7,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const tab_label = $(this)[0].dataset.label;
 | 
			
		||||
    const plans_columns_count = plans_columns_counts[tab_label];
 | 
			
		||||
    const visible_plans_id = `showing-${tab_label}`;
 | 
			
		||||
 | 
			
		||||
    $(".zulip-plans-comparison").attr("id", visible_plans_id);
 | 
			
		||||
 | 
			
		||||
    // Set the correct values for span and colspan
 | 
			
		||||
    $(".features-col-group").attr("span", plans_columns_count);
 | 
			
		||||
    $(".subheader-filler").attr("colspan", plans_columns_count);
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -122,7 +122,7 @@
 | 
			
		||||
        color: hsl(223deg 40% 30%);
 | 
			
		||||
        font-weight: 600;
 | 
			
		||||
        border: none;
 | 
			
		||||
        background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        background-color: hsl(0deg 0% 100% / 0%);
 | 
			
		||||
        display: flex;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
        justify-content: center;
 | 
			
		||||
@@ -202,6 +202,10 @@
 | 
			
		||||
        transition: all 200ms ease-out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .comparison-table th .icon {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .subheader-filler {
 | 
			
		||||
        background: hsl(209deg 41% 94%);
 | 
			
		||||
    }
 | 
			
		||||
@@ -421,19 +425,117 @@
 | 
			
		||||
/* Change comparison-table visibility on /plans
 | 
			
		||||
   based on active plan tab. */
 | 
			
		||||
 | 
			
		||||
.showing-cloud {
 | 
			
		||||
#showing-tab-cloud,
 | 
			
		||||
#showing-tab-hosted,
 | 
			
		||||
#showing-tab-all {
 | 
			
		||||
    .comparison-tab-cloud,
 | 
			
		||||
    .comparison-tab-self-hosted,
 | 
			
		||||
    .comparison-tab-all {
 | 
			
		||||
        background-color: hsl(0deg 0% 100% / 0%);
 | 
			
		||||
        cursor: pointer;
 | 
			
		||||
 | 
			
		||||
        &:hover {
 | 
			
		||||
            background-color: hsl(0deg 0% 100% / 40%);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.showing-cloud,
 | 
			
		||||
#showing-tab-cloud {
 | 
			
		||||
    .comparison-tab-cloud {
 | 
			
		||||
        background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        cursor: default;
 | 
			
		||||
 | 
			
		||||
        &:hover {
 | 
			
		||||
            background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #self-hosted-plan-comparison,
 | 
			
		||||
    #all-plan-comparison,
 | 
			
		||||
    .subheader-open-source,
 | 
			
		||||
    .subheader-self-hosted-legend,
 | 
			
		||||
    .self-hosted-feature-only,
 | 
			
		||||
    .self-hosted-cell {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #cloud-plan-comparison,
 | 
			
		||||
    .cloud-cell {
 | 
			
		||||
        display: revert;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* When only Cloud plans appear in the comparison table,
 | 
			
		||||
       we need to set the border-radius here that is otherwise
 | 
			
		||||
       displayed on the table itself.
 | 
			
		||||
 | 
			
		||||
       TODO: Unset this property when the header row is stuck,
 | 
			
		||||
       so that the little flutter of feature-table lines cannot
 | 
			
		||||
       be seen by eagle-eyed users. */
 | 
			
		||||
    th.last-cloud-th {
 | 
			
		||||
        border-top-right-radius: var(--border-radius-table);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.showing-self-hosted,
 | 
			
		||||
#showing-tab-hosted {
 | 
			
		||||
    .comparison-tab-self-hosted {
 | 
			
		||||
        background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        cursor: default;
 | 
			
		||||
 | 
			
		||||
        &:hover {
 | 
			
		||||
            background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
.showing-self-hosted {
 | 
			
		||||
    #cloud-plan-comparison,
 | 
			
		||||
    #all-plan-comparison,
 | 
			
		||||
    .cloud-cell {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #self-hosted-plan-comparison,
 | 
			
		||||
    .subheader-open-source,
 | 
			
		||||
    .subheader-self-hosted-legend,
 | 
			
		||||
    .self-hosted-feature-only,
 | 
			
		||||
    .self-hosted-cell {
 | 
			
		||||
        display: revert;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    th.last-cloud-th {
 | 
			
		||||
        border-top-right-radius: unset;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#showing-tab-all {
 | 
			
		||||
    .comparison-tab-all {
 | 
			
		||||
        background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        cursor: default;
 | 
			
		||||
 | 
			
		||||
        &:hover {
 | 
			
		||||
            background-color: hsl(0deg 0% 100%);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #cloud-plan-comparison,
 | 
			
		||||
    #self-hosted-plan-comparison {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .subheader-open-source,
 | 
			
		||||
    .subheader-self-hosted-legend,
 | 
			
		||||
    #all-plan-comparison,
 | 
			
		||||
    .cloud-cell,
 | 
			
		||||
    .self-hosted-cell,
 | 
			
		||||
    .self-hosted-feature-only {
 | 
			
		||||
        display: revert;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    th.last-cloud-th {
 | 
			
		||||
        border-top-right-radius: unset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .comparison-table th .icon {
 | 
			
		||||
        display: revert;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user