Belle-Ve Bricks

Tailored Creations,
Unforgettable Impressions.

braille bricks
braille bricks

How LEGO® Braille Bricks Are Helping The Visually Impaired

Trusted by Over 392 Distinctive Clients
Custom model
Bring Your Idea to Life

Wouldn’t you agree that everyone should be able to enjoy LEGO® regardless of your age, capabilities or walk of life? Everyone deserves to be able to experience the joy those little LEGO® bricks bring. LEGO® is a very visual and tactile activity which does mean it is a challenge for some, but they are always looking to make innovative steps forward which aims to allow an incredibly inclusive hobby that caters for all.

LEGO Braille Bricks Announcement

An announcement was made on the 20th August 2020 that the LEGO® Foundation and LEGO® Group would be releasing a new program for LEGO® Braille Bricks, this initially would be released to seven countries (Brazil, Denmark, France, Germany, Norway, UK and USA) and six languages (Danish, Norwegian, English, Portuguese, German and French) but this was looking to be increased by another four languages as the program became more settled.

leg-braille-bricks-close-up
Image credited to LEGO® Foundation / LEGO® Group

LEGO Braille Bricks Website

Along with this announcement LEGO® released a new website called LEGO Braille Bricks which isn’t a big website but it does include useful activities that can be used to help get used to the bricks, to get an understanding of how you should handle them and generally things that would help people with impaired vision get comfortable finding, manipulating and placing the bricks.

LEGO Braille Bricks Activities

On top this they do also have activities that can be done once they are familiar with these LEGO® Braille Bricks. These activities aim to make learning fun, it covers subjects such as literacy, numeracy and punctuation which is amazing as learning should be fun and what better way is there that learning with LEGO!

The below video gives a good understanding of what LEGO® Braille Bricks offers and what they are trying to achieve!

Getting LEGO® Braille Bricks Packs

If you are interested in getting a pack of LEGO® Braille Bricks you can contact one their regional partners today using this link. The toolkits are free of charge providing your institution, school or service fits within their approval criteria. With each LEGO® Braille Bricks toolkit, you receive:

1. Braille Bricks – a minimum of 300 brick in five LEGO® colours. The bricks cover the full alphabet, numbers 0 to 9 and math symbols
2. Three LEGO® base plates so which the Braille Bricks can be placed on
3. A trusty brick separator

lego-braille-bricks
Image credited to LEGO® Foundation / LEGO® Group

LEGO for The Blind Initiative

Separate to the LEGO® Braille Brick program there is also an unofficial LEGO® innovative idea that is amazing…  Matthew Shifrin was born blind but it did not stop his ability to be innovative to overcome the challenges that come with being blind.

Matthew Shifrin loved building LEGO® as a child, but little did he know how much of an impact he would make on the world in later life. His love for LEGO® and drive to support and build a better world for people who are blind or visually impaired has resulted in his website LEGO for The Blind to be established. They have created instructions for 30+ official LEGO® sets, each set of instructions have been transcribed in to a word document which when used with text to speech software it gives the LEGO® fan step by step instructions allowing them to build independently! How amazing is that?

This is just one thing that Matthew Shifrin has done to better the world for blind and visually impaired people, he runs a pod cast, has stood in front of audiences at events like TEDx giving motivational speeches about his life and was the founder of a project that looked to create virtual reality comics for the blind using 3D sound and head mounted gyroscopes which would simulate motions such as flipping and flying giving fully immersive experience without the need of sight!

If you would like to see Matthew Shifrin at a TEDx event you should check out the below video!

LEGO for The Blind – Matthew Shifrin at TEDx

