diff --git a/.gitignore b/.gitignore index 3fc3033..21e171f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ build/ .project .settings .classpath +classes/ +grails-app/assets/javascripts/appHome.all.js +src/main/webapp/ diff --git a/README.md b/README.md index c95fdaa..a18fa8e 100644 --- a/README.md +++ b/README.md @@ -1 +1,25 @@ # ResuMe + (This guide assumes you already have the JDK installed. If you do not, please go to Oracle and download it. + + 1. Go to Github. If you do not have a github account, you can sign up for a free one here . + + 2. Once you're signed into github, go to Group20's code project repository . + + 3. Fork the repository from github by clicking on the 'Fork' button in the top right-hand corner of the screen: + + This should make the ResuMe repository appear in your Github account under your repositories: + + + Alternatively, you can 'Clone or Download' Group20's code project repository to your favourite web development IDE. We used IntelliJ, and will give instructions specific to running our repository from this environment. + + 4. You will also need to download React to use our stunning front-end user interface. + Download node.js . Then, from commandline in unix or commandprompt in Windows, run these commands: + + npm init + @@ -22,6 +22,6 @@ npm install babel-core babel-preset-es2015 babel-preset-react babel-loader webpack + + Downloading node.js enables you to use npm to download and install React, and enables us to integrate our React code with Gradle-based deployment with Grails in IntelliJ. Babel is a transpiler. Go to this tutorial for more information. + + 5. Now, go to your favourite IDE (we recommend IntelliJ and click run. ResuMe will appear in localhost/8080. + + Now you have your very own working version of ResuMe! diff --git a/build.gradle b/build.gradle index 5b3e0ec..e49d5fe 100644 --- a/build.gradle +++ b/build.gradle @@ -78,4 +78,5 @@ node { } processResources.dependsOn(['npmInstall', 'npm_run_bundle']) -assetCompile.dependsOn(['npmInstall', 'npm_run_bundle']) \ No newline at end of file +assetCompile.dependsOn(['npmInstall', 'npm_run_bundle']) + diff --git a/devDB.mv.db b/devDB.mv.db index 6a8c7dd..d50052c 100644 Binary files a/devDB.mv.db and b/devDB.mv.db differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 751007e..8534cc8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,3 +1,4 @@ + #Fri Mar 24 11:20:16 EDT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists diff --git a/grails-app/assets/javascripts/app.all.js b/grails-app/assets/javascripts/app.all.js index 7c2f563..3d26636 100644 --- a/grails-app/assets/javascripts/app.all.js +++ b/grails-app/assets/javascripts/app.all.js @@ -63,7 +63,7 @@ /******/ __webpack_require__.p = "/assets/"; /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 186); +/******/ return __webpack_require__(__webpack_require__.s = 187); /******/ }) /************************************************************************/ /******/ ([ @@ -21919,7 +21919,8 @@ module.exports = g; /* 182 */, /* 183 */, /* 184 */, -/* 185 */ +/* 185 */, +/* 186 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21989,15 +21990,6 @@ var Menu = function (_React$Component) { 'My Certifications' ) ), - _react2.default.createElement( - 'li', - null, - _react2.default.createElement( - 'a', - { href: '#certifications' }, - 'My Certifications' - ) - ), _react2.default.createElement( 'li', null, @@ -22075,7 +22067,7 @@ var Profile = function (_React$Component2) { null, _react2.default.createElement( 'a', - { href: 'MyResumes.html' }, + { href: '/resume' }, 'View My Resumes' ) ), @@ -22311,17 +22303,21 @@ var ProfileInfo = function (_React$Component3) { }(_react2.default.Component); _reactDom2.default.render(_react2.default.createElement(Menu, { icon: 'http://images.clipartpanda.com/stack-of-paper-vector-29343.png' }), document.getElementById('menu')); + _reactDom2.default.render(_react2.default.createElement(Profile, { name: 'Yeeee', status: 'Evil Goddess', work: 'Part-time Librarian', pic: 'https://cdn3.iconfinder.com/data/icons/internet-and-web-4/78/internt_web_technology-13-256.png', camera: 'http://www.ensatt.fr/images/Graphisme/photo-icone.png' }), document.getElementById('profile-box')); + +_reactDom2.default.render(_react2.default.createElement(Profile, { name: 'John Smith', status: 'Student at Western University', work: 'Part-time Librarian', pic: 'https://cdn3.iconfinder.com/data/icons/internet-and-web-4/78/internt_web_technology-13-256.png', camera: 'http://www.ensatt.fr/images/Graphisme/photo-icone.png' }), document.getElementById('profile-box')); + _reactDom2.default.render(_react2.default.createElement(ProfileInfo, null), document.getElementById('profile-info')); /***/ }), -/* 186 */ +/* 187 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _profile = __webpack_require__(185); +var _profile = __webpack_require__(186); var _profile2 = _interopRequireDefault(_profile); diff --git a/grails-app/assets/javascripts/app2.all.js b/grails-app/assets/javascripts/app2.all.js index 258da15..5799791 100644 --- a/grails-app/assets/javascripts/app2.all.js +++ b/grails-app/assets/javascripts/app2.all.js @@ -63,7 +63,7 @@ /******/ __webpack_require__.p = "/assets/"; /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 187); +/******/ return __webpack_require__(__webpack_require__.s = 188); /******/ }) /************************************************************************/ /******/ ([ @@ -21917,7 +21917,8 @@ module.exports = g; /***/ }), /* 182 */, -/* 183 */ +/* 183 */, +/* 184 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22024,7 +22025,7 @@ var LoginForm = function (_React$Component2) { username: "", password: "", message: "", - successMessage: "", + successMessage: "We made it!", isLocked: false }; @@ -22087,6 +22088,7 @@ var LoginForm = function (_React$Component2) { if (response.ok) { //this.setState({message: " "}); _this3.setState({ + message: "Account: " + _this3.state.name + " is made!", successMessage: _this3.state.name + ", you successfully signed up!", isLocked: true }); @@ -22128,10 +22130,10 @@ var LoginForm = function (_React$Component2) { 'Sign Up' ), _react2.default.createElement('br', null), - _react2.default.createElement('input', { className: 'formInput', type: 'text', placeholder: 'Enter ', disabled: this.state.isLocked, value: this.state.name, onChange: this.handleNameChange }), - _react2.default.createElement('br', null), _react2.default.createElement('input', { className: 'formInput', type: 'text', placeholder: 'Enter Username', disabled: this.state.isLocked, value: this.state.username, onChange: this.handleUsernameChange }), _react2.default.createElement('br', null), + _react2.default.createElement('input', { className: 'formInput', type: 'text', placeholder: 'Enter Name', disabled: this.state.isLocked, value: this.state.name, onChange: this.handleNameChange }), + _react2.default.createElement('br', null), _react2.default.createElement('input', { className: 'formInput', type: 'password', placeholder: 'Enter password', disabled: this.state.isLocked, value: this.state.password, onChange: this.handlePasswordChange }), _react2.default.createElement('br', null), _react2.default.createElement( @@ -22155,16 +22157,16 @@ _reactDom2.default.render(_react2.default.createElement(MenuLogin, { icon: 'http _reactDom2.default.render(_react2.default.createElement(LoginForm, null), document.getElementById('log-in')); /***/ }), -/* 184 */, /* 185 */, /* 186 */, -/* 187 */ +/* 187 */, +/* 188 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _login = __webpack_require__(183); +var _login = __webpack_require__(184); var _login2 = _interopRequireDefault(_login); diff --git a/grails-app/assets/javascripts/app3.all.js b/grails-app/assets/javascripts/app3.all.js index 460b681..c5a63bb 100644 --- a/grails-app/assets/javascripts/app3.all.js +++ b/grails-app/assets/javascripts/app3.all.js @@ -63,7 +63,7 @@ /******/ __webpack_require__.p = "/assets/"; /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 188); +/******/ return __webpack_require__(__webpack_require__.s = 189); /******/ }) /************************************************************************/ /******/ ([ @@ -21918,7 +21918,8 @@ module.exports = g; /***/ }), /* 182 */, /* 183 */, -/* 184 */ +/* 184 */, +/* 185 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21945,98 +21946,59 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" */ -var MenuResumes = function (_React$Component) { - _inherits(MenuResumes, _React$Component); +var ResumeList = function (_React$Component) { + _inherits(ResumeList, _React$Component); - function MenuResumes() { - _classCallCheck(this, MenuResumes); + function ResumeList() { + _classCallCheck(this, ResumeList); - return _possibleConstructorReturn(this, (MenuResumes.__proto__ || Object.getPrototypeOf(MenuResumes)).apply(this, arguments)); + return _possibleConstructorReturn(this, (ResumeList.__proto__ || Object.getPrototypeOf(ResumeList)).apply(this, arguments)); } - _createClass(MenuResumes, [{ + _createClass(ResumeList, [{ key: 'render', value: function render() { return _react2.default.createElement( 'div', - { className: 'menu-box' }, + { id: 'template-List' }, _react2.default.createElement( 'h2', - { id: 'resume' }, - 'ResuME' - ), - _react2.default.createElement( - 'icon', - null, - _react2.default.createElement('img', { src: this.props.icon, height: 90 }) - ), - _react2.default.createElement( - 'li', - null, - _react2.default.createElement( - 'a', - { href: 'index.html' }, - 'About' - ) - ), - _react2.default.createElement( - 'li', - null, - _react2.default.createElement( - 'a', - { href: '#certifications' }, - 'Contact' - ) + { className: 'heading2' }, + this.props.myresumes ), + _react2.default.createElement('br', null), + _react2.default.createElement('br', null), + _react2.default.createElement('br', null), + _react2.default.createElement('br', null), _react2.default.createElement( - 'li', - null, + 'h2', + { className: 'heading2' }, _react2.default.createElement( 'a', - { href: '#applications' }, - 'Help' + { href: '/choose' }, + 'New Resume Template' ) ) ); } }]); - return MenuResumes; -}(_react2.default.Component); - -var ResumeList = function (_React$Component2) { - _inherits(ResumeList, _React$Component2); - - function ResumeList() { - _classCallCheck(this, ResumeList); - - return _possibleConstructorReturn(this, (ResumeList.__proto__ || Object.getPrototypeOf(ResumeList)).apply(this, arguments)); - } - - _createClass(ResumeList, [{ - key: 'render', - value: function render() { - return _react2.default.createElement('div', { id: 'Shadow-Box' }); - } - }]); - return ResumeList; }(_react2.default.Component); -_reactDom2.default.render(_react2.default.createElement(MenuResumes, { icon: 'http://images.clipartpanda.com/stack-of-paper-vector-29343.png' }), document.getElementById('menu-MyResumes')); -_reactDom2.default.render(_react2.default.createElement(ResumeList, null), document.getElementById('list')); +_reactDom2.default.render(_react2.default.createElement(ResumeList, { myresumes: 'You have no Resumes' }), document.getElementById('list')); /***/ }), -/* 185 */, /* 186 */, /* 187 */, -/* 188 */ +/* 188 */, +/* 189 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _myresumes = __webpack_require__(184); +var _myresumes = __webpack_require__(185); var _myresumes2 = _interopRequireDefault(_myresumes); diff --git a/grails-app/assets/javascripts/app4.all.js b/grails-app/assets/javascripts/app4.all.js index dc01e15..8a3f3be 100644 --- a/grails-app/assets/javascripts/app4.all.js +++ b/grails-app/assets/javascripts/app4.all.js @@ -63,7 +63,7 @@ /******/ __webpack_require__.p = "/assets/"; /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 189); +/******/ return __webpack_require__(__webpack_require__.s = 190); /******/ }) /************************************************************************/ /******/ ([ @@ -21978,7 +21978,8 @@ _reactDom2.default.render(_react2.default.createElement(Templates, null), docume /* 186 */, /* 187 */, /* 188 */, -/* 189 */ +/* 189 */, +/* 190 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/grails-app/assets/stylesheets/styleSheet.css b/grails-app/assets/stylesheets/styleSheet.css index 9247cd1..d8fe36e 100644 --- a/grails-app/assets/stylesheets/styleSheet.css +++ b/grails-app/assets/stylesheets/styleSheet.css @@ -11,6 +11,20 @@ rgba(0,0,0,0.12); } +.menu-box-white { + color: black; + list-style-type: none; + margin: 0; + overflow: hidden; + padding-right: 150px; + height: 170px; + webkit-transition: all 500ms ease; + -moz-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; + transition: all 500ms ease; +} + icon{ position: relative; bottom: 100px; @@ -29,11 +43,19 @@ li a { text-align: center; padding: 14px 20px; text-decoration: none; - } +div.menu-box-white:hover:not(.active) +{ + opacity: 0.7; + color: black; + background-color: mediumseagreen; + box-shadow: 0 2px 2px 2px rgba(0, 0, 0, 0.14), + 0 5px 1px -2px rgba(0,0,0,0.3), 0 4px 8px 0 + rgba(0,0,0,0.12); +} li a:hover:not(.active) { - background-color: #111; + background-color: black; } .active { @@ -79,6 +101,22 @@ li a:hover:not(.active) { rgba(0,0,0,0.12); } +#Shadow-Box-2{ + display:inline-block; + position: relative; + left: 260px; + top: 80px; + margin: 24px; + margin-top: 2px; + margin-bottom: 3px; + width: 800px; + + padding: 6px; + text-align: center; + +} + + .profileInfoTitle{ font-family: Calibri Light; color: grey; @@ -119,6 +157,32 @@ btn a:hover:not(.active) { background-color: mediumblue; } +btng{ + position: relative; + left: 288px; +} + +btng a{ + + display: block; + color: white; + background-color: limegreen; + font-family: Calibri; + font-size: 22px; + text-align: center; + border: hidden; + text-align: center; + position: relative; + padding: 25px 10px 1px 10px; + width: 200px; + height: 50px; + text-decoration: none; +} + +btng a:hover:not(.active) { + background-color: green; +} + circularbtn { position: relative; left: 500px; @@ -169,6 +233,10 @@ circularbtn3 { } +#background-image{ + opacity: 0.7 +} + .heading{ font-family: Calibri Light; color: darkslategrey; @@ -176,6 +244,20 @@ circularbtn3 { right: 6px; } +.heading2{ + font-family: Calibri Light; + color: white; + position: relative; + left: 6px; +} + +.headingHome{ + font-family: Calibri Light; + color: white; + position: relative; + right: 6px; +} + .loginMessage{ font-family: Calibri Light; color: black; @@ -236,14 +318,13 @@ circularbtn3 { display: inline-block; position: relative; right: 25px; - background-color: white; top: 20px; margin: 24px; margin-top: 2px; margin-bottom: 3px; width: 100%; border: 1px solid #ddd; - background-color: lightgrey; + background-color: mediumseagreen; box-shadow: 0 2px 2px 2px rgba(0, 0, 0, 0.14), 0 5px 1px -2px rgba(0,0,0,0.3), 0 4px 8px 0 rgba(0,0,0,0.12); diff --git a/grails-app/controllers/resume/UrlMappings.groovy b/grails-app/controllers/resume/UrlMappings.groovy index a61aa17..74ac069 100644 --- a/grails-app/controllers/resume/UrlMappings.groovy +++ b/grails-app/controllers/resume/UrlMappings.groovy @@ -9,6 +9,8 @@ class UrlMappings { } } + "/resume"(view: "/resume/index") + "/choose"(view: "/choose/index") "/"(view:"/index") "500"(view:'/error') "404"(view:'/notFound') diff --git a/grails-app/views/index.gsp b/grails-app/views/index.gsp index 499a4b6..57d2824 100644 --- a/grails-app/views/index.gsp +++ b/grails-app/views/index.gsp @@ -1,18 +1,31 @@ - + Welcome to ResuMe - + - + + + + +
+

