<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HTML &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/html/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Mon, 18 Aug 2025 20:39:57 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Building for Xojo Web from the Ground Up</title>
		<link>https://blog.xojo.com/2024/02/22/building-for-xojo-web-from-the-ground-up/</link>
		
		<dc:creator><![CDATA[Anthony Cyphers]]></dc:creator>
		<pubDate>Thu, 22 Feb 2024 17:00:00 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Guest Post]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[GraffitiSuite]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=12541</guid>

					<description><![CDATA[Building custom components for Xojo Web can be incredibly easy, or equally as difficult. If you want to build something unique so that you’re not at the mercy of a third-party library in the future, it really is “hard mode”.]]></description>
										<content:encoded><![CDATA[
<p>Building custom components for Xojo Web can be incredibly easy, or equally as difficult. If you want to build something unique so that you’re not at the mercy of a third-party library in the future, it really is “hard mode”.</p>



<p>Lately I’ve been pushing more toward building my own components from the ground up in JavaScript + Xojo rather than just wrapping libraries already available. It’s not an easy proposition. You don’t take advantage of the years of work that may have been put in to those libraries, but you’re also less at the mercy of those developers when you want to build new things on top or customize existing code. I thought I’d take the opportunity to document the hours I spent on a new component that will be coming to GraffitiSuite for Xojo Web in the next release.</p>



<h2 class="wp-block-heading">Planning</h2>



<p>Arguably the hardest part. Like any development project, a good foundation is the best place to start. Each time I decide to begin work on a new component, the first thing I do is outline, generally, what I want it to look like and how I want it to behave. This process is usually fairly quick as we’re just talking about a rough outline that’s typed or written out quickly. In all, I spend about an hour on the rough draft, then work on other things for a little while my brain works the problem. When I’m not focusing on something is when I have my best ideas, so I let my subconscious take the wheel. Over time, I’ll update that rough draft any new ideas I have. It’s important to quickly jot down anything good so you don’t forget. Then, when I’m ready to complete the planning phase, I gather all of my notes and start filling in the blanks.</p>



<p>At this point, I begin working on the API. What functions will this component need in JavaScript? In Xojo? What properties will it need? What types are those properties? Some things, of course, are a question mark until I actually start implementing. This usually takes a couple of hours not including any time I may spend talking to customers/clients about what their needs from the component might be.</p>



<p><em>Time: 4 hours</em></p>



<h2 class="wp-block-heading">Building</h2>



<h3 class="wp-block-heading"><br>HTML</h3>



<p>I start by building the sketched UI in HTML. I want to see how all of the pieces fit together, then I can translate that to JavaScript code later. This isn’t a big process as I don’t implement things like tooltips, animation, etc. I just need a starting point.</p>



<p><em>Time: 3 hours</em></p>



<h3 class="wp-block-heading">JavaScript</h3>



<p>I’ve been working with vanilla JavaScript lately, as I don’t want my components to rely on jQuery (which the whole world is trying to get away from). Since I need as much of my code as possible to be client-side, and I want to be OOP, everything is built in JavaScript classes complete with getters and setters for properties — which is a lot of repetitious code that doesn’t seem like it would take long, but it does. I also don’t build my JavaScript directly on the Xojo WebSDK anymore because I need it to be more portable and useful in more places than just Xojo.</p>



<p>The first step here is implementing my default values that I determined were needed in the planning phase as properties of the class. This is also where those getters and setters come in to play. I want a basic new instance of the class to be as feature complete as possible then allow customization by altering those properties at runtime. To accomplish this I create a defaults object that contains all those values, which also serves as a quick reference in code when I’m implementing everything later.</p>



<p>Next I start building the UI. Each of my classes has a render() method that is responsible for creating the HTMLElements and adding them to the document where they’re supposed to be. This has gotten a lot easier with vanilla JS in recent years, but it can still be pretty time-consuming. There’s a lot of back and forth testing during this phase to ensure that the appearance is correct, the defaults are honored, etc.</p>



<p>Once the UI is completed, I go back and implement all of those setters to make the necessary changes to the HTMLElements when their value has changed. This can take a bit of time depending on what that property accomplishes.</p>



<p>Finally, the meat of the component. Any logic gets built at this point such as showing/hiding elements based on events or properties, implementing event callers, filtering data, etc. This is usually the longest part and requires a lot of testing. If the logic of the component fails right out of the gate, the rest of the component can fail too.</p>



<p>Throughout this phase I test against a static HTML page, and correcting anything obvious as I go, try new things, fail at trying new things, and more.</p>



<p><em>Time: 51 hours</em></p>



<h3 class="wp-block-heading">Xojo</h3>



<p>Building the Xojo wrapper on my JavaScript class can be painful because it’s just so tedious sometimes. Creating Xojo classes (of which there are typically more than one) with all of their properties, methods, and event definitions to match the JavaScript API can be very mind-numbing, but it’s usually pretty quick, by comparison, if you resist the urge to just walk away for days on end. I also have to make sure that if there are child classes, they have a method to communicate with the parent class and that it functions properly as all of the changes sent to the JavaScript class will happen in the parent.</p>



<p><em>Time: 15 hours</em></p>



<h2 class="wp-block-heading">Testing</h2>



<p>Testing should, and does, take a very long time. At this point I recognize and correct not only bugs, but inconsistencies in the API. It’s at this point that all of the polish is added. Making the Xojo class(es) communicate effectively with the JavaScript class(es), ensuring that data types are being honored between the two, testing every feature as in-depth as I can. As many of us know, this is where we really see how well our planning phase went.</p>



<p><em>Time: 26 hours</em></p>



<h2 class="wp-block-heading">Implementation</h2>



<p>Depending on the control, this can be very fast or take quite a long time. Some components are just so complex that they’d take ages to build in the GraffitiSuite Demo, so I have to pick and choose what I want to draw the user’s attention to. Likewise, sometimes they’re so simple that there really isn’t much to the demo beyond a couple of buttons and labels. For this component, it’s one that’s so complex that showing off as much as I can is the route to take, but with limited ability for users to change what’s happening on the screen during the demo, so it was pretty quick to build.</p>



<p><em>Time: 2 hours</em></p>



<h2 class="wp-block-heading">TLDR</h2>



<p>Just one of the new components coming to GraffitiSuite for Xojo Web Edition in the next release took a total of 101 hours to complete from planning its feature set to creating the demo page in Xojo. I’m feeling even more exhausted just reading that number, but I know that I have a solid foundation for my product going forward. One that I wrote and will be able to easily maintain for use with Xojo or anywhere else I may have a need.</p>



<figure class="wp-block-image size-large is-style-default"><img fetchpriority="high" decoding="async" width="1024" height="640" src="https://blog.xojo.com/wp-content/uploads/2024/02/time-chart-1024x640.png" alt="" class="wp-image-12543" srcset="https://blog.xojo.com/wp-content/uploads/2024/02/time-chart-1024x640.png 1024w, https://blog.xojo.com/wp-content/uploads/2024/02/time-chart-300x188.png 300w, https://blog.xojo.com/wp-content/uploads/2024/02/time-chart-768x480.png 768w, https://blog.xojo.com/wp-content/uploads/2024/02/time-chart.png 1328w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="has-text-align-left"><em>Anthony G. Cyphers is the Lead Developer and Sole Proprietor of </em><a href="https://graffitisuite.com/" target="_blank" rel="noreferrer noopener"><em>GraffitiSuite Solutions</em></a><em> and a Xojo MVP. He has been providing custom Xojo components and contract development since 2003. </em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>XojoTalk 022 &#8211; I Like Things That Just Work</title>
		<link>https://blog.xojo.com/2016/02/23/xojotalk-022-i-like-things-that-just-work/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Tue, 23 Feb 2016 00:00:00 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[XojoTalk]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[OmegaBundle]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">http://blogtemp.xojo.com/2016/02/23/xojotalk-022-i-like-things-that-just-work/</guid>

					<description><![CDATA[Paul talks with Tim Parnell about HTMLEdit, Web Studio, Answers and OmegaBundle.]]></description>
										<content:encoded><![CDATA[<p>Paul talks with <a href="https://twitter.com/timi" target="_blank">Tim Parnell</a>, creator of several Xojo add-ons and active <a href="https://forum.xojo.com/" target="_blank">Xojo forum</a> contributor.</p>
<p>To listen to this podcast, download the <a href="http://files.xojo.com/Podcasts/XojoTalk-022.mp3">mp3</a> now.</p>
<p><span id="more-362"></span></p>
<h2>Show Notes</h2>
<ul>
<li><a href="http://timi.me/">Tim Parnell web site</a></li>
<li><a href="http://nswrs.com">Answers</a></li>
<li><a href="http://htmledit.timi.me">HTML Edit</a></li>
<li><a href="http://quilljs.com/">Quill Editor</a></li>
<li><a href="https://webstudio.ws">Web Studio</a></li>
<li><a href="http://getbootstrap.com/components/">Bootstrap Controls</a></li>
<li><a href="http://www.omegabundle.net/">OmegaBundle</a></li>
</ul>
<p>Be sure to subscribe to the XojoTalk podcast for more great developer conversations!</p>
<p><!--HubSpot Call-to-Action Code --> <span id="hs-cta-wrapper-32eb9715-5c1c-45a4-9f37-717ffc906d8e" class="hs-cta-wrapper"> <span id="hs-cta-32eb9715-5c1c-45a4-9f37-717ffc906d8e" class="hs-cta-node hs-cta-32eb9715-5c1c-45a4-9f37-717ffc906d8e"><br />
<!-- [if lte IE 8]>


<div id="hs-cta-ie-element"></div>


<![endif]--> <a href="http://feeds.feedburner.com/xojotalk" target="_blank"><img decoding="async" id="hs-cta-img-32eb9715-5c1c-45a4-9f37-717ffc906d8e" class="hs-cta-img aligncenter" style="border-width: 0px;" src="https://blog.xojo.com/wp-content/uploads/2014/09/32eb9715-5c1c-45a4-9f37-717ffc906d8e.png" alt="Subscribe Podcast" width="622" height="107" /></a> </span><script src="https://js.hscta.net/cta/current.js" charset="utf-8">// <![CDATA[
<script type="text/javascript"><![CDATA[ hbspt.cta.load(608515, '32eb9715-5c1c-45a4-9f37-717ffc906d8e', {}); // ]]&gt;</script></span><br />
<!-- end HubSpot Call-to-Action Code --></p>
]]></content:encoded>
					
		
		<enclosure url="http://files.xojo.com/Podcasts/XojoTalk-022.mp3" length="10073987" type="audio/mpeg" />

			</item>
		<item>
		<title>Web App Security- It&#8217;s For More Than Just Your App</title>
		<link>https://blog.xojo.com/2015/06/29/web-app-security-its-for-more-than-just-your-app/</link>
		
		<dc:creator><![CDATA[Xojo]]></dc:creator>
		<pubDate>Mon, 29 Jun 2015 00:00:00 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">http://blogtemp.xojo.com/2015/06/29/web-app-security-its-for-more-than-just-your-app/</guid>

					<description><![CDATA[Web App Security- It's For More Than Just Your App]]></description>
										<content:encoded><![CDATA[<p>Web apps built with the traditional tools (HTML, JavaScript, CSS, etc.) are nothing more than a series of text files and thus not very secure. Once a hacker gets into a server, they can steal your code or modify it. One big advantage web apps built with Xojo have is that Xojo compiles your app to machine code so there&#8217;s no code on your server to steal. Additionally, the overwhelming majority of hackers have no experience with machine code, so modifying your app to do something nefarious can be extraordinarily difficult.</p>
<p><span id="more-224"></span></p>
<p>Having said that, most apps don&#8217;t exist in a vacuum. Your web app likely reads and writes files or connects to a database. If you create your app in Xojo your app is protected, but any files your app works with are not. This is one reason we spend so much time and energy making <a href="http://www.xojo.com/cloud/">Xojo Cloud</a> as secure as possible. In addition to reducing the chance a hacker might delete your application (causing you unnecessary downtime while you redeploy it), Xojo Cloud&#8217;s security protects your sensitive data in the other files and databases your app uses.</p>
<p>When you consider what it could cost if a hacker got his hands on your private data, the cost of Xojo Cloud is negligible. No one can guarantee 100% security but, the more you have, the more likely hackers will look for an easier target.</p>
<p><span id="hs-cta-wrapper-da358ae0-231f-4a35-8d7b-5d931b632c9f" class="hs-cta-wrapper"><span id="hs-cta-da358ae0-231f-4a35-8d7b-5d931b632c9f" class="hs-cta-node hs-cta-da358ae0-231f-4a35-8d7b-5d931b632c9f"> <!-- [if lte IE 8]>


<div id="hs-cta-ie-element"></div>


<![endif]--> <a href="blog.xojo.com/2013/09/10/secure-web-app-login-screens" target="_blank"><img decoding="async" id="hs-cta-img-da358ae0-231f-4a35-8d7b-5d931b632c9f" class="hs-cta-img aligncenter" style="border-width: 0px; margin: 0 auto; display: block; margin-top: 20px; margin-bottom: 20px;" src="https://blog.xojo.com/wp-content/uploads/2015/06/da358ae0-231f-4a35-8d7b-5d931b632c9f.png" alt="Web App Security" width="468" height="70" align="middle" /></a> </span><script src="https://js.hscta.net/cta/current.js" charset="utf-8">// <![CDATA[
<script type="text/javascript"><![CDATA[ hbspt.cta.load(608515, 'da358ae0-231f-4a35-8d7b-5d931b632c9f', {});
// ]]&gt;</script></span><br />
<!-- end HubSpot Call-to-Action Code --></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
