Enduring digital infrastructure thinks ahead

Taking infrastructure management to a new level through intelligent, predictive and cognitive capabilities

Universal Intelligent Infrastructure Management (UIIM)

Powering both XpedITe and the next generation of data center infrastructure management requires adopting the principles of UIIM. Universal Intelligent Infrastructure Management empowers Infrastructure and Operations (I&O) leaders to unlock the future potential of your data center operations.

Embodies the principles of Universal Intelligent Infrastructure Management

Our easy-to-use XpedITe platform goes beyond traditional DCIM to provide solutions that make data centers more resilient, efficient and future ready.

Asset Management
Capacity Management
Connectivity & Stock Management
Auto-Provisioning & Work Orders

Multiple Software Integrations & APIs
AI-Driven Workflows & Automation
Performance Analytics & Operations Dashboards
Digital Twin Capabilities

Compliance Management
Monitoring Alerts
Impact Analysis
Power Management
Sustainability Reporting

Trusted by the globe’s diverse data center operators

XpedITe is trusted by data center operators for its ability to orchestrate multiple IT and operations data sets to deliver complete visibility of what is happening on the ground in real-time.

We provide intelligent solutions that reduce data center failure rates, enable rapid response times with accurate deployment of teams, and improve operational effectiveness.

Up to
80%
Reduction on physical inspections
Up to
80%
Reduction on physical inspections
Up to
80%
Reduction on physical inspections
Up to
80%
Reduction on physical inspections

Use cases

“Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas.”

Goldman Sachs

Variables Setup

Custom Code

Carousel Control

Tag the swiper container

				
					<div id="hero-carousel" class="elementor-widget-image-carousel">
  <!-- Elementor’s internal swiper markup here -->
</div>

				
			

Tag the remote

				
					<!-- Remote nav for HERO carousel -->
<div class="remote-hero-nav">
  <i class="fas fa-circle"  data-carousel-target="hero-carousel" data-slide="0"></i>
  <i class="fas fa-circle"  data-carousel-target="hero-carousel" data-slide="1"></i>
  <i class="fas fa-circle"  data-carousel-target="hero-carousel" data-slide="2"></i>

  <button data-carousel-target="hero-carousel" data-direction="prev">Prev</button>
  <button data-carousel-target="hero-carousel" data-direction="next">Next</button>
</div>

<!-- Remote nav for LOGOS carousel -->
<div class="remote-logos-nav">
  <button data-carousel-target="logos-carousel" data-direction="prev">◀</button>
  <button data-carousel-target="logos-carousel" data-direction="next">▶</button>
</div>

				
			

Place the JS

JS for Elementor sliders

				
					(function ($) {
  'use strict';

  // Cache of carousel ID -> swiper instance
  var swiperMap = {};

  // Find / cache swiper instance by CSS ID
  function getSwiperById(carouselId) {
    if (swiperMap[carouselId]) {
      return swiperMap[carouselId];
    }

    // Find the carousel root by ID
    var $carouselRoot = $('#' + carouselId);
    if (!$carouselRoot.length) {
      return null;
    }

    // Elementor usually nests a .elementor-swiper or .swiper-container inside
    var $swiperEl = $carouselRoot.find('.elementor-swiper, .swiper-container').first();
    if (!$swiperEl.length) {
      return null;
    }

    var swiperInstance = $swiperEl.data('swiper') || $swiperEl[0].swiper;
    if (!swiperInstance) {
      return null;
    }

    swiperMap[carouselId] = swiperInstance;
    return swiperInstance;
  }

  // Attach click handlers to any remote buttons on the page
  function bindRemoteNav() {
    // Avoid double-binding
    $('[data-carousel-target]')
      .off('click.remoteCarouselNav')
      .on('click.remoteCarouselNav', function (e) {
        e.preventDefault();

        var $btn = $(this);
        var carouselId = $btn.data('carousel-target');
        if (!carouselId) return;

        var swiper = getSwiperById(carouselId);
        if (!swiper) return;

        // Handle specific slide nav
        var slideIndex = $btn.data('slide');
        if (slideIndex !== undefined && slideIndex !== null && slideIndex !== '') {
          var index = parseInt(slideIndex, 10);
          if (!isNaN(index)) {
            swiper.slideTo(index);
          }
          return;
        }

        // Handle next/prev nav
        var direction = $btn.data('direction');
        if (direction === 'next') {
          swiper.slideNext();
        } else if (direction === 'prev') {
          swiper.slidePrev();
        }
      });
  }

  // Init when Elementor frontend is ready
  $(window).on('elementor/frontend/init', function () {
    // Bind once after everything is ready
    bindRemoteNav();

    // Also re-bind whenever a widget is loaded (for AJAX-loaded stuff, popups, etc.)
    elementorFrontend.hooks.addAction('frontend/element_ready/widget', function () {
      bindRemoteNav();
    });
  });

})(jQuery);

				
			