Begin Creating Your ResuMe Today

+ Sign Up +

OR

+ Log in +
-
-

Begin Creating Your ResuMe

- To start, please sign up here -
+ diff --git a/grails-app/views/resume/index.gsp b/grails-app/views/resume/index.gsp index 21d4e32..a7aa4ba 100644 --- a/grails-app/views/resume/index.gsp +++ b/grails-app/views/resume/index.gsp @@ -7,6 +7,7 @@ +

My Resumes

diff --git a/grails-app/views/template/index.gsp b/grails-app/views/template/index.gsp index f9b73ec..e69de29 100644 --- a/grails-app/views/template/index.gsp +++ b/grails-app/views/template/index.gsp @@ -1,15 +0,0 @@ - - - - - Choose A Template - - - - -
-

Choose Template

-
- - - \ No newline at end of file diff --git "a/images/\354\212\244\355\201\254\353\246\260\354\203\267(10)_LI.jpg" "b/images/\354\212\244\355\201\254\353\246\260\354\203\267(10)_LI.jpg" new file mode 100644 index 0000000..9bed0af Binary files /dev/null and "b/images/\354\212\244\355\201\254\353\246\260\354\203\267(10)_LI.jpg" differ diff --git "a/images/\354\212\244\355\201\254\353\246\260\354\203\267(9)_LI.jpg" "b/images/\354\212\244\355\201\254\353\246\260\354\203\267(9)_LI.jpg" new file mode 100644 index 0000000..723e058 Binary files /dev/null and "b/images/\354\212\244\355\201\254\353\246\260\354\203\267(9)_LI.jpg" differ diff --git a/src/main/js/app3.js b/src/main/js/app3.js index bca13f9..c9439b5 100644 --- a/src/main/js/app3.js +++ b/src/main/js/app3.js @@ -1,4 +1,4 @@ /** * Created by Marlin on 3/3/2017. */ -import MenuResumes from './myresumes'; \ No newline at end of file +import ResumeList from './myresumes'; \ No newline at end of file diff --git a/src/main/js/app4.js b/src/main/js/app4.js index d9e63c0..6d14647 100644 --- a/src/main/js/app4.js +++ b/src/main/js/app4.js @@ -1,4 +1,4 @@ /** * Created by Marlin on 3/3/2017. */ -import Image from './chooseresume'; \ No newline at end of file +import Templates from './chooseresume'; \ No newline at end of file diff --git a/src/main/js/appHome.js b/src/main/js/appHome.js new file mode 100644 index 0000000..2faf425 --- /dev/null +++ b/src/main/js/appHome.js @@ -0,0 +1 @@ +import HomeOptions from './home'; \ No newline at end of file diff --git a/src/main/js/home.js b/src/main/js/home.js new file mode 100644 index 0000000..1d185b9 --- /dev/null +++ b/src/main/js/home.js @@ -0,0 +1,34 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +class MenuHome extends React.Component{ + render() { + return( +
+

ResuME

+ + Search Templates + About + Contact + Help +
+ ); + } +} + +class HomeOptions extends React.Component{ + render() { + return( +
+

Begin Creating Your ResuMe

+ Sign Up +
+ Log in +
+ ); + } +} + +ReactDOM.render(, document.getElementById('menu')); +ReactDOM.render(,document.getElementById('home')); + diff --git a/src/main/js/login.js b/src/main/js/login.js index 9d8640a..6dc1cbf 100644 --- a/src/main/js/login.js +++ b/src/main/js/login.js @@ -35,7 +35,7 @@ class LoginForm extends React.Component{ username: "", password: "", message: "", - successMessage: "", + successMessage: "We made it!", isLocked: false }; @@ -88,10 +88,11 @@ class LoginForm extends React.Component{ method: "POST", body: JSON.stringify({userName : this.state.name , userPassword : this.state.password}) - }).then(response => { + }).then(response => { if (response.ok) { //this.setState({message: " "}); this.setState({ + message: "Account: " + this.state.name + " is made!", successMessage: this.state.name + ", you successfully signed up!", isLocked: true }); @@ -115,24 +116,24 @@ class LoginForm extends React.Component{ const fieldEmpty = Object.keys(errors).some(x => errors[x]); return( -
-
-
); } } diff --git a/src/main/js/myresumes.js b/src/main/js/myresumes.js index 0079692..1f86c0d 100644 --- a/src/main/js/myresumes.js +++ b/src/main/js/myresumes.js @@ -4,30 +4,17 @@ import React from 'react'; import ReactDOM from 'react-dom'; -class MenuResumes extends React.Component { - render() { - return( -
-

ResuME

- -
  • About
  • -
  • Contact
  • -
  • Help
  • -
    - ); - } -} - class ResumeList extends React.Component { render() { return ( -
    - +
    +

    {this.props.myresumes}

    +



    +

    New Resume Template

    ); } } -ReactDOM.render(, document.getElementById('menu-MyResumes')); -ReactDOM.render(, document.getElementById('list')); \ No newline at end of file +ReactDOM.render(, document.getElementById('list')); \ No newline at end of file diff --git a/src/main/js/profile.js b/src/main/js/profile.js index dd6e1da..fda3af4 100644 --- a/src/main/js/profile.js +++ b/src/main/js/profile.js @@ -12,7 +12,6 @@ class Menu extends React.Component{
  • Search Templates
  • My Certifications
  • -
  • My Certifications
  • My Applications
  • ); @@ -42,8 +41,7 @@ class Profile extends React.Component { className="image"/>

    - View My Resumes - {/* */} + View My Resumes

    ); @@ -190,5 +188,9 @@ class ProfileInfo extends React.Component { } ReactDOM.render(, document.getElementById('menu')); + ReactDOM.render(,document.getElementById('profile-box')); + +ReactDOM.render(,document.getElementById('profile-box')); + ReactDOM.render(, document.getElementById('profile-info')); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index e457ba4..397a907 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,6 +11,7 @@ module.exports = { app2: './src/main/js/app2.js', app3: './src/main/js/app3.js', app4: './src/main/js/app4.js', + appHome: './src/main/js/appHome.js' }, output: {