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&amp;utm_medium=organic&amp;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&#x5408;&#x5716;_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 &amp; Mounts" data-displayName="Docks &amp; Mounts" onclick="handleSubCategoryClick(132,true)" selected> Docks &amp; 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&#x2019;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, '&lt;'); elem.value = elem.value.replace(/[>]/g, '&gt;'); 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>

Pages: 1 2 3 4 5 6 7 8 9 10