diff --git a/framework/assets/js/accelerometer.js b/framework/assets/js/accelerometer.js index 704048c2..e64a5cf1 100755 --- a/framework/assets/js/accelerometer.js +++ b/framework/assets/js/accelerometer.js @@ -9,7 +9,8 @@ if (!PhoneGap.hasResource("accelerometer")) { PhoneGap.addResource("accelerometer"); -Acceleration = function(x, y, z) { +/** @constructor */ +function Acceleration(x, y, z) { this.x = x; this.y = y; this.z = z; diff --git a/framework/assets/js/app.js b/framework/assets/js/app.js index 0ee96a7f..fe8a60b8 100755 --- a/framework/assets/js/app.js +++ b/framework/assets/js/app.js @@ -11,6 +11,7 @@ PhoneGap.addResource("app"); /** * Constructor + * @constructor */ App = function() {}; @@ -23,7 +24,7 @@ App.prototype.clearCache = function() { /** * Load the url into the webview. - * + * * @param url The URL to load * @param props Properties that can be passed in to the activity: * wait: int => wait msec before loading URL @@ -33,7 +34,7 @@ App.prototype.clearCache = function() { * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error * errorUrl: URL => URL to load if there's an error loading specified URL with loadUrl(). Should be a local URL such as file:///android_asset/www/error.html"); * keepRunning: boolean => enable app to keep running in background - * + * * Example: * App app = new App(); * app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); @@ -59,7 +60,7 @@ App.prototype.clearHistory = function() { /** * Add a class that implements a service. - * + * * @param serviceType * @param className */ @@ -70,10 +71,10 @@ App.prototype.addService = function(serviceType, className) { /** * Override the default behavior of the Android back button. * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * + * * Note: The user should not have to call this method. Instead, when the user * registers for the "backbutton" event, this is automatically done. - * + * * @param override T=override, F=cancel override */ App.prototype.overrideBackbutton = function(override) { diff --git a/framework/assets/js/contact.js b/framework/assets/js/contact.js index b222eab9..6bb3d1cc 100755 --- a/framework/assets/js/contact.js +++ b/framework/assets/js/contact.js @@ -11,22 +11,23 @@ PhoneGap.addResource("contact"); /** * Contains information about a single contact. +* @constructor * @param {DOMString} id unique identifier * @param {DOMString} displayName * @param {ContactName} name * @param {DOMString} nickname -* @param {ContactField[]} phoneNumbers array of phone numbers -* @param {ContactField[]} emails array of email addresses -* @param {ContactAddress[]} addresses array of addresses -* @param {ContactField[]} ims instant messaging user ids -* @param {ContactOrganization[]} organizations +* @param {Array.} phoneNumbers array of phone numbers +* @param {Array.} emails array of email addresses +* @param {Array.} addresses array of addresses +* @param {Array.} ims instant messaging user ids +* @param {Array.} organizations * @param {DOMString} revision date contact was last updated * @param {DOMString} birthday contact's birthday * @param {DOMString} gender contact's gender * @param {DOMString} note user notes about contact -* @param {ContactField[]} photos -* @param {ContactField[]} categories -* @param {ContactField[]} urls contact's web sites +* @param {Array.} photos +* @param {Array.} categories +* @param {Array.} urls contact's web sites * @param {DOMString} timezone the contacts time zone */ var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, addresses, @@ -53,7 +54,8 @@ var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, a /** * ContactError. - * An error code assigned by an implementation when an error has occurred + * An error code assigned by an implementation when an error has occurreds + * @constructor */ var ContactError = function() { this.code=null; @@ -152,6 +154,7 @@ Contact.prototype.save = function(successCB, errorCB) { /** * Contact name. +* @constructor * @param formatted * @param familyName * @param givenName @@ -170,6 +173,7 @@ var ContactName = function(formatted, familyName, givenName, middle, prefix, suf /** * Generic contact field. +* @constructor * @param {DOMString} id unique identifier, should only be set by native code * @param type * @param value @@ -184,6 +188,7 @@ var ContactField = function(type, value, pref) { /** * Contact address. +* @constructor * @param {DOMString} id unique identifier, should only be set by native code * @param formatted * @param streetAddress @@ -204,6 +209,7 @@ var ContactAddress = function(formatted, streetAddress, locality, region, postal /** * Contact organization. +* @constructor * @param {DOMString} id unique identifier, should only be set by native code * @param name * @param dept @@ -222,6 +228,7 @@ var ContactOrganization = function(name, dept, title) { /** * Represents a group of Contacts. +* @constructor */ var Contacts = function() { this.inProgress = false; @@ -258,10 +265,10 @@ Contacts.prototype.create = function(properties) { }; /** -* This function returns and array of contacts. It is required as we need to convert raw -* JSON objects into concrete Contact objects. Currently this method is called after +* This function returns and array of contacts. It is required as we need to convert raw +* JSON objects into concrete Contact objects. Currently this method is called after * navigator.service.contacts.find but before the find methods success call back. -* +* * @param jsonArray an array of JSON Objects that need to be converted to Contact objects. * @returns an array of Contact objects */ @@ -277,6 +284,7 @@ Contacts.prototype.cast = function(pluginResult) { /** * ContactFindOptions. + * @constructor * @param filter used to match contacts against * @param multiple boolean used to determine if more than one contact should be returned * @param updatedSince return only contact records that have been updated on or after the given time diff --git a/framework/assets/js/crypto.js b/framework/assets/js/crypto.js index 434ff84e..b4e92983 100755 --- a/framework/assets/js/crypto.js +++ b/framework/assets/js/crypto.js @@ -11,6 +11,9 @@ if (!PhoneGap.hasResource("crypto")) { PhoneGap.addResource("crypto"); +/** +* @constructor +*/ var Crypto = function() { }; diff --git a/framework/assets/js/file.js b/framework/assets/js/file.js index 9b062ccb..73700ee6 100755 --- a/framework/assets/js/file.js +++ b/framework/assets/js/file.js @@ -11,8 +11,9 @@ PhoneGap.addResource("file"); /** * This class provides some useful information about a file. - * This is the fields returned when navigator.fileMgr.getFileProperties() + * This is the fields returned when navigator.fileMgr.getFileProperties() * is called. + * @constructor */ FileProperties = function(filePath) { this.filePath = filePath; @@ -22,12 +23,13 @@ FileProperties = function(filePath) { /** * Represents a single file. - * - * name {DOMString} name of the file, without path information - * fullPath {DOMString} the full path of the file, including the name - * type {DOMString} mime type - * lastModifiedDate {Date} last modified date - * size {Number} size of the file in bytes + * + * @constructor + * @param name {DOMString} name of the file, without path information + * @param fullPath {DOMString} the full path of the file, including the name + * @param type {DOMString} mime type + * @param lastModifiedDate {Date} last modified date + * @param size {Number} size of the file in bytes */ File = function(name, fullPath, type, lastModifiedDate, size) { this.name = name || null; @@ -37,7 +39,8 @@ File = function(name, fullPath, type, lastModifiedDate, size) { this.size = size || 0; }; -FileError = function() { +/** @constructor */ +function FileError() { this.code = null; }; @@ -62,8 +65,9 @@ FileError.PATH_EXISTS_ERR = 12; // File manager //----------------------------------------------------------------------------- -FileMgr = function() { -}; +/** @constructor */ +function FileMgr() { +} FileMgr.prototype.getFileProperties = function(filePath) { return PhoneGap.exec(null, null, "File", "getFileProperties", [filePath]); @@ -126,6 +130,7 @@ PhoneGap.addConstructor(function() { * For Android: * The root directory is the root of the file system. * To read from the SD card, the file name is "sdcard/my_file.txt" + * @constructor */ FileReader = function() { this.fileName = ""; @@ -164,7 +169,7 @@ FileReader.prototype.abort = function() { var error = new FileError(); error.code = error.ABORT_ERR; this.error = error; - + // If error callback if (typeof this.onerror === "function") { this.onerror({"type":"error", "target":this}); @@ -378,7 +383,8 @@ FileReader.prototype.readAsArrayBuffer = function(file) { * For Android: * The root directory is the root of the file system. * To write to the SD card, the file name is "sdcard/my_file.txt" - * + * + * @constructor * @param file {File} File object containing file properties * @param append if true write to the end of the file, otherwise overwrite the file */ @@ -420,13 +426,13 @@ FileWriter.prototype.abort = function() { // check for invalid state if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) { throw FileError.INVALID_STATE_ERR; - } + } // set error var error = new FileError(), evt; error.code = error.ABORT_ERR; this.error = error; - + // If error callback if (typeof this.onerror === "function") { this.onerror({"type":"error", "target":this}); @@ -435,7 +441,7 @@ FileWriter.prototype.abort = function() { if (typeof this.onabort === "function") { this.oneabort({"type":"abort", "target":this}); } - + this.readyState = FileWriter.DONE; // If write end callback @@ -446,7 +452,7 @@ FileWriter.prototype.abort = function() { /** * Writes data to the file - * + * * @param text to be written */ FileWriter.prototype.write = function(text) { @@ -526,13 +532,13 @@ FileWriter.prototype.write = function(text) { }; -/** +/** * Moves the file pointer to the location specified. - * - * If the offset is a negative number the position of the file - * pointer is rewound. If the offset is greater than the file - * size the position is set to the end of the file. - * + * + * If the offset is a negative number the position of the file + * pointer is rewound. If the offset is greater than the file + * size the position is set to the end of the file. + * * @param offset is the location to move the file pointer to. */ FileWriter.prototype.seek = function(offset) { @@ -544,12 +550,12 @@ FileWriter.prototype.seek = function(offset) { if (!offset) { return; } - + // See back from end of file. if (offset < 0) { this.position = Math.max(offset + this.length, 0); } - // Offset is bigger then file size so set position + // Offset is bigger then file size so set position // to the end of the file. else if (offset > this.length) { this.position = this.length; @@ -558,12 +564,12 @@ FileWriter.prototype.seek = function(offset) { // to start writing. else { this.position = offset; - } + } }; -/** +/** * Truncates the file to the size specified. - * + * * @param size to chop the file at. */ FileWriter.prototype.truncate = function(size) { @@ -640,7 +646,8 @@ FileWriter.prototype.truncate = function(size) { ); }; -LocalFileSystem = function() { +/** @constructor */ +function LocalFileSystem() { }; // File error codes @@ -651,7 +658,7 @@ LocalFileSystem.APPLICATION = 3; /** * Requests a filesystem in which to store application data. - * + * * @param {int} type of file system being requested * @param {Function} successCallback is called with the new FileSystem * @param {Function} errorCallback is called with a FileError @@ -670,7 +677,7 @@ LocalFileSystem.prototype.requestFileSystem = function(type, size, successCallba }; /** - * + * * @param {DOMString} uri referring to a local file in a filesystem * @param {Function} successCallback is called with the new entry * @param {Function} errorCallback is called with a FileError @@ -680,12 +687,12 @@ LocalFileSystem.prototype.resolveLocalFileSystemURI = function(uri, successCallb }; /** -* This function returns and array of contacts. It is required as we need to convert raw -* JSON objects into concrete Contact objects. Currently this method is called after +* This function returns and array of contacts. It is required as we need to convert raw +* JSON objects into concrete Contact objects. Currently this method is called after * navigator.service.contacts.find but before the find methods success call back. -* +* * @param a JSON Objects that need to be converted to DirectoryEntry or FileEntry objects. -* @returns an entry +* @returns an entry */ LocalFileSystem.prototype._castFS = function(pluginResult) { var entry = null; @@ -695,7 +702,7 @@ LocalFileSystem.prototype._castFS = function(pluginResult) { entry.name = pluginResult.message.root.name; entry.fullPath = pluginResult.message.root.fullPath; pluginResult.message.root = entry; - return pluginResult; + return pluginResult; } LocalFileSystem.prototype._castEntry = function(pluginResult) { @@ -713,17 +720,17 @@ LocalFileSystem.prototype._castEntry = function(pluginResult) { entry.name = pluginResult.message.name; entry.fullPath = pluginResult.message.fullPath; pluginResult.message = entry; - return pluginResult; + return pluginResult; } LocalFileSystem.prototype._castEntries = function(pluginResult) { var entries = pluginResult.message; - var retVal = []; + var retVal = []; for (i=0; i} [args] Zero or more arguments to pass to the method */ PhoneGap.exec = function(success, fail, service, action, args) { try { @@ -563,13 +564,13 @@ PhoneGap.exec = function(success, fail, service, action, args) { if (success || fail) { PhoneGap.callbacks[callbackId] = {success:success, fail:fail}; } - - var r = prompt(this.stringify(args), "gap:"+this.stringify([service, action, callbackId, true])); - + + var r = prompt(PhoneGap.stringify(args), "gap:"+PhoneGap.stringify([service, action, callbackId, true])); + // If a result was returned if (r.length > 0) { eval("var v="+r+";"); - + // If status is OK, then return value back to caller if (v.status === PhoneGap.callbackStatus.OK) { @@ -592,7 +593,7 @@ PhoneGap.exec = function(success, fail, service, action, args) { // If no result else if (v.status === PhoneGap.callbackStatus.NO_RESULT) { - + // Clear callback if not expecting any more results if (!v.keepCallback) { delete PhoneGap.callbacks[callbackId]; @@ -645,7 +646,7 @@ PhoneGap.callbackSuccess = function(callbackId, args) { console.log("Error in success callback: "+callbackId+" = "+e); } } - + // Clear callback if not expecting any more results if (!args.keepCallback) { delete PhoneGap.callbacks[callbackId]; @@ -669,7 +670,7 @@ PhoneGap.callbackError = function(callbackId, args) { catch (e) { console.log("Error in error callback: "+callbackId+" = "+e); } - + // Clear callback if not expecting any more results if (!args.keepCallback) { delete PhoneGap.callbacks[callbackId]; @@ -735,7 +736,7 @@ PhoneGap.JSCallbackToken = null; /** * This is only for Android. * - * Internal function that uses XHR to call into PhoneGap Java code and retrieve + * Internal function that uses XHR to call into PhoneGap Java code and retrieve * any JavaScript code that needs to be run. This is used for callbacks from * Java to JavaScript. */ @@ -757,7 +758,7 @@ PhoneGap.JSCallback = function() { // Callback function when XMLHttpRequest is ready xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState === 4){ - + // Exit if shutting down app if (PhoneGap.shuttingDown) { return; @@ -836,7 +837,7 @@ PhoneGap.UsePolling = false; // T=use polling, F=use XHR /** * This is only for Android. * - * Internal function that uses polling to call into PhoneGap Java code and retrieve + * Internal function that uses polling to call into PhoneGap Java code and retrieve * any JavaScript code that needs to be run. This is used for callbacks from * Java to JavaScript. */ @@ -874,7 +875,7 @@ PhoneGap.JSCallbackPolling = function() { /** * Create a UUID * - * @return + * @return {String} */ PhoneGap.createUUID = function() { return PhoneGap.UUIDcreatePart(4) + '-' + @@ -916,7 +917,7 @@ PhoneGap.close = function(context, func, params) { * @param {Function} successCallback The callback to call when the file has been loaded. */ PhoneGap.includeJavascript = function(jsfile, successCallback) { - var id = document.getElementsByTagName("head")[0]; + var id = document.getElementsByTagName("head")[0]; var el = document.createElement('script'); el.type = 'text/javascript'; if (typeof successCallback === 'function') { diff --git a/framework/assets/js/position.js b/framework/assets/js/position.js index 3a7454be..08d596db 100755 --- a/framework/assets/js/position.js +++ b/framework/assets/js/position.js @@ -25,7 +25,8 @@ Position = function(coords, timestamp) { this.timestamp = (timestamp !== 'undefined') ? timestamp : new Date().getTime(); }; -Coordinates = function(lat, lng, alt, acc, head, vel, altacc) { +/** @constructor */ +function Coordinates(lat, lng, alt, acc, head, vel, altacc) { /** * The latitude of the position. */ @@ -53,8 +54,8 @@ Coordinates = function(lat, lng, alt, acc, head, vel, altacc) { /** * The altitude accuracy of the position. */ - this.altitudeAccuracy = (altacc !== 'undefined') ? altacc : null; -}; + this.altitudeAccuracy = (altacc !== 'undefined') ? altacc : null; +} /** * This class specifies the options for requesting position data. diff --git a/framework/assets/js/storage.js b/framework/assets/js/storage.js index 56d5e743..c3cca1ad 100755 --- a/framework/assets/js/storage.js +++ b/framework/assets/js/storage.js @@ -18,6 +18,7 @@ PhoneGap.addResource("storage"); /** * Storage object that is called by native code when performing queries. * PRIVATE METHOD + * @constructor */ var DroidDB = function() { this.queryQueue = {}; @@ -105,6 +106,7 @@ DroidDB.prototype.fail = function(reason, id) { /** * Transaction object * PRIVATE METHOD + * @constructor */ var DroidDB_Tx = function() { @@ -165,7 +167,7 @@ DroidDB_Tx.prototype.queryComplete = function(id) { var i; for (i in this.queryList) { if (this.queryList.hasOwnProperty(i)) { - count++; + count++; } } if (count === 0) { @@ -205,6 +207,7 @@ DroidDB_Tx.prototype.queryFailed = function(id, reason) { * SQL query object * PRIVATE METHOD * + * @constructor * @param tx The transaction object that this query belongs to */ var DroidDB_Query = function(tx) { @@ -260,6 +263,7 @@ DroidDB_Tx.prototype.executeSql = function(sql, params, successCallback, errorCa /** * SQL result set that is returned to user. * PRIVATE METHOD + * @constructor */ DroidDB_Result = function() { this.rows = new DroidDB_Rows(); @@ -268,6 +272,7 @@ DroidDB_Result = function() { /** * SQL result set object * PRIVATE METHOD + * @constructor */ DroidDB_Rows = function() { this.resultSet = []; // results array @@ -301,14 +306,17 @@ DroidDB_openDatabase = function(name, version, display_name, size) { /** - * For browsers with no localStorage we emulate it with SQLite. Follows the w3c api. - * TODO: Do similar for sessionStorage. + * For browsers with no localStorage we emulate it with SQLite. Follows the w3c api. + * TODO: Do similar for sessionStorage. */ +/** + * @constructor + */ var CupcakeLocalStorage = function() { try { - this.db = openDatabase('localStorage', '1.0', 'localStorage', 2621440); + this.db = openDatabase('localStorage', '1.0', 'localStorage', 2621440); var storage = {}; this.length = 0; function setLength (length) { @@ -326,8 +334,8 @@ var CupcakeLocalStorage = function() { setLength(result.rows.length); PhoneGap.initializationComplete("cupcakeStorage"); }); - - }, + + }, function (err) { alert(err.message); } @@ -344,7 +352,7 @@ var CupcakeLocalStorage = function() { } ); }; - this.getItem = function(key) { + this.getItem = function(key) { return storage[key]; }; this.removeItem = function(key) { diff --git a/lib/classic.rb b/lib/classic.rb index cf9ab692..ba6a47f6 100755 --- a/lib/classic.rb +++ b/lib/classic.rb @@ -5,7 +5,7 @@ class Classic @android_sdk_path, @name, @pkg, @www, @path = a build end - + def build setup clobber @@ -16,8 +16,8 @@ class Classic copy_libs add_name_to_strings write_java - end - + end + def setup @android_dir = File.expand_path(File.dirname(__FILE__).gsub(/lib$/,'')) @framework_dir = File.join(@android_dir, "framework") @@ -31,14 +31,14 @@ class Classic @app_js_dir = '' @content = 'index.html' end - + # replaces @path with new android project def clobber FileUtils.rm_r(@path) if File.exists? @path FileUtils.mkdir_p @path end - - # removes local.properties and recreates based on android_sdk_path + + # removes local.properties and recreates based on android_sdk_path # then generates framework/phonegap.jar def build_jar %w(local.properties phonegap.js phonegap.jar).each do |f| @@ -46,7 +46,7 @@ class Classic end open(File.join(@framework_dir, "local.properties"), 'w') do |f| f.puts "sdk.dir=#{ @android_sdk_path }" - end + end Dir.chdir(@framework_dir) `ant jar` Dir.chdir(@android_dir) @@ -55,9 +55,9 @@ class Classic # runs android create project # TODO need to allow more flexible SDK targetting via config.xml def create_android - IO.popen("android list targets") { |f| + IO.popen("android list targets") { |f| targets = f.readlines(nil)[0].scan(/id\:.*$/) - if (targets.length > 0) + if (targets.length > 0) target_id = targets.last.match(/\d+/).to_a.first `android create project -t #{ target_id } -k #{ @pkg } -a #{ @name } -n #{ @name } -p #{ @path }` else @@ -66,7 +66,7 @@ class Classic end } end - + # copies the project/www folder into tmp/android/www def include_www FileUtils.mkdir_p File.join(@path, "assets", "www") @@ -127,7 +127,7 @@ class Classic end File.open(File.join(@path, "assets", "www", @app_js_dir, "phonegap.#{ version }.js"), 'w') {|f| f.write(phonegapjs) } end - + # puts app name in strings def add_name_to_strings x = " @@ -138,8 +138,8 @@ class Classic " open(File.join(@path, "res", "values", "strings.xml"), 'w') do |f| f.puts x.gsub(' ','') - end - end + end + end # create java source file def write_java @@ -164,7 +164,7 @@ class Classic FileUtils.mkdir_p(code_dir) open(File.join(code_dir, "#{ @name }.java"),'w') { |f| f.puts j } end - + # friendly output for now def msg puts "Created #{ @path }" diff --git a/lib/create.rb b/lib/create.rb index aef3dd49..ec4ebd6e 100644 --- a/lib/create.rb +++ b/lib/create.rb @@ -1,5 +1,5 @@ # Create -# +# # Generates an Android project from a valid WWW directory and puts it in ../[PROJECT NAME]_android # class Create < Classic @@ -8,35 +8,35 @@ class Create < Classic read_config build end - + def guess_paths(path) # if no path is supplied uses current directory for project path = FileUtils.pwd if path.nil? - + # if a www is found use it for the project path = File.join(path, 'www') if File.exists? File.join(path, 'www') - + # defaults @name = path.split("/").last.gsub('-','').gsub(' ','') # no dashses nor spaces @path = File.join(path, '..', "#{ @name }_android") - @www = path - @pkg = "com.phonegap.#{ @name }" + @www = path + @pkg = "com.phonegap.#{ @name }" @android_sdk_path = Dir.getwd[0,1] != "/" ? `android-sdk-path.bat android.bat`.gsub('\\tools','').gsub('\\', '\\\\\\\\') : `which android`.gsub(/\/tools\/android$/,'').chomp @android_dir = File.expand_path(File.dirname(__FILE__).gsub('lib','')) @framework_dir = File.join(@android_dir, "framework") @icon = File.join(@www, 'icon.png') @app_js_dir = '' @content = 'index.html' - + # stop executation on errors - raise "Expected index.html in the following folder #{ path }.\nThe path is expected to be the directory droidgap create is run from or specified as a command line arg like droidgap create my_path." unless File.exists? File.join(path, 'index.html') + raise "Expected index.html in the following folder #{ path }.\nThe path is expected to be the directory droidgap create is run from or specified as a command line arg like droidgap create my_path." unless File.exists? File.join(path, 'index.html') raise 'Could not find android in your PATH!' if @android_sdk_path.empty? end # reads in a config.xml file def read_config config_file = File.join(@www, 'config.xml') - + if File.exists?(config_file) require 'rexml/document' f = File.new config_file @@ -47,9 +47,9 @@ class Create < Classic @config[:icons] = {} defaultIconSize = 0 doc.root.elements.each do |n| - @config[:name] = n.text.gsub('-','').gsub(' ','') if n.name == 'name' - @config[:description] = n.text if n.name == 'description' - @config[:content] = n.attributes["src"] if n.name == 'content' + @config[:name] = n.text.gsub('-','').gsub(' ','') if n.name == 'name' + @config[:description] = n.text if n.name == 'description' + @config[:content] = n.attributes["src"] if n.name == 'content' if n.name == 'icon' if n.attributes["width"] == '72' && n.attributes["height"] == '72' @config[:icons]["drawable-hdpi".to_sym] = n.attributes["src"] @@ -74,12 +74,12 @@ class Create < Classic end end - + if n.name == "preference" && n.attributes["name"] == 'javascript_folder' @config[:js_dir] = n.attributes["value"] - end - end - + end + end + # extract android specific stuff @config[:versionCode] = doc.elements["//android:versionCode"] ? doc.elements["//android:versionCode"].text : 3 @config[:minSdkVersion] = doc.elements["//android:minSdkVersion"] ? doc.elements["//android:minSdkVersion"].text : 1 @@ -92,6 +92,6 @@ class Create < Classic @app_js_dir = @config[:js_dir] ? @config[:js_dir] : '' # sets the start page @content = @config[:content] ? @config[:content] : 'index.html' - end - end + end + end end