It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://communities.bentley.com/members/101e5f85_2d00_5804_2d00_4e51_2d00_b78c_2d00_7fa2095617ea/

  1. <!DOCTYPE html>
  2.  
  3.  
  4. <!-- template name: identifier.first.template.html.bentley -->
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. <html class="iui-theme-light" lang="en" dir="ltr">
  14. <head>
  15.        <title>Sign In</title>
  16.     <link rel="icon" type="image/x-icon" href="https://connect-cdn.bentley.com/cdn/en/favicon.ico"/>
  17.    <base href="https://ims.bentley.com/"/>
  18.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  19.    <meta http-equiv="x-ua-compatible" content="IE=edge">
  20.    <style>
  21.        #postButton {
  22.                    }
  23.    </style>
  24.    <link rel="stylesheet" type="text/css" href="assets/css/main.css">
  25.    <link rel="stylesheet" type="text/css" href="assets/css/global.css">
  26.    <link rel="stylesheet" type="text/css" href="assets/css/ims-overrides.css">
  27.    <link rel="stylesheet" type="text/css" href="assets/css/inputs.css"/>
  28.    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  29.    <!-- Support Promises in Internet Explorer -->
  30.    <script type="text/javascript">
  31.        var ua = window.navigator.userAgent;
  32.        var msie = ua.indexOf("MSIE ");
  33.        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))
  34.            document.write('<script src="https://polyfill.io/v3/polyfill.min.js?features=Promise%2CPromise.prototype.finally"><\/script>');
  35.    </script>
  36. </head>
  37. <body class="iui-body" onload="parseAccountCompletion();setHrefCookie();">
  38. <div class="ping-container">
  39.    <div class="ping-header has-logo">
  40.        <span class="company-logo"><img src="https://connect-cdn.bentley.com/cdn/en/logo.svg" alt="Bentley Systems logo"></span>
  41.        <text id="company-logo-div-text">
  42.                        Sign In
  43.                    </text>
  44.    </div><!-- .ping-header -->
  45.    <div class="ping-body-container">
  46.        <form method="POST" action="/as/cVuMj/resume/as/authorization.ping" autocomplete="off">
  47.            
  48.                        <label id="identifierInputLabel" class="ping-input-label" for="identifierInput">
  49.                            Email Address
  50.            </label>
  51.            <div class="ping-input-container">
  52.                                <input class="iui-input" id="identifierInput" type="email" size="36" name="subject" value="" autocorrect="off" oninput="clearError();"
  53.                       autocapitalize="off" onKeyPress="return postOnReturn(event)"/>
  54.                                <div class="place-bottom type-alert tooltip-text" id="username-text" onclick="hideToolTip(&#39;username-text&#39;);">
  55.                    <div class="icon">!</div>
  56.                    Please fill out this field.
  57.                </div>
  58.                <!--Adding to handle invalid email format-->
  59.                <div class="place-bottom type-alert tooltip-text" id="invalid-email-format" onclick="hideToolTip(&#39;invalid-email-format&#39;);">
  60.                    <div class="icon">!</div>
  61.                    Please enter a valid email address.
  62.                </div>
  63.            </div>
  64.  
  65.                <div id="postButton" class="ping-buttons">
  66.                <a tabindex="0" id="sign-in-button" onclick="postOk();" onkeydown="if(event.keyCode ==32 || event.keyCode==13) postOk();" class="ping button normal allow"
  67.                   title="Next">Next</a>
  68.            </div><!-- .ping-buttons -->
  69.  
  70.                        <br>
  71.            <span id="registrationLink">
  72.                <a onclick="postCancel()" href="javascript:void(0);" class="iui-anchor">Don't have an account? Register now</a>.
  73.            </span>
  74.            
  75.            <input type="hidden" name="hiddenIdentifierInput" id="hiddenIdentifierInput" value="">
  76.            <input type="hidden" name="clear.previous.selected.subject" id="clear.previous.selected.subject" value="">
  77.            <input type="hidden" name="cancel.identifier.selection" value="false">
  78.            <input type="hidden" name="b" value="$branding">
  79.            <input type="hidden" name="completeAccountCreation" value="">
  80.        </form>
  81.    </div><!-- .ping-body-container -->
  82.  
  83.        <div class="ping-footer-container">
  84.        <div class="ping-footer">
  85.            <div class="ping-copyright">© <script>var year = new Date();document.write(year.getFullYear());</script> Bentley Systems, Incorporated |  <a href="https://www.bentley.com/legal/privacy-policy/" target="_blank"> <span style="color: rgb(153, 153, 153)">Privacy</span></a> | <a href="https://www.bentley.com/legal/terms-of-use-and-select-online-agreement/" target="_blank">  <span style="color: rgb(153, 153, 153)">Terms of Use</span></a> | <a href="https://www.bentley.com/legal/cookie-policy/" target="_blank"> <span style="color: rgb(153, 153, 153)">Cookies</span></a> | <a href="https://www.bentley.com/legal/overview/" target="_blank"> <span style="color: rgb(153, 153, 153)">Legal Notices</span></a>
  86.                <br>
  87.            </div>
  88.        </div> <!-- .ping-footer -->
  89.    </div><!-- .ping-footer-container -->
  90.    </div><!-- .ping-container -->
  91.  
  92. <!-- Global site tag (gtag.js) - Google Analytics -->
  93. <script async src="https://www.googletagmanager.com/gtag/js?id=UA-17568443-1"></script>
  94. <script>
  95.  window.dataLayer = window.dataLayer || [];
  96.  function gtag(){dataLayer.push(arguments);}
  97.  gtag('js', new Date());
  98.  gtag('config', 'UA-17568443-1');
  99. </script>
  100.  
  101. <script type="text/javascript">
  102.  
  103.    var allowReturnKey = true;
  104.  
  105.    function removeIdentifier(existingIdentifier) {
  106.        document.forms[0]['clear.previous.selected.subject'].value = existingIdentifier;
  107.        document.forms[0]['subject'].value = '';
  108.        submitForm();
  109.    }
  110.  
  111.    function showIdentifierInputBox() {
  112.        // update the title text
  113.        document.title = 'Sign In';
  114.        // update company-logo-div-text
  115.        document.getElementById("company-logo-div-text").textContent = 'Sign In';
  116.        // hide the identifier selection list
  117.        document.getElementById("existingAccountsSelectionList").style.display = "none";
  118.        // show the identifier input box
  119.        document.getElementById("identifierInputLabel").style.display = "inline";
  120.        document.getElementById("identifierInput").style.display = "inline";
  121.        document.getElementById("postButton").style.display = "inline-block";
  122.  
  123.        setFocus();
  124.    }
  125.  
  126.    function clearError(){
  127.        //document.getElementById("sign-in-button").onclick = postOk();
  128.        document.getElementById("sign-in-button").classList.remove("disabled");
  129.        document.getElementById('username-text').className = 'place-bottom type-alert tooltip-text';
  130.        document.getElementById('invalid-email-format').className = 'place-bottom type-alert tooltip-text';
  131.    }
  132.  
  133.  
  134.    function selectIdentifier(identifier) {
  135.        document.forms[0]['subject'].value = identifier;
  136.        postOk();
  137.    }
  138.  
  139.    function drowse(ms) {
  140.        return new Promise(function (resolve) {
  141.            return setTimeout(resolve, ms);
  142.        });
  143.    }
  144.  
  145.    function showToolTip(name) {
  146.        document.getElementById(name).className = 'place-bottom type-alert tooltip-text show';
  147.    }
  148.  
  149.    function hideToolTip(name) {
  150.        document.getElementById(name).className = 'place-bottom type-alert tooltip-text';
  151.    }
  152.  
  153.    function postOk() {
  154.        var username_tt_shown = false;
  155.        var any_tt_shown = false;
  156.        document.forms[0]['subject'].value=document.forms[0]['subject'].value.trim();
  157.  
  158.        // remove error tips
  159.        if (document.forms[0]['subject'].value !== '') {
  160.            hideToolTip('username-text');
  161.        }
  162.        // Add back
  163.        if (document.forms[0]['subject'].value === '') {
  164.            showToolTip('username-text');
  165.            username_tt_shown = true;
  166.            any_tt_shown = true;
  167.        } else {
  168.            //var mailformat = /^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,24}$/;
  169.            var mailformat = /^[a-zA-Z0-9'_+&*-]+(?:\.[a-zA-Z0-9'_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,24}$/;
  170.            if (document.forms[0]['subject'].value.match(mailformat)){
  171.                    hideToolTip('invalid-email-format');
  172.                    any_tt_shown = true;
  173.                    document.getElementById("sign-in-button").classList.add("disabled");
  174.                    document.getElementById("sign-in-button").onclick = null;
  175.                    submitForm();
  176.            }
  177.            if (!document.forms[0]['subject'].value.match(mailformat)){
  178.                    document.getElementById('invalid-email-format').className += ' show';
  179.                    showToolTip('invalid-email-format');
  180.                    any_tt_shown = true;
  181.            }
  182.        }
  183.        if (any_tt_shown) {
  184.            drowse(5000).then(function(result) {
  185.                hideToolTip('invalid-email-format');
  186.                hideToolTip('username-text');
  187.            });
  188.        }
  189.    }
  190.  
  191.    function autoPost() {
  192.        var urlDecodedString = decodeURIComponent('$ofh');
  193.        var decodedString = window.atob(urlDecodedString);
  194.        document.forms[0]['subject'].value='id@' + decodedString;
  195.        document.forms[0]['subject'].style.display = "none";
  196.        submitForm();
  197.    }
  198.  
  199.    function postCancel()
  200.    {
  201.        document.getElementById('hiddenIdentifierInput').setAttribute('name','subject');
  202.        document.getElementById('identifierInput').setAttribute('name','hiddenIdentifierInput');
  203.        document.forms[0]['subject'].value = 'registration';
  204.        submitForm();
  205.        //postOk();
  206.        //document.forms[0]['cancel.identifier.selection'].value = 'true';
  207.        //submitForm();
  208.    }
  209.  
  210.    function submitForm()
  211.    {
  212.        document.forms[0].submit();
  213.    }
  214.       function postOnReturn(e) {
  215.        var keycode;
  216.        if (window.event) keycode = window.event.keyCode;
  217.        else if (e) keycode = e.which;
  218.        else return true;
  219.  
  220.        if (keycode == 13) {
  221.            if (allowReturnKey == false) {
  222.                return false;
  223.            }
  224.            allowReturnKey = false;
  225.            postOk();
  226.            return false;
  227.        } else {
  228.            if (allowReturnKey == false) {
  229.                allowReturnKey = true;
  230.            }
  231.            return true;
  232.        }
  233.    }
  234.  
  235.    function setFocus() {
  236.        var platform = navigator.platform;
  237.        if (platform != null && platform.indexOf("iPhone") == -1) {
  238.            document.getElementById('identifierInput').focus();
  239.        }
  240.    }
  241.  
  242.    function parseAccountCompletion() {
  243.        if ("" === "TRUE") {
  244.            document.forms[0]['completeAccountCreation'].value = 'true';
  245.            document.forms[0]['subject'].value = '';
  246.            submitForm();
  247.        } else {
  248.            setFocus();
  249.            parseBinaryBranding();
  250.        }
  251.    }
  252.  
  253.    function setHrefCookie() {
  254.        document.cookie = "originalHref=" + document.location.href + "; path=/";
  255.    }
  256.  
  257.  
  258.    function parseBinaryBranding(){
  259.        let brandingRegex = /([0|1])([0|1])([0|1])([0|1])/;
  260.        let brandingResult = '$branding'.match(brandingRegex);
  261.        if (brandingResult) {
  262.            if (brandingResult[1] == '0') {
  263.                document.getElementsByClassName('company-logo')[0].style.visibility = 'hidden';
  264.                document.getElementsByClassName('ping-footer-container')[0].style.visibility = 'hidden';
  265.            }
  266.            if (brandingResult[2] == '0') {
  267.                document.getElementById('registrationLink').style.visibility = 'hidden';
  268.            }
  269.            if (brandingResult[3] == '0') {
  270.                //no-op
  271.            }
  272.            if (brandingResult[4] == '0') {
  273.                //no-op
  274.            }
  275.        }
  276.    }
  277.  
  278.  
  279.    function setMobile(mobile) {
  280.        var className = ' mobile',
  281.            hasClass = (bodyTag.className.indexOf(className) !== -1);
  282.  
  283.        if (mobile && !hasClass) {
  284.            bodyTag.className += className;
  285.  
  286.        } else if (!mobile && hasClass) {
  287.            bodyTag.className = bodyTag.className.replace(className, '');
  288.        }
  289.  
  290.        <!-- Check if this is the PingOne Mobile App -->
  291.            }
  292.  
  293.    function getScreenWidth() {
  294.        return (window.outerHeight) ? window.outerWidth : document.body.clientWidth;
  295.    }
  296.  
  297.    var bodyTag = document.getElementsByTagName('body')[0],
  298.        width = getScreenWidth();
  299.  
  300.    if (/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
  301.        setMobile(true);
  302.    } else {
  303.        setMobile((width <= 480));
  304.        window.onresize = function() {
  305.            width = getScreenWidth();
  306.            setMobile((width <= 480));
  307.        }
  308.    }
  309.  
  310. </script>
  311.  
  312. </body>
  313. </html>
  314.  
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda