<p><code>OxJS</code> (pronounced <i>oh-ex-jay-ess</i>) is a comprehensive JavaScript library, originally developed for the media archive platform <ahref="http://pan.do/ra">pan.do/ra</a>. While it still has bugs, holes, design errors and lots of cruft, some parts of it may already be of interest to a wider audience.</p>
<p>The core of <code>OxJS</code> is <code>Ox.js</code>, a general-purpose utility library. It <ahref="#doc/Ox.loop">embraces</a><ahref="#doc/Ox.forEach">functional</a><ahref="#doc/Ox.map">programming</a>, <ahref="#doc/Ox.load">supports modules</a>, <ahref="#doc/Ox.getDateInWeek">provides</a><ahref="#doc/Ox.getDayOfTheYear">lots</a><ahref="#doc/Ox.getDaysInMonth">of</a><ahref="#doc/Ox.getDaysInYear">tools</a><aref="#doc/Ox.getISODate">to</a><ahref="#doc/Ox.getISOWeek">deal</a><ahref="#doc/Ox.parseDate">with</a><ahref="#doc/Ox.formatDate">dates</a>, <ahref="#doc/Ox.atanh">has</a><ahref="#doc/Ox.deg">all</a><ahref="#doc/Ox.limit">the</a><ahref="#doc/Ox.mod">missing</a><ahref="#doc/Ox.sign">math</a><ahref="#doc/Ox.trunc">methods</a> (<ahref="#doc/Ox.getBearing">plus</a><ahref="#doc/Ox.getCircle">some</a><ahref="#doc/Ox.getDistance">more</a><ahref="#doc/Ox.getLine">for</a><ahref="#doc/Ox.getDegreesPerMeter">geographic</a><ahref="#doc/Ox.getLatLngByXY">coordinates</a>) <ahref="#doc/Ox.pad">and</a><ahref="#doc/Ox.repeat">helper</a><ahref="#doc/Ox.startsWith">functions</a><ahref="#doc/Ox.truncate">for</a><ahref="#doc/Ox.wordwrap">strings</a><ahref="#doc/Ox.escapeRegExp">and regular expressions</a>, <ahref="#doc/Ox.isEmpty">fixes</a><ahref="#doc/Ox.isInt">type</a><ahref="#doc/Ox.typeOf">detection</a><ahref="#doc/Ox.isEqual">and equality testing</a>, <ahref="#doc/Ox.addLinks">includes</a><ahref="#doc/Ox.encodeHTMLEntities">utilities</a><ahref="#doc/Ox.highlight">to</a><ahref="#doc/Ox.normalizeHTML">handle</a><ahref="#doc/Ox.sanitizeHTML">HTML</a>, <ahref="#doc/Ox.$">the DOM</a><ahref="#doc/Ox.getJSON">and</a><ahref="#doc/Ox.getJSONC">remote</a><ahref="#doc/Ox.getJSONP">requests</a>, can <ahref="#doc/Ox.tokenize">tokenize</a> and <ahref="#doc/Ox.minify">minify</a> JavaScript, comes with its own <ahref="#doc/Ox.doc">documentation format</a>, including <ahref="#doc/Ox.test">inline tests</a>, <ahref="#doc/Ox.api">and</a><ahref="#doc/Ox.getset">does</a><ahref="#doc/Ox.getAsync">many</a><ahref="#doc/Ox.getFile">other</a><ahref="#doc/Ox.encodeDeflate">cool</a><ahref="#doc/Ox.encodeUTF8">things</a>.</p>
<p>Then there are modules, most notably <code>Ox.UI</code>, which makes it super simple to write complex, desktop-class web applications for HTML5-compliant browsers. <code>Ox.UI</code> has tons of highly customizable and <ahref="#doc/Ox.Theme">fully themable</a> widgets: <ahref="#doc/Ox.ArrayInput">all</a><ahref="#doc/Ox.DateInput">the</a><ahref="#doc/Ox.FileInput">form</a><ahref="#doc/Ox.ObjectInput">elements</a><ahref="#doc/Ox.SelectInput">you</a><ahref="#doc/Ox.Range">ever</a><ahref="#doc/Ox.Spreadsheet">wanted</a>, <ahref="#doc/Ox.MainMenu">menus</a> that actually work, resizable <ahref="#doc/Ox.SplitPanel">panels</a> and <ahref="#doc/Ox.Dialog">dialogs</a>, <ahref="#doc/Ox.IconList">lists</a> and <ahref="#doc/Ox.TextList">tables</a> that can hold millions of items, <ahref="#doc/Ox.Map">maps</a> and <ahref="#doc/Ox.Calendar">calendars</a> done right, a feature-rich <ahref="#doc/Ox.VideoPlayer">video player</a>, <ahref="#doc/Ox.Chart">and</a><ahref="#doc/Ox.SourceViewer">lots</a><ahref="#doc/Ox.SyntaxHighlighter">more</a>. These widgets allow you to focus on your application and argue less with the DOM. And if you need to, <ahref="#doc/Ox.Element">each of them</a> provides the exact same API as a <ahref="#doc/Ox.JQueryElement">jQuery DOM object</a>. But <code>Ox.UI</code> also provides the logic to bring these elements together, including custom events, <ahref="#doc/Ox.Keyboard">keyboard</a><ahref="#doc/Ox.Focus">focus</a>, <ahref="#doc/Ox.API">remote API discovery</a> and <ahref="#doc/Ox.URL">client-side URL handling</a>. As long as your backend speaks JSON, it doesn't have to speak any HTML whatsoever.</p>
<p>Among the other modules, <code>Ox.Unicode</code> helps with <ahref="#doc/Ox.toASCII">converting</a> or <ahref="#doc/Ox.sortASCII">sorting</a> unicode strings, <code>Ox.Image</code> can do <ahref="#doc/Ox.Image">basic</a><ahref="#examples/image_manipulation">image manipulation</a>, including <ahref="#examples/steganography">steganography</a>, and <code>Ox.Geo</code> comes into play if you're dealing with <ahref="#doc/Ox.getCountryByName">geographical data</a>, or want to use a <ahref="#examples/countries">really nice set</a> of <ahref="#doc/Ox.getFlagByCountryCode">flag icons</a>.</p>
<p>Finally, there is a small but growing number of <ahref="#readme">articles</a> and <ahref="#examples">tutorials</a>, and extensive (albeit still incomplete) <ahref="#doc">documentation</a>. If you want to get involved, file bugs or submit patches, please head over to the <ahref="#development">development</a> section. Your feedback is welcome!</p>