// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

.HTML5 Tutorials
************************************************
- link:ojet-chatbot.html[Chatbot Integration with Oracle JET]
- link:ojet-cca.html[Composite Component Architecture in Oracle JET]
- link:ojet-crud.html[CRUD Application Development with Oracle JET]
- link:ojet-flex.html[CSS3 Flexible Box and Oracle JET]
- link:html5-js-support.html[Debugging and Testing JavaScript in an HTML5 Application]
- link:cordova-gettingstarted.html[Getting Started with Cordova Applications]
- link:html5-gettingstarted.html[Getting Started with HTML5 Applications]
- link:ojet-gettingstarted.html[Getting Started with Oracle JET in NetBeans IDE]
- link:index.html[HTML5 Tutorials]
- link:ojet-rest.html[Interacting with RESTful Web Services in Oracle JET]
- link:ojet-porting.html[Porting an Application to Oracle JET]
- link:section.html[]
- link:ojet-settingup.html[Setting Up an Oracle JET Application]
- link:ojet-intermodular.html[Strategies for Intermodular Communication in Oracle JET]
- link:ojet-databinding.html[Using Data Bindings to Connect Components]
- link:ojet-cookbook.html[Using the Oracle JET Cookbook]
- link:html5-knockout-screencast.html[Video of Using KnockoutJS in an HTML5 Application]
- link:html5-editing-css.html[Working with CSS Style Sheets in an HTML5 Application]
- link:ojet-working.html[Working with Oracle JET Applications]
************************************************