<div class="badge-base LI-profile-badge" data-locale="en_US" data-size="large" data-theme="dark" data-type="HORIZONTAL" data-vanity="ferdi-vol" data-version="v1"><a class="badge-base__link LI-simple-link" href="https://www.linkedin.com/in/%E2%9C%85-ferdi-vol-corporate-gifts/?trk=profile-badge"></a></div>
/* Auto generated, hash = 5dceu9kevqjdyuy2uw1atqrsu */
//TODO: Break this file down so that we can actually unit test it.
(function(window) {
  /**
  * Renders all unrendred LinkedIn Badges on the page
  */
  window.LIRenderAll = function () {
    var CALLBACK_NAME     = 'LIBadgeCallback', //Must match callback on helpers.js
        BADGE_NAMES       = '.LI-profile-badge, .LI-entity-badge',
        // TODO -- tracking param for other badge types
        TRACKING_PARAM    = 'profile-badge',
        responsesReceived = 0, //Keeps track of number of responses recieved for proper cleanup when finished
        expectedResponses = 0, //Keeps track of number of responses to expect
        scripts           = [ ], //Keeps track of scripts added for proper cleanup when finished
        childScripts      = {}, //Keeps track of child scripts to render
        badges            = Array.prototype.slice.call(document.querySelectorAll(BADGE_NAMES));

    var i, len, badge, rendered;
    for (i = 0, len = badges.length;  i < len; i++) {
      badge    = badges[i];
      rendered =  badge.getAttribute('data-rendered');
      if (!rendered) {
        expectedResponses++;
        badge.setAttribute('data-rendered', true);
        renderBadge(badge);
      }
    }

    function isCNDomain() {
      if (typeof window !== "undefined") {
        var hostName = window.location && window.location.hostname ||  '';
        return (/linkedin(-ei)?.cn$/).test(hostName);
      }

      return false;
    }

    function generateUrl(isEI) {
      var domainPrefix = isEI ? 'https://badges.linkedin-ei' : 'https://badges.linkedin';
      if (isCNDomain()) {
        return domainPrefix + ".cn/";
      }

      return domainPrefix + ".com/";
    }

    function getBadgeKeyQueryParams(badge) {
      return Array.prototype.slice.call(badge.attributes).filter(function (attr) {
        return attr.name.lastIndexOf('data-key-', 0) !== -1;
      }).map(function (attr) {
        // Most browsers automatically lowercase the attribute name when its being read
        // We are calling lowercase on it again to ensure consistency for any browsers that are lagging behind.
        return encodeURIComponent(attr.name.replace('data-', '').toLowerCase()) + '=' + encodeURIComponent(attr.value);
      });
    }

    /*
    * Renders a single badge on the page
    * @param badge: div element of badge to render
    */
    function renderBadge(badge) {
      var size       = badge.getAttribute('data-size'),
          locale     = badge.getAttribute('data-locale'),
          type       = badge.getAttribute('data-type'),
          theme      = badge.getAttribute('data-theme'),
          vanity     = badge.getAttribute('data-vanity'),
          version    = badge.getAttribute('data-version'),
          isEI       = badge.hasAttribute('data-ei'),
          entity     = badge.getAttribute('data-entity'),
          isCreatePage = badge.hasAttribute('data-iscreate'),
          uid        = Math.round(1000000 * Math.random()),
          baseUrl = generateUrl(isEI),
          queryParams = [
            'locale=' + encodeURIComponent(locale),
            'badgetype=' + encodeURIComponent(type),
            'badgetheme=' + encodeURIComponent(theme),
            'uid=' + encodeURIComponent(uid),
            'version=' + encodeURIComponent(version)
          ],
          url;

      if (version === 'v2') {
        baseUrl += 'view';
        queryParams.push('badgesize=' + encodeURIComponent(size));
        queryParams.push('entity=' + encodeURIComponent(entity));
        queryParams = queryParams.concat(getBadgeKeyQueryParams(badge));
      } else {
        baseUrl += 'profile';
        queryParams.push('maxsize=' + encodeURIComponent(size));
        queryParams.push('trk=' + encodeURIComponent(TRACKING_PARAM));
        queryParams.push('vanityname=' + encodeURIComponent(vanity));
      }

      if (isCreatePage) {
        queryParams.push('fromCreate=true');
      }

      url = baseUrl + '?' + queryParams.join('&');
      badge.setAttribute('data-uid' , uid);
      jsonp(url); //Calls responseHandler when done
    }

    /**
    * Handles a response from the server. Finds badge matching badgeUid and inserts badgeHtml there
    * @param badgeHtml: String representing contents of the badge
    * @param badgeUid: UID of the badge to target
    **/
    function responseHandler(badgeHtml, badgeUid) {
      responsesReceived ++;

      var i, badge, uid, isCreate;
      var defaultWidth = 330 // max possible width
      var defaultHeight = 300 // max possible height

      for (i = 0, len = badges.length; i < len; i++) {
        badge = badges[i];
        // isCreate needed to prevent reloading artdeco script tag
        isCreate = badge.getAttribute('data-iscreate');
        uid   = parseInt(badge.getAttribute('data-uid'), 10);
        if (uid === badgeUid) {
          var badgeMarkup = `<body>${badgeHtml}</body>`
          var iframe = document.createElement('iframe');
          iframe.onload = function() {
            var iframeBody = iframe.contentWindow.document.body;
            // 5 px buffer to avoid the badge border being cut off.
            iframe.setAttribute('height', (iframeBody.scrollHeight || defaultHeight) + 5);
            iframe.setAttribute('width', (iframeBody.scrollWidth || defaultWidth) + 5);
          };
          iframe.setAttribute('frameBorder', '0');
          iframe.style.display = 'block';
          badge.appendChild(iframe);
          iframe.contentWindow.document.open();
          iframe.contentWindow.document.write(badgeMarkup);
          iframe.contentWindow.document.close();
          replaceScriptTags(badge, isCreate);
        }
      }
      tryClean();
    }

  // These functions are needed because badge markup is added via innerHtml property which does not run script tags
  function replaceScriptTags(node, isCreate) {
    if (shouldReplaceNode(node, isCreate)) {
      node.parentNode.replaceChild(cloneScriptNode(node), node);
      childScripts[node.src] = true;
    } else {
      var i = 0,
          children = node.childNodes;
      while (i < children.length) {
        replaceScriptTags(children[i++], isCreate);
      }
    }
    return node;
  }

  function shouldReplaceNode(node, isCreate) {
    return isScriptNode(node) && !childScripts[node.src] && (!isCreate || (isCreate && !node.getAttribute('data-isartdeco')));
  }

  function isScriptNode(node) {
    return node.tagName === 'SCRIPT';
  }

  function cloneScriptNode(node){
    var script  = document.createElement("script");
    for( var i = node.attributes.length-1; i >= 0; i-- ) {
      script.setAttribute( node.attributes[i].name, node.attributes[i].value );
    }
    return script;
  }

    // Gets all incoming responses
    window[CALLBACK_NAME] = responseHandler;

    /**
    * Tries to clean added tags
    **/
    function tryClean() {
      //Clean up after all requests are done..
      //Accounts for people including script more than once
      var done = (responsesReceived >= expectedResponses && expectedResponses > 0) || responsesReceived >= badges.length;
      if (done) {
        delete window[CALLBACK_NAME];

        // remove all script tags
        scripts.map(function(script){
          document.body.removeChild(script);
        });

      }
    }

    /*
    * Makes Jsonp request, responses handles by CALLBACK_NAME
    * @param url String: url of server to make request to
    */
    function jsonp(url) {
      var script = document.createElement('script');
      script.src = url;
      scripts.push(script);
      document.body.appendChild(script);
    }
  };

  if (document.readyState === 'complete') {
    window.LIRenderAll();
  } else {
    window.addEventListener('load', window.LIRenderAll, false);
  }

})(window);
Popular Posts