Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
SRCT
schedules
Commits
036ceecd
Commit
036ceecd
authored
Apr 21, 2018
by
Zac Wood
Browse files
Revert pt 2
parent
fe7e9bcc
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
schedules_web/README.md
deleted
100644 → 0
View file @
fe7e9bcc
This diff is collapsed.
Click to expand it.
schedules_web/images.d.ts
deleted
100644 → 0
View file @
fe7e9bcc
declare
module
'
*.svg
'
declare
module
'
*.png
'
declare
module
'
*.jpg
'
schedules_web/package.json
deleted
100644 → 0
View file @
fe7e9bcc
{
"name"
:
"schedules_web"
,
"version"
:
"0.1.0"
,
"private"
:
true
,
"dependencies"
:
{
"react"
:
"^16.3.2"
,
"react-dom"
:
"^16.3.2"
,
"react-scripts-ts"
:
"2.15.1"
},
"scripts"
:
{
"start"
:
"react-scripts-ts start"
,
"build"
:
"react-scripts-ts build"
,
"test"
:
"react-scripts-ts test --env=jsdom"
,
"eject"
:
"react-scripts-ts eject"
},
"devDependencies"
:
{
"@types/jest"
:
"^22.2.3"
,
"@types/node"
:
"^9.6.5"
,
"@types/react"
:
"^16.3.11"
,
"@types/react-dom"
:
"^16.0.5"
,
"typescript"
:
"^2.8.1"
}
}
schedules_web/public/favicon.ico
deleted
100644 → 0
View file @
fe7e9bcc
3.78 KB
schedules_web/public/index.html
deleted
100644 → 0
View file @
fe7e9bcc
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, shrink-to-fit=no"
>
<meta
name=
"theme-color"
content=
"#000000"
>
<!--
manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
-->
<link
rel=
"manifest"
href=
"%PUBLIC_URL%/manifest.json"
>
<link
rel=
"shortcut icon"
href=
"%PUBLIC_URL%/favicon.ico"
>
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>
React App
</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div
id=
"root"
></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
schedules_web/public/manifest.json
deleted
100644 → 0
View file @
fe7e9bcc
{
"short_name"
:
"React App"
,
"name"
:
"Create React App Sample"
,
"icons"
:
[
{
"src"
:
"favicon.ico"
,
"sizes"
:
"64x64 32x32 24x24 16x16"
,
"type"
:
"image/x-icon"
}
],
"start_url"
:
"./index.html"
,
"display"
:
"standalone"
,
"theme_color"
:
"#000000"
,
"background_color"
:
"#ffffff"
}
schedules_web/src/App.css
deleted
100644 → 0
View file @
fe7e9bcc
.App
{
text-align
:
center
;
}
.App-logo
{
animation
:
App-logo-spin
infinite
20s
linear
;
height
:
80px
;
}
.App-header
{
background-color
:
#222
;
height
:
150px
;
padding
:
20px
;
color
:
white
;
}
.App-title
{
font-size
:
1.5em
;
}
.App-intro
{
font-size
:
large
;
}
@keyframes
App-logo-spin
{
from
{
transform
:
rotate
(
0deg
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
schedules_web/src/App.test.tsx
deleted
100644 → 0
View file @
fe7e9bcc
import
*
as
React
from
'
react
'
;
import
*
as
ReactDOM
from
'
react-dom
'
;
import
App
from
'
./App
'
;
it
(
'
renders without crashing
'
,
()
=>
{
const
div
=
document
.
createElement
(
'
div
'
);
ReactDOM
.
render
(<
App
/>,
div
);
ReactDOM
.
unmountComponentAtNode
(
div
);
});
schedules_web/src/App.tsx
deleted
100644 → 0
View file @
fe7e9bcc
import
'
./App.css
'
;
import
*
as
React
from
'
react
'
;
import
{
Convert
}
from
'
./Models/Section
'
;
import
logo
from
'
./logo.svg
'
;
/* interface Props {}*/
/* interface State {*/
/* sections: Section[]*/
/* }*/
class
App
extends
React
.
Component
{
constructor
(
props
:
any
)
{
super
(
props
);
this
.
state
=
{
sections
:
[]
};
this
.
loadSections
();
}
public
render
()
{
return
(
<
div
className
=
"App"
>
<
header
className
=
"App-header"
>
<
img
src
=
{
logo
}
className
=
"App-logo"
alt
=
"logo"
/>
<
h1
className
=
"App-title"
>
Welcome to React
</
h1
>
</
header
>
<
p
className
=
"App-intro"
>
To get started, edit
<
code
>
src/App.tsx
</
code
>
and save to reload.
</
p
>
</
div
>
);
}
private
loadSections
()
{
fetch
(
'
http://localhost:3001/api/courses/1/sections
'
)
.
then
(
response
=>
response
.
json
())
.
then
(
obj
=>
{
let
sections
=
Convert
.
toSection
(
JSON
.
stringify
(
obj
));
console
.
log
(
sections
);
});
}
}
export
default
App
;
schedules_web/src/Models/Section.ts
deleted
100644 → 0
View file @
fe7e9bcc
// To parse this data:
//
// import { Convert } from "./file";
//
// const section = Convert.toSection(json);
//
// These functions will throw an error if the JSON doesn't
// match the expected interface, even if the JSON is valid.
export
interface
Section
{
id
:
number
;
name
:
string
;
crn
:
string
;
section_type
:
string
;
title
:
string
;
instructor
:
string
;
start_date
:
string
;
end_date
:
string
;
days
:
string
;
start_time
:
string
;
end_time
:
string
;
location
:
string
;
status
?:
string
;
campus
?:
string
;
notes
?:
string
;
size_limit
?:
number
;
course_id
:
number
;
created_at
:
string
;
updated_at
:
string
;
}
// Converts JSON strings to/from your types
// and asserts the results of JSON.parse at runtime
export
namespace
Convert
{
export
function
toSection
(
json
:
string
):
Section
[]
{
return
cast
(
JSON
.
parse
(
json
),
a
(
r
(
"
Section
"
)));
}
export
function
sectionToJson
(
value
:
Section
[]):
string
{
return
JSON
.
stringify
(
value
,
null
,
2
);
}
function
cast
<
T
>
(
obj
:
any
,
typ
:
any
):
T
{
if
(
!
isValid
(
typ
,
obj
))
{
throw
Error
(
`Invalid value`
);
}
return
obj
;
}
function
isValid
(
typ
:
any
,
val
:
any
):
boolean
{
if
(
typ
===
"
any
"
)
{
return
true
;
}
if
(
typ
===
null
)
{
return
val
===
null
;
}
if
(
typ
===
false
)
{
return
false
;
}
while
(
typeof
typ
===
"
object
"
&&
typ
.
ref
!==
undefined
)
{
typ
=
typeMap
[
typ
.
ref
];
}
if
(
Array
.
isArray
(
typ
))
{
return
isValidEnum
(
typ
,
val
);
}
if
(
typeof
typ
===
"
object
"
)
{
return
typ
.
hasOwnProperty
(
"
unionMembers
"
)
?
isValidUnion
(
typ
.
unionMembers
,
val
)
:
typ
.
hasOwnProperty
(
"
arrayItems
"
)
?
isValidArray
(
typ
.
arrayItems
,
val
)
:
typ
.
hasOwnProperty
(
"
props
"
)
?
isValidObject
(
typ
.
props
,
typ
.
additional
,
val
)
:
false
;
}
return
isValidPrimitive
(
typ
,
val
);
}
function
isValidPrimitive
(
typ
:
string
,
val
:
any
)
{
return
typeof
typ
===
typeof
val
;
}
function
isValidUnion
(
typs
:
any
[],
val
:
any
):
boolean
{
// val must validate against one typ in typs
return
typs
.
some
((
typ
)
=>
isValid
(
typ
,
val
));
}
function
isValidEnum
(
cases
:
string
[],
val
:
any
):
boolean
{
return
cases
.
indexOf
(
val
)
!==
-
1
;
}
function
isValidArray
(
typ
:
any
,
val
:
any
):
boolean
{
// val must be an array with no invalid elements
return
Array
.
isArray
(
val
)
&&
val
.
every
((
element
)
=>
{
return
isValid
(
typ
,
element
);
});
}
function
isValidObject
(
props
:
{
[
k
:
string
]:
any
},
additional
:
any
,
val
:
any
):
boolean
{
if
(
val
===
null
||
typeof
val
!==
"
object
"
||
Array
.
isArray
(
val
))
{
return
false
;
}
return
Object
.
getOwnPropertyNames
(
val
).
every
((
key
)
=>
{
const
prop
=
val
[
key
];
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
props
,
key
))
{
return
isValid
(
props
[
key
],
prop
);
}
return
isValid
(
additional
,
prop
);
});
}
function
a
(
typ
:
any
)
{
return
{
arrayItems
:
typ
};
}
function
u
(...
typs
:
any
[])
{
return
{
unionMembers
:
typs
};
}
function
o
(
props
:
{
[
k
:
string
]:
any
},
additional
:
any
)
{
return
{
props
,
additional
};
}
function
m
(
additional
:
any
)
{
return
{
props
:
{},
additional
};
}
function
r
(
name
:
string
)
{
return
{
ref
:
name
};
}
const
typeMap
:
any
=
{
"
Section
"
:
o
({
id
:
0
,
name
:
""
,
crn
:
""
,
section_type
:
""
,
title
:
""
,
instructor
:
""
,
start_date
:
""
,
end_date
:
""
,
days
:
""
,
start_time
:
""
,
end_time
:
""
,
location
:
""
,
status
:
""
,
campus
:
""
,
notes
:
""
,
size_limit
:
0
,
course_id
:
0
,
created_at
:
""
,
updated_at
:
""
,
},
false
),
};
}
schedules_web/src/index.css
deleted
100644 → 0
View file @
fe7e9bcc
body
{
margin
:
0
;
padding
:
0
;
font-family
:
sans-serif
;
}
schedules_web/src/index.tsx
deleted
100644 → 0
View file @
fe7e9bcc
import
*
as
React
from
'
react
'
;
import
*
as
ReactDOM
from
'
react-dom
'
;
import
App
from
'
./App
'
;
import
'
./index.css
'
;
import
registerServiceWorker
from
'
./registerServiceWorker
'
;
ReactDOM
.
render
(
<
App
/>,
document
.
getElementById
(
'
root
'
)
as
HTMLElement
);
registerServiceWorker
();
schedules_web/src/logo.svg
deleted
100644 → 0
View file @
fe7e9bcc
<svg
xmlns=
"http://www.w3.org/2000/svg"
viewBox=
"0 0 841.9 595.3"
>
<g
fill=
"#61DAFB"
>
<path
d=
"M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"
/>
<circle
cx=
"420.9"
cy=
"296.5"
r=
"45.7"
/>
<path
d=
"M520.5 78.1z"
/>
</g>
</svg>
schedules_web/src/registerServiceWorker.ts
deleted
100644 → 0
View file @
fe7e9bcc
// tslint:disable:no-console
// In production, we register a service worker to serve assets from local cache.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on the 'N+1' visit to a page, since previously
// cached resources are updated in the background.
// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
// This link also includes instructions on opting out of this behavior.
const
isLocalhost
=
Boolean
(
window
.
location
.
hostname
===
'
localhost
'
||
// [::1] is the IPv6 localhost address.
window
.
location
.
hostname
===
'
[::1]
'
||
// 127.0.0.1/8 is considered localhost for IPv4.
window
.
location
.
hostname
.
match
(
/^127
(?:\.(?:
25
[
0-5
]
|2
[
0-4
][
0-9
]
|
[
01
]?[
0-9
][
0-9
]?)){3}
$/
)
);
export
default
function
register
()
{
if
(
process
.
env
.
NODE_ENV
===
'
production
'
&&
'
serviceWorker
'
in
navigator
)
{
// The URL constructor is available in all browsers that support SW.
const
publicUrl
=
new
URL
(
process
.
env
.
PUBLIC_URL
!
,
window
.
location
.
toString
()
);
if
(
publicUrl
.
origin
!==
window
.
location
.
origin
)
{
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374
return
;
}
window
.
addEventListener
(
'
load
'
,
()
=>
{
const
swUrl
=
`
${
process
.
env
.
PUBLIC_URL
}
/service-worker.js`
;
if
(
isLocalhost
)
{
// This is running on localhost. Lets check if a service worker still exists or not.
checkValidServiceWorker
(
swUrl
);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator
.
serviceWorker
.
ready
.
then
(()
=>
{
console
.
log
(
'
This web app is being served cache-first by a service
'
+
'
worker. To learn more, visit https://goo.gl/SC7cgQ
'
);
});
}
else
{
// Is not local host. Just register service worker
registerValidSW
(
swUrl
);
}
});
}
}
function
registerValidSW
(
swUrl
:
string
)
{
navigator
.
serviceWorker
.
register
(
swUrl
)
.
then
(
registration
=>
{
registration
.
onupdatefound
=
()
=>
{
const
installingWorker
=
registration
.
installing
;
if
(
installingWorker
)
{
installingWorker
.
onstatechange
=
()
=>
{
if
(
installingWorker
.
state
===
'
installed
'
)
{
if
(
navigator
.
serviceWorker
.
controller
)
{
// At this point, the old content will have been purged and
// the fresh content will have been added to the cache.
// It's the perfect time to display a 'New content is
// available; please refresh.' message in your web app.
console
.
log
(
'
New content is available; please refresh.
'
);
}
else
{
// At this point, everything has been precached.
// It's the perfect time to display a
// 'Content is cached for offline use.' message.
console
.
log
(
'
Content is cached for offline use.
'
);
}
}
};
}
};
})
.
catch
(
error
=>
{
console
.
error
(
'
Error during service worker registration:
'
,
error
);
});
}
function
checkValidServiceWorker
(
swUrl
:
string
)
{
// Check if the service worker can be found. If it can't reload the page.
fetch
(
swUrl
)
.
then
(
response
=>
{
// Ensure service worker exists, and that we really are getting a JS file.
if
(
response
.
status
===
404
||
response
.
headers
.
get
(
'
content-type
'
)
!
.
indexOf
(
'
javascript
'
)
===
-
1
)
{
// No service worker found. Probably a different app. Reload the page.
navigator
.
serviceWorker
.
ready
.
then
(
registration
=>
{
registration
.
unregister
().
then
(()
=>
{
window
.
location
.
reload
();
});
});
}
else
{
// Service worker found. Proceed as normal.
registerValidSW
(
swUrl
);
}
})
.
catch
(()
=>
{
console
.
log
(
'
No internet connection found. App is running in offline mode.
'
);
});
}
export
function
unregister
()
{
if
(
'
serviceWorker
'
in
navigator
)
{
navigator
.
serviceWorker
.
ready
.
then
(
registration
=>
{
registration
.
unregister
();
});
}
}
schedules_web/tsconfig.json
deleted
100644 → 0
View file @
fe7e9bcc
{
"compilerOptions"
:
{
"outDir"
:
"build/dist"
,
"module"
:
"esnext"
,
"target"
:
"es5"
,
"lib"
:
[
"es6"
,
"dom"
],
"sourceMap"
:
true
,
"allowJs"
:
true
,
"jsx"
:
"react"
,
"moduleResolution"
:
"node"
,
"rootDir"
:
"src"
,
"forceConsistentCasingInFileNames"
:
true
,
"noImplicitReturns"
:
true
,
"noImplicitThis"
:
true
,
"noImplicitAny"
:
true
,
"strictNullChecks"
:
true
,
"suppressImplicitAnyIndexErrors"
:
true
,
"noUnusedLocals"
:
false
},
"exclude"
:
[
"node_modules"
,
"build"
,
"scripts"
,
"acceptance-tests"
,
"webpack"
,
"jest"
,
"src/setupTests.ts"
]
}
schedules_web/tsconfig.test.json
deleted
100644 → 0
View file @
fe7e9bcc
{
"extends"
:
"./tsconfig.json"
,
"compilerOptions"
:
{
"module"
:
"commonjs"
}
}
\ No newline at end of file
schedules_web/tslint.json
deleted
100644 → 0
View file @
fe7e9bcc
{
"extends"
:
[
"tslint:recommended"
,
"tslint-react"
,
"tslint-config-prettier"
],
"rules"
:
{
"interface-name"
:
[
true
,
"never-prefix"
],
"no-unused-variable"
:
false
,
"no-console"
:
false
,
"no-namespace"
:
false
,
"object-literal-sort-keys"
:
false
,
"named-imports-order"
:
"any"
,
"import-sources-order"
:
false
,
"grouped-imports"
:
false
},
"linterOptions"
:
{
"exclude"
:
[
"config/**/*.js"
,
"node_modules/**/*.ts"
]
}
}
schedules_web/yarn.lock
deleted
100644 → 0
View file @
fe7e9bcc
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment