Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions .browserslistrc

This file was deleted.

16 changes: 0 additions & 16 deletions .editorconfig

This file was deleted.

47 changes: 0 additions & 47 deletions .eslintrc.json

This file was deleted.

12 changes: 0 additions & 12 deletions .graphqlconfig.yml

This file was deleted.

12 changes: 9 additions & 3 deletions amplify/backend/api/simplecalc/cli-inputs.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@
"apiName": "simplecalc",
"serviceName": "AppSync",
"defaultAuthType": {
"mode": "API_KEY",
"expirationTime": 7
}
"mode": "AMAZON_COGNITO_USER_POOLS",
"cognitoUserPoolId": "authsimplecalcbca74913bca74913"
},
"additionalAuthTypes": [
{
"mode": "AWS_IAM"
}
],
"conflictResolution": {}
}
}
9 changes: 8 additions & 1 deletion amplify/backend/api/simplecalc/parameters.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
{
"AppSyncApiName": "simplecalc",
"DynamoDBBillingMode": "PAY_PER_REQUEST",
"DynamoDBEnableServerSideEncryption": false
"DynamoDBEnableServerSideEncryption": false,
"AuthCognitoUserPoolId": {
"Fn::GetAtt": [
"authsimplecalcbca74913bca74913",
"Outputs.UserPoolId"
]
},
"AuthModeLastUpdated": "2022-10-01T23:13:13.791Z"
}
37 changes: 29 additions & 8 deletions amplify/backend/api/simplecalc/schema.graphql
Original file line number Diff line number Diff line change
@@ -1,24 +1,45 @@
# This "input" configures a global authorization rule to enable public access to
# all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules
input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY!
# input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY!

