x x x
x
Only portrait mode is currently supported - please rotate your device.

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

HTML
<link rel="stylesheet" href="https://gsvlabs-confluence-files.s3-us-west-2.amazonaws.com/stylesheets/MorganStanley/msresources.css">

<style>
div#resources-container {
    width: 80%;
}

</style>?v=84">


Custom section
CustomCSSContainerID flex-direction: row; align-items: center; justify-content: space-between;page-banner
Classbanner


Custom section
ClasstitleSection

Custom title
TitleResources


Show If
groupmorganstanley-admins, confluence-administrators


Custom button container
CustomCSSwidth: unset; padding: unset;

Custom button

CustomCSS

border-radius: 6px; background-color: var(--primary-color); border: none; width: auto;
Typecustom-button
TextAdd a New Resource
Url/display/MSRES/Create+Resource



Content Layout Macro

HTML
<div class="content">
    <div class="cards-section">
        <div id="category-cards" class="horizontal-cards">
        </div>
    </div>
</div>

<script>
const categories = [
    {
      title: "Finance & Accounting",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Finance+%26+Operations.jpeg",
      redirect: "/display/MSRES/Finance+and+Accounting"
    },
    {
      title: "Fundraising & Capital Markets",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Fundraising.jpeg",
      redirect: "/display/MSRES/Fundraising+and+Capital+Markets"
    }, {
      title: "Industry Research & Whitepapers",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/IndustryResearchAndWhitepapers.jpg",
      redirect: "/display/MSRES/Industry+Research+and+Whitepapers"
    }, {
      title: "Leadership & Management",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Leadership.jpeg",
      redirect: "/display/MSRES/Leadership+and+Management"
    }, {
      title: "Legal",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Legal.jpeg",
      redirect: "/display/MSRES/Legal"
    }, {
      title: "Podcasts & Digital Media",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Podcasts%26DigitalMedia.jpg",
      redirect: "/display/MSRES/Podcast+and+Digital+Media"
    }, {
      title: "PR & Communications",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Marketing+%26+PR.jpg",
      redirect: "/display/MSRES/PR+and+Communications"
    }, {
      title: "Sales & Marketing",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Sales+%26+Customer+Acquisition.jpeg",
      redirect: "/display/MSRES/Sales+and+Marketing"
    }, {
      title: "Talent Management",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/Talent+%26+HR.jpeg",
      redirect: "/display/MSRES/Talent+Management"
    }, {
      title: "Technology & Product Development",
      imgSrc: "https://gsvlabs-confluence-files.s3.us-west-2.amazonaws.com/images/MStanley/resourcePlaceholders/TechAndProductDev.jpg",
      redirect: "/display/MSRES/Technology+and+Product+Development"
    }
]

// renders the profile cards
async function renderCards(cards, tab) {
  let cardsDiv = document.getElementById('category-cards')
  cardsDiv.innerHTML = "";

  let cardsArray = []

  if (cards.length) {
    let promiseArr = Object.values(cards).map((card) => createProfileHTML(card, tab));

    cardsArray = await Promise.all(promiseArr) // wait for array of promises to resolve
  } else {
    cardsArray.push(`<p class="not-available">Not Available!</p>`);
  }
  cardsDiv.insertAdjacentHTML('beforeend', cardsArray.join(""));
}

// create html for the profile cards
async function createProfileHTML(card, tab) {
  const { title, imgSrc, redirect } = card;

  let myPromise = new Promise(async (resolve, reject) => {
    try {
      const profileHTML = `
            <a class="custom-card-link-styling" onclick="handleCardClick('${title}','${redirect}')">
              <div class="card" style="background-image: url(${imgSrc});">
                <div class="body">
                    <p class="name"> ${title}</p>
                </div>
              </div>
            </a>`
      resolve(profileHTML);
    } catch (error) {
      throw (error);
      reject()
    }
  });

  return await myPromise;
}

function handleCardClick(title, redirect) {
	window.location.href = redirect;
}

renderCards(categories);

</script>