http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/examples/resources/css/styles.css ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/examples/resources/css/styles.css b/sdks/html5-javascript/examples/resources/css/styles.css deleted file mode 100755 index 7492f93..0000000 --- a/sdks/html5-javascript/examples/resources/css/styles.css +++ /dev/null @@ -1,91 +0,0 @@ -/** -* All Calls is a Node.js sample app that is powered by Usergrid -* This app shows how to make the 4 REST calls (GET, POST, -* PUT, DELETE) against the usergrid API. -* -* Learn more at http://Usergrid.com/docs -* -* Copyright 2012 Apigee Corporation -* -* Licensed 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. -*/ - -/** -* @file styles.css -* @author Rod Simpson ([email protected]) -* -*/ - -body { - background-color: #fff; - min-height: 800px; -} - -/* buttons ================================================================= */ -.btn-primary{border-color:#1455ab #1455ab #0c3367;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);background-color:#146cab;background-image:-moz-linear-gradient(top, #147bab, #1455ab);background-image:-ms-linear-gradient(top, #147bab, #1455ab);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#147bab), to(#1455ab));background-image:-webkit-linear-gradient(top, #147bab, #1455ab);background-image:-o-linear-gradient(top, #147bab, #1455ab);background-image:linear-gradient(top, #147bab, #1455ab);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#147bab', endColorstr='#1455ab', GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#1455ab;} - -.header{ - padding: 10px; - width: 100%; - height: 40px; - background-color: #ff4200; - color: #fff; - text-align: left; - font-size: 16px; - font-weight: 800; -} -.breadcrumb{ - font-size: 16px; -} -.info{ - padding: 0px 30px 30px 30px; - font-size: 16px; -} -h3{ - padding-bottom: 20px; -} -.main{ - display: block; - padding: 0 30px 30px 30px ; - background-color: #fff; -} -.form-block{ - display: block; - display: none; - padding: 10px 0; - min-height: 210px; - background-color: #fff; -} -.section-header{ - font-size: 20px; - font-weight: 200; - padding-bottom: 20px; -} -.note { - padding-bottom: 20px; -} -.response-box{ - margin: 0 auto; - padding: 10px; - width: 640px; - border: 1px solid silver; - background-color: #ddd; - font-weight: bold; -} -pre{ - border: none; - padding: 0; -} -.left{ - float: left; -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/examples/resources/images/apigee.png ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/examples/resources/images/apigee.png b/sdks/html5-javascript/examples/resources/images/apigee.png deleted file mode 100755 index c0d0f84..0000000 Binary files a/sdks/html5-javascript/examples/resources/images/apigee.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/examples/resources/js/json2.js ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/examples/resources/js/json2.js b/sdks/html5-javascript/examples/resources/js/json2.js deleted file mode 100755 index c7745df..0000000 --- a/sdks/html5-javascript/examples/resources/js/json2.js +++ /dev/null @@ -1,486 +0,0 @@ -/* - json2.js - 2012-10-08 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, regexp: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== 'object') { - JSON = {}; -} - -(function () { - 'use strict'; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' - : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? '[]' - : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? '{}' - : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' - ? walk({'': j}, '') - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/examples/test/test.html ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/examples/test/test.html b/sdks/html5-javascript/examples/test/test.html deleted file mode 100755 index e66fcb3..0000000 --- a/sdks/html5-javascript/examples/test/test.html +++ /dev/null @@ -1,54 +0,0 @@ -<!-- - 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. ---> - -<!DOCTYPE html> -<html> - <head> - <title>Readme File Tests</title> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <link rel="stylesheet" href="../resources/css/bootstrap-combined.min.css" /> - <link rel="stylesheet" href="../resources/css/styles.css" /> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script> - <script src="../../usergrid.js" type="text/javascript"></script> - <script src="test.js" type="text/javascript"></script> - <script type="text/javascript"> - - </script> - </head> - <body> - <div class="header"> - <img src="../resources/images/apigee.png"> App Services (Usergrid) Javascript SDK - </div> - <div class="info"> - This sample application runs tests on the sample code examples in the readme file. Tests are run against App Services (Usergrid) using the Usergrid Javascript SDK. - </div> - <div id="main" class="main"> - <div class="section-header">README sample code tests</div> - <div class="well"> - <div id="name-control" class="control-group"> - <div class="controls"> - <button class="btn btn-primary" id="start-button" style="width: 90px;">Start</button> - <span style="clear: both;"> </span> - </div> - </div> - </div> - <div class="section-header"><b>Test Output</b></div> - <div class="well"> - <pre id="test-output">// Press Start button to begin</pre> - </div> - </body> -</html> http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/examples/test/test.js ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/examples/test/test.js b/sdks/html5-javascript/examples/test/test.js deleted file mode 100755 index fb65d98..0000000 --- a/sdks/html5-javascript/examples/test/test.js +++ /dev/null @@ -1,978 +0,0 @@ -/** -* Test suite for all the examples in the readme -* -* NOTE: No, this test suite doesn't use the traditional format for -* a test suite. This is because the goal is to require as little -* alteration as possible during the copy / paste operation from this test -* suite to the readme file. -* -* @author rod simpson ([email protected]) -*/ - -$(document).ready(function () { - -//call the runner function to start the process -$('#start-button').bind('click', function() { - $('#start-button').attr("disabled", "disabled"); - $('#test-output').html(''); - runner(0); -}); - -var logSuccess = true; -var successCount = 0; -var logError = true; -var errorCount = 0; -var logNotice = true; -var _unique = new Date().getTime(); -var _username = 'marty'+_unique; -var _email = 'marty'+_unique+'@timetravel.com'; -var _password = 'password2'; -var _newpassword = 'password3'; - -var client = new Usergrid.Client({ - orgName:'yourorgname', - appName:'sandbox', - logging: true, //optional - turn on logging, off by default - buildCurl: true //optional - turn on curl commands, off by default -}); - -client.logout(); - -function runner(step, arg, arg2){ - step++; - switch(step) - { - case 1: - notice('-----running step '+step+': DELETE user from DB to prep test'); - clearUser(step); - break; - case 2: - notice('-----running step '+step+': GET test'); - testGET(step); - break; - case 3: - notice('-----running step '+step+': POST test'); - testPOST(step); - break; - case 4: - notice('-----running step '+step+': PUT test'); - testPUT(step); - break; - case 5: - notice('-----running step '+step+': DELETE test'); - testDELETE(step); - break; - case 6: - notice('-----running step '+step+': prepare database - remove all dogs (no real dogs harmed here!!)'); - cleanupAllDogs(step); - break; - case 7: - notice('-----running step '+step+': make a new dog'); - makeNewDog(step); - break; - case 8: - notice('-----running step '+step+': update our dog'); - updateDog(step, arg); - break; - case 9: - notice('-----running step '+step+': refresh our dog'); - refreshDog(step, arg); - break; - case 10: - notice('-----running step '+step+': remove our dog from database (no real dogs harmed here!!)'); - removeDogFromDatabase(step, arg); - break; - case 11: - notice('-----running step '+step+': make lots of dogs!'); - makeSampleData(step, arg); - break; - case 12: - notice('-----running step '+step+': make a dogs collection and show each dog'); - testDogsCollection(step); - break; - case 13: - notice('-----running step '+step+': get the next page of the dogs collection and show each dog'); - getNextDogsPage(step, arg); - break; - case 14: - notice('-----running step '+step+': get the previous page of the dogs collection and show each dog'); - getPreviousDogsPage(step, arg); - break; - case 15: - notice('-----running step '+step+': remove all dogs from the database (no real dogs harmed here!!)'); - cleanupAllDogs(step); - break; - case 16: - notice('-----running step '+step+': prepare database (remove existing user if present)'); - prepareDatabaseForNewUser(step); - break; - case 17: - notice('-----running step '+step+': create a new user'); - createUser(step); - break; - case 18: - notice('-----running step '+step+': update the user'); - updateUser(step, arg); - break; - case 19: - notice('-----running step '+step+': get the existing user'); - getExistingUser(step, arg); - break; - case 20: - notice('-----running step '+step+': refresh the user from the database'); - refreshUser(step, arg); - break; - case 21: - notice('-----running step '+step+': log user in'); - loginUser(step, arg); - break; - case 22: - notice('-----running step '+step+': change users password'); - changeUsersPassword(step, arg); - break; - case 23: - notice('-----running step '+step+': log user out'); - logoutUser(step, arg); - break; - case 24: - notice('-----running step '+step+': relogin user'); - reloginUser(step, arg); - break; - case 25: - notice('-----running step '+step+': logged in user creates dog'); - createDog(step, arg); - break; - case 26: - notice('-----running step '+step+': logged in user likes dog'); - userLikesDog(step, arg, arg2); - break; - case 27: - notice('-----running step '+step+': logged in user removes likes connection to dog'); - removeUserLikesDog(step, arg, arg2); - break; - case 28: - notice('-----running step '+step+': user removes dog'); - removeDog(step, arg, arg2); - break; - case 29: - notice('-----running step '+step+': log the user out'); - logoutUser(step, arg); - break; - case 30: - notice('-----running step '+step+': remove the user from the database'); - destroyUser(step, arg); - break; - case 31: - notice('-----running step '+step+': try to create existing entity'); - createExistingEntity(step, arg); - break; - case 32: - notice('-----running step '+step+': try to create new entity with no name'); - createNewEntityNoName(step, arg); - break; - case 33: - notice('-----running step '+step+': clean up users'); - cleanUpUsers(step, arg); - break; - case 34: - notice('-----running step '+step+': clean up dogs'); - cleanUpDogs(step, arg); - break; - default: - notice('-----test complete!-----'); - notice('Success count= ' + successCount); - notice('Error count= ' + errorCount); - notice('-----thank you for playing!-----'); - $('#start-button').removeAttr("disabled"); - } -} - -//logging functions -function success(message){ - successCount++; - if (logSuccess) { - console.log('SUCCESS: ' + message); - var html = $('#test-output').html(); - html += ('SUCCESS: ' + message + '\r\n'); - $('#test-output').html(html); - } -} - -function error(message){ - errorCount++ - if (logError) { - console.log('ERROR: ' + message); - var html = $('#test-output').html(); - html += ('ERROR: ' + message + '\r\n'); - $('#test-output').html(html); - } -} - -function notice(message){ - if (logNotice) { - console.log('NOTICE: ' + message); - var html = $('#test-output').html(); - html += (message + '\r\n'); - $('#test-output').html(html); - } -} - -//tests -function clearUser(step) { - var options = { - method:'DELETE', - endpoint:'users/fred' - }; - client.request(options, function (err, data) { - //data will contain raw results from API call - success('User cleared from DB'); - runner(step); - }); -} - -function testGET(step) { - var options = { - method:'GET', - endpoint:'users' - }; - client.request(options, function (err, data) { - if (err) { - error('GET failed'); - } else { - //data will contain raw results from API call - success('GET worked'); - runner(step); - } - }); -} - -function testPOST(step) { - var options = { - method:'POST', - endpoint:'users', - body:{ username:'fred', password:'secret' } - }; - client.request(options, function (err, data) { - if (err) { - error('POST failed'); - } else { - //data will contain raw results from API call - success('POST worked'); - runner(step); - } - }); -} - -function testPUT(step) { - var options = { - method:'PUT', - endpoint:'users/fred', - body:{ newkey:'newvalue' } - }; - client.request(options, function (err, data) { - if (err) { - error('PUT failed'); - } else { - //data will contain raw results from API call - success('PUT worked'); - runner(step); - } - }); -} - -function testDELETE(step) { - var options = { - method:'DELETE', - endpoint:'users/fred' - }; - client.request(options, function (err, data) { - if (err) { - error('DELETE failed'); - } else { - //data will contain raw results from API call - success('DELETE worked'); - runner(step); - } - }); -} - -function makeNewDog(step) { - - var options = { - type:'dogs', - name:'Ralph'+_unique - } - - client.createEntity(options, function (err, response, dog) { - if (err) { - error('dog not created'); - } else { - success('dog is created'); - - //once the dog is created, you can set single properties: - dog.set('breed','Dinosaur'); - - //the set function can also take a JSON object: - var data = { - master:'Fred', - state:'hungry' - } - //set is additive, so previously set properties are not overwritten - dog.set(data); - - //finally, call save on the object to save it back to the database - dog.save(function(err){ - if (err){ - error('dog not saved'); - } else { - success('new dog is saved'); - runner(step, dog); - } - }); - } - }); - -} - -function updateDog(step, dog) { - - //change a property in the object - dog.set("state", "fed"); - //and save back to the database - dog.save(function(err){ - if (err){ - error('dog not saved'); - } else { - success('dog is saved'); - runner(step, dog); - } - }); - -} - -function refreshDog(step, dog){ - - //call fetch to refresh the data from the server - dog.fetch(function(err){ - if (err){ - error('dog not refreshed from database'); - } else { - //dog has been refreshed from the database - //will only work if the UUID for the entity is in the dog object - success('dog entity refreshed from database'); - runner(step, dog); - } - }); - -} - -function removeDogFromDatabase(step, dog){ - - //the destroy method will delete the entity from the database - dog.destroy(function(err){ - if (err){ - error('dog not removed from database'); - } else { - success('dog removed from database'); // no real dogs were harmed! - dog = null; //no real dogs were harmed! - runner(step, 1); - } - }); - -} - -function makeSampleData(step, i) { - notice('making dog '+i); - - var options = { - type:'dogs', - name:'dog'+_unique+i, - index:i - } - - client.createEntity(options, function (err, dog) { - if (err) { - error('dog ' + i + ' not created'); - } else { - if (i >= 30) { - //data made, ready to go - success('all dogs made'); - runner(step); - } else { - success('dog ' + i + ' made'); - //keep making dogs - makeSampleData(step, ++i); - } - } - }); -} - -function testDogsCollection(step) { - - var options = { - type:'dogs', - qs:{ql:'order by index'} - } - - client.createCollection(options, function (err, response, dogs) { - if (err) { - error('could not make collection'); - } else { - - success('new Collection created'); - - //we got the dogs, now display the Entities: - while(dogs.hasNextEntity()) { - //get a reference to the dog - dog = dogs.getNextEntity(); - var name = dog.get('name'); - notice('dog is called ' + name); - } - - success('looped through dogs'); - - //create a new dog and add it to the collection - var options = { - name:'extra-dog', - fur:'shedding' - } - //just pass the options to the addEntity method - //to the collection and it is saved automatically - dogs.addEntity(options, function(err, dog, data) { - if (err) { - error('extra dog not saved or added to collection'); - } else { - success('extra dog saved and added to collection'); - runner(step, dogs); - } - }); - } - }); - -} - -function getNextDogsPage(step, dogs) { - - if (dogs.hasNextPage()) { - //there is a next page, so get it from the server - dogs.getNextPage(function(err){ - if (err) { - error('could not get next page of dogs'); - } else { - success('got next page of dogs'); - //we got the next page of data, so do something with it: - var i = 11; - while(dogs.hasNextEntity()) { - //get a reference to the dog - var dog = dogs.getNextEntity(); - var index = dog.get('index'); - if(i !== index) { - error('wrong dog loaded: wanted' + i + ', got ' + index); - } - notice('got dog ' + i); - i++ - } - success('looped through dogs') - runner(step, dogs); - } - }); - } else { - getPreviousDogsPage(dogs); - } - -} - -function getPreviousDogsPage(step, dogs) { - - if (dogs.hasPreviousPage()) { - //there is a previous page, so get it from the server - dogs.getPreviousPage(function(err){ - if(err) { - error('could not get previous page of dogs'); - } else { - success('got next page of dogs'); - //we got the previous page of data, so do something with it: - var i = 1; - while(dogs.hasNextEntity()) { - //get a reference to the dog - var dog = dogs.getNextEntity(); - var index = dog.get('index'); - if(i !== index) { - error('wrong dog loaded: wanted' + i + ', got ' + index); - } - notice('got dog ' + i); - i++ - } - success('looped through dogs'); - runner(step); - } - }); - } else { - getAllDogs(); - } -} - -function cleanupAllDogs(step){ - - var options = { - type:'dogs', - qs:{limit:50} //limit statement set to 50 - } - - client.createCollection(options, function (err, response, dogs) { - if (err) { - error('could not get all dogs'); - } else { - success('got at most 50 dogs'); - //we got 50 dogs, now display the Entities: - while(dogs.hasNextEntity()) { - //get a reference to the dog - var dog = dogs.getNextEntity(); - var name = dog.get('name'); - notice('dog is called ' + name); - } - dogs.resetEntityPointer(); - //do doggy cleanup - while(dogs.hasNextEntity()) { - //get a reference to the dog - var dog = dogs.getNextEntity(); - var dogname = dog.get('name'); - notice('removing dog ' + dogname + ' from database'); - dog.destroy(function(err, data) { - if (err) { - error('dog not removed'); - } else { - success('dog removed'); - } - }); - } - - //no need to wait around for dogs to be removed, so go on to next test - runner(step); - } - }); -} - - -function prepareDatabaseForNewUser(step) { - var options = { - method:'DELETE', - endpoint:'users/', - qs:{ql:"select * where username ='marty*'"} - }; - client.request(options, function (err, data) { - if (err) { - notice('database ready - no user to delete'); - runner(step); - } else { - //data will contain raw results from API call - success('database ready - user deleted worked'); - runner(step); - } - }); -} - -function createUser(step) { - client.signup(_username, _password, _email, 'Marty McFly', - function (err, response, marty) { - if (err){ - error('user not created'); - runner(step, marty); - } else { - success('user created'); - runner(step, marty); - } - } - ); -} - -function updateUser(step, marty) { - - //add properties cumulatively - marty.set('state', 'California'); - marty.set("girlfriend","Jennifer"); - marty.save(function(err){ - if (err){ - error('user not updated'); - } else { - success('user updated'); - runner(step, marty); - } - }); - -} - -function getExistingUser(step, marty) { - - var options = { - type:'users', - username:_username - } - client.getEntity(options, function(err, response, existingUser){ - if (err){ - error('existing user not retrieved'); - } else { - success('existing user was retrieved'); - - var username = existingUser.get('username'); - if (username === _username){ - success('got existing user username'); - } else { - error('could not get existing user username'); - } - runner(step, marty); - } - }); - -} - - -function refreshUser(step, marty) { - - marty.fetch(function(err){ - if (err){ - error('not refreshed'); - } else { - success('user refreshed'); - runner(step, marty); - } - }); - -} - -function loginUser(step, marty) { - username = _username; - password = _password; - client.login(username, password, - function (err, response, user) { - if (err) { - error('could not log user in'); - } else { - success('user has been logged in'); - - //the login call will return an OAuth token, which is saved - //in the client. Any calls made now will use the token. - //once a user has logged in, their user object is stored - //in the client and you can access it this way: - var token = client.token; - - //Then make calls against the API. For example, you can - //get the user entity this way: - client.getLoggedInUser(function(err, data, user) { - console.error(err, data, user); - if(err) { - error('could not get logged in user'); - } else { - success('got logged in user'); - - //you can then get info from the user entity object: - var username = user.get('username'); - notice('logged in user was: ' + username); - - runner(step, user); - } - }); - - } - } - ); -} - -function changeUsersPassword(step, marty) { - - marty.set('oldpassword', _password); - marty.set('password', _newpassword); - marty.set('newpassword', _newpassword); - marty.changePassword(function(err, response){ - if (err){ - error('user password not updated'); - } else { - success('user password updated'); - runner(step, marty); - } - }); - -} - -function logoutUser(step, marty) { - - //to log the user out, call the logout() method - client.logout(); - - //verify the logout worked - if (client.isLoggedIn()) { - error('logout failed'); - } else { - success('user has been logged out'); - } - - runner(step, marty); -} - -function reloginUser(step, marty) { - - username = _username - password = _newpassword; - client.login(username, password, - function (err, response, marty) { - if (err) { - error('could not relog user in'); - } else { - success('user has been re-logged in'); - runner(step, marty); - } - } - ); -} - - - -//TODO: currently, this code assumes permissions have been set to support user actions. need to add code to show how to add new role and permission programatically -// -//first create a new permission on the default role: -//POST "https://api.usergrid.com/yourorgname/yourappname/roles/default/permissions" -d '{"permission":"get,post,put,delete:/dogs/**"}' -//then after user actions, delete the permission on the default role: -//DELETE "https://api.usergrid.com/yourorgname/yourappname/roles/default/permissions?permission=get%2Cpost%2Cput%2Cdelete%3A%2Fdogs%2F**" - - -function createDog(step, marty) { - - var options = { - type:'dogs', - name:'einstein', - breed:'mutt' - } - - client.createEntity(options, function (err, response, dog) { - if (err) { - error('POST new dog by logged in user failed'); - } else { - success('POST new dog by logged in user succeeded'); - runner(step, marty, dog); - } - }); - -} - -function userLikesDog(step, marty, dog) { - - marty.connect('likes', dog, function (err, response, data) { - if (err) { - error('connection not created'); - runner(step, marty); - } else { - - //call succeeded, so pull the connections back down - marty.getConnections('likes', function (err, response, data) { - if (err) { - error('could not get connections'); - } else { - //verify that connection exists - if (marty.likes.einstein) { - success('connection exists'); - } else { - error('connection does not exist'); - } - - runner(step, marty, dog); - } - }); - } - }); - -} - -function removeUserLikesDog(step, marty, dog) { - - marty.disconnect('likes', dog, function (err, data) { - if (err) { - error('connection not deleted'); - runner(step, marty); - } else { - - //call succeeded, so pull the connections back down - marty.getConnections('likes', function (err, data) { - if (err) { - error('error getting connections'); - } else { - //verify that connection exists - if (marty.likes.einstein) { - error('connection still exists'); - } else { - success('connection deleted'); - } - - runner(step, marty, dog); - } - }); - } - }); - -} - -function removeDog(step, marty, dog) { - - //now delete the dog from the database - dog.destroy(function(err, data) { - if (err) { - error('dog not removed'); - } else { - success('dog removed'); - } - }); - runner(step, marty); -} - -function destroyUser(step, marty) { - - marty.destroy(function(err){ - if (err){ - error('user not deleted from database'); - } else { - success('user deleted from database'); - marty = null; //blow away the local object - runner(step); - } - }); - -} - -function createExistingEntity(step, marty) { - - var options = { - type:'dogs', - name:'einstein' - } - - client.createEntity(options, function (err, response, dog) { - if (err) { - error('Create new entity to use for existing entity failed'); - } else { - success('Create new entity to use for existing entity succeeded'); - - var uuid = dog.get('uuid'); - //now create new entity, but use same entity name of einstein. This means that - //the original einstein entity now exists. Thus, the new einstein entity should - //be the same as the original + any data differences from the options var: - - options = { - type:'dogs', - name:'einstein', - breed:'mutt' - } - client.createEntity(options, function (err, response, newdog) { - if (err) { - success('Create new entity to use for existing entity failed'); - } else { - error('Create new entity to use for existing entity succeeded'); - } - dog.destroy(function(err){ - if (err){ - error('existing entity not deleted from database'); - } else { - success('existing entity deleted from database'); - dog = null; //blow away the local object - newdog = null; //blow away the local object - runner(step); - } - }); - }); - } - }); - -} - -function createNewEntityNoName(step, marty) { - - var options = { - type:"something", - othervalue:"something else" - } - - client.createEntity(options, function (err, response, entity) { - if (err) { - error('Create new entity with no name failed'); - } else { - success('Create new entity with no name succeeded'); - - entity.destroy(); - runner(step); - } - }); - -} - -function cleanUpUsers(step){ - - var options = { - type:'users', - qs:{limit:50} //limit statement set to 50 - } - - client.createCollection(options, function (err, response, users) { - if (err) { - error('could not get all users'); - } else { - success('got users'); - //do doggy cleanup - while(users.hasNextEntity()) { - //get a reference to the dog - var user = users.getNextEntity(); - var username = user.get('name'); - notice('removing dog ' + username + ' from database'); - user.destroy(function(err, data) { - if (err) { - error('user not removed'); - } else { - success('user removed'); - } - }); - } - - runner(step); - } - }); - -} - -function cleanUpDogs(step){ - - var options = { - type:'dogs', - qs:{limit:50} //limit statement set to 50 - } - - client.createCollection(options, function (err, response, dogs) { - if (err) { - error('could not get all dogs'); - } else { - success('got at most 50 dogs'); - //we got 50 dogs, now display the Entities: - while(dogs.hasNextEntity()) { - //get a reference to the dog - var dog = dogs.getNextEntity(); - var name = dog.get('name'); - notice('dog is called ' + name); - } - dogs.resetEntityPointer(); - //do doggy cleanup - while(dogs.hasNextEntity()) { - //get a reference to the dog - var dog = dogs.getNextEntity(); - var dogname = dog.get('name'); - notice('removing dog ' + dogname + ' from database'); - dog.destroy(function(err, data) { - if (err) { - error('dog not removed'); - } else { - success('dog removed'); - } - }); - } - - //no need to wait around for dogs to be removed, so go on to next test - runner(step); - } - }); - } -}); http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/extensions/usergrid.validation.js ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/extensions/usergrid.validation.js b/sdks/html5-javascript/extensions/usergrid.validation.js deleted file mode 100755 index 42c1564..0000000 --- a/sdks/html5-javascript/extensions/usergrid.validation.js +++ /dev/null @@ -1,267 +0,0 @@ -/* - * 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. - */ - -/** - * validation is a Singleton that provides methods for validating common field types - * - * @class Usergrid.validation - * @author Rod Simpson ([email protected]) -**/ -Usergrid.validation = (function () { - - var usernameRegex = new RegExp("^([0-9a-zA-Z\.\-])+$"); - var nameRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?;:.,'\"~*-=+_\[\\](){}/\\ |])+$"); - var emailRegex = new RegExp("^(([0-9a-zA-Z]+[_\+.-]?)+@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$"); - var passwordRegex = new RegExp("^([0-9a-zA-Z@#$%^&!?<>;:.,'\"~*-=+_\[\\](){}/\\ |])+$"); - var pathRegex = new RegExp("^([0-9a-z./-])+$"); - var titleRegex = new RegExp("^([0-9a-zA-Z.!-?/])+$"); - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateUsername - * @param {string} username - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateUsername(username, failureCallback) { - if (usernameRegex.test(username) && checkLength(username, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getUsernameAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getUsernameAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getUsernameAllowedChars(){ - return 'Length: min 4, max 80. Allowed: A-Z, a-z, 0-9, dot, and dash'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateName - * @param {string} name - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateName(name, failureCallback) { - if (nameRegex.test(name) && checkLength(name, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getNameAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getNameAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getNameAllowedChars(){ - return 'Length: min 4, max 80. Allowed: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . / ? !'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validatePassword - * @param {string} password - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validatePassword(password, failureCallback) { - if (passwordRegex.test(password) && checkLength(password, 5, 16)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getPasswordAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getPasswordAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getPasswordAllowedChars(){ - return 'Length: min 5, max 16. Allowed: A-Z, a-z, 0-9, ~ @ # % ^ & * ( ) - _ = + [ ] { } \\ | ; : \' " , . < > / ? !'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateEmail - * @param {string} email - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateEmail(email, failureCallback) { - if (emailRegex.test(email) && checkLength(email, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getEmailAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getEmailAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getEmailAllowedChars(){ - return 'Email must be in standard form: e.g. [email protected]'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validatePath - * @param {string} path - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validatePath(path, failureCallback) { - if (pathRegex.test(path) && checkLength(path, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getPathAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getPathAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getPathAllowedChars(){ - return 'Length: min 4, max 80. Allowed: /, a-z, 0-9, dot, and dash'; - } - - /** - * Tests the string against the allowed chars regex - * - * @public - * @method validateTitle - * @param {string} title - The string to test - * @param {function} failureCallback - (optional), the function to call on a failure - * @return {boolean} Returns true if string passes regex, false if not - */ - function validateTitle(title, failureCallback) { - if (titleRegex.test(title) && checkLength(title, 4, 80)) { - return true; - } else { - if (failureCallback && typeof(failureCallback) === "function") { - failureCallback(this.getTitleAllowedChars()); - } - return false; - } - } - - /** - * Returns the regex of allowed chars - * - * @public - * @method getTitleAllowedChars - * @return {string} Returns a string with the allowed chars - */ - function getTitleAllowedChars(){ - return 'Length: min 4, max 80. Allowed: space, A-Z, a-z, 0-9, dot, dash, /, !, and ?'; - } - - /** - * Tests if the string is the correct length - * - * @public - * @method checkLength - * @param {string} string - The string to test - * @param {integer} min - the lower bound - * @param {integer} max - the upper bound - * @return {boolean} Returns true if string is correct length, false if not - */ - function checkLength(string, min, max) { - if (string.length > max || string.length < min) { - return false; - } - return true; - } - - /** - * Tests if the string is a uuid - * - * @public - * @method isUUID - * @param {string} uuid The string to test - * @returns {Boolean} true if string is uuid - */ - function isUUID (uuid) { - var uuidValueRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; - if (!uuid) return false; - return uuidValueRegex.test(uuid); - } - - return { - validateUsername:validateUsername, - getUsernameAllowedChars:getUsernameAllowedChars, - validateName:validateName, - getNameAllowedChars:getNameAllowedChars, - validatePassword:validatePassword, - getPasswordAllowedChars:getPasswordAllowedChars, - validateEmail:validateEmail, - getEmailAllowedChars:getEmailAllowedChars, - validatePath:validatePath, - getPathAllowedChars:getPathAllowedChars, - validateTitle:validateTitle, - getTitleAllowedChars:getTitleAllowedChars, - isUUID:isUUID - } -})(); http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/index.html ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/index.html b/sdks/html5-javascript/index.html deleted file mode 100755 index 309d90b..0000000 --- a/sdks/html5-javascript/index.html +++ /dev/null @@ -1,70 +0,0 @@ -<!-- - 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. ---> - -<!DOCTYPE html> -<html> - <head> - <title></title> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <link rel="stylesheet" href="examples/resources/css/bootstrap-combined.min.css" /> - <link rel="stylesheet" href="examples/resources/css/styles.css" /> - </head> - <body> - <div class="header"> - <img src="examples/resources/images/apigee.png"> Usergrid Javascript SDK - </div> - <div id="main" class="main"> - <br/> - <h2>Javascript SDK</h2> - This SDK is designed to enable you to connect your apps to the Usergrid API. - <br/> - <br/> - <h2>Read me</h2> - View the read me file for the SDK: - <a href="https://github.com/usergrid/usergrid/blob/master/sdks/html5-javascript/README.md">https://github.com/usergrid/usergrid/blob/master/sdks/html5-javascript/README.md</a>. - <br/> - <br/> - <h2>API documentation</h2> - For more information on Usergrid, see the Apache docs: - <a href="http://usergrid.apache.org/">http://usergrid.apache.org/</a> - <br/> - <br/> - - <h2>Example Apps:</h2> - <br/> - <a href="examples/all-calls/all-calls.html" style="font-size: 20px;">All Calls example app</a> - <br/> - This app shows the basic method for making all call types against the API. It also shows how to log in an app user. - <br/> - <br/> - <a href="examples/dogs/dogs.html" style="font-size: 20px;">Dogs example app</a> - <br/> - This app shows you how to use the Entity and Collection objects - <br/> - <br/> - <a href="examples/facebook/facebook.html" style="font-size: 20px;">Facebook Login Example</a> - <br/> - This app shows you how to use Facebook to log into Usergrid. - <br/> - <br/> - <a href="examples/test/test.html" style="font-size: 20px;">Tests for examples in readme file</a> - <br/> - This is a test script that runs all the sample code shown in the readme file. See the samples in action! - </div> - - </body> -</html> http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/lib/Module.js ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/lib/Module.js b/sdks/html5-javascript/lib/Module.js deleted file mode 100644 index 38f5047..0000000 --- a/sdks/html5-javascript/lib/Module.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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. - */ - - //noinspection ThisExpressionReferencesGlobalObjectJS -(function (global) { - var name = 'Module', - short = '_m', - _name = global[name], - _short = (short !== undefined) ? global[short] : undefined; - - function Module() { - /* put code in here */ - - } - - global[name] = Module; - if (short !== undefined) { - global[short] = Module; - } - global[name].global[name].noConflict = function () { - if (_name) { - global[name] = _name; - } - if (short !== undefined) { - global[short] = _short; - } - return Module; - }; - if( typeof module !== "undefined" && ('exports' in module)){ - module.exports = global[name] - } - return global[name]; -}(this)); http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/lib/Usergrid.js ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/lib/Usergrid.js b/sdks/html5-javascript/lib/Usergrid.js deleted file mode 100644 index f1bb218..0000000 --- a/sdks/html5-javascript/lib/Usergrid.js +++ /dev/null @@ -1,323 +0,0 @@ -/* - * 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. - */ - -//Hack around IE console.log -window.console = window.console || {}; -window.console.log = window.console.log || function() {}; - - -function extend(subClass, superClass) { - var F = function() {}; - F.prototype = superClass.prototype; - subClass.prototype = new F(); - subClass.prototype.constructor = subClass; - - subClass.superclass = superClass.prototype; - if (superClass.prototype.constructor == Object.prototype.constructor) { - superClass.prototype.constructor = superClass; - } - return subClass; -} - -function propCopy(from, to) { - for (var prop in from) { - if (from.hasOwnProperty(prop)) { - if ("object" === typeof from[prop] && "object" === typeof to[prop]) { - to[prop] = propCopy(from[prop], to[prop]); - } else { - to[prop] = from[prop]; - } - } - } - return to; -} - -function NOOP() {} - -function isValidUrl(url) { - if (!url) return false; - var doc, base, anchor, isValid = false; - try { - doc = document.implementation.createHTMLDocument(''); - base = doc.createElement('base'); - base.href = base || window.lo; - doc.head.appendChild(base); - anchor = doc.createElement('a'); - anchor.href = url; - doc.body.appendChild(anchor); - isValid = !(anchor.href === '') - } catch (e) { - console.error(e); - } finally { - doc.head.removeChild(base); - doc.body.removeChild(anchor); - base = null; - anchor = null; - doc = null; - return isValid; - } -} - -/* - * Tests if the string is a uuid - * - * @public - * @method isUUID - * @param {string} uuid The string to test - * @returns {Boolean} true if string is uuid - */ -var uuidValueRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; - -function isUUID(uuid) { - return (!uuid) ? false : uuidValueRegex.test(uuid); -} - -/* - * method to encode the query string parameters - * - * @method encodeParams - * @public - * @params {object} params - an object of name value pairs that will be urlencoded - * @return {string} Returns the encoded string - */ -function encodeParams(params) { - var queryString; - if (params && Object.keys(params)) { - queryString = [].slice.call(arguments) - .reduce(function(a, b) { - return a.concat((b instanceof Array) ? b : [b]); - }, []) - .filter(function(c) { - return "object" === typeof c - }) - .reduce(function(p, c) { - (!(c instanceof Array)) ? p = p.concat(Object.keys(c).map(function(key) { - return [key, c[key]] - })) : p.push(c); - return p; - }, []) - .reduce(function(p, c) { - ((c.length === 2) ? p.push(c) : p = p.concat(c)); - return p; - }, []) - .reduce(function(p, c) { - (c[1] instanceof Array) ? c[1].forEach(function(v) { - p.push([c[0], v]) - }) : p.push(c); - return p; - }, []) - .map(function(c) { - c[1] = encodeURIComponent(c[1]); - return c.join('=') - }) - .join('&'); - } - return queryString; -} - - -/* - * method to determine whether or not the passed variable is a function - * - * @method isFunction - * @public - * @params {any} f - any variable - * @return {boolean} Returns true or false - */ -function isFunction(f) { - return (f && f !== null && typeof(f) === 'function'); -} - -/* - * a safe wrapper for executing a callback - * - * @method doCallback - * @public - * @params {Function} callback - the passed-in callback method - * @params {Array} params - an array of arguments to pass to the callback - * @params {Object} context - an optional calling context for the callback - * @return Returns whatever would be returned by the callback. or false. - */ -function doCallback(callback, params, context) { - var returnValue; - if (isFunction(callback)) { - if (!params) params = []; - if (!context) context = this; - params.push(context); - //try { - returnValue = callback.apply(context, params); - /*} catch (ex) { - if (console && console.error) { - console.error("Callback error:", ex); - } - }*/ - } - return returnValue; -} - -//noinspection ThisExpressionReferencesGlobalObjectJS -(function(global) { - var name = 'Usergrid', - overwrittenName = global[name]; - var VALID_REQUEST_METHODS = ['GET', 'POST', 'PUT', 'DELETE']; - - function Usergrid() { - this.logger = new Logger(name); - } - - Usergrid.isValidEndpoint = function(endpoint) { - //TODO actually implement this - return true; - }; - - Usergrid.Request = function(method, endpoint, query_params, data, callback) { - var p = new Promise(); - /* - Create a logger - */ - this.logger = new global.Logger("Usergrid.Request"); - this.logger.time("process request " + method + " " + endpoint); - /* - Validate our input - */ - this.endpoint = endpoint + '?' + encodeParams(query_params); - this.method = method.toUpperCase(); - //this.query_params = query_params; - this.data = ("object" === typeof data) ? JSON.stringify(data) : data; - - if (VALID_REQUEST_METHODS.indexOf(this.method) === -1) { - throw new UsergridInvalidHTTPMethodError("invalid request method '" + this.method + "'"); - } - - /* - Prepare our request - */ - if (!isValidUrl(this.endpoint)) { - this.logger.error(endpoint, this.endpoint, /^https:\/\//.test(endpoint)); - throw new UsergridInvalidURIError("The provided endpoint is not valid: " + this.endpoint); - } - /* a callback to make the request */ - var request = function() { - return Ajax.request(this.method, this.endpoint, this.data) - }.bind(this); - /* a callback to process the response */ - var response = function(err, request) { - return new Usergrid.Response(err, request) - }.bind(this); - /* a callback to clean up and return data to the client */ - var oncomplete = function(err, response) { - p.done(err, response); - this.logger.info("REQUEST", err, response); - doCallback(callback, [err, response]); - this.logger.timeEnd("process request " + method + " " + endpoint); - }.bind(this); - /* and a promise to chain them all together */ - Promise.chain([request, response]).then(oncomplete); - - return p; - }; - //TODO more granular handling of statusCodes - Usergrid.Response = function(err, response) { - var p = new Promise(); - var data = null; - try { - data = JSON.parse(response.responseText); - } catch (e) { - //this.logger.error("Error parsing response text: ",this.text); - //this.logger.error("Caught error ", e.message); - data = {} - } - Object.keys(data).forEach(function(key) { - Object.defineProperty(this, key, { - value: data[key], - enumerable: true - }); - }.bind(this)); - Object.defineProperty(this, "logger", { - enumerable: false, - configurable: false, - writable: false, - value: new global.Logger(name) - }); - Object.defineProperty(this, "success", { - enumerable: false, - configurable: false, - writable: true, - value: true - }); - Object.defineProperty(this, "err", { - enumerable: false, - configurable: false, - writable: true, - value: err - }); - Object.defineProperty(this, "status", { - enumerable: false, - configurable: false, - writable: true, - value: parseInt(response.status) - }); - Object.defineProperty(this, "statusGroup", { - enumerable: false, - configurable: false, - writable: true, - value: (this.status - this.status % 100) - }); - switch (this.statusGroup) { - case 200: //success - this.success = true; - break; - case 400: //user error - case 500: //server error - case 300: //cache and redirects - case 100: //upgrade - default: - //server error - this.success = false; - break; - } - if (this.success) { - p.done(null, this); - } else { - p.done(UsergridError.fromResponse(data), this); - } - return p; - }; - Usergrid.Response.prototype.getEntities = function() { - var entities; - if (this.success) { - entities = (this.data) ? this.data.entities : this.entities; - } - return entities || []; - } - Usergrid.Response.prototype.getEntity = function() { - var entities = this.getEntities(); - return entities[0]; - } - Usergrid.VERSION = Usergrid.USERGRID_SDK_VERSION = '0.11.0'; - - global[name] = Usergrid; - global[name].noConflict = function() { - if (overwrittenName) { - global[name] = overwrittenName; - } - return Usergrid; - }; - return global[name]; -}(this)); http://git-wip-us.apache.org/repos/asf/usergrid/blob/fa590f5c/sdks/html5-javascript/lib/modules/Asset.js ---------------------------------------------------------------------- diff --git a/sdks/html5-javascript/lib/modules/Asset.js b/sdks/html5-javascript/lib/modules/Asset.js deleted file mode 100644 index 862313a..0000000 --- a/sdks/html5-javascript/lib/modules/Asset.js +++ /dev/null @@ -1,248 +0,0 @@ -/* - *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. - */ - - - -/* - * XMLHttpRequest.prototype.sendAsBinary polyfill - * from: https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary() - * - * @method sendAsBinary - * @param {string} sData - */ -if (!XMLHttpRequest.prototype.sendAsBinary) { - XMLHttpRequest.prototype.sendAsBinary = function(sData) { - var nBytes = sData.length, - ui8Data = new Uint8Array(nBytes); - for (var nIdx = 0; nIdx < nBytes; nIdx++) { - ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff; - } - this.send(ui8Data); - }; -} - - -/* - * A class to model a Usergrid asset. - * - * @constructor - * @param {object} options {name:"photo.jpg", path:"/user/uploads", "content-type":"image/jpeg", owner:"F01DE600-0000-0000-0000-000000000000" } - * @returns {callback} callback(err, asset) - */ -Usergrid.Asset = function(options, callback) { - var self = this, - messages = []; - self._client = options.client; - self._data = options.data || {}; - self._data.type = "assets"; - var missingData = ["name", "owner", "path"].some(function(required) { - return !(required in self._data); - }); - if (missingData) { - doCallback(callback, [new UsergridError("Invalid asset data: 'name', 'owner', and 'path' are required properties."), null, self], self); - } else { - self.save(function(err, data) { - if (err) { - doCallback(callback, [new UsergridError(data), data, self], self); - } else { - if (data && data.entities && data.entities.length) { - self.set(data.entities[0]); - } - doCallback(callback, [null, data, self], self); - } - }); - } -}; - -/* - * Inherit from Usergrid.Entity. - */ -Usergrid.Asset.prototype = new Usergrid.Entity(); - -/* - * Add an asset to a folder. - * - * @method connect - * @public - * @param {object} options {folder:"F01DE600-0000-0000-0000-000000000000"} - * @returns {callback} callback(err, asset) - */ - -Usergrid.Asset.prototype.addToFolder = function(options, callback) { - var self = this, - error = null; - if (('folder' in options) && isUUID(options.folder)) { - //we got a valid UUID - var folder = Usergrid.Folder({ - uuid: options.folder - }, function(err, folder) { - if (err) { - doCallback(callback, [UsergridError.fromResponse(folder), folder, self], self); - } else { - var endpoint = ["folders", folder.get("uuid"), "assets", self.get("uuid")].join('/'); - var options = { - method: 'POST', - endpoint: endpoint - }; - this._client.request(options, function(err, response) { - if (err) { - doCallback(callback, [UsergridError.fromResponse(folder), response, self], self); - } else { - doCallback(callback, [null, folder, self], self); - } - - - }); - } - }); - } else { - doCallback(callback, [new UsergridError('folder not specified'), null, self], self); - } -}; - -Usergrid.Entity.prototype.attachAsset = function (file, callback) { - - if (!(window.File && window.FileReader && window.FileList && window.Blob)) { - doCallback(callback, [ new UsergridError("The File APIs are not fully supported by your browser."), null, this ], this); - return; - } - var self = this; - var args = arguments; - var type = this._data.type; - var attempts = self.get("attempts"); - if (isNaN(attempts)) { - attempts = 3; - } - - if(type != 'assets' && type != 'asset') { - var endpoint = [ this._client.URI, this._client.orgName, this._client.appName, type, self.get("uuid") ].join("/"); - } else { - self.set("content-type", file.type); - self.set("size", file.size); - var endpoint = [ this._client.URI, this._client.orgName, this._client.appName, "assets", self.get("uuid"), "data" ].join("/"); - } - - var xhr = new XMLHttpRequest(); - xhr.open("POST", endpoint, true); - xhr.onerror = function(err) { - doCallback(callback, [ new UsergridError("The File APIs are not fully supported by your browser.") ], xhr, self); - }; - xhr.onload = function(ev) { - if (xhr.status >= 500 && attempts > 0) { - self.set("attempts", --attempts); - setTimeout(function() { - self.attachAsset.apply(self, args); - }, 100); - } else if (xhr.status >= 300) { - self.set("attempts"); - doCallback(callback, [ new UsergridError(JSON.parse(xhr.responseText)), xhr, self ], self); - } else { - self.set("attempts"); - self.fetch(); - doCallback(callback, [ null, xhr, self ], self); - } - }; - var fr = new FileReader(); - fr.onload = function() { - var binary = fr.result; - if (type === 'assets' || type === 'asset') { - xhr.overrideMimeType("application/octet-stream"); - xhr.setRequestHeader("Content-Type", "application/octet-stream"); - } - xhr.sendAsBinary(binary); - }; - fr.readAsBinaryString(file); - -}; - -/* - * Upload Asset data - * - * @method upload - * @public - * @param {object} data Can be a javascript Blob or File object - * @returns {callback} callback(err, asset) - */ -Usergrid.Asset.prototype.upload = function(data, callback) { - this.attachAsset(data, function(err, response) { - if(!err){ - doCallback(callback, [ null, response, self ], self); - } else { - doCallback(callback, [ new UsergridError(err), response, self ], self); - } - }); -}; - -/* - * Download Asset data - * - * @method download - * @public - * @returns {callback} callback(err, blob) blob is a javascript Blob object. - */ -Usergrid.Entity.prototype.downloadAsset = function(callback) { - var self = this; - var endpoint; - var type = this._data.type; - - var xhr = new XMLHttpRequest(); - if(type != "assets" && type != 'asset') { - endpoint = [ this._client.URI, this._client.orgName, this._client.appName, type, self.get("uuid") ].join("/"); - } else { - endpoint = [ this._client.URI, this._client.orgName, this._client.appName, "assets", self.get("uuid"), "data" ].join("/"); - } - xhr.open("GET", endpoint, true); - xhr.responseType = "blob"; - xhr.onload = function(ev) { - var blob = xhr.response; - if(type != "assets" && type != 'asset') { - doCallback(callback, [ null, blob, xhr ], self); - } else { - doCallback(callback, [ null, xhr, self ], self); - } - }; - xhr.onerror = function(err) { - callback(true, err); - doCallback(callback, [ new UsergridError(err), xhr, self ], self); - }; - - if(type != "assets" && type != 'asset') { - xhr.setRequestHeader("Accept", self._data["file-metadata"]["content-type"]); - } else { - xhr.overrideMimeType(self.get("content-type")); - } - xhr.send(); -}; - -/* - * Download Asset data - * - * @method download - * @public - * @returns {callback} callback(err, blob) blob is a javascript Blob object. - */ -Usergrid.Asset.prototype.download = function(callback) { - this.downloadAsset(function(err, response) { - if(!err){ - doCallback(callback, [ null, response, self ], self); - } else { - doCallback(callback, [ new UsergridError(err), response, self ], self); - } - }); -}; \ No newline at end of file