JS for listing grid

				
					    (function ($) {
  "use strict";

  // Cache of targetKey -> $slickEl
  var slickMap = {};

  /**
   * Parse targets from attribute
   * Supports:
   *  - "5699d28, 123abcd"
   *  - "#gridA, #gridB"
   *  - ".elementor-element-xxx, .elementor-element-yyy"
   */
  function parseTargets(raw) {
    if (!raw) return [];
    if (Array.isArray(raw)) return raw;
    return String(raw)
      .split(",")
      .map(function (s) { return s.trim(); })
      .filter(Boolean);
  }

  function getWidgetRoot(target) {
    if (!target) return $();

    if (target[0] === "#" || target[0] === "." || target[0] === "[") {
      return $(target).first();
    }

    var $byId = $("#" + target);
    if ($byId.length) return $byId.first();

    var $byDataId = $('.elementor-element[data-id="' + target + '"]');
    if ($byDataId.length) return $byDataId.first();

    return $();
  }

  function getSlickElByTarget(target) {
    if (slickMap[target]) return slickMap[target];

    var $root = getWidgetRoot(target);
    if (!$root.length) return null;

    var $slickEl = $root.find(".jet-listing-grid__items").first();
    if (!$slickEl.length) return null;

    if (!$slickEl.hasClass("slick-initialized") || typeof $slickEl.slick !== "function") {
      return null;
    }

    slickMap[target] = $slickEl;
    return $slickEl;
  }

  function getAllSlickEls(targets) {
    var els = [];
    targets.forEach(function (t) {
      var $el = getSlickElByTarget(t);
      if ($el) els.push({ target: t, $el: $el });
    });
    return els;
  }

  function normaliseIndex(idx) {
    var n = parseInt(idx, 10);
    return isNaN(n) ? null : n;
  }

  /**
   * Optional: allow per-target offset mapping like:
   * data-target-offsets="5699d28:0, 123abcd:1"
   */
  function parseTargetOffsets(raw) {
    var map = {};
    if (!raw) return map;

    String(raw)
      .split(",")
      .map(function (s) { return s.trim(); })
      .filter(Boolean)
      .forEach(function (pair) {
        var parts = pair.split(":");
        if (parts.length < 2) return;
        var key = parts[0].trim();
        var val = normaliseIndex(parts[1].trim());
        if (key && val !== null) map[key] = val;
      });

    return map;
  }

  function currentSlideIndex($slickEl) {
    // Slick stores currentSlide on the slick instance
    try {
      var inst = $slickEl.slick("getSlick");
      return inst && typeof inst.currentSlide === "number" ? inst.currentSlide : 0;
    } catch (e) {
      return 0;
    }
  }

  function bindRemoteNav() {
    $("[data-carousel-target]")
      .off("click.remoteCarouselNav")
      .on("click.remoteCarouselNav", function (e) {
        e.preventDefault();

        var $btn = $(this);

        var targets = parseTargets($btn.data("carousel-target"));
        if (!targets.length) return;

        var $slickEls = getAllSlickEls(targets);

        // Retry once if not ready yet (AJAX / late init)
        if (!$slickEls.length) {
          setTimeout(function () {
            var $retry = getAllSlickEls(targets);
            if ($retry.length) handleNav($btn, $retry);
          }, 80);
          return;
        }

        handleNav($btn, $slickEls);
      });
  }

  function handleNav($btn, slickEls) {
    var slideIndexRaw = $btn.data("slide");
    var direction = $btn.data("direction");

    // Offsets
    var globalOffset = normaliseIndex($btn.data("offset")) || 0;
    var perTargetOffsets = parseTargetOffsets($btn.data("target-offsets"));

    // Optional 1-based slide indexes
    var base = parseInt($btn.data("slide-base"), 10);
    var oneBased = !isNaN(base) && base === 1;

    // --- Specific slide nav: send everyone to (slide + offsets) ---
    if (slideIndexRaw !== undefined && slideIndexRaw !== null && slideIndexRaw !== "") {
      var baseIndex = normaliseIndex(slideIndexRaw);
      if (baseIndex === null) return;

      if (oneBased) baseIndex = baseIndex - 1;

      slickEls.forEach(function (item) {
        var t = item.target;
        var $el = item.$el;

        var targetOffset = perTargetOffsets[t] || 0;
        var finalIndex = baseIndex + globalOffset + targetOffset;

        $el.slick("slickGoTo", finalIndex);
      });

      return;
    }

    // --- Next/Prev nav: move all sliders together ---
    if (direction === "next" || direction === "prev") {
      slickEls.forEach(function (item) {
        item.$el.slick(direction === "next" ? "slickNext" : "slickPrev");
      });
      return;
    }

    // --- Sync by the "primary" slider (first target), with offsets ---
    // Useful if you want a button that means "sync the others to whatever the first is showing"
    if ($btn.data("sync") === true || $btn.data("sync") === "true") {
      var primary = slickEls[0];
      var primaryIndex = currentSlideIndex(primary.$el);

      slickEls.forEach(function (item) {
        var t = item.target;
        var targetOffset = perTargetOffsets[t] || 0;
        var finalIndex = primaryIndex + globalOffset + targetOffset;
        item.$el.slick("slickGoTo", finalIndex);
      });
    }
  }

  $(window).on("elementor/frontend/init", function () {
    bindRemoteNav();

    elementorFrontend.hooks.addAction("frontend/element_ready/widget", function () {
      bindRemoteNav();
    });

    elementorFrontend.hooks.addAction("frontend/element_ready/jet-listing-grid.default", function () {
      bindRemoteNav();
    });
  });
})(jQuery);