CINXE.COM
SOTI Technical Resources, News, Product Support
<!doctype html> <html lang="en"> <head> <title>SOTI Technical Resources, News, Product Support</title> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="description" content="Online community for SOTI partners and customers"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="/images/favicon.ico"> <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="192x192" href="/images/android-chrome-192x192.png"> <link rel="icon" type="image/png" sizes="512x512" href="/images/android-chrome-512x512.png"> <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"> <link rel="stylesheet" href="/css/app.css?v=0615"> <!-- update css to mm/dd format --> <link rel="stylesheet" href="/css/help-ico-styles.css"> <!-- OneTrust Cookies Consent Notice start for pulse.soti.net --> <script type="text/javascript" src="https://cdn.cookielaw.org/consent/018debfc-88a2-769f-8bfc-17865acbc83f/OtAutoBlock.js"></script> <script type="text/javascript" charset="UTF-8" data-domain-script="018debfc-88a2-769f-8bfc-17865acbc83f" src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js"></script> <script type="text/javascript"> function OptanonWrapper() { } </script> <!-- OneTrust Cookies Consent Notice end for pulse.soti.net --> <script type="text/javascript">!function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"5",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++){var i=n[a].split("=");2===i.length&&(e[i[0][b]()]=i[1])}if(!e[C]){var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")}return e}(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=(r=v(c,"Exception")).data).baseType="ExceptionData",o.baseData.exceptions=[{typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(S&&S.pathname||"_unknown_")+"\nEndpoint: "+i,parsedStack:[]}],r)),l.push(function(e,t,n,a){var i=v(c,"Message"),r=i.data;r.baseType="MessageData";var o=r.baseData;return o.message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+n+")").replace(/\"/g,"")+'"',o.properties={endpoint:a},i}(0,0,t,p)),function(e,t){if(JSON){var n=T.fetch;if(n&&!y.useXhr)n(t,{method:N,body:JSON.stringify(e),mode:"cors"});else if(XMLHttpRequest){var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))}}}(l,p))}function i(e,t){f||setTimeout(function(){!t&&m.core||a()},500)}var e=function(){var n=l.createElement(k);n.src=h;var e=y[w];return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=i,n.onerror=a,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||i(0,t)},n}();y.ld<0?l.getElementsByTagName("head")[0].appendChild(e):setTimeout(function(){l.getElementsByTagName(k)[0].parentNode.appendChild(e)},y.ld||0)}try{m.cookie=l.cookie}catch(p){}function t(e){for(;e.length;)!function(t){m[t]=function(){var e=arguments;g||m.queue.push(function(){m[t].apply(m,e)})}}(e.pop())}var n="track",r="TrackPage",o="TrackEvent";t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+r,"stop"+r,"start"+o,"stop"+o,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),m.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4};var s=(d.extensionConfig||{}).ApplicationInsightsAnalytics||{};if(!0!==d[I]&&!0!==s[I]){var c="onerror";t(["_"+c]);var u=T[c];T[c]=function(e,t,n,a,i){var r=u&&u(e,t,n,a,i);return!0!==r&&m["_"+c]({message:e,url:t,lineNumber:n,columnNumber:a,error:i}),r},d.autoExceptionInstrumented=!0}return m}(y.cfg);function a(){y.onInit&&y.onInit(n)}(T[t]=n).queue&&0===n.queue.length?(n.queue.push(a),n.trackPageView({})):a()}(window,document,{ src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js", // The SDK URL Source crossOrigin: "anonymous", cfg: { // Application Insights Configuration instrumentationKey: 'b3d6dcb6-2732-4991-95bd-e18bafa6e653' }});</script> <script src="/tinymce/tinymce.min.js"></script> </head> <body x-data="initPage" class="flex flex-col min-h-screen"> <section id="logo_topnav" class="fixed bg-white w-full shadow-[0_0_5px_0_rgba(0,0,0,0.12)] z-40"> <div class="flex max-w-[81.625rem] mx-auto h-[4.5rem]"> <div class="flex ml-4 lg:ml-10 xl:ml-0" :class="{ '': !showSearch, 'lg:justify-between': showSearch }"> <div class="flex flex-none items-center h-full leading-10"> <button aria-label="Show mobile nav " x-ref="mobNavBtn" class="cursor-pointer mr-2 flex lg:hidden lg:text-xl" @click="navOpen=!navOpen; $nextTick(() => $refs.dialog.focus());" @keydown.enter="navOpen=!navOpen; $refs.dialog.focus()"> <span class="text-graphite-600 align-middle text-2xl icon icon-burger-menu mt-0.5"></span> </button> <a class="flex self-center flex-shrink-0 items-center h-[44.63px] mr-[1rem]" href="/" title="Pulse Home Page Link"> <img class="h-[24px] " src="/media/dikktauf/soti-pulse-logoname.svg" alt="SOTI Pulse Logo"/> </a> </div> <div class="hidden lg:inline-block flex-none pl-0 xl:pl-[2.6875rem]" x-show="!showSearch" x-transition:enter="transition delay-200 duration-400 transform ease-out" x-transition:enter-start="scale-75 opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="transition transform ease-in" x-transition:leave-start="opacity-100" x-transition:leave-end="scale-90 opacity-0"> <nav class="flex inline-block align-middle"> <navitem class="ml-[1.875rem] text-graphite-800 px-[0.625rem] hover:text-pulse-900 leading-[4.15rem] "> <a aria-label="News" class="block no-underline mt-[0.25rem] tracking-wider text-[16px] " href="/news/"> News </a> </navitem> <navitem class="ml-[1.875rem] text-graphite-800 px-[0.625rem] hover:text-pulse-900 leading-[4.15rem] selected border-b-[3px] border-pulse-900 text-pulse-900"> <a aria-current="page" aria-label="Marketplace" class="block no-underline mt-[0.25rem] tracking-wider text-[16px] selected text-pulse-900 active:text-pulse-900" href="/marketplace/devices/"> Marketplace </a> </navitem> <navitem class="ml-[1.875rem] text-graphite-800 px-[0.625rem] hover:text-pulse-900 leading-[4.15rem] "> <a aria-label="Product Support" class="block no-underline mt-[0.25rem] tracking-wider text-[16px] " href="/support/soti-mobicontrol/"> Product Support </a> </navitem> <navitem class="ml-[1.875rem] text-graphite-800 px-[0.625rem] hover:text-pulse-900 leading-[4.15rem] "> <a aria-label="Community" class="block no-underline mt-[0.25rem] tracking-wider text-[16px] " href="https://discussions.soti.net/"> Community </a> </navitem> </nav> </div> </div> <div class="hidden">MobiControl[marketplace];Snap[marketplace];XSight[marketplace];Connect[marketplace];Identity[marketplace];</div> <div x-show="showSearch" class="absolute inset-x-0 top-0 mx-auto flex h-[4.5rem] lg:max-w-[42.5rem] lg:w-[60%] lg:pl-20 xl:pl-12 items-center" @click.outside="closeSearch()"> <div class="relative flex w-full h-full text-gray-400 focus-within:text-gray-600"> <form role="search" class="flex inline-block w-full h-full font-light truncate align-middle" x-show="showSearch" x-transition:enter="transition duration-200 transform ease-out" x-transition:enter-start="scale-75 opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="transition transform ease-in" x-transition:leave-start="opacity-100" x-transition:leave-end="scale-90 opacity-0" x-cloak> <button type="button" class="absolute inset-y-0 flex items-center p-2 my-4 text-graphite-600 hover:text-graphite-800 focus:outline-none focus:ring-0 focus:border-transparent" @click="openSearchPage()"> <span class="inline-block mx-2 text-base rotate-90 icon-search -scale-100 icon" aria-hidden="true"></span> </button> <label for="search" class="sr-only">Search Marketplace</label> <input class="block w-full h-full pl-12 pr-12 placeholder-opacity-50 border-transparent bg-graphite-100 selection:bg-pulse-900/20 selection:text-pulse-900 caret-pulse-900 text-graphite-800 placeholder-graphite-800 focus:outline-none focus:ring-0 focus:border-transparent sm:text-base" id="search" name="query" x-model="query" x-ref="searchInput" @input="product = 'All', area = 'Marketplace', subproduct = 'All', productSupport = 'MobiControl[marketplace];Snap[marketplace];XSight[marketplace];Connect[marketplace];Identity[marketplace];'" @input.debounce.300="fetchSearch()" @keydown.enter.prevent="openSearchPage()" @keydown.escape.prevent="closeSearch()" placeholder="Search Marketplace" type="text" autocomplete="off"> <button type="button" class="absolute inset-y-0 right-0 flex items-center p-2 pr-4 my-4 text-graphite-600 hover:text-graphite-800 focus:outline-none focus:ring-0 focus:border-transparent" @click="closeSearch()"> <span class="inline-block text-xs icon-reject icon" aria-hidden="true"></span> <span class="sr-only">Close Search Box</span> </button> </form> <template x-if="!query.isNullOrWhiteSpace()"> <div class="absolute z-10 top-[4.5rem] border-gray-400 w-full bg-white shadow-lg overflow-hidden sm:rounded-b-md"> <div x-show="!searchCompleted" class="z-10 grid w-full h-full gap-5 p-8 bg-white shadow-xl md:py-5"> <template x-for="i in 6"> <div class="relative flex items-center space-x-4 animate-pulse"> <div class="flex-shrink-0" aria-hidden="true"> <div class="flex items-center justify-center w-10 h-10 bg-whisper rounded-xl"></div> </div> <div class="flex-1 min-w-0"> <div class="flex flex-col w-full"> <div class="w-full h-1 bg-whisper"></div> </div> </div> </div> </template> </div> <div x-show.debounce.750="searchCompleted && sResults && sResults.length == 0" class="z-10 grid w-full h-full gap-5 p-8 bg-white shadow-xl md:py-5"> <div class=""> <div class=""> <img class="w-1/2 mx-auto" src="/images/not-found.svg"> </div> <div class="flex flex-col items-center text-graphite-900"> <p class="mt-2 text-xl">No Matches Found!</p> <p class="text-md">Try with a different search term</p> </div> </div> </div> <div x-show="sResults && sResults.length > 0" class="z-10 grid w-full h-full gap-3 p-8 bg-white shadow-xl md:py-5"> <div class="grid" x-show="sResults && sResults.length"> <div class="flex flex-col gap-4"> <template x-if="area === 'Marketplace'"> <template x-for="(results, category) in getResultsByCategory()" :key="category"> <div> <div class="flex justify-between"> <h4 x-text="category" class="flex-grow font-light tracking-wide my-3 text-[0.75rem] text-gray-500 uppercase"></h4> <span class="flex"> <a :href="buildMarketingSearchUrl(category), product = 'All', area = 'Marketplace', subproduct = 'All'" class="self-center text-xs font-light cursor-pointer hover:underline text-cerulian-800">view all</a> <svg xmlns="http://www.w3.org/2000/svg" class="self-center w-4 h-4 text-cerulian-800" viewBox="0 0 20 20" fill="currentColor"> <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" /> </svg> </span> </div> <template x-for="result in results" :key="result.url"> <a x-bind:href="result.url.replace(/\./g, '')" class="flex items-start px-3 py-2 m-1 transition duration-150 ease-in-out rounded-sm hover:bg-pulse-50"> <div class="flex-shrink-0" aria-hidden="true"> <div x-data="{ imageUrl: result.thumbnail_Url }" class="relative flex items-center justify-center object-contain w-8 h-8 overflow-hidden font-pulse"> <img class="absolute object-contain w-8 h-8" x-bind:src="imageUrl" /> </div> </div> <div class="ml-4"> <p class="text-sm text-graphite-900 line-clamp-1" x-text="result.title"></p> <p class="text-xs text-gray-500 line-clamp-1" x-text="splitCamelCase(result.category)"></p> </div> </a> </template> </div> </template> </template> <template x-if="area !== 'Marketplace'"> <template x-for="(result, index) in sResults" :key="index"> <a :href="result.url" class="flex items-start p-3 -m-3 transition duration-150 ease-in-out rounded-lg hover:bg-gray-50"> <div> <template x-if="result.category?.toUpperCase() === 'DOWNLOAD'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-sotiMobiControl rounded-xl"> <span class="inline-block text-lg text-white icon-downloads icon"></span> </div> </div> </template> </div> <template x-if="result.category?.toUpperCase() === 'RELEASENOTE'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-tangerine-800 rounded-xl"> <span class="inline-block text-lg text-white icon-product-notes icon"></span> </div> </div> </template> <template x-if="result.category?.toUpperCase() === 'HELP'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-pulse-800 rounded-xl"> <span class="inline-block text-lg text-white icon-help-docs icon"></span> </div> </div> </template> <template x-if="result.category?.toUpperCase() === 'VIDEO'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-sotiConnect rounded-xl"> <span class="inline-block text-lg text-white icon-videos icon"></span> </div> </div> </template> <template x-if="result.category?.toUpperCase() === 'NEWS'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-sotiInsight rounded-xl"> <span class="inline-block text-lg text-white icon-product-news icon"></span> </div> </div> </template> <template x-if="result.category?.toUpperCase() === 'AGENT'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-sotiInsight rounded-xl"> <span class="inline-block text-lg text-white icon-product-news icon"></span> </div> </div> </template> <template x-if="result.category?.toUpperCase() === 'CUSTOM'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-sotiInsight rounded-xl"> <span class="inline-block text-lg text-white icon-product-news icon"></span> </div> </div> </template> <template x-if="result.category?.toUpperCase() === 'MARKETPLACE'"> <div class="flex-shrink-0" aria-hidden="true"> <div class="mt-0.5 flex items-center justify-center w-8 h-8 font-pulse bg-sotiInsight rounded-xl"> <span class="inline-block text-lg text-white icon-product-news icon"></span> </div> </div> </template> <div class="ml-4"> <p class="text-sm text-graphite-900 line-clamp-1" x-text="result.header"></p> <p class="text-xs text-gray-500 line-clamp-1" x-text="splitCamelCase(result.category)"></p> </div> </a> </template> </template> </div> </div> <div class="flex justify-center pt-3 text-md text-cerulian-800 group"> <a class="px-4 text-sm cursor-pointer text-cerulian-800" :href="buildUrl('')"> <div class="flex items-baseline justify-center text-sm"> <p class="truncate group-hover:underline">See all search results</p> <span class="flex-shrink-0 ml-2 sm:flex"> <span class="inline-block text-xs icon-arrow-right icon" aria-hidden="true"></span> </span> </div> </a> </div> </div> </div> </template> </div> </div> <div x-show="!showSearch" class="flex flex-1" x-cloak> <div class="flex-1"></div> <button class="inline-block mt-[.12rem] mr-[1rem] lg:mr-[1.6rem] text-[1.2rem] text-graphite-800" aria-label="Open Search Box" @click="openSearch()"> <span class="inline-block rotate-90 icon-search -scale-100 icon" aria-hidden="true"></span> <span class="sr-only">Open Search Box</span> </button> </div> <!-- Profile dropdown --> <div class="flex flex-none text-[#4b4b4b] items-center h-full p-4 xl:pr-0 leading-10" x-show="!showSearch"> <div class="hover:text-pulse-900 cursor-pointer mr-[0.125rem]" onclick="ToggleLoginModal()"> Log In </div> </div> </div> </section> <div class="relative z-[999999] hidden" id="loginModal" aria-labelledby="loginModal" role="dialog" aria-modal="true"> <!-- Background backdrop, show/hide based on modal state. Entering: "ease-out duration-300" From: "opacity-0" To: "opacity-100" Leaving: "ease-in duration-200" From: "opacity-100" To: "opacity-0" --> <div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"></div> <div class="fixed inset-0 z-10 overflow-y-auto"> <div class="flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0"> <!-- Modal panel, show/hide based on modal state. Entering: "ease-out duration-300" From: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" To: "opacity-100 translate-y-0 sm:scale-100" Leaving: "ease-in duration-200" From: "opacity-100 translate-y-0 sm:scale-100" To: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" --> <div class="relative transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-lg sm:p-6"> <div class="absolute right-0 top-0 hidden pr-4 pt-6 sm:block"> <button type="button" class="rounded-md bg-white text-gray-400 hover:text-gray-500" onclick="CloseLoginModal()"> <span class="sr-only">Close</span> <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> <div class="sm:flex sm:items-start"> <div class="mt-6 text-center sm:ml-4 sm:mt-0 sm:text-left"> <h3 class="text-2xl leading-6 text-gray-900" id="modal-title"> SOTI Altitude Partner Login </h3> <!-- Error notification--> <div class="rounded-md bg-pulse-50 p-2 mt-4 hidden" id="loginNotification"> <div class="flex"> <div class="flex-shrink-0"> <svg class="h-5 w-5 text-pulse-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z" clip-rule="evenodd" /> </svg> </div> <div class="ml-3"> <h3 class="text-sm font-medium text-pulse-800" id="loginNotificationMessage"> </h3> </div> </div> </div> <!-- Form Body--> <form id="loginForm" class="space-y-6 mt-4" method="POST"> <div> <label for="email" class="block text-sm font-medium leading-6 text-gray-900">Email</label> <div class="mt-2"> <input id="email" name="email" type="email" autocomplete="email" required class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-1 focus:ring-inset focus:ring-gray-300 placeholder:text-gray-400 hover:ring-1 hover:ring-inset hover:ring-graphite-800 sm:text-sm sm:leading-6" placeholder="e.g. john.doe@gmail.com"> </div> </div> <div> <label for="password" class="block text-sm font-medium leading-6 text-gray-900">Password</label> <div class="mt-2"> <input id="password" name="password" type="password" autocomplete="current-password" required class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 hover:ring-1 hover:ring-inset hover:ring-graphite-800 sm:text-sm sm:leading-6" placeholder="Enter your password"> </div> </div> <div> <button onclick="SubmitLoginForm(event)" class="flex w-full justify-center rounded-md bg-graphite-700 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-pulse-800 cursor-pointer disabled:opacity-50 disabled:hover:cursor-not-allowed">LOG IN</button> <button onclick="CloseLoginModal()" class="mt-2 sm:hidden border-1 border-graphite-700 flex w-full justify-center rounded-md bg-white px-3 py-1.5 text-sm font-semibold leading-6 text-graphite-700 shadow-sm hover:bg-pulse-800 cursor-pointer disabled:opacity-50 disabled:hover:cursor-not-allowed">CANCEL</button> </div> <div class="flex items-center justify-between"> <div class="text-sm leading-6"> <a onclick="OpenForgotPasswordModel()" class="text-cerulian-600 hover:underline cursor-pointer">Forgot password?</a> </div> </div> <input name="__RequestVerificationToken" type="hidden" value="CfDJ8IDcHpe7LXhJmywpNxKQnruxE3DGuvUugBeBpyuiXA1-IT9BtCxG7fFd2BNZHti0ZRMDrBxyd8jPvWGBbRFM48BLAZ_2xMmOXdj2wwn4DroX-nkGHgHhbZvSXQlJDkhi50wrUWblyq6cpTohvTWL3cQ" /></form> <div class="relative mt-5"> <div class="absolute inset-0 flex items-center" aria-hidden="true"> <div class="w-full border-t border-gray-200"></div> </div> </div> <div class="mt-5"> <p class="text-sm text-gray-500">If you are not a part of the SOTI Altitude Partner Program, please contact your SOTI Account Representative or <a href="https://www.soti.net/partners/become-a-partner/" target="_blank" class="text-cerulian-600 hover:underline cursor-pointer">Signup</a> now</p> </div> </div> </div> </div> </div> </div> </div> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> // UNDER NO CIRCUMSTANCES SHOULD THE NAME OF THE KEYS BE CHANGED function SubmitLoginForm(e) { e.preventDefault(); document.getElementById("notification").classList.add("hidden"); e.target.innerHTML = "LOGGING IN..."; e.target.disabled = true; var formAction = '/api/marketplace/authentication/Login'; let email = document.getElementById("email").value; let password = document.getElementById("password").value; fetch(formAction, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "Email": email, "Password": password}) }).then(response => { if(response.status == 200){ location.reload(); } else if (response.status == 401) { document.getElementById("loginNotificationMessage").innerHTML = "Your login credentials are not correct. Please try again."; document.getElementById("loginNotification").classList.remove("hidden"); e.target.innerHTML = "LOG IN"; e.target.disabled = false; }else{ document.getElementById("loginNotificationMessage").innerHTML = "Internal Server Error. Please try again."; document.getElementById("loginNotification").classList.remove("hidden"); e.target.innerHTML = "LOG IN"; e.target.disabled = false; } }) .catch(error => { document.getElementById("loginNotificationMessage").innerHTML = "Internal Server Error. Please try again."; document.getElementById("loginNotification").classList.remove("hidden"); }); } function CloseLoginModal() { document.getElementById("loginNotification").classList.add("hidden"); document.getElementById("email").value = ""; document.getElementById("password").value= ""; document.getElementById("loginModal").classList.add("hidden"); } function OpenForgotPasswordModel(){ document.getElementById("loginModal").classList.add("hidden"); document.getElementById("forgotPasswordModal").classList.remove("hidden"); } </script> <div class="relative z-[999999] hidden" id="forgotPasswordModal" aria-labelledby="loginModal" role="dialog" aria-modal="true"> <!-- Background backdrop, show/hide based on modal state. Entering: "ease-out duration-300" From: "opacity-0" To: "opacity-100" Leaving: "ease-in duration-200" From: "opacity-100" To: "opacity-0" --> <div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"></div> <div class="fixed inset-0 z-10 overflow-y-auto"> <div class="flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0"> <!-- Modal panel, show/hide based on modal state. Entering: "ease-out duration-300" From: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" To: "opacity-100 translate-y-0 sm:scale-100" Leaving: "ease-in duration-200" From: "opacity-100 translate-y-0 sm:scale-100" To: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" --> <div class="relative transform overflow-hidden rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-lg sm:p-6"> <div class="absolute right-0 top-0 hidden pr-4 pt-6 sm:block"> <button type="button" class="rounded-md bg-white text-gray-400 hover:text-gray-500" onclick="CloseForgotPasswordModal()"> <span class="sr-only">Close</span> <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> <div class="sm:flex sm:items-start"> <div class="mt-6 text-center sm:ml-4 sm:mt-0 sm:text-left"> <h3 class="text-2xl leading-6 text-gray-900" id="modal-title"> Reset your Password </h3> <!--Nnotification--> <div class="hidden" id="notification"> <div class="rounded-md bg-fern-50 p-2 mt-4" > <div class="flex"> <div class="flex-shrink-0"> <svg class="h-5 w-5 text-fern-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" clip-rule="evenodd" /> </svg> </div> <div class="ml-3"> <h3 class="text-sm font-medium text-grey-800" id="notificationMessage"> A link to reset your password has been sent to your registered email. </h3> </div> </div> </div> <div class="mt-5"> <p class="text-sm text-gray-500">If you do not find it in your inbox, check your spam folder.</p> </div> <div class="mt-5"> <p class="text-sm text-gray-500">Didn't get email? <a onclick="ResendEmail()" class="text-cerulian-600 hover:underline cursor-pointer">Resend email</a></p> </div> <div class="mt-5"> <a onclick="CloseForgotPasswordModal()" class="flex w-full justify-center rounded-md bg-graphite-700 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-pulse-800 cursor-pointer">OK</a> </div> </div> <!-- Form Body--> <form id="forgotPasswordForm" class="space-y-6 mt-4" method="POST"> <div class="mt-5"> <p class="text-sm text-gray-500">Enter your registered email address and we will send a link to change your password.</p> </div> <div> <label for="email" class="block text-sm font-medium leading-6 text-gray-900">Email</label> <div class="mt-2"> <input id="email" name="email" type="email" autocomplete="email" required class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-1 focus:ring-inset focus:ring-gray-300 placeholder:text-gray-400 hover:ring-1 hover:ring-inset hover:ring-graphite-800 sm:text-sm sm:leading-6" placeholder="e.g. john.doe@gmail.com"> </div> </div> <div class="mt-5 sm:mt-6 sm:grid sm:grid-flow-row-dense sm:grid-cols-2 sm:gap-3"> <button onclick="SubmitForgotPassword()" type="button" class="inline-flex w-full justify-center rounded-md bg-graphite-700 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-pulse-800 sm:col-start-2">SEND LINK</button> <button onclick="CancelForgotPassword()" type="button" class="mt-3 inline-flex w-full justify-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 sm:col-start-1 sm:mt-0">CANCEL</button> </div> <input name="__RequestVerificationToken" type="hidden" value="CfDJ8IDcHpe7LXhJmywpNxKQnruxE3DGuvUugBeBpyuiXA1-IT9BtCxG7fFd2BNZHti0ZRMDrBxyd8jPvWGBbRFM48BLAZ_2xMmOXdj2wwn4DroX-nkGHgHhbZvSXQlJDkhi50wrUWblyq6cpTohvTWL3cQ" /></form> </div> </div> </div> </div> </div> </div> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> function SubmitForgotPassword() { //document.getElementById("notification").classList.add("hidden"); var formAction = '/api/marketplace/authentication/forgotpassword'; let email = document.getElementById("forgotPasswordForm").querySelector("#email").value; //let password = document.getElementById("password").value; // UNDER NO CIRCUMSTANCES SHOULD THE NAME OF THE KEYS BE CHANGED fetch(formAction, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "email": email}) }).then(response => { if(response.status == 200){ document.getElementById("forgotPasswordModal").querySelector("#notification").classList.remove("hidden"); document.getElementById("forgotPasswordForm").classList.add("hidden"); } else{ // console.log("Internal Server Error. Please try again.") } }) .catch(error => { // console.log("Internal Server Error. Please try again.") }); } function CloseForgotPasswordModal() { document.getElementById("forgotPasswordModal").classList.add("hidden"); // Reset Modal document.getElementById("forgotPasswordModal").querySelector("#notification").classList.add("hidden"); document.getElementById("forgotPasswordForm").classList.remove("hidden"); } function CancelForgotPassword() { CloseForgotPasswordModal(); document.getElementById("loginModal").classList.remove("hidden"); } function ResendEmail() { document.getElementById("forgotPasswordModal").querySelector("#notification").classList.add("hidden"); document.getElementById("forgotPasswordForm").classList.remove("hidden"); } </script> <div class="h-[4.5rem] w-full"></div> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> function ToggleLoginModal() { let modal = document.getElementById("loginModal"); modal.classList.toggle("hidden"); } function ToggleProfileMenu() { let modal = document.getElementById("profileMenu"); modal.classList.toggle("hidden"); } function CloseProfileMenuOnClickOutside(event) { let profileMenu = document.getElementById("profileMenu"); let userMenuButton = document.getElementById("user-menu-button"); if (profileMenu != null && !profileMenu.contains(event.target) && !userMenuButton.contains(event.target)) { profileMenu.classList.add("hidden"); } } // Attach the event listener when the document is ready document.addEventListener("DOMContentLoaded", function () { document.addEventListener("click", CloseProfileMenuOnClickOutside); }); // Function to remove the event listener when the document is unloaded window.addEventListener("beforeunload", function () { document.removeEventListener("click", CloseProfileMenuOnClickOutside); }); function Logout() { let formAction = '/api/marketplace/authentication/logout'; fetch(formAction, { method: 'POST'}).then(response => { if (response.status == 200) { //Remove cookie for discussion document.cookie = '.Central.Soti.Authentication=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; window.location.href = "/marketplace" } }) .catch(error => { }); } </script> <div x-show="navOpen" class="fixed flex w-full h-full z-40 top-0" role="dialog" aria-modal="true" tabindex="0" x-ref="dialog" x-cloak> <div id="bdrop" x-show="navOpen" x-transition:enter="transition-opacity ease-linear duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="transition-opacity ease-linear duration-300" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="fixed inset-0 bg-gray-700 bg-opacity-75" @click="navOpen = false; $refs.mobNavBtn.focus()" aria-hidden="true"> </div> <div x-show="navOpen" x-transition:enter="transition ease-in-out duration-300 transform" x-transition:enter-start="-translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transition ease-in-out duration-300 transform" x-transition:leave-start="translate-x-0" x-transition:leave-end="-translate-x-full" class="relative flex-1 flex flex-col max-w-xs w-full bg-white focus:outline-none" @click.stop> <div x-show="navOpen" x-transition:enter="ease-in-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-300" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="absolute top-0 right-0 -mr-12 pt-2"> <button type="button" class="ml-1 flex items-center justify-center h-10 w-10 rounded-full focus:outline-none" @click="navOpen = false; $refs.mobNavBtn.focus()"> <span class="icon icon-reject p-2 text-white inline-block text-lg lg:text-xl" aria-hidden="true"></span> <span class="sr-only">Close Menu</span> </button> </div> <div class="flex-1 h-0 pt-5 pb-4 overflow-y-auto"> <div class="flex-shrink-0 flex items-center px-4"> <a href="/" title="Pulse Home Page Link" aria-label="Pulse Home Page Link"> <span class="inline-block"> <img class="h-[34px] " src="/media/dikktauf/soti-pulse-logoname.svg" alt="SOTI Pulse Logo"/> <span class="sr-only">SOTI Pulse Home Page</span> </span> </a> </div> <div class="px-1 w-full justify-center flex mt-5"> <form class="flex border w-5/6 border-gray-200 rounded"> <label for="m-search" class="sr-only">Search</label> <input x-model="query" @keydown.enter="openSearchPage(); return false;" id="m-search" class="w-full rounded p-2 border-transparent text-gray-900 placeholder-gray-500 focus:outline-none focus:ring-0 focus:border-transparent" type="text" placeholder="Search Devices" autocomplete="off"> <button type="button" class="w-auto flex justify-end items-center text-graphite-600 bg-gray-100 p-2 hover:text-graphite-700 focus:outline-none focus:ring-0 focus:border-transparent" @click="openSearchPage(); return false;"> <span class="icon icon-search inline-block text-2xl" aria-hidden="true"></span> <span class="sr-only">Search</span> </button> </form> </div> <nav aria-label="Sidebar" role="navigation" class="mt-5"> <ul class="divide-y border-t border-gray-200 text-graphite-700 text-base font-medium"> <li> <a aria-label="News" class="flex items-center px-2 py-3 hover:text-pulse-800 " href="/news/"> News </a> </li> <li> <a aria-current="page" aria-label="Marketplace" class="flex items-center px-2 py-3 hover:text-pulse-800 selected border-r-4 border-pulse-800 text-pulse-800 active:text-pulse-800" href="/marketplace/devices/"> Marketplace </a> </li> <li> <a aria-label="Product Support" class="flex items-center px-2 py-3 hover:text-pulse-800 " href="/support/soti-mobicontrol/"> Product Support </a> </li> <li> <a aria-label="Community" class="flex items-center px-2 py-3 hover:text-pulse-800 " href="https://discussions.soti.net/"> Community </a> </li> <li> <a @click="navOpen = false" @keydown.enter="navOpen = false" target="_blank" aria-label="Log a Case" class="flex items-center px-2 py-3 hover:text-pulse-800 " href="https://www.soti.net/services/log-a-case/"> Log a Case </a> </li> <li> <a aria-label="Share Feedback" class="flex items-center px-2 py-3 hover:text-pulse-800 " href="/feedback/"> Share Feedback </a> </li> <li> <a @click="navOpen = false" @keydown.enter="navOpen = false" target="_blank" aria-label="Contact Us" class="flex items-center px-2 py-3 hover:text-pulse-800 " href="https://soti.net/about/contact-us"> Contact Us </a> </li> </ul> </nav> </div> </div> <div class="flex-shrink-0 w-14" aria-hidden="true"></div> </div> <!-- Global notification live region, render this permanently at the end of the document --> <div aria-live="assertive" class="pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-50 hidden" id="notificationComponentModal"> <div class="flex w-full flex-col items-center space-y-4 sm:items-end"> <!-- Notification panel, dynamically insert this into the live region when it needs to be displayed Entering: "transform ease-out duration-300 transition" From: "translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2" To: "translate-y-0 opacity-100 sm:translate-x-0" Leaving: "transition ease-in duration-100" From: "opacity-100" To: "opacity-0" --> <div class="pointer-events-auto w-full max-w-sm overflow-hidden rounded-lg bg-graphite-800 bg-opacity-90 shadow-lg ring-1 ring-black ring-opacity-5"> <div class="p-4"> <div class="flex items-start"> <div class="flex-shrink-0"> <svg viewBox="0 0 24 24" fill="currentColor" class="h-10 w-10 text-fern-400"> <path fill-rule="evenodd" d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm13.36-1.814a.75.75 0 10-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 00-1.06 1.06l2.25 2.25a.75.75 0 001.14-.094l3.75-5.25z" clip-rule="evenodd" /> </svg> </div> <div class="ml-3 w-0 flex-1 pt-0.5"> <p class="text-sm font-medium text-white uppercase" id="notificationComponentModalTitle">Succes</p> <p class="mt-1 text-sm text-white" id="notificationComponentModalDescription">Default.</p> </div> <div class="ml-4 flex flex-shrink-0"> <button type="button" class="inline-flex rounded-md text-white" onclick="CloseNotificationComponent()"> <span class="sr-only">Close</span> <svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" /> </svg> </button> </div> </div> </div> </div> </div> </div> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> function CloseNotificationComponent(){ document.getElementById("notificationComponentModal").classList.add("hidden"); } function OpenNotificationComponent(title, description) { document.getElementById("notificationComponentModal").classList.remove("hidden"); document.getElementById("notificationComponentModalTitle").innerText = title; document.getElementById("notificationComponentModalDescription").innerText = description; setTimeout(function () { CloseNotificationComponent(); }, 5000); } </script> <section class="max-w-screen-full flex-grow"> <style> .hero-14922 { background-image: url('/media/up1po10p/hero-banner-product-support-tablet.png'); } /* For small displays */ @media only screen and (min-width: 1025px) { .hero-14922 { background-image: url('/media/1otja1zo/pulse-banner.png'); } } </style> <container class="bg-[#f2f3f3]"> <section class="relative m-auto md:bg-no-repeat max-w-[1920px] md:max-h-[288px] min-h-[300px] bg-bottom bg-left hero-14922"> <div class="flex gap-3 sm:gap-7 flex-row-reverse mx-auto max-w-page"> <div class="flex flex-col -mt-6 pb-6"> <img class="mx-auto hidden md:block w-[50rem]" src="/media/i5sfilvg/soti-sync-25-horizontal-basic.svg" /> <img class="mx-auto md:hidden w-[50rem]" src="/media/zx1ji3cd/soti-sync-25-skyline.svg" /> <div class="flex flex-col md:flex-row mx-auto gap-6 -mt-20 md:-mt-12"> <div class="uppercase text-2xl tracking-wide font-bold text-sky-600 whitespace-nowrap flex flex-col "> <p class="mx-auto">Early Bird Passes</p> <p class="mx-auto">Available Now</p> </div> <div class="mt-4 mb-8 md:mb-0"> <a href="https://sotisync.com/?utm_source=website&utm_medium=organic&utm_campaign=soti-sync-2025-pulse" target="_blank" class="uppercase text-2xl text-white px-6 py-2 rounded-md bg-sky-500 hover:bg-sky-600 pointer-cursor font-thin">Visit Us <span class="font-semibold tracking-wide">SOTISYNC.com</span></a> </div> </div> </div> </div> </section> </container> <section class="lg:max-w-page lg:mx-auto sticky top-16 z-10 bg-white"> <div class="block px-10 md:px-0 mb-10 mt-8 pt-5"> <div class="border-b border-gray-200"> <nav class="-mb-px flex space-x-2 sm:space-x-8 justify-center " aria-label="Tabs"> <div class="border-pulse-800 text-pulse-800 hover:text-pulse-800 border-b-[3px] px-2 group cursor-pointer relative inline-block text-center z-50"> <div class="opacity-0 bg-black text-white text-center rounded-lg py-1 group-hover:opacity-100 bottom-full hidden md:absolute px-4 mb-3 pointer-events-none -left-2 whitespace-nowrap"> Devices <svg class="absolute text-black h-2 w-full left-0 top-full" x="0px" y="0px" viewBox="0 0 255 255" xml:space="preserve"><polygon class="fill-current" points="0,0 127.5,127.5 255,0" /></svg> </div> <a href="/marketplace/devices/" class="pt-2 pb-1 text-sm font-medium"> <img class="hidden h-auto mx-auto md:block md:w-7 mb-2" src="/media/1ekbiyem/devices.png" alt="" /> <img class="h-auto mx-auto md:hidden block md:w-7 mb-2" src="/media/1ekbiyem/devices.png" alt="" /> <span class="hidden md:block">Devices</span> </a> </div> <div class="border-transparent text-gray-500 hover:text-pulse-800 border-b-[3px] px-2 group cursor-pointer relative inline-block text-center z-50"> <div class="opacity-0 bg-black text-white text-center rounded-lg py-1 group-hover:opacity-100 bottom-full hidden md:absolute px-4 mb-3 pointer-events-none -left-2 whitespace-nowrap"> Software <svg class="absolute text-black h-2 w-full left-0 top-full" x="0px" y="0px" viewBox="0 0 255 255" xml:space="preserve"><polygon class="fill-current" points="0,0 127.5,127.5 255,0" /></svg> </div> <a href="/marketplace/software/" class="pt-2 pb-1 text-sm font-medium"> <img class="hidden h-auto mx-auto md:block md:w-7 mb-2" src="/media/1ekftkde/software.png" alt="" /> <img class="h-auto mx-auto md:hidden block md:w-7 mb-2" src="/media/1ekftkde/software.png" alt="" /> <span class="hidden md:block">Software</span> </a> </div> <div class="border-transparent text-gray-500 hover:text-pulse-800 border-b-[3px] px-2 group cursor-pointer relative inline-block text-center z-50"> <div class="opacity-0 bg-black text-white text-center rounded-lg py-1 group-hover:opacity-100 bottom-full hidden md:absolute px-4 mb-3 pointer-events-none -left-2 whitespace-nowrap"> Mobile Apps <svg class="absolute text-black h-2 w-full left-0 top-full" x="0px" y="0px" viewBox="0 0 255 255" xml:space="preserve"><polygon class="fill-current" points="0,0 127.5,127.5 255,0" /></svg> </div> <a href="/marketplace/mobileapps/" class="pt-2 pb-1 text-sm font-medium"> <img class="hidden h-auto mx-auto md:block md:w-7 mb-2" src="/media/4vtfgdko/mobileapps.png" alt="" /> <img class="h-auto mx-auto md:hidden block md:w-7 mb-2" src="/media/4vtfgdko/mobileapps.png" alt="" /> <span class="hidden md:block">Mobile Apps</span> </a> </div> <div class="border-transparent text-gray-500 hover:text-pulse-800 border-b-[3px] px-2 group cursor-pointer relative inline-block text-center z-50"> <div class="opacity-0 bg-black text-white text-center rounded-lg py-1 group-hover:opacity-100 bottom-full hidden md:absolute px-4 mb-3 pointer-events-none -left-2 whitespace-nowrap"> Security <svg class="absolute text-black h-2 w-full left-0 top-full" x="0px" y="0px" viewBox="0 0 255 255" xml:space="preserve"><polygon class="fill-current" points="0,0 127.5,127.5 255,0" /></svg> </div> <a href="/marketplace/security/" class="pt-2 pb-1 text-sm font-medium"> <img class="hidden h-auto mx-auto md:block md:w-7 mb-2" src="/media/gsxpmb3w/security.png" alt="" /> <img class="h-auto mx-auto md:hidden block md:w-7 mb-2" src="/media/gsxpmb3w/security.png" alt="" /> <span class="hidden md:block">Security</span> </a> </div> <div class="border-transparent text-gray-500 hover:text-pulse-800 border-b-[3px] px-2 group cursor-pointer relative inline-block text-center z-50"> <div class="opacity-0 bg-black text-white text-center rounded-lg py-1 group-hover:opacity-100 bottom-full hidden md:absolute px-4 mb-3 pointer-events-none -left-2 whitespace-nowrap"> Services <svg class="absolute text-black h-2 w-full left-0 top-full" x="0px" y="0px" viewBox="0 0 255 255" xml:space="preserve"><polygon class="fill-current" points="0,0 127.5,127.5 255,0" /></svg> </div> <a href="/marketplace/services/" class="pt-2 pb-1 text-sm font-medium"> <img class="hidden h-auto mx-auto md:block md:w-7 mb-2" src="/media/xbaawnbk/services.png" alt="" /> <img class="h-auto mx-auto md:hidden block md:w-7 mb-2" src="/media/xbaawnbk/services.png" alt="" /> <span class="hidden md:block">Services</span> </a> </div> </nav> </div> </div> </section> <section class="lg:max-w-page lg:mx-auto"> <section class="block mx-8 mt-10" x-data="{pageNo:1}"> <div class="flex flex-col items-center justify-between space-y-4 sm:flex-row sm:space-y-0"> <h3 class="text-3xl text-nero">Devices</h3> <div class="flex items-center divide-x divide-veryLightGray"> <div class="flex items-center pr-3"> <label class="mr-2.5 text-sm text-nero whitespace-nowrap" for="marketplaceCategories">Sort by</label> <div class="relative inline-block text-left"> <div> <button type="button" class="h-6 pl-2 pr-2 text-sm font-normal text-gray-500 align-middle bg-white rounded-md shadow-sm w-28 ring-1 ring-inset ring-gray-300 hover:bg-gray-50" id="sortMenu-button" onclick="OpenMenu('sortMenuOptions')" aria-expanded="true" aria-haspopup="true"> <span id="selected-option" class="float-left"> A - Z </span> <svg class="float-right w-5 h-5 align-middle" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd" /> </svg> </button> </div> <div id="sortMenuOptions" class="absolute right-0 z-0 hidden origin-top-right bg-white rounded-md shadow-lg w-28 ring-1 ring-black ring-opacity-5 focus:outline-none" role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1"> <div role="none"> <!-- Active: "bg-gray-100 text-gray-900", Not Active: "text-gray-700" --> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 bg-pulse-100 text-semibold" role="menuitem" tabindex="-1" id="menu-item-1" onclick="setQueryParam('sort','asc',true)" selected>A-Z</span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 " role="menuitem" tabindex="-1" id="menu-item-2" onclick="setQueryParam('sort','desc',true)">Z-A</span> </div> </div> </div> </div> <div class="flex items-center px-3 space-x-2"> <button class="grid-icon active text-2xl text-pulse-800 focus:outline-none" onclick="toggleGridLayout('grid')" onkeypress="toggleGridLayout('grid')"> <span role="presentation" class="icon icon-thumb-view" aria-hidden="true"></span> <span class="sr-only">Toggle grid view</span> </button> <button class="list-icon text-2xl cursor-pointer text-graphite-600 hover:text-pulse-800 focus:outline-none" onclick="toggleGridLayout('list')" onkeypress="toggleGridLayout('list')"> <span role="presentation" class="icon icon-list-view" aria-hidden="true"></span> <span class="sr-only">Toggle list view</span> </button> </div> <div class="flex items-center pr-3 space-x-2"> <button class="ml-3 text-2xl cursor-pointer grid-icon active text-graphite-600 hover:text-pulse-800 focus:outline-none" type="button" onclick="ToggleFilterModal()"> <span role="presentation" class="flex icon icon-filters" aria-hidden="true"> <span class="path1"></span> <span class=" path2"></span> </span> <span class="sr-only">Filter</span> </button> </div> </div> </div> <button class="hidden text-xs float-right text-pulse-800 font-semibold hover:underline" id="clearFilterBtn" onclick="clearFilterGrid()">CLEAR FILTERS</button> <div id="marketplaceContainer" class="grid md:grid-cols-3 lg:grid-cols-4 mt-10 gap-7" data-icount=24> <article onclick="window.location.href='/marketplace/devices/1512/A140-Fully-Rugged-Tablet'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="A140 Fully Rugged Tablet"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1512/SOTI-Images-A140-thumb.png" alt="A140 Fully Rugged Tablet" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Tablets</small> <p class="text-2xl text-black flex-0 line-clamp-4">A140 Fully Rugged Tablet</p> <a href="/marketplace/companies/93/Getac" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Getac</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-cerulian-700 icon-downloads-windows" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1699/AIM35'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AIM-35"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1699/AIM-35_angle shot _S.jpg" alt="AIM-35" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">AIM-35</p> <a href="/marketplace/companies/126/Advantech" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Advantech</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1700/AIM38'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AIM-38"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1700/AIM-38_Front right 02 _S.jpg" alt="AIM-38" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">AIM-38</p> <a href="/marketplace/companies/126/Advantech" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Advantech</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1537/AIM65'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AIM-65"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1537/Aim-65_Front left合圖_P.png" alt="AIM-65" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Tablets</small> <p class="text-2xl text-black flex-0 line-clamp-4">AIM-65</p> <a href="/marketplace/companies/126/Advantech" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Advantech</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1688/AIM68-'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AIM-68 "> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1688/AIM-68_200x200.png" alt="AIM-68 " /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Tablets</small> <p class="text-2xl text-black flex-0 line-clamp-4">AIM-68 </p> <a href="/marketplace/companies/126/Advantech" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Advantech</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1956/AIM75'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AIM-75"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1956/AIM-75.png" alt="AIM-75" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Tablets</small> <p class="text-2xl text-black flex-0 line-clamp-4">AIM-75</p> <a href="/marketplace/companies/126/Advantech" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Advantech</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1938/Alpha30LAlpha40L-Mobile-Label-Barcode-Printer'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="Alpha-30L/Alpha-40L Mobile Label Barcode Printer"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1938/Alpha-30L_40L_500x500.jpg" alt="Alpha-30L/Alpha-40L Mobile Label Barcode Printer" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">Alpha-30L/Alpha-40L Mobile Label Barcode Printer</p> <a href="/marketplace/companies/159/TSC Auto ID" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By TSC Auto ID</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1931/Alpha30R-Mobile-Barcode-Printer'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="Alpha-30R Mobile Barcode Printer"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1931/Alpha-30R_front_500x500pxi.jpg" alt="Alpha-30R Mobile Barcode Printer" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">Alpha-30R Mobile Barcode Printer</p> <a href="/marketplace/companies/159/TSC Auto ID" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By TSC Auto ID</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1939/Alpha40L-RFID-Mobile-Label-Barcode-Printer'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="Alpha-40L RFID Mobile Label Barcode Printer"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1939/Alpha-40L_RFID_1.png" alt="Alpha-40L RFID Mobile Label Barcode Printer" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">Alpha-40L RFID Mobile Label Barcode Printer</p> <a href="/marketplace/companies/159/TSC Auto ID" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By TSC Auto ID</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1624/AML-Paladin'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AML Paladin"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1624/Paladin_logo.png" alt="AML Paladin" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">AML Paladin</p> <a href="/marketplace/companies/114/AML" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By AML</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1687/Ascom-Myco-3'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="Ascom Myco 3"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1687/Myco3 Front GREEN 190307-small.jpg" alt="Ascom Myco 3" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Smartphones</small> <p class="text-2xl text-black flex-0 line-clamp-4">Ascom Myco 3</p> <a href="/marketplace/companies/127/Ascom" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Ascom</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1531/AUTOID-A6LW'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AUTOID A6L(W)"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1531/thumb.jpg" alt="AUTOID A6L(W)" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">AUTOID A6L(W)</p> <a href="/marketplace/companies/99/SEUIC" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By SEUIC</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-cerulian-700 icon-downloads-windows" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1532/AUTOID9'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="AUTOID9"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1532/AUTOID9-SEUIC-thumb.jpg" alt="AUTOID9" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">AUTOID9</p> <a href="/marketplace/companies/99/SEUIC" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By SEUIC</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1813/BFP2D-Mobile-Printer'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="B-FP2D Mobile Printer"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1813/B-FP2D_L_720.png" alt="B-FP2D Mobile Printer" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">B-FP2D Mobile Printer</p> <a href="/marketplace/companies/165/Toshiba Tec Corporation" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Toshiba Tec Corporation</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1831/BFP3D-Mobile-Printer'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="B-FP3D Mobile Printer"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1831/02_B-FP3D_F_SOTI.png" alt="B-FP3D Mobile Printer" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">B-FP3D Mobile Printer</p> <a href="/marketplace/companies/165/Toshiba Tec Corporation" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Toshiba Tec Corporation</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1514/B300-Ultra-Rugged-Laptop'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="B300 Ultra Rugged Laptop"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1514/SOTI-Images-B300-thumb.png" alt="B300 Ultra Rugged Laptop" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Laptops</small> <p class="text-2xl text-black flex-0 line-clamp-4">B300 Ultra Rugged Laptop</p> <a href="/marketplace/companies/93/Getac" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Getac</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1842/BV400D-desktop-printer-series'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="BV400D desktop printer series"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1842/01-03_BV410D_Left-SOTI.png" alt="BV400D desktop printer series" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">BV400D desktop printer series</p> <a href="/marketplace/companies/165/Toshiba Tec Corporation" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Toshiba Tec Corporation</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1769/BXP300-BOX-PC'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="BXP-300 BOX PC"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1769/BXP-300_s.png" alt="BXP-300 BOX PC" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">BXP-300 BOX PC</p> <a href="/marketplace/companies/140/Qbic Technology Co.,Ltd." class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Qbic Technology Co.,Ltd.</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1757/BXP320-Supercharged-Digital-Signage-Player'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="BXP-320 Supercharged Digital Signage Player"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1757/BXP-320_2.png" alt="BXP-320 Supercharged Digital Signage Player" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">BXP-320 Supercharged Digital Signage Player</p> <a href="/marketplace/companies/140/Qbic Technology Co.,Ltd." class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Qbic Technology Co.,Ltd.</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/2076/CIAO-Intelligent-Shopper-Assistant-ISA'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="CIAO Intelligent Shopper Assistant (ISA)"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1726061553/CIAO-400x400.jpg" alt="CIAO Intelligent Shopper Assistant (ISA)" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">CIAO Intelligent Shopper Assistant (ISA)</p> <a href="/marketplace/companies/184/Meferi Technologies Co., Ltd." class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By Meferi Technologies Co., Ltd.</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1707/CipherLab-9700-Windows-'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="CipherLab 9700 Windows "> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1707/CipherLab 9700 Windows.png" alt="CipherLab 9700 Windows " /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">CipherLab 9700 Windows </p> <a href="/marketplace/companies/132/CipherLab" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By CipherLab</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-cerulian-700 icon-downloads-windows" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1709/CipherLab-RK25-Series'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="CipherLab RK25 Series"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1709/p_180725_04743.jpg" alt="CipherLab RK25 Series" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">CipherLab RK25 Series</p> <a href="/marketplace/companies/132/CipherLab" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By CipherLab</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1705/CipherLab-RS51-Series'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="CipherLab RS51 Series"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1705/RS51_front_960X960.png" alt="CipherLab RS51 Series" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Mobile Computers</small> <p class="text-2xl text-black flex-0 line-clamp-4">CipherLab RS51 Series</p> <a href="/marketplace/companies/132/CipherLab" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By CipherLab</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> <span class="w-5 h-5 mr-1 -ml-1 icon text-fern-800 icon-downloads-android" alt="SOTI XSight" id="productLogo"></span> </div> </div> </article> </article> <article onclick="window.location.href='/marketplace/devices/1771/CL4NX-Plus'" class="w-auto h-auto border rounded cursor-pointer marketplace-card hover:shadow-xl ring-0 hover:ring-1 hover:ring-graphite-900/10" aria-label="CL4NX Plus"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b h-[250px]"> <img class="block object-contain w-[250px] p-4 rounded-t mx-auto" src="https://pulse.soti.net/uploads/marketplace/1771/SATO_CL4NX PLUS updated 1.png" alt="CL4NX Plus" /> </header> <div class="flex flex-col flex-1 p-5"> <small class="block mb-3 text-xs italic text-gray-500 uppercase">Printers</small> <p class="text-2xl text-black flex-0 line-clamp-4">CL4NX Plus</p> <a href="/marketplace/companies/176/SATO" class="relative block mt-1 mb-1 text-xs text-gray-500 hover:underline">By SATO</a> <div class="flex-1"></div> <div class="hidden inline-flex mt-3"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div> <div class="hidden inline-flex mt-3"> <img class="w-5 h-5 mr-1 -ml-1" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight" id="productLogo"> <h4 class="flex-1 text-sm text-gray-700">SOTI XSight</h4> </div> </div> </article> </article> </div> <div class="flex justify-center mt-16"> <button id="articleLoadMoreButton" class="border rounded px-10 py-2 uppercase font-bold text-xs border-gray-800 text-gray-800 hover:text-white hover:bg-gray-800 " x-on:click="pageNo++" @click="updatePageNumberParam(true)"> Load More </button> </div> </section> </section> <div class="hidden"> <a id="cardTemplate" class="w-auto h-auto border rounded marketplace-card"> <article class="flex flex-col justify-between h-full overflow-hidden text-graphite-600"> <header class="overflow-hidden border-b"> <img class="h-[250px] p-4 w-fit rounded-t mx-auto rounded-t" /> </header> <div class="flex flex-col flex-1 p-5 innerBlockTemplate"> <small class="block mb-3 text-xs italic text-gray-500 uppercase"></small> <p class="text-2xl text-black flex-0 line-clamp-4"></p> <small class="flex block mt-1 mb-1 text-xs text-gray-500 "></small> <div class="flex-1"></div> <div class="flex"></div> </div> </article> </a> <a id="cardListTemplate" class="marketplace-card" x-show="pageNo >= 1"> <article class="flex flex-row gap-3 border rounded-md max-h-56 md:h-44 lg:h-52"> <header class="relative flex-shrink-0 w-1/3 overflow-hidden rounded-l-md"> <img class="absolute object-contain w-full h-full -z-10" /> </header> <div class="flex flex-col h-full p-4 pt-3 text-graphite-600"> <div class="innerBlockTemplate"> <div class="flex"></div> <small class="block mb-1 text-xs italic text-gray-500 uppercase"></small> <p class="text-xl text-black lg:text-2xl line-clamp-3"></p> <small class="block mt-1 mb-1 text-xs text-gray-500 hover:underline"></small> </div> <div class="flex mt-1 text-sm "> <span class="line-clamp-4"></span> </div> </div> </article> </a> </div> <div class="hidden relative z-[9999]" id="FilterModal" aria-labelledby="modal-title" role="dialog" aria-modal="true"> <!-- Background backdrop, show/hide based on modal state. Entering: "ease-out duration-300" From: "opacity-0" To: "opacity-100" Leaving: "ease-in duration-200" From: "opacity-100" To: "opacity-0" --> <div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"></div> <div class="fixed inset-0 z-10 h-screen lg:flex lg:flex-col"> <div class="flex items-end justify-center text-center sm:items-center"> <div class="flex flex-col h-dvh transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all w-full md:max-w-xl sm:p-6 mx-2 sm:mx-6 md:mx-0"> <div class="sm:flex sm:items-start"> <div class="mt-3 text-center ml-4 mt-0 text-left"> <h3 class="text-xl font-normal leading-6 text-gray-900" id="modal-title"> Filters </h3> </div> </div> <div class="absolute mt-3 right-0 top-0 hidden pr-4 pt-4 sm:block"> <button type="button" id="clearAll" class="rounded-md bg-white text-sm text-gray-400 hover:text-gray-500 focus:outline-none" onclick="handleClearAllBtn()"> CLEAR ALL </button> </div> <div class="p-3 items-center"> <label class="text-sm text-nero" for="marketplaceCategories"> Sub-Category </label> <div class="relative text-left"> <div> <button type="button" id="subCategoryMenu-button" class="w-full h-8 rounded-md text-sm font-normal text-gray-500 shadow-sm ring-1 ring-inset ring-gray-300" onclick="OpenMenu('categoryDropdown')" aria-expanded="true" aria-haspopup="true"> <input id="selected-categoryOption" class="float-left ml-2" onchange="monitorFilterModalEvents()"></input> <span class="icon icon-arrow-down h-5 w-5 align-middle float-right" aria-hidden="true"> </span> </button> </div> <div id="categoryDropdown" class="hidden absolute right-0 z-10 w-full origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none" role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1"> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50" role="menuitem" tabindex="-1" id="0" data-displayName="All Sub-Categories" data-subcategory="Devices" onclick="handleSubCategoryClick('0',true)" selected> All sub-categories </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="9" data-subcategory="Printers" data-displayName="Printers" onclick="handleSubCategoryClick(9,true)" selected> Printers </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="34" data-subcategory="Mobile Computers" data-displayName="Mobile Computers" onclick="handleSubCategoryClick(34,true)" selected> Mobile Computers </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="37" data-subcategory="Smartphones" data-displayName="Smartphones" onclick="handleSubCategoryClick(37,true)" selected> Smartphones </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="95" data-subcategory="Tablets" data-displayName="Tablets" onclick="handleSubCategoryClick(95,true)" selected> Tablets </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="105" data-subcategory="Laptops" data-displayName="Laptops" onclick="handleSubCategoryClick(105,true)" selected> Laptops </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="106" data-subcategory="RFID Readers" data-displayName="RFID Readers" onclick="handleSubCategoryClick(106,true)" selected> RFID Readers </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="107" data-subcategory="Vending Machine" data-displayName="Vending Machine" onclick="handleSubCategoryClick(107,true)" selected> Vending Machine </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="122" data-subcategory="Thin Client" data-displayName="Thin Client" onclick="handleSubCategoryClick(122,true)" selected> Thin Client </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="127" data-subcategory="Touch Computer" data-displayName="Touch Computer" onclick="handleSubCategoryClick(127,true)" selected> Touch Computer </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="132" data-subcategory="Docks & Mounts" data-displayName="Docks & Mounts" onclick="handleSubCategoryClick(132,true)" selected> Docks & Mounts </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="133" data-subcategory="Point of Sale" data-displayName="Point of Sale" onclick="handleSubCategoryClick(133,true)" selected> Point of Sale </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="134" data-subcategory="Kiosk" data-displayName="Kiosk" onclick="handleSubCategoryClick(134,true)" selected> Kiosk </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="135" data-subcategory="Digital Signage" data-displayName="Digital Signage" onclick="handleSubCategoryClick(135,true)" selected> Digital Signage </span> <span class="text-gray-700 block px-4 py-2 text-sm hover:bg-pulse-50 cursor-pointer" role="menuitem" tabindex="-1" id="143" data-subcategory="Smart Battery" data-displayName="Smart Battery" onclick="handleSubCategoryClick(143,true)" selected> Smart Battery </span> </div> </div> </div> <div class="flex flex-grow border-2 border-gray-100 rounded-md overflow-y-auto bg-gray-200"> <div class="flex flex-grow h-full"> <table class="flex my-0 h-full"> <tbody class="divide-y divide-gray-300 bg-gray-100 h-fit" id="LookupCategories"> </tbody> </table> <div class="flex flex-grow bg-white h-full"> <table id="LookupOptions" class="flex-grow my-0 pl-6 bg-white"> </table> </div> </div> </div> <div class="mt-5 sm:mt-4 sm:flex sm:flex-row-reverse"> <button type="button" id="applyFilterBtn" class="inline-flex w-full justify-center rounded-md bg-gray-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-pulse-800 sm:ml-3 sm:w-auto disabled:opacity-50 disabled:hover:bg-gray-600 disabled:hover:cursor-not-allowed" onclick="applyFilters()" disabled> Apply Changes </button> <button type="button" class="mt-3 inline-flex w-full justify-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 sm:mt-0 sm:w-auto" onclick="cancelFilter()"> Cancel </button> </div> </div> </div> </div> </div> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> handleSubCategoryClick('0', false); function handleSubCategoryClick(subCategoryId, isCategoryUpdate) { if (isCategoryUpdate) { var baseUrl = window.location.href.split('?')[0]; history.replaceState({}, document.title, baseUrl); } var subCategoryName = document.getElementById(subCategoryId).getAttribute('data-subcategory') var selectedOption = document.getElementById(subCategoryId).getAttribute('data-displayName') document.getElementById('selected-categoryOption').value = selectedOption; document.getElementById('selected-categoryOption').setAttribute('data-subcategory', subCategoryId); GetLookups(subCategoryName) document.getElementById('categoryDropdown').classList.add('hidden') if (isCategoryUpdate) { const clearAllDiv = document.getElementById('clearAll'); clearAllDiv.classList.remove('text-gray-400'); clearAllDiv.classList.add('text-pulse-800'); document.getElementById("applyFilterBtn").disabled = false; } } document.addEventListener('click', function (event) { const isClickInsideDropdown = document.getElementById('subCategoryMenu-button').contains(event.target) || document.getElementById('categoryDropdown').contains(event.target); if (!isClickInsideDropdown) { document.getElementById('categoryDropdown').classList.add('hidden'); } }); function GetLookups(subcategory) { document.getElementById('LookupCategories').innerHTML = '<tr id="Industry" class="bg-white cursor-pointer" onclick="hideOtherTbodies(`5`,`Industry`)"><td><span class="sm:ml-3 pr-10 text-sm leading-4 font-medium text-gray-900 hover:text-pulse-800">Industry</span></td></tr>'; document.getElementById('LookupOptions').innerHTML = ''; var tbody = `<tbody id="5" class="flex flex-col divide-y divide-gray-200 bg-white px-3" data-lookupcategory="industries"> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Education" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Education" data-lookupValueId="23" name="Education" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Education</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Field Services" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Field Services" data-lookupValueId="25" name="Field Services" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Field Services</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Healthcare" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Healthcare" data-lookupValueId="15" name="Healthcare" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Healthcare</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Insurance" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Insurance" data-lookupValueId="16" name="Insurance" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Insurance</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="IT" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="IT" data-lookupValueId="380" name="IT" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">IT</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Logistics" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Logistics" data-lookupValueId="388" name="Logistics" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Logistics</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Manufacturing" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Manufacturing" data-lookupValueId="24" name="Manufacturing" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Manufacturing</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Other" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Other" data-lookupValueId="4" name="Other" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Other</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Retail" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Retail" data-lookupValueId="389" name="Retail" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Retail</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Telecommunication" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Telecommunication" data-lookupValueId="381" name="Telecommunication" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Telecommunication</span></label></td></tr> <tr class="divide-y divide-gray-200 cursor-pointer"><td class="whitespace-nowrap py-3 pr-3 text-sm font-medium text-gray-900"><label for="Transportation" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900 cursor-pointer"><input id="Transportation" data-lookupValueId="17" name="Transportation" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" onchange="monitorFilterModalEvents()"><span class="flex-1 ml-4">Transportation</span></label></td></tr> `; document.getElementById('LookupOptions').innerHTML += tbody const params = new Proxy(new URLSearchParams(window.location.search), { get: (searchParams, prop) => searchParams.get(prop), }); var actionUrl = `/api/marketplace/lookup/GetLookupsByProductCategory/` + subcategory + ``; fetch(actionUrl, { method: 'GET', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, async: false }).then(response => { response.json().then((data) => { data.forEach(lookupCategory => { var lookups = '<tr id="' + lookupCategory.name + '" class="cursor-pointer" onclick="hideOtherTbodies(' + "'" + lookupCategory.id + "', '" + lookupCategory.name + "'" + ')"><td><span class="sm:ml-3 text-sm leading-4 font-medium text-gray-900 hover:text-pulse-800">' + lookupCategory.name + '</span></td></tr>'; document.getElementById('LookupCategories').innerHTML += lookups; var otherLookupValues = '<tbody id="' + lookupCategory.id + '" data-lookupcategory="' + lookupCategory.name + '" class="hidden flex flex-col divide-y divide-gray-200 bg-white px-3"></tbody>'; document.getElementById('LookupOptions').innerHTML += otherLookupValues; fetch(`/api/marketplace/lookup/GetLookupByCategoryId/` + lookupCategory.id + ``, { method: 'GET', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, async: false }).then(response => { response.json().then((data) => { data.forEach(lookupCategoryValues => { var checked = ''; if ( params.industries && params.industries.includes(lookupCategoryValues.id) || params.Certified && params.Certified.includes(lookupCategoryValues.id) || params.ConnnectivityType && params.ConnnectivityType.includes(lookupCategoryValues.id) || params.OperatingSystem && params.OperatingSystem.includes(lookupCategoryValues.id) || params.OSCompatibility && params.OSCompatibility.includes(lookupCategoryValues.id) || params.SupportedRegions && params.SupportedRegions.includes(lookupCategoryValues.id) ) { checked = 'checked'; } var lookupOptions = '<tr class="w-full divide-y divide-gray-200 cursor-pointer"><td class="block py-3 pr-3 text-sm font-medium text-gray-900"><label for="' + lookupCategoryValues.name + '" class="flex w-full ml-3 text-sm leading-4 font-medium text-gray-900"><input id="' + lookupCategoryValues.name + '" data-lookupValueId="' + lookupCategoryValues.id + '" name="' + lookupCategoryValues.name + '" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-gray-300 focus:ring-0" ' + checked + ' onchange="monitorFilterModalEvents()"><span class="ml-4 flex-1">' + lookupCategoryValues.name + ' </span> </label></td></tr>'; document.getElementById(lookupCategory.id).innerHTML += lookupOptions; }); }); var lookupOptions = document.getElementById('LookupOptions'); var tbodies = lookupOptions.getElementsByTagName('tbody'); var checkboxes = tbodies[0].getElementsByTagName('input'); for (var j = 0; j < checkboxes.length; j++) { if (params.industries && params.industries.includes(checkboxes[j].getAttribute('data-lookupValueId'))) { checkboxes[j].checked = true; } } }).catch(error => { // console.log("Error fetching lookup values:", error); // Debug statement }); }); }).catch(error => { // console.log("Error fetching lookup categories:", error); // Debug statement }); }); } function hideOtherTbodies(exceptId, currentDivId) { var lookupOptions = document.getElementById('LookupOptions'); var tbodies = lookupOptions.getElementsByTagName('tbody'); for (var i = 0; i < tbodies.length; i++) { var tbody = tbodies[i]; if (tbody.id === exceptId) { tbody.classList.remove('hidden') } else { tbody.classList.add('hidden') } } parentDiv = document.getElementById('LookupCategories'); const childDivs = parentDiv.getElementsByTagName('tr'); for (var j = 0; j < childDivs.length; j++) { if (childDivs[j].id === currentDivId) { childDivs[j].classList.add('bg-white'); childDivs[j].classList.remove('bg-gray-100'); } else { childDivs[j].classList.add('bg-gray-100'); childDivs[j].classList.remove('bg-white'); } } } function fetchFilterParams() { const params = new Proxy(new URLSearchParams(window.location.search), { get: (searchParams, prop) => searchParams.get(prop), }); var appliedFilters = []; if (params.industries) { const industriesValues = params.industries.split(","); appliedFilters.push(...industriesValues); } if (params.Certified) { const certifiedValues = params.Certified.split(","); appliedFilters.push(...certifiedValues); } if (params.ConnnectivityType) { const connnectivityType = params.ConnnectivityType.split(","); appliedFilters.push(...connnectivityType); } if (params.OperatingSystem) { const operatingSystem = params.OperatingSystem.split(","); appliedFilters.push(...operatingSystem); } if (params.OSCompatibility) { const OSCompatibility = params.OSCompatibility.split(","); appliedFilters.push(...OSCompatibility); } if (params.SupportedRegions) { const supportedRegions = params.SupportedRegions.split(","); appliedFilters.push(...supportedRegions); } if (params.subCategoryId) { appliedFilters.push(params.subCategoryId); } else { appliedFilters.push('0'); } return appliedFilters; } function monitorFilterModalEvents() { var appliedFilters = fetchFilterParams(); var selectedCheckboxes = []; selectedCheckboxes.push(document.getElementById('selected-categoryOption').getAttribute('data-subCategory')); const filterModal = document.getElementById('FilterModal'); const checkboxes = filterModal.getElementsByTagName('input'); Array.from(checkboxes).forEach(box => { if (box.checked == true) { selectedCheckboxes.push(box.getAttribute('data-lookupvalueid')); } }); selectedCheckboxes.sort(); appliedFilters.sort(); // Convert both arrays to string representations and then compare them if (JSON.stringify(selectedCheckboxes) !== JSON.stringify(appliedFilters)) { //// console.log(JSON.stringify(selectedCheckboxes), JSON.stringify(appliedFilters)) const clearAllDiv = document.getElementById('clearAll'); clearAllDiv.classList.remove('text-gray-400'); clearAllDiv.classList.add('text-pulse-800'); document.getElementById("applyFilterBtn").disabled = false; } else { const clearAllDiv = document.getElementById('clearAll'); clearAllDiv.classList.remove('text-pulse-800'); clearAllDiv.classList.add('text-gray-400'); document.getElementById("applyFilterBtn").disabled = true; } } function applyFilters() { var selectedLookups = []; var baseUrl = window.location.href.split('?')[0]; history.replaceState({}, document.title, baseUrl); if (document.getElementById('selected-categoryOption').textContent != null) { var currentCategory = document.getElementById('selected-categoryOption').getAttribute('data-subcategory'); setQueryParam("subCategoryId", currentCategory); } var lookupOptions = document.getElementById('LookupOptions'); var tbodies = lookupOptions.getElementsByTagName('tbody'); for (var i = 0; i < tbodies.length; i++) { var checkboxes = tbodies[i].getElementsByTagName('input'); for (var j = 0; j < checkboxes.length; j++) { if (checkboxes[j].type === 'checkbox') { if (checkboxes[j].checked == true) { selectedLookups.push(checkboxes[j].getAttribute('data-lookupValueId')); } } } if (selectedLookups.length > 0) { var lookupCategory = tbodies[i].getAttribute('data-lookupcategory'); lookupCategory = lookupCategory.replace(/\s+/g, ''); // Remove spaces lookupCategory = lookupCategory.split('-').join(''); // Join words without hyphens setQueryParam(lookupCategory, selectedLookups, true); } selectedLookups = []; } ToggleFilterModal(); updatePageNumberParam(false) location.reload(); } function resetAllCheckboxes() { var lookupOptions = document.getElementById('LookupOptions'); var tbodies = lookupOptions.getElementsByTagName('tbody'); for (var i = 0; i < tbodies.length; i++) { var checkboxes = tbodies[i].getElementsByTagName('input'); for (var j = 0; j < checkboxes.length; j++) { if (checkboxes[j].type === 'checkbox') { checkboxes[j].checked = false; } } } document.getElementById('clearAll').classList.remove("text-pulse-800") document.getElementById('clearAll').classList.add('text-gray-400'); } function cancelFilter() { resetAllCheckboxes(); ToggleFilterModal(); //location.reload(); } function handleClearAllBtn() { var appliedFilters = fetchFilterParams(); resetAllCheckboxes(); //7768 //monitorFilterModalEvents(); //7777 var baseUrl = window.location.href.split('?')[0]; history.replaceState({}, document.title, baseUrl); handleSubCategoryClick('0', false); updatePageNumberParam(false); //7768 document.getElementById("applyFilterBtn").disabled = true; doc //7777 //if (appliedFilters.length > 1 || !(appliedFilters.length === 1 && appliedFilters[0] === '0')) //{ //document.getElementById("applyFilterBtn").disabled = false; //} //else{ // document.getElementById("applyFilterBtn").disabled = true; //} } </script> ; <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> const params = new Proxy(new URLSearchParams(window.location.search), { get: (searchParams, prop) => searchParams.get(prop), }); let listView = params.view var pageNo = 1; var outOfArticles = false; var marketplaceContainer = document.getElementById("marketplaceContainer"); function updatePageNumberParam(isLoadMore) { const params = new Proxy(new URLSearchParams(window.location.search), { get: (searchParams, prop) => searchParams.get(prop), }); // console.log(listView) if (isLoadMore) { pageNo++; } else { marketplaceContainer.innerHTML = ""; pageNo = 1 } var baseUrl = `/api/marketplace/product/GetProducts?category=Devices&pageNumber=${pageNo}&pageSize=24&sortBy=name`; if (params.subCategoryId) { baseUrl += `&subCategoryId=${params.subCategoryId}`; } if (params.industries) { baseUrl += `&industries=${params.industries}`; } if (params.Certified) { baseUrl += `&certified=${params.Certified}`; } if (params.ConnnectivityType) { baseUrl += `&connnectivitytype=${params.ConnnectivityType}`; } if (params.OperatingSystem) { baseUrl += `&Operatingsystem=${params.OperatingSystem}`; } if (params.OSCompatibility) { baseUrl += `&OSCompatibility=${params.OSCompatibility}`; } if (params.SupportedRegions) { baseUrl += `&supportedregion=${params.SupportedRegions}`; } fetch(baseUrl) .then((response) => { response.json().then((data) => { if (data === undefined || data.length < 24 ) { outOfArticles = true; document.getElementById("articleLoadMoreButton").style.visibility = "hidden"; data.value = ""; //return; } const dateOptions = { month: 'long', day: 'numeric', year: 'numeric' }; const dateFormat = new Intl.DateTimeFormat('en-US', dateOptions); console.log(data); data.forEach(product => { let imageLink = product.thumbnailUrl; var categoryUrl = product.categoryName let productLink = `/marketplace/devices/${product.id}/${product.name.cleanUrl()}`; // Build the card/list item let cardTemplateId = listView == 'list' ? "cardListTemplate" : "cardTemplate"; let cardNode = document.getElementById(cardTemplateId).cloneNode(true); cardNode.id = product.id + "Node"; cardNode.href = productLink; cardNode.target = '_self'; cardNode.setAttribute("rel", '_self'); cardNode.ariaLabel = product.name; let cardTitle = cardNode.getElementsByTagName("p")[0]; cardTitle.innerHTML = product.name; let cardImage = cardNode.getElementsByTagName("img")[0]; cardImage.setAttribute("src", imageLink); cardImage.setAttribute("alt", product.name); console.log(product); let cardSpans = cardNode.getElementsByTagName("small"); let cardCategory = cardSpans[0]; cardCategory.innerHTML = product.categoryName; let cardCompany = cardSpans[1]; cardCompany.innerHTML = `By ${product.company}`; let appTypeDiv = cardNode.getElementsByTagName("div")[2]; if (product.isSnapApp) { appTypeDiv.innerHTML += ` <div class="inline-flex ${listView === "list" ? "" : "mt-3"} flex-1"> <img src="/media/p0ln2di4/desktop_snap-colour.svg" class="w-5 h-5 mr-1 -ml-1"></img> <h4 class="text-sm text-gray-700">SOTI Snap App</h4> </div>`; } console.log(product.categoryIds); if (Array.isArray(product.categoryIds) && product.categoryIds.includes(141)) { appTypeDiv.innerHTML += ` <div class="inline-flex ${listView === "list" ? "" : "mt-3"} flex-1"> <img class="w-5 h-5 mr-1 -ml-1 ${listView === 'list' ? "my-auto" : ""}" src="/images/Logos/SOTIProducts/XSight.svg" alt="SOTI xsight"> <h4 class="text-sm text-gray-700 ${listView === 'list' ? "my-auto" : ""}">SOTI XSight</h4> </div>`; if (product.logoUrl !== undefined) { appTypeDiv.innerHTML += `<icon class="${listView === "list" ? "m-auto h-7" : "w-5 m-auto h-5"} mr-1 -ml-1 ${product.logoUrl}" alt = "SOTI XSight"> </icon>`; } } // console.log("companyCard"); // console.log(product); cardCompany.onclick = function () { window.location = `/marketplace/companies/${product.companyId}/${product.company}`; }; if (listView == "list") { let cardDescription = cardNode.getElementsByTagName("span")[0]; cardDescription.innerHTML = product.description; if (Array.isArray(product.categoryIds) && (product.categoryIds.includes(141) || product.categoryIds.includes(129))) { // remove cardDescription class line-clamp-4 cardDescription.classList.remove("line-clamp-4"); cardDescription.classList.add("line-clamp-2"); } } marketplaceContainer.appendChild(cardNode); }); }); setQueryParam("page", pageNo); //setQueryParam("view", listView); }) .catch(function (err) { // console.log('Fetch Error :-S', err); }); } //function updatePageNumberParam(isLoadMore) { // const params = new Proxy(new URLSearchParams(window.location.search), { // get: (searchParams, prop) => searchParams.get(prop), // }); // if (isLoadMore) { // pageNo++; // } // else { // marketplaceContainer.innerHTML = ""; // } // var baseUrl = `/api/marketplace/product/GetProducts?category=Devices&pageNumber=${pageNo}&pageSize=24&sortBy=name&subCategoryId=${params.subCategoryId}&industries=${params.industries}&certified=${params.Certified}&connnectivitytype=${params.ConnnectivityType}&Operatingsystem=${params.OperatingSystem}&OSCompatibility=${params.OSCompatibility}&supportedregion=${params.SupportedRegions}`; // fetch(baseUrl) // .then((response) => { // response.json().then((data) => { // // console.log(baseUrl) // if (data.value === undefined || data.value === null) { // outOfArticles = true; // document.getElementById("articleLoadMoreButton").style.visibility = "hidden"; // data.value = ""; // return; // } // const dateOptions = { month: 'long', day: 'numeric', year: 'numeric' }; // const dateFormat = new Intl.DateTimeFormat('en-US', dateOptions); // data.value.forEach(product => { // //let imageLink = product.thumbnailUrl; // //let imageLink = "https://marketplace.soti.net/images/uploads/images/1512/SOTI-Images-A140-thumb.png"; // //let imageLink = `${MARKETPLACE_FILE_PATH}${product.thumbnailUrl}`; // let imageLink = product.thumbnailUrl; // var categoryUrl = product.categories[0].parentCategory != null ? product.categories[0].parentCategory.name : product.categories[0].name; // let productLink = `/marketplace/Devices/${product.id}/${product.name.cleanUrl()}`; // // build the card/list item // let cardTemplateId = params.view == 'list' ? "cardListTemplate" : "cardTemplate"; // let cardNode = document.getElementById(cardTemplateId).cloneNode(true); // cardNode.id = product.id + "Node"; // cardNode.href = productLink; // cardNode.target = '_self'; // cardNode.setAttribute("rel", '_self'); // cardNode.ariaLabel = product.name; // let cardTitle = cardNode.getElementsByTagName("p")[0]; // cardTitle.innerHTML = product.name; // let cardImage = cardNode.getElementsByTagName("img")[0]; // cardImage.setAttribute("src", imageLink); // cardImage.setAttribute("alt", product.name); // let cardSpans = cardNode.getElementsByTagName("small"); // let cardCategory = cardSpans[0]; // cardCategory.innerHTML = product.categories[0].name; // let cardCompany = cardSpans[1]; // cardCompany.innerHTML = `By ${product.company.name}`; // if (params.view == "list") { // let cardDescription = cardNode.getElementsByTagName("span")[0]; // cardDescription.innerHTML = product.description; // } // marketplaceContainer.appendChild(cardNode); // }); // }); // setQueryParam("page", pageNo); // }) // .catch(function (err) { // // console.log('Fetch Error :-S', err); // }); //} function toggleGridLayout(layoutType) { setQueryParam("view", layoutType, true); } document.addEventListener('click', function (event) { const isClickInsideDropdown = document.getElementById('sortMenu-button').contains(event.target) || document.getElementById('sortMenuOptions').contains(event.target); if (!isClickInsideDropdown) { document.getElementById('sortMenuOptions').classList.add('hidden'); } }); function OpenMenu(id) { document.getElementById(id).classList.toggle('hidden'); } function updateSelectedtab() { document.getElementById('selected-option').innerHTML = 'Z-A'; } function setQueryParam(param, value, reload) { var searchParams = new URLSearchParams(window.location.search) searchParams.set(param, value); var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString(); history.pushState(null, '', newRelativePathQuery); if (reload) { window.location = window.location; } } //let debounceTimeout; //window.onscroll = function () { // if ((window.innerHeight + Math.ceil(window.pageYOffset)) >= document.body.offsetHeight && !outOfArticles) { // if (debounceTimeout) { // clearTimeout(debounceTimeout); // } // debounceTimeout = setTimeout(function () { // updatePageNumberParam(); // }, 500); // } //}; //ClearFilterVisibility(); //function ClearFilterVisibility() { // const params = new Proxy(new URLSearchParams(window.location.search), { // get: (searchParams, prop) => searchParams.get(prop), // }); // if (params && Array.from(params.keys()).length > 1) { // document.getElementById("clearFilterBtn").classList.remove("hidden"); // } //} function ToggleFilterModal() { document.getElementById("FilterModal").classList.toggle("hidden"); const params = new Proxy(new URLSearchParams(window.location.search), { get: (searchParams, prop) => searchParams.get(prop), }); if (params.subCategoryId !== null && params.subCategoryId !== "null") { handleSubCategoryClick(params.subCategoryId, false); } } function clearFilterGrid() { var baseUrl = window.location.href.split('?')[0]; history.replaceState({}, document.title, baseUrl); location.reload(); } function DownloadSelectedImage(imageSrc) { console.log(imageSrc) const downloadLink = document.createElement('a'); downloadLink.href = imageSrc; downloadLink.target = '_blank'; downloadLink.download = "fs"; downloadLink.click(); } </script> </section> <section class="max-w-[81.625rem] w-full mt-8 mx-auto flex flex-row-reverse"> <button class="bg-white text-pulse-800 rounded-full transition duration-300 ease-in-out h-[40px] w-[40px] transform border-pulse-800 border-2 cursor-pointer md:hover:text-white md:hover:bg-pulse-800 icon icon-top md:mt-5 mb-4" title="Page Top" onclick="ScrollTop()"></button> </section> <!-- <div id="mobile-live-chat" class=" cursor-pointer md:hidden py-2 px-3 z-10 text-white bg-pulse-800 w-15 fixed bottom-7 right-0 mr-4 mb-4 rounded-full" role="button" tabindex="0" onclick="onMobileLiveChatClicked()" aria-label="Chat with an Expert"> <span class="icon icon-chat text-4xl mt-1 block" aria-hidden="true"></span> <span class="sr-only">Chat with an Expert</span> </div> --> <footer class="bg-graphite-100 py-8 mx-0"> <div class="max-w-page mx-auto"> <div class="grid grid-cols-1 mx-3 md:mx-8 lg:grid-cols-2 lg:gap-16"> <div class="flex flex-col text-graphite-700"> <h1 class="flex flex-row text-gray-700 text-2xl"> <span class=" flex-grow">SOTI Inc.</span> </h1> <p class="text-sm leading-6 mt-2">SOTI is a proven leader at creating innovative solutions that reduce the cost and complexity of business-critical mobility and the IoT. Thousands of companies around the world depend on us to secure, manage and support their mobile operations. SOTI’s two decades of success has built strong partnerships with leading mobile platform providers and device manufacturers.</p> <div class="hidden lg:flex flex-row mt-6 md:mt-9 font-pulse"> <a href="https://www.linkedin.com/company/soti?originalSubdomain=ca" target="_blank" class="h-[42px] w-[42px] group hover:bg-pulse-800 leading-[40px] md:h-[36px] md:w-[36px] relative rounded-full border-2 border-pulse-800 md:leading-[34px] mr-[1.25rem] md:mr-[0.625rem]" aria-label="SOTI LinkedIn" title="SOTI LinkedIn"> <span class="absolute inset-0 text-center"> <span role="img" aria-label="Linked-In" class="icon icon-linkedin group-hover:text-white text-pulse-800 font-[1rem]"></span> </span> <span class="h-[36px] w-[36px] rounded-full border-2 border-transparent"></span> </a> <a href="https://www.youtube.com/user/sotiinc" target="_blank" class="h-[42px] w-[42px] group hover:bg-pulse-800 leading-[40px] md:h-[36px] md:w-[36px] relative rounded-full border-2 border-pulse-800 md:leading-[34px] mr-[1.25rem] md:mr-[0.625rem]" aria-label="SOTI YouTube" title="SOTI YouTube"> <span class="absolute inset-0 text-center"> <span role="img" aria-label="YouTube" class="icon icon-youtube group-hover:text-white text-pulse-800 font-[1rem]"></span> </span> <span class="h-[36px] w-[36px] rounded-full border-2 border-transparent"></span> </a> <a href="https://www.instagram.com/soti_inc/" target="_blank" class="h-[42px] w-[42px] group hover:bg-pulse-800 leading-[40px] md:h-[36px] md:w-[36px] relative rounded-full border-2 border-pulse-800 md:leading-[34px] mr-[1.25rem] md:mr-[0.625rem]" aria-label="SOTI Instagram" title="SOTI Instagram"> <span class="absolute inset-0 text-center"> <span role="img" aria-label="Instagram" class="icon icon-instagram group-hover:text-white text-pulse-800 font-[1rem]"></span> </span> <span class="h-[36px] w-[36px] rounded-full border-2 border-transparent"></span> </a> </div> <p class="hidden lg:block text-xs mt-6 md:mt-8 lg:mt-12 text-graphite-800"> <span>漏 Copyright 2025 SOTI Inc. All Rights Reserved. |</span> <span> <a href="https://soti.net/about/legal/terms/soti-pulse-terms-of-use/" target="_blank" aria-label="Terms of use" title="Terms of use">Terms of use |</a> <a href="https://soti.net/about/legal/policies/privacy-notice/" target="_blank" aria-label="Privacy Policy" title="Privacy Policy">Privacy Policy </a> </span> </p> </div> <div class="lg:pl-16 lg:border-l lg:border-gray-300 flex mt-8 md:mt-10 lg:mt-0 flex-col md:flex-row lg:flex-col gap-10 text-graphite-700"> <div class="flex gap-3 flex-row"> <div class="w-16 h-16 rounded"> <i role="img" aria-label="Share Feedback" class="icon icon-contact-us text-6xl w-full text-[#c51115]"></i> </div> <div class="text-sm"> <h6 class="text-xl">Contact Us</h6> <p class="mb-3 mt-1">Real help from real people.</p> <a class=" text-sotiMobiControl hover:text-sotiMobiControl font-semibold text-sm" href="https://soti.net/about/contact-us" aria-label="Contact Now" title="Share Feedback">Contact Now</a> </div> </div> </div> <div class="lg:hidden flex flex-row mx-auto mt-6 md:mt-9 font-pulse"> <a href="https://www.linkedin.com/company/soti?originalSubdomain=ca" target="_blank" class="h-[42px] w-[42px] group hover:bg-pulse-800 leading-[40px] md:h-[36px] md:w-[36px] relative rounded-full border-2 border-pulse-800 md:leading-[34px] mr-[1.25rem] md:mr-[0.625rem]" aria-label="SOTI LinkedIn" title="SOTI LinkedIn"> <span class="absolute inset-0 text-center"> <span role="img" aria-label="Linked-In" class="icon icon-linkedin group-hover:text-white text-pulse-800 font-[1rem]"></span> </span> <span class="h-[36px] w-[36px] rounded-full border-2 border-transparent"></span> </a> <a href="https://www.youtube.com/user/sotiinc" target="_blank" class="h-[42px] w-[42px] group hover:bg-pulse-800 leading-[40px] md:h-[36px] md:w-[36px] relative rounded-full border-2 border-pulse-800 md:leading-[34px] mr-[1.25rem] md:mr-[0.625rem]" aria-label="SOTI YouTube" title="SOTI YouTube"> <span class="absolute inset-0 text-center"> <span role="img" aria-label="YouTube" class="icon icon-youtube group-hover:text-white text-pulse-800 font-[1rem]"></span> </span> <span class="h-[36px] w-[36px] rounded-full border-2 border-transparent"></span> </a> <a href="https://www.instagram.com/soti_inc/" target="_blank" class="h-[42px] w-[42px] group hover:bg-pulse-800 leading-[40px] md:h-[36px] md:w-[36px] relative rounded-full border-2 border-pulse-800 md:leading-[34px] mr-[1.25rem] md:mr-[0.625rem]" aria-label="SOTI Instagram" title="SOTI Instagram"> <span class="absolute inset-0 text-center"> <span role="img" aria-label="Instagram" class="icon icon-instagram group-hover:text-white text-pulse-800 font-[1rem]"></span> </span> <span class="h-[36px] w-[36px] rounded-full border-2 border-transparent"></span> </a> </div> <p class="lg:hidden text-center block text-xs mt-6 md:mt-8 lg:mt-12 text-graphite-800"> <span>漏 Copyright 2025 SOTI Inc. All Rights Reserved. |</span> <span> <a href="https://soti.net/about/legal/terms/soti-pulse-terms-of-use/" target="_blank" aria-label="Terms of use" title="Terms of use">Terms of use |</a> <a href="https://soti.net/about/legal/policies/privacy-notice/" target="_blank" aria-label="Privacy Policy" title="Privacy Policy">Privacy Policy </a> <!-- OneTrust Cookies Settings button start --> <button id="ot-sdk-btn" class="ot-sdk-show-settings">Cookie聽Settings</button> <!-- OneTrust Cookies Settings button end --> </span> </p> </div> </div> </footer> <script unsafe-inline nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1" defer src="/javascript/alpine.min.js"></script> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1" src="/javascript/main.js"></script> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1" src="https://play.vidyard.com/embed/v4.js"></script> <script async nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1" src="https://www.googletagmanager.com/gtag/js?id=G-38NR6T3S8L"></script> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> function a(g, f) { let c = getCookie("_alc"); let d = getCookie("_als"); let e = window.localStorage.getItem("_als"); if (c === undefined) { setCookie("_alc", g, 1); } if (e === null) { window.localStorage.setItem("_als", f); } if (d === null) { setCookie("_als", window.localStorage.getItem("_als"), 30); } } function setCookie(cName, cValue, expDays) { let date = new Date(); date.setTime(date.getTime() + (expDays * 24 * 60 * 60 * 1000)); const expires = "expires=" + date.toUTCString(); document.cookie = cName + "=" + cValue + "; " + expires + "; path=/"; } function getCookie(cName) { const name = cName + "="; const cDecoded = decodeURIComponent(document.cookie); //to be careful const cArr = cDecoded.split('; '); let res; cArr.forEach(val => { if (val.indexOf(name) === 0) res = val.substring(name.length); }) return res; } function copyToClipboard() { var url = window.location.href; navigator.clipboard.writeText(url); OpenNotificationComponent("SUCCESS", "Copied to clipboard"); } let CheckSEmpcookie = () => { let cookies = document.cookie.split(';'); for (const ck of cookies) { if (ck.trim() == "SOTI-Employee='true'") { window.localStorage.setItem('SOTI-Employee', 'true'); return 'true'; } } return 'false'; } let isSotiEmp = window.localStorage.getItem('SOTI-Employee'); if (isSotiEmp == null) { isSotiEmp = CheckSEmpcookie(); } function splitCamelCase(str) { return str.replace(/([a-z0-9])([A-Z])/g, '$1 $2'); } // Google tag manager //(function (w, d, s, l, i) { // w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); // var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; // j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); //})(window, document, 'script', 'dataLayer', 'GTM-TSNKWX2'); // https://developers.google.com/analytics/devguides/collection/gtagjs // https://support.google.com/google-ads/answer/6095821?hl=en window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); if (!(isSotiEmp == 'true')) { gtag('config', 'G-38NR6T3S8L', { 'user_id': '8022202080146' }); } else { gtag('config', 'G-38NR6T3S8L'); } let ScrollTop = () => { window.scrollTo(0, 0); } let ScrollToElem = (elemId) => { var eScrollTo = document.getElementById(elemId); var yOffset = -20; var y = eScrollTo.getBoundingClientRect().top + window.pageYOffset + yOffset; window.scrollTo({ top: y, behavior: 'smooth' }); } let EscapeText = (elem) => { elem.value = elem.value.replace(/[<]/g, '<'); elem.value = elem.value.replace(/[>]/g, '>'); elem.value = elem.value.trim(); } let hideElem = (elemName, useStyle) => { let elem = document.querySelector(elemName); if (elem) { if (useStyle) { elem.style.display = "none"; } else { elem.classList.add("hidden"); } } } let toggleElem = (elemName, useStyle) => { let elem = document.querySelector(elemName); if (elem) { if (useStyle) { elem.style.display = elem.style.display == "none" ? "block" : "none"; } else { elem.classList.toggle("hidden"); } } } let showElem = (elemName, useStyle) => { let elem = document.querySelector(elemName); if (elem) { if (useStyle) { elem.style.display = null; } else { elem.classList.remove("hidden"); } } } function endsWithVowel(str) { if (str === undefined) { return ""; } const vowels = "aeiou"; const lastChar = str[str.length - 1].toLowerCase(); return vowels.includes(lastChar); } let DoToggles = (elem) => { //aePluginSection elem.classList.toggle("inline-flex"); elem.classList.toggle("hidden"); elem.nextElementSibling.classList.toggle("hidden"); } document.getElementById('bdrop').classList.remove('w-0', 'h-0'); document.getElementById('bdrop').classList.add('w-full', 'h-full'); //Making sure all < a > tags that point to a 3rd party website are shown on a new tab and noopener let arelnoop = () => { const anchors = document.querySelectorAll('a[href^="http"]'); anchors.forEach((anchor) => { if (anchor.hasAttribute('href')) { let hr = anchor.getAttribute('href'); if (hr.indexOf('soti.net') < 0) { anchor.setAttribute('rel', 'noopener nofollow'); anchor.setAttribute('target', '_blank'); } } }); } arelnoop(); String.prototype.isNullOrWhiteSpace = function () { return (!this || !this.trim()) } document.addEventListener('alpine:init', () => { Alpine.data('initPage', () => ({ init() { const urlParams = new URLSearchParams(window.location.search); this.query = urlParams.get('terms') || ''; }, marketplaceQuery: '', // marketplaceQuery: () => { // let query = localStorage.getItem('marketplaceQuery'); // remove localStorage // localStorage.removeItem('marketplaceQuery'); // return query; // }, marketplaceSResults: null, marketplaceShowSearch: false, marketplaceShowSubSearch: false, marketplaceSearchCompleted: false, query: '', product: '', area: '', subproduct: '', version: '', encoded: '', productSupport: '', subQuery: '', filter: '', contextProduct: null, searchUrl: (() => { }), sResults: null, showSearch: false, showSubSearch: false, navOpen: false, helpNavOpen: false, mobSearchFltrs: false, mcDownloadOpen: false, isLoading: false, searchCompleted: false, splitCamelCase(str) { if (str === undefined) { return ""; } if (endsWithVowel(str)) { return str.replace(/([a-z0-9])([A-Z])/g, '$1 $2') + 's'; } return str.replace(/([a-z0-9])([A-Z])/g, '$1 $2'); }, fetchSearch() { if (this.query.isNullOrWhiteSpace()) { return; } this.isLoading = true; this.searchCompleted = false; this.sResults = null; fetch(this.buildUrl("api")) .then((res) => res.json()) .then((data) => { this.sResults = data; // kill loader this.isLoading = false; this.searchCompleted = true; }); }, marketplaceFetchSearch() { if (this.query === null) { return; } console.log("set marketplaceQuery: ", this.query); localStorage.setItem('marketplaceQuery', this.query); this.isLoading = true; this.marketplaceSearchCompleted = false; this.marketplaceSResults = null; fetch(this.marketplaceBuildUrl("api")) .then((res) => res.json()) .then((data) => { this.marketplaceSResults = data; // kill loader this.isLoading = false; this.marketplaceSearchCompleted = true; }); }, openSearch(type = "default") { this.closeSearch(type == "subSearch" ? "subSearch" : "default"); if (type == "subSearch") { this.showSubSearch = true; this.$nextTick(() => this.$refs.subSearchInput.focus()); } else { this.showSearch = true; this.$nextTick(() => this.$refs.searchInput.focus()); } }, marketplaceOpenSearch(type = "default") { console.log("marketplaceOpenSearch"); this.closeSearch(type == "subSearch" ? "subSearch" : "default"); if (type == "subSearch") { this.marketplaceShowSubSearch = true; this.$nextTick(() => this.$refs.marketplaceSubSearchInput.focus()); } else { this.marketplaceShowSearch = true; this.$nextTick(() => this.$refs.marketplaceSearchInput.focus()); } }, closeSearch(type = "default") { if (type == "subSearch") { this.query = ''; this.showSubSearch = false; } else { this.query = ''; this.showSearch = false; } this.sResults = null; this.ck = ''; this.cv = ''; this.searchUrl = (() => { }); sResults = null; }, marketplaceCloseSearch(type = "default") { if (type == "subMarketplaceSearch") { this.maketplaceShowSubSearch = false; } else { this.marketplaceShowSearch = false; } this.marketplaceSResults = null; this.ck = ''; this.cv = ''; this.searchUrl = (() => { }); marketplaceSResults = null; }, buildMarketingSearchUrl(category = "", industry = "", oem = "") { let baseUrl = this.buildUrl(); if (!category.isNullOrWhiteSpace()) { baseUrl += `&category=${category}`; } if (!industry.isNullOrWhiteSpace()) { baseUrl += `&industry=${industry}`; } if (!oem.isNullOrWhiteSpace()) { baseUrl += `&oem=${oem}`; } return baseUrl; }, marketplaceBuildMarketingSearchUrl(category = "", industry = "", oem = "") { let baseUrl = this.marketplaceBuildUrl(); if (!category.isNullOrWhiteSpace()) { baseUrl += `&category=${category}`; } if (!industry.isNullOrWhiteSpace()) { baseUrl += `&industry=${industry}`; } if (!oem.isNullOrWhiteSpace()) { baseUrl += `&oem=${oem}`; } return baseUrl; }, marketplaceBuildUrl(type = "") { console.log("not here???"); let url = type == "api" ? `/api/Pulse/Search/GetSearchResults` : `/search/`; let q = this.query; console.log("url", url); console.log("marketplaceQuery:", q); if (q === "" || q === null) { return; } url += `?terms=${q}`; // which product to filter to (MC,Snap,XSight) if (!this.product.isNullOrWhiteSpace()) { url += `&product=${this.product.trim()}`; } // Which MC Subproduct if (!this.subproduct.isNullOrWhiteSpace()) { url += `&subproduct=${this.subproduct.trim()}`; } if (!this.productSupport.isNullOrWhiteSpace()) { url += `&ProductSupport=${this.productSupport.trim()}`; } // Which global search area (news, product support) if (!this.area.isNullOrWhiteSpace()) { url += `&area=Marketplace`; } // Which version of MC or other product if (!this.version.isNullOrWhiteSpace()) { url += `&version=${obj.version.trim()}`; } return url; }, buildUrl(type = "") { let url = type === "api" ? `/api/pulse/search/GetSearchResults` : `/search/`; let q = this.query.trim(); if (q.isNullOrWhiteSpace()) { return; } url += `?terms=${q}`; if (type === "api") { url += `&pageSize=12`; } if (!this.productSupport.isNullOrWhiteSpace()) { url += `&ProductSupport=${this.productSupport.trim()}`; } // which product to filter to (MC,Snap,XSight) if (!this.product.isNullOrWhiteSpace()) { url += `&product=${this.product.trim()}`; } // Which MC Subproduct if (!this.subproduct.isNullOrWhiteSpace()) { url += `&subproduct=${this.subproduct.trim()}`; } // Which global search area (news, product support, help) if (!this.area.isNullOrWhiteSpace()) { console.log("area:", this.area); if (type === "api") { url += `&area=${this.area.trim().toLowerCase() === "marketplace" ? "marketplace" : "all"}`; } else { url += `&area=${this.area.trim()}`; } } // Which version of MC or other product if (!this.version.isNullOrWhiteSpace()) { url += `&version=${this.version.trim()}`; } return url; }, openSearchPage(type = "default") { console.log("openSearchPage query", this.query); if (this.query.trim() == '') { return; } if (this.product.trim() == '') { this.product = ""; } window.location.href = this.buildUrl(type); }, marketplaceOpenSearchPage(type = "default") { localStorage.setItem('marketplaceQuery', this.query); if (this.query.trim() == '') { return; } if (this.product.trim() == '') { this.product = ""; } window.location.href = this.marketplaceBuildUrl(); }, getResultsByCategory() { let categories = {}; let sortedCategories = []; // Sort results by score and limit to top 10 let topResults; if (this.sResults) { topResults = this.sResults.sort((a, b) => b.score - a.score).slice(0, 10); } else { console.log('sResults is null'); // handle the case when sResults is null } if (topResults !== undefined && topResults.length > 0) { topResults.forEach(result => { if (!categories[result.productCategory]) { categories[result.productCategory] = []; } categories[result.productCategory].push(result); }); sortedCategories = Object.entries(categories).sort((a, b) => b[1].length - a[1].length); categories = Object.fromEntries(sortedCategories); } return categories; }, marketplaceGetResultsByCategory() { let categories = {}; let sortedCategories = []; let limit = 12; let totalResults = 0; // sort results by score first this.marketplaceSResults = this.marketplaceSResults.sort((a, b) => b.score - a.score); if (this.marketplaceSResults) { this.marketplaceSResults.forEach(result => { if (!categories[result.productCategory]) { categories[result.productCategory] = []; } categories[result.productCategory].push(result); }); sortedCategories = Object.entries(categories).sort((a, b) => b[1].length - a[1].length); categories = Object.fromEntries(sortedCategories); } return categories; } }) ) }); function filterResults(element, filter) { return element.category?.toUpperCase() == filter; } function onMobileLiveChatClicked() { var liveAgentButton = document.getElementsByClassName("helpButtonEnabled")[0]; var mobileViewButton = document.getElementById("mobile-live-chat"); liveAgentButton.click(); liveAgentButton.style = "display:block !important"; mobileViewButton.style = "display: none !important"; } function encodeUnicode(str) { // first we use encodeURIComponent to get percent-encoded UTF-8, // then we convert the percent encodings into raw bytes which // can be fed into btoa. return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) { return String.fromCharCode('0x' + p1); })); } </script> </body> <script nonce="YjNkY2FmOWUtNzQ1My00ZWQwLWFhNWYtYjliYThmMjhlZmY1"> </script> </html>