type Student @model {
# enum ModelOperation {
# create
# update
# delete
# read # Short-hand to allow "get", "list", "sync", "listen", and "search"

# get # Retrieves an individual item
# list # Retrieves a list of items
# sync # Enables ability to sync offline/online changes (including via DataStore)
# listen # Subscribes to real-time changes
# search # Enables ability to search using @searchable directive
# }

type Student @model @auth(rules: [
{allow: public, provider: iam, operations: [create, update, delete, get, sync]},
{allow: private, operations: [read]}
]) {
# need auth rule for queries, mutations from student users
id: ID!
name: String!
email: String!
status: String!
room: Room @belongsTo
}

type Teacher @model {
type Teacher @model @auth(rules: [{allow: owner, ownerField: "id"}]) {
id: ID!
name: String!
email: String
room: Room @hasOne
}

type Room @model {
id: ID!
teacher: Teacher! @belongsTo
student: [Student] @hasMany
code: String!
type Room @model @auth(rules: [{allow: owner, operations: [create, read, update, delete]}]) {
# add another rule for iam so room can be queried by student
id: ID! # no access
name: String! # read only
teacher: Teacher! @belongsTo # no access
student: [Student] @hasMany # can add, get, not full read
code: String! # read only
# owner: String # no access
}
22 changes: 22 additions & 0 deletions amplify/backend/auth/simplecalcbca74913bca74913/assets/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>AWS SDK for JavaScript - Browser Getting Started Application</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
<div>
<div id="myspinner"></div>
</div>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.474.0.min.js"></script>
<script src="./spinner.js" type="text/javascript"></script>
<script src="./verify.js" type="text/javascript"></script>
<script type="text/javascript">
window.onload = function () {
confirm();
};
</script>
</body>
</html>
190 changes: 190 additions & 0 deletions amplify/backend/auth/simplecalcbca74913bca74913/assets/spinner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
/* eslint-disable */
var __assign =
(this && this.__assign) ||
function () {
__assign =
Object.assign ||
function (t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var defaults = {
lines: 12,
length: 7,
width: 5,
radius: 10,
scale: 1.0,
corners: 1,
color: '#000',
fadeColor: 'transparent',
animation: 'spinner-line-fade-default',
rotate: 0,
direction: 1,
speed: 1,
zIndex: 2e9,
className: 'spinner',
top: '50%',
left: '50%',
shadow: '0 0 1px transparent',
position: 'absolute',
};
var Spinner = /** @class */ (function () {
function Spinner(opts) {
if (opts === void 0) {
opts = {};
}
this.opts = __assign({}, defaults, opts);
}
/**
* Adds the spinner to the given target element. If this instance is already
* spinning, it is automatically removed from its previous target by calling
* stop() internally.
*/
Spinner.prototype.spin = function (target) {
this.stop();
this.el = document.createElement('div');
this.el.className = this.opts.className;
this.el.setAttribute('role', 'progressbar');
css(this.el, {
position: this.opts.position,
width: 0,
zIndex: this.opts.zIndex,
left: this.opts.left,
top: this.opts.top,
transform: 'scale(' + this.opts.scale + ')',
});
if (target) {
target.insertBefore(this.el, target.firstChild || null);
}
drawLines(this.el, this.opts);
return this;
};
/**
* Stops and removes the Spinner.
* Stopped spinners may be reused by calling spin() again.
*/
Spinner.prototype.stop = function () {
if (this.el) {
if (typeof requestAnimationFrame !== 'undefined') {
cancelAnimationFrame(this.animateId);
} else {
clearTimeout(this.animateId);
}
if (this.el.parentNode) {
this.el.parentNode.removeChild(this.el);
}
this.el = undefined;
}
return this;
};
return Spinner;
})();
/**
* Sets multiple style properties at once.
*/
function css(el, props) {
for (var prop in props) {
el.style[prop] = props[prop];
}
return el;
}
/**
* Returns the line color from the given string or array.
*/
function getColor(color, idx) {
return typeof color == 'string' ? color : color[idx % color.length];
}
/**
* Internal method that draws the individual lines.
*/
function drawLines(el, opts) {
var borderRadius = Math.round(opts.corners * opts.width * 500) / 1000 + 'px';
var shadow = 'none';
if (opts.shadow === true) {
shadow = '0 2px 4px #000'; // default shadow
} else if (typeof opts.shadow === 'string') {
shadow = opts.shadow;
}
var shadows = parseBoxShadow(shadow);
for (var i = 0; i < opts.lines; i++) {
var degrees = ~~((360 / opts.lines) * i + opts.rotate);
var backgroundLine = css(document.createElement('div'), {
position: 'absolute',
top: -opts.width / 2 + 'px',
width: opts.length + opts.width + 'px',
height: opts.width + 'px',
background: getColor(opts.fadeColor, i),
borderRadius: borderRadius,
transformOrigin: 'left',
transform: 'rotate(' + degrees + 'deg) translateX(' + opts.radius + 'px)',
});
var delay = (i * opts.direction) / opts.lines / opts.speed;
delay -= 1 / opts.speed; // so initial animation state will include trail
var line = css(document.createElement('div'), {
width: '100%',
height: '100%',
background: getColor(opts.color, i),
borderRadius: borderRadius,
boxShadow: normalizeShadow(shadows, degrees),
animation: 1 / opts.speed + 's linear ' + delay + 's infinite ' + opts.animation,
});
backgroundLine.appendChild(line);
el.appendChild(backgroundLine);
}
}
function parseBoxShadow(boxShadow) {
var regex = /^\s*([a-zA-Z]+\s+)?(-?\d+(\.\d+)?)([a-zA-Z]*)\s+(-?\d+(\.\d+)?)([a-zA-Z]*)(.*)$/;
var shadows = [];
for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {
var shadow = _a[_i];
var matches = shadow.match(regex);
if (matches === null) {
continue; // invalid syntax
}
var x = +matches[2];
var y = +matches[5];
var xUnits = matches[4];
var yUnits = matches[7];
if (x === 0 && !xUnits) {
xUnits = yUnits;
}
if (y === 0 && !yUnits) {
yUnits = xUnits;
}
if (xUnits !== yUnits) {
continue; // units must match to use as coordinates
}
shadows.push({
prefix: matches[1] || '',
x: x,
y: y,
xUnits: xUnits,
yUnits: yUnits,
end: matches[8],
});
}
return shadows;
}
/**
* Modify box-shadow x/y offsets to counteract rotation
*/
function normalizeShadow(shadows, degrees) {
var normalized = [];
for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {
var shadow = shadows_1[_i];
var xy = convertOffset(shadow.x, shadow.y, degrees);
normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);
}
return normalized.join(', ');
}
function convertOffset(x, y, degrees) {
var radians = (degrees * Math.PI) / 180;
var sin = Math.sin(radians);
var cos = Math.cos(radians);
return [Math.round((x * cos + y * sin) * 1000) / 1000, Math.round((-x * sin + y * cos) * 1000) / 1000];
}
Loading