├── .devcontainer ├── App.config ├── Dockerfile ├── DockerfileDB ├── HiringDb.mdf ├── HiringDb_log.ldf ├── attach_db.sh ├── buildImage.bat ├── devcontainer.json ├── docker-compose.yml └── postCreate.sh ├── .gitattributes ├── .github └── workflows │ └── ci.yaml ├── .gitignore ├── .gitpod.yml ├── Docs ├── AppInDevContainers.png ├── Containers.png ├── DevContainer_StartInTerminal.png └── Screenshot_MainScreen.png ├── README.md ├── Source ├── .gitignore ├── HiringTrackingSite.sln └── HiringTrackingSite │ ├── App_Data │ ├── HiringDb.mdf │ └── HiringDb_log.ldf │ ├── App_Start │ ├── BundleConfig.cs │ ├── IdentityConfig.cs │ ├── RouteConfig.cs │ └── Startup.Auth.cs │ ├── ApplicationInsights.config │ ├── Bundle.config │ ├── ClientDetails.aspx │ ├── ClientDetails.aspx.cs │ ├── ClientDetails.aspx.designer.cs │ ├── ClientsList.aspx │ ├── ClientsList.aspx.cs │ ├── ClientsList.aspx.designer.cs │ ├── Content │ ├── Site.css │ ├── bootstrap.css │ └── bootstrap.min.css │ ├── DataExtensions.cs │ ├── Default.aspx │ ├── Default.aspx.cs │ ├── Default.aspx.designer.cs │ ├── Global.asax │ ├── Global.asax.cs │ ├── HiringTrackingSite.csproj │ ├── PositionDetails.aspx │ ├── PositionDetails.aspx.cs │ ├── PositionDetails.aspx.designer.cs │ ├── PositionsList.aspx │ ├── PositionsList.aspx.cs │ ├── PositionsList.aspx.designer.cs │ ├── Project_Readme.html │ ├── Properties │ └── AssemblyInfo.cs │ ├── Scripts │ ├── WebForms │ │ ├── DetailsView.js │ │ ├── Focus.js │ │ ├── GridView.js │ │ ├── MSAjax │ │ │ ├── MicrosoftAjax.js │ │ │ ├── MicrosoftAjaxApplicationServices.js │ │ │ ├── MicrosoftAjaxComponentModel.js │ │ │ ├── MicrosoftAjaxCore.js │ │ │ ├── MicrosoftAjaxGlobalization.js │ │ │ ├── MicrosoftAjaxHistory.js │ │ │ ├── MicrosoftAjaxNetwork.js │ │ │ ├── MicrosoftAjaxSerialization.js │ │ │ ├── MicrosoftAjaxTimer.js │ │ │ ├── MicrosoftAjaxWebForms.js │ │ │ └── MicrosoftAjaxWebServices.js │ │ ├── Menu.js │ │ ├── MenuStandards.js │ │ ├── SmartNav.js │ │ ├── TreeView.js │ │ ├── WebForms.js │ │ ├── WebParts.js │ │ └── WebUIValidation.js │ ├── _references.js │ ├── ai.0.15.0-build58334.js │ ├── ai.0.15.0-build58334.min.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── jquery-1.10.2.intellisense.js │ ├── jquery-1.10.2.js │ ├── jquery-1.10.2.min.js │ ├── jquery-1.10.2.min.map │ ├── modernizr-2.6.2.js │ ├── respond.js │ └── respond.min.js │ ├── Site.Master │ ├── Site.Master.cs │ ├── Site.Master.designer.cs │ ├── Startup.cs │ ├── Web.Debug.config │ ├── Web.Release.config │ ├── Web.config │ ├── favicon.ico │ ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff │ └── packages.config └── Target ├── About.aspx.cs ├── About.aspx.designer.cs ├── App.config ├── App_Data ├── HiringDb.mdf └── HiringDb_log.ldf ├── ClientDetails.aspx.cs ├── ClientDetails.aspx.designer.cs ├── ClientsList.aspx.cs ├── ClientsList.aspx.designer.cs ├── Contact.aspx.cs ├── Contact.aspx.designer.cs ├── DataExtensions.cs ├── Default.aspx.cs ├── Default.aspx.designer.cs ├── Extensions ├── AppExtensions.cs ├── ExtApplication.cs ├── IEmailService.cs ├── IServerUtils.cs └── MailMessage.cs ├── HiringTrackingSite.csproj ├── HiringTrackingSite.sln ├── PositionDetails.aspx.cs ├── PositionDetails.aspx.designer.cs ├── PositionsList.aspx.cs ├── PositionsList.aspx.designer.cs ├── Properties ├── AssemblyInfo.cs └── launchSettings.json ├── RegistrationClass.cs ├── Site.Master.cs ├── Site.Master.designer.cs ├── Startup.EntryPoint.cs ├── Startup.cs ├── hiringtrackingsite-angular ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .npmrc ├── README.md ├── angular.json ├── dev.proxy.conf.json ├── e2e │ ├── app.e2e-spec.ts │ ├── app.po.ts │ └── tsconfig.e2e.json ├── karma.conf.js ├── package.json ├── protractor.conf.js ├── proxy.conf.json ├── results1.xml ├── src │ ├── Content │ │ ├── Site.css │ │ ├── bootstrap.css │ │ └── bootstrap.min.css │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── components │ │ │ └── hiring-tracking-site │ │ │ │ ├── client-details │ │ │ │ ├── client-details.component.css │ │ │ │ ├── client-details.component.html │ │ │ │ └── client-details.component.ts │ │ │ │ ├── clients-list-form │ │ │ │ ├── clients-list-form.component.css │ │ │ │ ├── clients-list-form.component.html │ │ │ │ └── clients-list-form.component.ts │ │ │ │ ├── default │ │ │ │ ├── default.component.css │ │ │ │ ├── default.component.html │ │ │ │ └── default.component.ts │ │ │ │ ├── index.ts │ │ │ │ ├── position-details-form │ │ │ │ ├── position-details-form.component.css │ │ │ │ ├── position-details-form.component.html │ │ │ │ └── position-details-form.component.ts │ │ │ │ ├── positions-list │ │ │ │ ├── positions-list.component.css │ │ │ │ ├── positions-list.component.html │ │ │ │ └── positions-list.component.ts │ │ │ │ └── site-master │ │ │ │ ├── site-master.component.css │ │ │ │ ├── site-master.component.html │ │ │ │ └── site-master.component.ts │ │ └── hiring-tracking-site.module.ts │ ├── assets │ │ └── images │ │ │ ├── error.ico │ │ │ ├── errorprovider.ico │ │ │ ├── info.ico │ │ │ └── warning.ico │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ ├── test.ts │ ├── tsconfig.app.json │ └── tsconfig.spec.json ├── startSpaDevServer.sh ├── tsconfig.json └── yarn.lock ├── nuget.config └── wwwroot ├── 3rdpartylicenses.txt ├── assets └── images │ ├── error.ico │ ├── errorprovider.ico │ ├── info.ico │ └── warning.ico ├── favicon.ico ├── glyphicons-halflings-regular.30aa90ae7d1da7ae121e.svg ├── glyphicons-halflings-regular.49ebc991af9d42951bd2.woff ├── glyphicons-halflings-regular.75ee6c90e0c39bbf67c2.eot ├── glyphicons-halflings-regular.8ceb2ffe3d3c8273407f.ttf ├── index.html ├── main-es2018.5e363191f973440e68ba.js ├── main-es5.5e363191f973440e68ba.js ├── polyfills-es2018.51768663c44aafaa0766.js ├── polyfills-es5.c78afe02da99c4b4292b.js ├── runtime-es2018.a1ac991fc00ebf39524f.js ├── runtime-es5.a1ac991fc00ebf39524f.js ├── scripts.95abe7f627241b26cfc4.js └── styles.0b1c7f9447d66433a07a.css /.devcontainer/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/core/sdk:3.1 2 | 3 | RUN apt-get -qq update && apt-get -qqy --no-install-recommends install wget gnupg \ 4 | git \ 5 | unzip 6 | 7 | RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - 8 | RUN apt-get install -y nodejs \ 9 | procps 10 | 11 | ENV ASPNETCORE_ENVIRONMENT Development 12 | ENV NODE_ENV development 13 | 14 | # https://code.visualstudio.com/docs/remote/containers-advanced#_using-docker-or-kubernetes-from-a-container 15 | 16 | RUN apt-get update \ 17 | # 18 | # Install Docker CE CLI 19 | && apt-get install -y apt-transport-https \ 20 | ca-certificates \ 21 | curl \ 22 | gnupg-agent \ 23 | software-properties-common 24 | RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \ 25 | && add-apt-repository \ 26 | "deb [arch=amd64] https://download.docker.com/linux/debian \ 27 | $(lsb_release -cs) \ 28 | stable" 29 | RUN apt-get update \ 30 | && apt-get install -y docker-ce-cli 31 | # 32 | # Install Docker Compose 33 | RUN LATEST_COMPOSE_VERSION=$(curl -sSL "https://api.github.com/repos/docker/compose/releases/latest" | grep -o -P '(?<="tag_name": ").+(?=")') \ 34 | && curl -sSL "https://github.com/docker/compose/releases/download/${LATEST_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ 35 | && chmod +x /usr/local/bin/docker-compose -------------------------------------------------------------------------------- /.devcontainer/DockerfileDB: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/mssql/server:2017-CU22-ubuntu-16.04 2 | ENV ACCEPT_EULA=Y 3 | ENV SA_PASSWORD=Password1$ 4 | ENV MSSQL_TCP_PORT=1433 5 | EXPOSE 1433 6 | 7 | WORKDIR /src 8 | COPY attach_db.sh /db/ 9 | COPY HiringDb.mdf /db/ 10 | COPY HiringDb_log.ldf /db/ 11 | 12 | RUN chmod +x /db/attach_db.sh 13 | RUN (/opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" 14 | 15 | ENTRYPOINT /db/attach_db.sh & /opt/mssql/bin/sqlservr -------------------------------------------------------------------------------- /.devcontainer/HiringDb.mdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/.devcontainer/HiringDb.mdf -------------------------------------------------------------------------------- /.devcontainer/HiringDb_log.ldf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/.devcontainer/HiringDb_log.ldf -------------------------------------------------------------------------------- /.devcontainer/attach_db.sh: -------------------------------------------------------------------------------- 1 | sleep 30s 2 | echo "Creating the HiringDb" 3 | echo "Starting..." 4 | /opt/mssql-tools/bin/sqlcmd -S . -U sa -P Password1$ \ 5 | -Q "CREATE DATABASE [HiringDb] ON (FILENAME ='/db/HiringDb.mdf'),(FILENAME = '/db/HiringDb_log.ldf') FOR ATTACH" 6 | echo "Done creating HiringDb" 7 | -------------------------------------------------------------------------------- /.devcontainer/buildImage.bat: -------------------------------------------------------------------------------- 1 | docker build . -t orellabac/webmap-angular-base -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at: 2 | // https://github.com/microsoft/vscode-dev-containers/tree/v0.101.1/containers/docker-in-docker-compose 3 | // If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml. 4 | { 5 | "name": "WebMap For WebForms", 6 | "dockerComposeFile": "docker-compose.yml", 7 | "service": "backend", 8 | "workspaceFolder": "/app", 9 | 10 | // Set *default* container specific settings.json values on container create. 11 | "settings": { 12 | "terminal.integrated.shell.linux": "/bin/bash" 13 | }, 14 | // Add the IDs of extensions you want installed when the container is created. 15 | "extensions": [ 16 | "ms-dotnettools.csharp", 17 | "msjsdiag.debugger-for-chrome", 18 | "dbaeumer.vscode-eslint", 19 | "eamodio.gitlens", 20 | "ms-azuretools.vscode-docker" 21 | ], 22 | "remote.extensionKind": { 23 | "ms-azuretools.vscode-docker": [ "ui" ], 24 | }, 25 | "forwardPorts": [1433, 5000, 5001, 4200], 26 | "shutdownAction": "stopCompose", 27 | // Uncomment the next line if you want start specific services in your Docker Compose config. 28 | //"runServices": [""] 29 | 30 | 31 | // Use 'postCreateCommand' to run commands after the container is created. 32 | //"postCreateCommand": "bash .devcontainer/postCreate.sh", 33 | 34 | // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. 35 | // "remoteUser": "vscode" 36 | } -------------------------------------------------------------------------------- /.devcontainer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | backend: 4 | # Uncomment the next line to use a non-root user for all processes. You can also 5 | # simply use the "remoteUser" property in devcontainer.json if you just want VS Code 6 | # and its sub-processes (terminals, tasks, debugging) to execute as the user. On Linux, 7 | # you may need to update USER_UID and USER_GID in .devcontainer/Dockerfile to match your 8 | # user if not 1000. See https://aka.ms/vscode-remote/containers/non-root for details. 9 | # user: vscode 10 | build: 11 | context: . 12 | dockerfile: Dockerfile 13 | 14 | image: devcontainer_webmap_webform_backend:dev 15 | 16 | volumes: 17 | # Update this to wherever you want VS Code to mount the folder of your project 18 | - ..:/app:cached 19 | - node_modules:/app/Target/hiringtrackingsite-angular/node_modules/ 20 | - /var/run/docker.sock:/var/run/docker.sock # forward host Docker socket to access docker CLI 21 | - docker-config:/root/.docker/ # necessary to store the docker login credentials in /root/.docker/.config.json 22 | networks: 23 | dev-net: 24 | container_name: webmap_webform_backend.dev 25 | command: /bin/sh -c "dotnet restore --disable-parallel && sleep infinity" 26 | environment: 27 | - SPA_DEV_SERVER_URI=http://webmap-webforms:3000/ 28 | - ASPNETCORE_ENVIRONMENT=Development 29 | - DEVCONTAINER=container 30 | - ASPNETCORE_URLS=https://+:5000;http://+:5001 31 | - REPO_ROOT_DIR=/app 32 | ports: 33 | - "5000:5000" 34 | - "5001:5001" 35 | depends_on: 36 | - frontend 37 | - db 38 | working_dir: /app/Target 39 | 40 | frontend: 41 | image: node:12 42 | 43 | volumes: 44 | # Update this to wherever you want VS Code to mount the folder of your project 45 | - ../Target/hiringtrackingsite-angular:/app/Target/hiringtrackingsite-angular:cached 46 | - node_modules:/app/Target/hiringtrackingsite-angular/node_modules/ 47 | ports: 48 | - "4200:4200" 49 | networks: 50 | dev-net: 51 | container_name: webmap_webform_frontend.dev 52 | working_dir: /app/Target/hiringtrackingsite-angular/ 53 | command: /bin/sh -c "bash startSpaDevServer.sh" 54 | environment: 55 | - NODE_ENV=development 56 | - DEVCONTAINER=container 57 | # necessary for to webpack hot module replacement to pick up watched source changes done outside the docker container 58 | # https://github.com/paulmillr/chokidar#performance 59 | #- CHOKIDAR_USEPOLLING=true 60 | #- CHOKIDAR_INTERVAL=1000 61 | 62 | db: 63 | build: 64 | context: . 65 | dockerfile: DockerfileDB 66 | networks: 67 | dev-net: 68 | container_name: webmap_webform_db.dev 69 | image: devcontainer_db:dev 70 | 71 | 72 | networks: 73 | dev-net: 74 | driver: bridge 75 | volumes: 76 | node_modules: 77 | docker-config: 78 | -------------------------------------------------------------------------------- /.devcontainer/postCreate.sh: -------------------------------------------------------------------------------- 1 | echo "export WORKSPACE_DIR_DOCKER_MOUNT=$(docker inspect -f '{{range .Mounts }}{{ if eq .Destination "/app" }}{{.Source}}{{end}}{{end}}' aspnet-spa-starter.dev)" >> ~/.bashrc 2 | 3 | OriginUrl=$(git config --get remote.origin.url) 4 | OriginUrlRegexPattern="https:\/\/github.com\/(.+)\/(.+)\.git" 5 | [[ $OriginUrl =~ $OriginUrlRegexPattern ]] 6 | 7 | GithubUsername=${BASH_REMATCH[1]} 8 | GithubRepo=${BASH_REMATCH[2]} 9 | echo "export GITHUB_USERNAME=$GithubUsername" >> ~/.bashrc 10 | echo "export DOCKER_REGISTRY=docker.pkg.github.com/$GithubUsername/$GithubRepo" >> ~/.bashrc -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh text eol=lf -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | strategy: 10 | matrix: 11 | dotnet-version: ['3.1.x' ] 12 | node-version: [12.x] 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: FrontEnd Cache node modules 17 | uses: actions/cache@v1 18 | with: 19 | path: ~/.npm 20 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 21 | restore-keys: | 22 | ${{ runner.os }}-node- 23 | - name: Node ${{ matrix.node-version }} 24 | uses: actions/setup-node@v1 25 | with: 26 | node-version: ${{ matrix.node-version }} 27 | - name: npm install and npm run build 28 | run: | 29 | cd ./Target/hiringtrackingsite-angular 30 | npm i 31 | npm run build 32 | - name: Setup .NET Core SDK ${{ matrix.dotnet }} 33 | uses: actions/setup-dotnet@v1.7.2 34 | with: 35 | dotnet-version: ${{ matrix.dotnet-version }} 36 | - name: Install dependencies 37 | run: dotnet restore 38 | working-directory: Target 39 | - name: Build 40 | run: dotnet build --configuration Release --no-restore 41 | working-directory: Target 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.*~ 3 | project.lock.json 4 | .DS_Store 5 | *.pyc 6 | nupkg/ 7 | 8 | # Visual Studio Code 9 | .vscode 10 | 11 | # Rider 12 | .idea 13 | 14 | # User-specific files 15 | *.suo 16 | *.user 17 | *.userosscache 18 | *.sln.docstates 19 | 20 | # Build results 21 | [Dd]ebug/ 22 | [Dd]ebugPublic/ 23 | [Rr]elease/ 24 | [Rr]eleases/ 25 | x64/ 26 | x86/ 27 | build/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Oo]ut/ 32 | msbuild.log 33 | msbuild.err 34 | msbuild.wrn 35 | 36 | # Visual Studio 2015 37 | .vs/ -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | 2 | tasks: 3 | - init: sudo docker-up 4 | - command: sleep 10 && cd .devcontainer && docker-compose up 5 | 6 | vscode: 7 | extensions: 8 | - ms-azuretools.vscode-docker 9 | -------------------------------------------------------------------------------- /Docs/AppInDevContainers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Docs/AppInDevContainers.png -------------------------------------------------------------------------------- /Docs/Containers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Docs/Containers.png -------------------------------------------------------------------------------- /Docs/DevContainer_StartInTerminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Docs/DevContainer_StartInTerminal.png -------------------------------------------------------------------------------- /Docs/Screenshot_MainScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Docs/Screenshot_MainScreen.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WebMap for WebForms Demo ![status](https://github.com/MobilizeNet/WebFormsMigrationDemo/actions/workflows/ci.yaml/badge.svg) 2 | 3 | This repository contains an small demo of a ASP.NET WebForms application that has been 4 | upgraded to a ASP.NET Core Backend + Angular FrontEnd. 5 | 6 | ![](./Docs/Screenshot_MainScreen.png) 7 | 8 | If you want more technical documentation about our webmap product: 9 | - [General Product Information](https://www.mobilize.net/products/app-migrations/webmap/) 10 | - [Documentation for WebMap](https://docs.mobilize.net/webmap/) 11 | - [Sample Reference App for VB6 and Winforms](https://github.com/MobilizeNet/SKS) 12 | 13 | ## Repository Contents 14 | 15 | - Source 16 | - this folder contains the original source code for an ASP.NET WebForms app 17 | - Target 18 | - this folder contains the target source code after in ASP.NET Core + Angular 19 | 20 | ## How to build 21 | 22 | ### Building locally 23 | 24 | If you want to build this project on your development machine, just check that you match this requirements: 25 | 26 | * [Node.js LTS](https://nodejs.org/en/download/) 27 | * [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/) 28 | * [.NET Core](https://dotnet.microsoft.com/download) 29 | 30 | > NOTE: Your installation of Visual Studio, must include the *ASP.NET and Web Development Feature * 31 | > 32 | > To install this feature open your VS installer and Go to Workloads tab and then turn on ASP.Net and web development as in the following picture: 33 | ![AspWebDevelopment](https://gblobscdn.gitbook.com/assets%2F-MEOm98BbzqckTUoLpXN%2F-MObjz9M3Gd4Q3oDTVfk%2F-MOfsymyfLvuUJarfQAA%2Fimage.png?alt=media&token=67fbfe2d-b5f9-4c78-b24b-51d5800053af) 34 | 35 | To build your application just open the `Target/HiringTrackingSite.sln` file with VS Studio and select **Rebuild**. This will install any missing dependencies and trigger the build process. 36 | 37 | > NOTE: the angular frontend is already built. If you want to build it yourself see the step on Building the Frontend code. 38 | 39 | 40 | ## Building the FrontEnd code 41 | 42 | To build the frontend code make sure you already have [Node.js LTS](https://nodejs.org/en/download/) installed. 43 | 44 | Open a terminal at `Target/hiringtrackingsite-angular` and run: 45 | ``` 46 | npm install 47 | npm run build 48 | ``` 49 | 50 | ## [Developing inside a Container](https://code.visualstudio.com/docs/remote/containers) 51 | 52 | Working with Containers is everyday more common. 53 | VS Code provides amazing support for working with containers. In this repository we provide a `.devcontainer` folder with a `docker-compose.yml` setup to run this app. Remember to install Docker first and start the Docker desktop app. 54 | 55 | The compose will start: 56 | * a container for working with your backend code. 57 | * a container for starting your angular frontend in development mode so you can try your changes right away. 58 | * a container for the SQL Database so you dont have to worry on how to set it up. 59 | 60 | In you have the [Remote Containers extensions](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) vscode will recognize it and ask you to open your solution using this configuration. 61 | 62 | ![VSCode using DevContainers](./Docs/AppInDevContainers.png) 63 | 64 | If everything works you should see your 3 containers: 65 | 66 | ![Containers](./Docs/Containers.png) 67 | 68 | To start playing with your app open a terminal and start your backend: 69 | 70 | ![Terminal](./Docs/DevContainer_StartInTerminal.png) 71 | 72 | Do you want to run it in the cloud. You can follow these steps: 73 | 74 | [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io#https://github.com/MobilizeNet/WebFormsMigrationDemo) 75 | 76 | Give it 5-10 mins for all the containers to load. 77 | 78 | After that you can just follow the same steps described above for containers. 79 | -------------------------------------------------------------------------------- /Source/.gitignore: -------------------------------------------------------------------------------- 1 | *.suo 2 | bin 3 | obj 4 | packages 5 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.24720.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HiringTrackingSite", "HiringTrackingSite\HiringTrackingSite.csproj", "{E129CCE9-B99A-42DC-817F-43FD4C05B2EF}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {E129CCE9-B99A-42DC-817F-43FD4C05B2EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {E129CCE9-B99A-42DC-817F-43FD4C05B2EF}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {E129CCE9-B99A-42DC-817F-43FD4C05B2EF}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {E129CCE9-B99A-42DC-817F-43FD4C05B2EF}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/App_Data/HiringDb.mdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/App_Data/HiringDb.mdf -------------------------------------------------------------------------------- /Source/HiringTrackingSite/App_Data/HiringDb_log.ldf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/App_Data/HiringDb_log.ldf -------------------------------------------------------------------------------- /Source/HiringTrackingSite/App_Start/BundleConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Optimization; 6 | using System.Web.UI; 7 | 8 | namespace HiringTrackingSite 9 | { 10 | public class BundleConfig 11 | { 12 | // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkID=303951 13 | public static void RegisterBundles(BundleCollection bundles) 14 | { 15 | bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include( 16 | "~/Scripts/WebForms/WebForms.js", 17 | "~/Scripts/WebForms/WebUIValidation.js", 18 | "~/Scripts/WebForms/MenuStandards.js", 19 | "~/Scripts/WebForms/Focus.js", 20 | "~/Scripts/WebForms/GridView.js", 21 | "~/Scripts/WebForms/DetailsView.js", 22 | "~/Scripts/WebForms/TreeView.js", 23 | "~/Scripts/WebForms/WebParts.js")); 24 | 25 | // Order is very important for these files to work, they have explicit dependencies 26 | bundles.Add(new ScriptBundle("~/bundles/MsAjaxJs").Include( 27 | "~/Scripts/WebForms/MsAjax/MicrosoftAjax.js", 28 | "~/Scripts/WebForms/MsAjax/MicrosoftAjaxApplicationServices.js", 29 | "~/Scripts/WebForms/MsAjax/MicrosoftAjaxTimer.js", 30 | "~/Scripts/WebForms/MsAjax/MicrosoftAjaxWebForms.js")); 31 | 32 | // Use the Development version of Modernizr to develop with and learn from. Then, when you’re 33 | // ready for production, use the build tool at http://modernizr.com to pick only the tests you need 34 | bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( 35 | "~/Scripts/modernizr-*")); 36 | 37 | ScriptManager.ScriptResourceMapping.AddDefinition( 38 | "respond", 39 | new ScriptResourceDefinition 40 | { 41 | Path = "~/Scripts/respond.min.js", 42 | DebugPath = "~/Scripts/respond.js", 43 | }); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/App_Start/IdentityConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Security.Claims; 3 | using System.Threading.Tasks; 4 | using Microsoft.AspNet.Identity; 5 | using Microsoft.AspNet.Identity.EntityFramework; 6 | using Microsoft.AspNet.Identity.Owin; 7 | using Microsoft.Owin; 8 | using Microsoft.Owin.Security; 9 | 10 | 11 | namespace HiringTrackingSite 12 | { 13 | public class EmailService : IIdentityMessageService 14 | { 15 | public Task SendAsync(IdentityMessage message) 16 | { 17 | // Plug in your email service here to send an email. 18 | return Task.FromResult(0); 19 | } 20 | } 21 | 22 | public class SmsService : IIdentityMessageService 23 | { 24 | public Task SendAsync(IdentityMessage message) 25 | { 26 | // Plug in your SMS service here to send a text message. 27 | return Task.FromResult(0); 28 | } 29 | } 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Web; 4 | using System.Web.Routing; 5 | using Microsoft.AspNet.FriendlyUrls; 6 | 7 | namespace HiringTrackingSite 8 | { 9 | public static class RouteConfig 10 | { 11 | public static void RegisterRoutes(RouteCollection routes) 12 | { 13 | var settings = new FriendlyUrlSettings(); 14 | settings.AutoRedirectMode = RedirectMode.Permanent; 15 | routes.EnableFriendlyUrls(settings); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/App_Start/Startup.Auth.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.AspNet.Identity; 3 | using Microsoft.AspNet.Identity.EntityFramework; 4 | using Microsoft.AspNet.Identity.Owin; 5 | using Microsoft.Owin; 6 | using Microsoft.Owin.Security.Cookies; 7 | using Microsoft.Owin.Security.DataProtection; 8 | using Microsoft.Owin.Security.Google; 9 | using Owin; 10 | 11 | namespace HiringTrackingSite 12 | { 13 | public partial class Startup { 14 | 15 | // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301883 16 | public void ConfigureAuth(IAppBuilder app) 17 | { 18 | 19 | // Enable the application to use a cookie to store information for the signed in user 20 | // and to use a cookie to temporarily store information about a user logging in with a third party login provider 21 | // Configure the sign in cookie 22 | app.UseCookieAuthentication(new CookieAuthenticationOptions 23 | { 24 | AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 25 | LoginPath = new PathString("/Account/Login"), 26 | Provider = new CookieAuthenticationProvider 27 | { 28 | 29 | } 30 | }); 31 | // Use a cookie to temporarily store information about a user logging in with a third party login provider 32 | app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 33 | 34 | // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. 35 | app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 36 | 37 | // Enables the application to remember the second login verification factor such as phone or email. 38 | // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 39 | // This is similar to the RememberMe option when you log in. 40 | app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 41 | 42 | // Uncomment the following lines to enable logging in with third party login providers 43 | //app.UseMicrosoftAccountAuthentication( 44 | // clientId: "", 45 | // clientSecret: ""); 46 | 47 | //app.UseTwitterAuthentication( 48 | // consumerKey: "", 49 | // consumerSecret: ""); 50 | 51 | //app.UseFacebookAuthentication( 52 | // appId: "", 53 | // appSecret: ""); 54 | 55 | //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 56 | //{ 57 | // ClientId = "", 58 | // ClientSecret = "" 59 | //}); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ApplicationInsights.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Bundle.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ClientDetails.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ClientDetails.aspx.cs" Inherits="HiringTrackingSite.ClientDetails" %> 2 | 3 | 4 | Id: 5 | 6 |
7 | Name: 8 | 9 |
10 | Phone: 11 | 12 |
13 | Email: 14 | 15 |
16 | Contact Name: 17 | 18 |
19 | Website: 20 | 21 |
22 | 23 | 24 | 25 |
26 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ClientDetails.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Data.SqlClient; 6 | using System.Linq; 7 | using System.Web; 8 | using System.Web.UI; 9 | using System.Web.UI.WebControls; 10 | 11 | namespace HiringTrackingSite 12 | { 13 | public partial class ClientDetails : System.Web.UI.Page 14 | { 15 | protected void Page_Load(object sender, EventArgs e) 16 | { 17 | if (!IsPostBack) 18 | { 19 | if (Session["ClientId"] != null) 20 | { 21 | LoadClientInformation(Convert.ToInt32(Session["ClientId"])); 22 | } 23 | else 24 | { 25 | UpdateButton.Visible = false; 26 | InsertButton.Visible = true; 27 | } 28 | } 29 | } 30 | 31 | private void LoadClientInformation(int v) 32 | { 33 | string connectionString = ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString(); 34 | 35 | using (SqlConnection conn = new SqlConnection(connectionString)) 36 | { 37 | conn.Open(); 38 | SqlCommand cmd = new SqlCommand("SELECT Id, Name, Phone, Email, ContactName, Website FROM Clients Where Id = @Id", conn); 39 | cmd.Parameters.Add("@Id", SqlDbType.Int); 40 | cmd.Parameters["@Id"].Value = v; 41 | var reader = cmd.ExecuteReader(); 42 | if (reader.Read()) 43 | { 44 | IdLabel1.Text = reader.GetInt32(0).ToString(); 45 | NameTextBox.Text = reader.GetString(1); 46 | PhoneTextBox.Text = reader.GetString(2); 47 | EmailTextBox.Text = reader.GetString(3); 48 | ContactNameTextBox.Text = reader.GetString(4); 49 | WebsiteTextBox.Text = reader.GetString(5); 50 | UpdateButton.Visible = true; 51 | InsertButton.Visible = false; 52 | } 53 | else 54 | { 55 | UpdateButton.Visible = false; 56 | InsertButton.Visible = true; 57 | } 58 | } 59 | 60 | } 61 | 62 | protected void UpdateButton_Click(object sender, EventArgs e) 63 | { 64 | string connectionString = ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString(); 65 | 66 | using (SqlConnection conn = new SqlConnection(connectionString)) 67 | { 68 | conn.Open(); 69 | SqlCommand cmd = new SqlCommand("Update Clients set Name=@Name, Phone=@Phone, Email=@Email, ContactName=@ContactName, Website=@Website where id = @id", conn); 70 | cmd.Parameters.Add("@Name", SqlDbType.VarChar); 71 | cmd.Parameters["@Name"].Value = NameTextBox.Text; 72 | cmd.Parameters.Add("@Phone", SqlDbType.VarChar); 73 | cmd.Parameters["@Phone"].Value = PhoneTextBox.Text; 74 | cmd.Parameters.Add("@Email", SqlDbType.VarChar); 75 | cmd.Parameters["@Email"].Value = EmailTextBox.Text; 76 | cmd.Parameters.Add("@ContactName", SqlDbType.VarChar); 77 | cmd.Parameters["@ContactName"].Value = ContactNameTextBox.Text; 78 | cmd.Parameters.Add("@Website", SqlDbType.VarChar); 79 | cmd.Parameters["@Website"].Value = WebsiteTextBox.Text; 80 | cmd.Parameters.Add("@id", SqlDbType.VarChar); 81 | cmd.Parameters["@id"].Value = IdLabel1.Text; 82 | var affectedRows = cmd.ExecuteNonQuery(); 83 | 84 | if (affectedRows == 1) 85 | { 86 | ClientScript.RegisterStartupScript(this.GetType(), "Message", $""); 87 | } 88 | } 89 | } 90 | 91 | protected void InsertButton_Click(object sender, EventArgs e) 92 | { 93 | string connectionString = ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString(); 94 | 95 | using (SqlConnection conn = new SqlConnection(connectionString)) 96 | { 97 | conn.Open(); 98 | SqlCommand cmd = new SqlCommand("Insert into Clients (Name, Phone, Email, ContactName, Website) OUTPUT INSERTED.ID " + 99 | " values (@Name, @Phone, @Email, @ContactName, @Website)", conn); 100 | cmd.Parameters.Add("@Name", SqlDbType.VarChar); 101 | cmd.Parameters["@Name"].Value = NameTextBox.Text; 102 | cmd.Parameters.Add("@Phone", SqlDbType.VarChar); 103 | cmd.Parameters["@Phone"].Value = PhoneTextBox.Text; 104 | cmd.Parameters.Add("@Email", SqlDbType.VarChar); 105 | cmd.Parameters["@Email"].Value = EmailTextBox.Text; 106 | cmd.Parameters.Add("@ContactName", SqlDbType.VarChar); 107 | cmd.Parameters["@ContactName"].Value = ContactNameTextBox.Text; 108 | cmd.Parameters.Add("@Website", SqlDbType.VarChar); 109 | cmd.Parameters["@Website"].Value = WebsiteTextBox.Text; 110 | var id = cmd.ExecuteScalar(); 111 | IdLabel1.Text = id.ToString(); 112 | 113 | ClientScript.RegisterStartupScript(this.GetType(), "Message", $""); 114 | } 115 | } 116 | } 117 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ClientDetails.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace HiringTrackingSite { 11 | 12 | 13 | public partial class ClientDetails { 14 | 15 | /// 16 | /// IdLabel1 control. 17 | /// 18 | /// 19 | /// Auto-generated field. 20 | /// To modify move field declaration from designer file to code-behind file. 21 | /// 22 | protected global::System.Web.UI.WebControls.Label IdLabel1; 23 | 24 | /// 25 | /// NameTextBox control. 26 | /// 27 | /// 28 | /// Auto-generated field. 29 | /// To modify move field declaration from designer file to code-behind file. 30 | /// 31 | protected global::System.Web.UI.WebControls.TextBox NameTextBox; 32 | 33 | /// 34 | /// PhoneTextBox control. 35 | /// 36 | /// 37 | /// Auto-generated field. 38 | /// To modify move field declaration from designer file to code-behind file. 39 | /// 40 | protected global::System.Web.UI.WebControls.TextBox PhoneTextBox; 41 | 42 | /// 43 | /// EmailTextBox control. 44 | /// 45 | /// 46 | /// Auto-generated field. 47 | /// To modify move field declaration from designer file to code-behind file. 48 | /// 49 | protected global::System.Web.UI.WebControls.TextBox EmailTextBox; 50 | 51 | /// 52 | /// ContactNameTextBox control. 53 | /// 54 | /// 55 | /// Auto-generated field. 56 | /// To modify move field declaration from designer file to code-behind file. 57 | /// 58 | protected global::System.Web.UI.WebControls.TextBox ContactNameTextBox; 59 | 60 | /// 61 | /// WebsiteTextBox control. 62 | /// 63 | /// 64 | /// Auto-generated field. 65 | /// To modify move field declaration from designer file to code-behind file. 66 | /// 67 | protected global::System.Web.UI.WebControls.TextBox WebsiteTextBox; 68 | 69 | /// 70 | /// UpdateButton control. 71 | /// 72 | /// 73 | /// Auto-generated field. 74 | /// To modify move field declaration from designer file to code-behind file. 75 | /// 76 | protected global::System.Web.UI.WebControls.LinkButton UpdateButton; 77 | 78 | /// 79 | /// InsertButton control. 80 | /// 81 | /// 82 | /// Auto-generated field. 83 | /// To modify move field declaration from designer file to code-behind file. 84 | /// 85 | protected global::System.Web.UI.WebControls.LinkButton InsertButton; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ClientsList.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ClientsList.aspx.cs" Inherits="HiringTrackingSite.ClientsListForm" %> 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 36 | 39 | 42 | 45 | 46 | 47 | 48 | 49 | 50 |
IdClient NamePhoneEmailWebsiteContact Name
28 | 29 | 31 | 32 | 34 | 35 | 37 | 38 | 40 | 41 | 43 | 44 | Details
51 | Add new client 52 | 53 |
54 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ClientsList.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.UI; 6 | using System.Web.UI.WebControls; 7 | 8 | namespace HiringTrackingSite 9 | { 10 | public partial class ClientsListForm : System.Web.UI.Page 11 | { 12 | protected void Page_Load(object sender, EventArgs e) 13 | { 14 | ClientsDataSource.SelectCommand = "Select * from Clients"; 15 | } 16 | 17 | protected void Details_Click(object sender, EventArgs e) 18 | { 19 | Session["ClientId"] = ((LinkButton)sender).CommandArgument; 20 | 21 | Response.Redirect("ClientDetails.aspx", true); 22 | } 23 | 24 | protected void btnFilter_Click(object sender, EventArgs e) 25 | { 26 | List filters = new List(); 27 | if (!string.IsNullOrWhiteSpace(IdFilter.Text)) 28 | { 29 | filters.Add("Id=" + IdFilter.Text); 30 | } 31 | if (!string.IsNullOrWhiteSpace(NameFilter.Text)) 32 | { 33 | filters.Add($"Name like '%{NameFilter.Text}%'"); 34 | } 35 | if (!string.IsNullOrWhiteSpace(PhoneFilter.Text)) 36 | { 37 | filters.Add($"Phone like '%{PhoneFilter.Text}%'"); 38 | } 39 | if (!string.IsNullOrWhiteSpace(EmailFilter.Text)) 40 | { 41 | filters.Add($"Email like '%{EmailFilter.Text}%'"); 42 | } 43 | if (!string.IsNullOrWhiteSpace(ContactNameFilter.Text)) 44 | { 45 | filters.Add($"ContactName like '%{ContactNameFilter.Text}%'"); 46 | } 47 | if (!string.IsNullOrWhiteSpace(WebsiteFilter.Text)) 48 | { 49 | filters.Add($"Website like '%{WebsiteFilter.Text}%'"); 50 | } 51 | 52 | string filter = string.Join(" AND ", filters.ToArray()); 53 | 54 | if (!string.IsNullOrWhiteSpace(filter)) 55 | { 56 | filter = " WHERE " + filter; 57 | } 58 | 59 | ClientsDataSource.SelectCommand += filter; 60 | DataList1.DataBind(); 61 | 62 | } 63 | 64 | protected void AddNewButton_Click(object sender, EventArgs e) 65 | { 66 | Session["ClientId"] = null; 67 | Response.Redirect("ClientDetails", true); 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/ClientsList.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace HiringTrackingSite { 11 | 12 | 13 | public partial class ClientsListForm { 14 | 15 | /// 16 | /// IdFilter control. 17 | /// 18 | /// 19 | /// Auto-generated field. 20 | /// To modify move field declaration from designer file to code-behind file. 21 | /// 22 | protected global::System.Web.UI.WebControls.TextBox IdFilter; 23 | 24 | /// 25 | /// NameFilter control. 26 | /// 27 | /// 28 | /// Auto-generated field. 29 | /// To modify move field declaration from designer file to code-behind file. 30 | /// 31 | protected global::System.Web.UI.WebControls.TextBox NameFilter; 32 | 33 | /// 34 | /// PhoneFilter control. 35 | /// 36 | /// 37 | /// Auto-generated field. 38 | /// To modify move field declaration from designer file to code-behind file. 39 | /// 40 | protected global::System.Web.UI.WebControls.TextBox PhoneFilter; 41 | 42 | /// 43 | /// EmailFilter control. 44 | /// 45 | /// 46 | /// Auto-generated field. 47 | /// To modify move field declaration from designer file to code-behind file. 48 | /// 49 | protected global::System.Web.UI.WebControls.TextBox EmailFilter; 50 | 51 | /// 52 | /// WebsiteFilter control. 53 | /// 54 | /// 55 | /// Auto-generated field. 56 | /// To modify move field declaration from designer file to code-behind file. 57 | /// 58 | protected global::System.Web.UI.WebControls.TextBox WebsiteFilter; 59 | 60 | /// 61 | /// ContactNameFilter control. 62 | /// 63 | /// 64 | /// Auto-generated field. 65 | /// To modify move field declaration from designer file to code-behind file. 66 | /// 67 | protected global::System.Web.UI.WebControls.TextBox ContactNameFilter; 68 | 69 | /// 70 | /// btnFilter control. 71 | /// 72 | /// 73 | /// Auto-generated field. 74 | /// To modify move field declaration from designer file to code-behind file. 75 | /// 76 | protected global::System.Web.UI.WebControls.Button btnFilter; 77 | 78 | /// 79 | /// DataList1 control. 80 | /// 81 | /// 82 | /// Auto-generated field. 83 | /// To modify move field declaration from designer file to code-behind file. 84 | /// 85 | protected global::System.Web.UI.WebControls.DataList DataList1; 86 | 87 | /// 88 | /// AddNewButton control. 89 | /// 90 | /// 91 | /// Auto-generated field. 92 | /// To modify move field declaration from designer file to code-behind file. 93 | /// 94 | protected global::System.Web.UI.WebControls.LinkButton AddNewButton; 95 | 96 | /// 97 | /// ClientsDataSource control. 98 | /// 99 | /// 100 | /// Auto-generated field. 101 | /// To modify move field declaration from designer file to code-behind file. 102 | /// 103 | protected global::System.Web.UI.WebControls.SqlDataSource ClientsDataSource; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Content/Site.css: -------------------------------------------------------------------------------- 1 | /* Move down content because we have a fixed navbar that is 50px tall */ 2 | body { 3 | padding-top: 50px; 4 | padding-bottom: 20px; 5 | } 6 | 7 | /* Wrapping element */ 8 | /* Set some basic padding to keep content from hitting the edges */ 9 | .body-content { 10 | padding-left: 15px; 11 | padding-right: 15px; 12 | } 13 | 14 | /* Override the default bootstrap behavior where horizontal description lists 15 | will truncate terms that are too long to fit in the left column 16 | */ 17 | .dl-horizontal dt { 18 | white-space: normal; 19 | } 20 | 21 | /* Set widths on the form inputs since otherwise they're 100% wide */ 22 | input[type="text"], 23 | input[type="password"], 24 | input[type="email"], 25 | input[type="tel"], 26 | input[type="select"] { 27 | max-width: 280px; 28 | } 29 | 30 | /* Responsive: Portrait tablets and up */ 31 | @media screen and (min-width: 768px) { 32 | .jumbotron { 33 | margin-top: 20px; 34 | } 35 | .body-content { 36 | padding: 0; 37 | } 38 | } 39 | 40 | 41 | .formLabel{ 42 | display:inline-block; 43 | width:200px; 44 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/DataExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data; 4 | using System.Data.SqlClient; 5 | using System.Linq; 6 | using System.Web; 7 | 8 | namespace HiringTrackingSite 9 | { 10 | public static class DataExtensions 11 | { 12 | 13 | 14 | public static void AddNewParameter(this SqlCommand cmd, string name, SqlDbType type, object value) 15 | { 16 | cmd.Parameters.Add(name, type); 17 | cmd.Parameters[name].Value = value; 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Default.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="HiringTrackingSite._Default" %> 2 | 3 | 4 | 5 |
6 |

Hiring Tracking

7 |

Track positions and candidates.

8 |
9 | 10 |
11 | <%--
12 |

Candidates

13 |

14 | All existing candidates with their resumes. View and edit their information or associate with open positions. 15 |

16 |

17 | View 18 |

19 |
--%> 20 |
21 |

Positions

22 |

23 | View open positions or query previous hires. 24 |

25 |

26 | View 27 |

28 |
29 |
30 |

Clients

31 |

32 | Manage contacts requesting the positions. 33 |

34 |

35 | View 36 |

37 |
38 |
39 | 40 |
41 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.UI; 6 | using System.Web.UI.WebControls; 7 | 8 | namespace HiringTrackingSite 9 | { 10 | public partial class _Default : Page 11 | { 12 | protected void Page_Load(object sender, EventArgs e) 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Default.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace HiringTrackingSite 11 | { 12 | 13 | 14 | public partial class _Default 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="HiringTrackingSite.Global" Language="C#" %> 2 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Optimization; 6 | using System.Web.Routing; 7 | using System.Web.Security; 8 | using System.Web.SessionState; 9 | 10 | namespace HiringTrackingSite 11 | { 12 | public class Global : HttpApplication 13 | { 14 | void Application_Start(object sender, EventArgs e) 15 | { 16 | // Code that runs on application startup 17 | RouteConfig.RegisterRoutes(RouteTable.Routes); 18 | BundleConfig.RegisterBundles(BundleTable.Bundles); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/PositionDetails.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="PositionDetails.aspx.cs" Inherits="HiringTrackingSite.PositionDetailsForm" %> 2 | 3 | 4 | Id: 5 | 6 |
7 | Name: 8 | 9 |
10 | Description: 11 | 12 |
13 | Start Date: 14 | 15 |
16 | Deadline: 17 | 18 |
19 | Hired?: 20 | 21 |
22 | Client: 23 | 24 |
25 | Client Contact Name: 26 | 27 |
28 | Phone: 29 | 30 |
31 | Email: 32 | 33 |
34 | 35 | 36 | 37 |
38 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/PositionDetails.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace HiringTrackingSite { 11 | 12 | 13 | public partial class PositionDetailsForm { 14 | 15 | /// 16 | /// IdLabel1 control. 17 | /// 18 | /// 19 | /// Auto-generated field. 20 | /// To modify move field declaration from designer file to code-behind file. 21 | /// 22 | protected global::System.Web.UI.WebControls.Label IdLabel1; 23 | 24 | /// 25 | /// NameTextBox control. 26 | /// 27 | /// 28 | /// Auto-generated field. 29 | /// To modify move field declaration from designer file to code-behind file. 30 | /// 31 | protected global::System.Web.UI.WebControls.TextBox NameTextBox; 32 | 33 | /// 34 | /// DescriptionTextBox control. 35 | /// 36 | /// 37 | /// Auto-generated field. 38 | /// To modify move field declaration from designer file to code-behind file. 39 | /// 40 | protected global::System.Web.UI.WebControls.TextBox DescriptionTextBox; 41 | 42 | /// 43 | /// StartDateTextBox control. 44 | /// 45 | /// 46 | /// Auto-generated field. 47 | /// To modify move field declaration from designer file to code-behind file. 48 | /// 49 | protected global::System.Web.UI.WebControls.TextBox StartDateTextBox; 50 | 51 | /// 52 | /// DeadlineTextBox control. 53 | /// 54 | /// 55 | /// Auto-generated field. 56 | /// To modify move field declaration from designer file to code-behind file. 57 | /// 58 | protected global::System.Web.UI.WebControls.TextBox DeadlineTextBox; 59 | 60 | /// 61 | /// HiredCheckbox control. 62 | /// 63 | /// 64 | /// Auto-generated field. 65 | /// To modify move field declaration from designer file to code-behind file. 66 | /// 67 | protected global::System.Web.UI.WebControls.CheckBox HiredCheckbox; 68 | 69 | /// 70 | /// ClientCombo control. 71 | /// 72 | /// 73 | /// Auto-generated field. 74 | /// To modify move field declaration from designer file to code-behind file. 75 | /// 76 | protected global::System.Web.UI.WebControls.DropDownList ClientCombo; 77 | 78 | /// 79 | /// ClientContactNameTextBox control. 80 | /// 81 | /// 82 | /// Auto-generated field. 83 | /// To modify move field declaration from designer file to code-behind file. 84 | /// 85 | protected global::System.Web.UI.WebControls.TextBox ClientContactNameTextBox; 86 | 87 | /// 88 | /// ClientContactPhoneTextBox control. 89 | /// 90 | /// 91 | /// Auto-generated field. 92 | /// To modify move field declaration from designer file to code-behind file. 93 | /// 94 | protected global::System.Web.UI.WebControls.TextBox ClientContactPhoneTextBox; 95 | 96 | /// 97 | /// ClientContactEmailTextBox control. 98 | /// 99 | /// 100 | /// Auto-generated field. 101 | /// To modify move field declaration from designer file to code-behind file. 102 | /// 103 | protected global::System.Web.UI.WebControls.TextBox ClientContactEmailTextBox; 104 | 105 | /// 106 | /// UpdateButton control. 107 | /// 108 | /// 109 | /// Auto-generated field. 110 | /// To modify move field declaration from designer file to code-behind file. 111 | /// 112 | protected global::System.Web.UI.WebControls.LinkButton UpdateButton; 113 | 114 | /// 115 | /// InsertButton control. 116 | /// 117 | /// 118 | /// Auto-generated field. 119 | /// To modify move field declaration from designer file to code-behind file. 120 | /// 121 | protected global::System.Web.UI.WebControls.LinkButton InsertButton; 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/PositionsList.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="PositionsList.aspx.cs" Inherits="HiringTrackingSite.PositionsList" %> 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 34 | 37 | 40 | 43 | 46 | 49 | 50 | 51 | 52 | 53 | 54 |
IdNameDescriptionStart DateDeadlinePosition ClosedClient Contact
29 | 30 | 32 | 33 | 35 | 36 | 38 | 39 | 41 | 42 | 44 | 45 | 47 | 48 | Details
55 | Add new position 56 | 57 |
58 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/PositionsList.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.UI; 6 | using System.Web.UI.WebControls; 7 | 8 | namespace HiringTrackingSite 9 | { 10 | public partial class PositionsList : System.Web.UI.Page 11 | { 12 | protected void Page_Load(object sender, EventArgs e) 13 | { 14 | PositionsDataSource.SelectCommand = "SELECT Positions.*, Clients.Name as ClientName FROM Positions left join Clients on positions.idclient = clients.id"; 15 | } 16 | 17 | protected void Details_Click(object sender, EventArgs e) 18 | { 19 | Session["PositionId"] = ((LinkButton)sender).CommandArgument; 20 | 21 | Response.Redirect("PositionDetails.aspx", true); 22 | } 23 | 24 | protected void btnFilter_Click(object sender, EventArgs e) 25 | { 26 | List filters = new List(); 27 | if (!string.IsNullOrWhiteSpace(IdFilter.Text)) 28 | { 29 | filters.Add("Id=" + IdFilter.Text); 30 | } 31 | 32 | string filter = string.Join(" AND ", filters.ToArray()); 33 | 34 | if (!string.IsNullOrWhiteSpace(filter)) 35 | { 36 | filter = " WHERE " + filter; 37 | } 38 | 39 | PositionsDataSource.SelectCommand += filter; 40 | DataList1.DataBind(); 41 | 42 | } 43 | 44 | protected void AddNewButton_Click(object sender, EventArgs e) 45 | { 46 | Session["PositionId"] = null; 47 | Response.Redirect("PositionDetails", true); 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/PositionsList.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace HiringTrackingSite { 11 | 12 | 13 | public partial class PositionsList { 14 | 15 | /// 16 | /// IdFilter control. 17 | /// 18 | /// 19 | /// Auto-generated field. 20 | /// To modify move field declaration from designer file to code-behind file. 21 | /// 22 | protected global::System.Web.UI.WebControls.TextBox IdFilter; 23 | 24 | /// 25 | /// NameFilter control. 26 | /// 27 | /// 28 | /// Auto-generated field. 29 | /// To modify move field declaration from designer file to code-behind file. 30 | /// 31 | protected global::System.Web.UI.WebControls.TextBox NameFilter; 32 | 33 | /// 34 | /// DescriptionFilter control. 35 | /// 36 | /// 37 | /// Auto-generated field. 38 | /// To modify move field declaration from designer file to code-behind file. 39 | /// 40 | protected global::System.Web.UI.WebControls.TextBox DescriptionFilter; 41 | 42 | /// 43 | /// StartDateFilter control. 44 | /// 45 | /// 46 | /// Auto-generated field. 47 | /// To modify move field declaration from designer file to code-behind file. 48 | /// 49 | protected global::System.Web.UI.WebControls.TextBox StartDateFilter; 50 | 51 | /// 52 | /// DeadlineFilter control. 53 | /// 54 | /// 55 | /// Auto-generated field. 56 | /// To modify move field declaration from designer file to code-behind file. 57 | /// 58 | protected global::System.Web.UI.WebControls.TextBox DeadlineFilter; 59 | 60 | /// 61 | /// ClientContactFilter control. 62 | /// 63 | /// 64 | /// Auto-generated field. 65 | /// To modify move field declaration from designer file to code-behind file. 66 | /// 67 | protected global::System.Web.UI.WebControls.TextBox ClientContactFilter; 68 | 69 | /// 70 | /// btnFilter control. 71 | /// 72 | /// 73 | /// Auto-generated field. 74 | /// To modify move field declaration from designer file to code-behind file. 75 | /// 76 | protected global::System.Web.UI.WebControls.Button btnFilter; 77 | 78 | /// 79 | /// DataList1 control. 80 | /// 81 | /// 82 | /// Auto-generated field. 83 | /// To modify move field declaration from designer file to code-behind file. 84 | /// 85 | protected global::System.Web.UI.WebControls.DataList DataList1; 86 | 87 | /// 88 | /// AddNewButton control. 89 | /// 90 | /// 91 | /// Auto-generated field. 92 | /// To modify move field declaration from designer file to code-behind file. 93 | /// 94 | protected global::System.Web.UI.WebControls.LinkButton AddNewButton; 95 | 96 | /// 97 | /// PositionsDataSource control. 98 | /// 99 | /// 100 | /// Auto-generated field. 101 | /// To modify move field declaration from designer file to code-behind file. 102 | /// 103 | protected global::System.Web.UI.WebControls.SqlDataSource PositionsDataSource; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("HiringTrackingSite")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("HiringTrackingSite")] 13 | [assembly: AssemblyCopyright("Copyright © 2021")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("e129cce9-b99a-42dc-817f-43fd4c05b2ef")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Scripts/WebForms/DetailsView.js: -------------------------------------------------------------------------------- 1 | //CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/DetailsView.js 2 | function DetailsView() { 3 | this.pageIndex = null; 4 | this.dataKeys = null; 5 | this.createPropertyString = DetailsView_createPropertyString; 6 | this.setStateField = DetailsView_setStateValue; 7 | this.getHiddenFieldContents = DetailsView_getHiddenFieldContents; 8 | this.stateField = null; 9 | this.panelElement = null; 10 | this.callback = null; 11 | } 12 | function DetailsView_createPropertyString() { 13 | return createPropertyStringFromValues_DetailsView(this.pageIndex, this.dataKeys); 14 | } 15 | function DetailsView_setStateValue() { 16 | this.stateField.value = this.createPropertyString(); 17 | } 18 | function DetailsView_OnCallback (result, context) { 19 | var value = new String(result); 20 | var valsArray = value.split("|"); 21 | var innerHtml = valsArray[2]; 22 | for (var i = 3; i < valsArray.length; i++) { 23 | innerHtml += "|" + valsArray[i]; 24 | } 25 | context.panelElement.innerHTML = innerHtml; 26 | context.stateField.value = createPropertyStringFromValues_DetailsView(valsArray[0], valsArray[1]); 27 | } 28 | function DetailsView_getHiddenFieldContents(arg) { 29 | return arg + "|" + this.stateField.value; 30 | } 31 | function createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) { 32 | var value = new Array(pageIndex, dataKeys); 33 | return value.join("|"); 34 | } 35 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Scripts/WebForms/Focus.js: -------------------------------------------------------------------------------- 1 | //CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebForms.js 2 | function WebForm_FindFirstFocusableChild(control) { 3 | if (!control || !(control.tagName)) { 4 | return null; 5 | } 6 | var tagName = control.tagName.toLowerCase(); 7 | if (tagName == "undefined") { 8 | return null; 9 | } 10 | var children = control.childNodes; 11 | if (children) { 12 | for (var i = 0; i < children.length; i++) { 13 | try { 14 | if (WebForm_CanFocus(children[i])) { 15 | return children[i]; 16 | } 17 | else { 18 | var focused = WebForm_FindFirstFocusableChild(children[i]); 19 | if (WebForm_CanFocus(focused)) { 20 | return focused; 21 | } 22 | } 23 | } catch (e) { 24 | } 25 | } 26 | } 27 | return null; 28 | } 29 | function WebForm_AutoFocus(focusId) { 30 | var targetControl; 31 | if (__nonMSDOMBrowser) { 32 | targetControl = document.getElementById(focusId); 33 | } 34 | else { 35 | targetControl = document.all[focusId]; 36 | } 37 | var focused = targetControl; 38 | if (targetControl && (!WebForm_CanFocus(targetControl)) ) { 39 | focused = WebForm_FindFirstFocusableChild(targetControl); 40 | } 41 | if (focused) { 42 | try { 43 | focused.focus(); 44 | if (__nonMSDOMBrowser) { 45 | focused.scrollIntoView(false); 46 | } 47 | if (window.__smartNav) { 48 | window.__smartNav.ae = focused.id; 49 | } 50 | } 51 | catch (e) { 52 | } 53 | } 54 | } 55 | function WebForm_CanFocus(element) { 56 | if (!element || !(element.tagName)) return false; 57 | var tagName = element.tagName.toLowerCase(); 58 | return (!(element.disabled) && 59 | (!(element.type) || element.type.toLowerCase() != "hidden") && 60 | WebForm_IsFocusableTag(tagName) && 61 | WebForm_IsInVisibleContainer(element) 62 | ); 63 | } 64 | function WebForm_IsFocusableTag(tagName) { 65 | return (tagName == "input" || 66 | tagName == "textarea" || 67 | tagName == "select" || 68 | tagName == "button" || 69 | tagName == "a"); 70 | } 71 | function WebForm_IsInVisibleContainer(ctrl) { 72 | var current = ctrl; 73 | while((typeof(current) != "undefined") && (current != null)) { 74 | if (current.disabled || 75 | ( typeof(current.style) != "undefined" && 76 | ( ( typeof(current.style.display) != "undefined" && 77 | current.style.display == "none") || 78 | ( typeof(current.style.visibility) != "undefined" && 79 | current.style.visibility == "hidden") ) ) ) { 80 | return false; 81 | } 82 | if (typeof(current.parentNode) != "undefined" && 83 | current.parentNode != null && 84 | current.parentNode != current && 85 | current.parentNode.tagName.toLowerCase() != "body") { 86 | current = current.parentNode; 87 | } 88 | else { 89 | return true; 90 | } 91 | } 92 | return true; 93 | } 94 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Scripts/WebForms/GridView.js: -------------------------------------------------------------------------------- 1 | //CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/GridView.js 2 | function GridView() { 3 | this.pageIndex = null; 4 | this.sortExpression = null; 5 | this.sortDirection = null; 6 | this.dataKeys = null; 7 | this.createPropertyString = GridView_createPropertyString; 8 | this.setStateField = GridView_setStateValue; 9 | this.getHiddenFieldContents = GridView_getHiddenFieldContents; 10 | this.stateField = null; 11 | this.panelElement = null; 12 | this.callback = null; 13 | } 14 | function GridView_createPropertyString() { 15 | return createPropertyStringFromValues_GridView(this.pageIndex, this.sortDirection, this.sortExpression, this.dataKeys); 16 | } 17 | function GridView_setStateValue() { 18 | this.stateField.value = this.createPropertyString(); 19 | } 20 | function GridView_OnCallback (result, context) { 21 | var value = new String(result); 22 | var valsArray = value.split("|"); 23 | var innerHtml = valsArray[4]; 24 | for (var i = 5; i < valsArray.length; i++) { 25 | innerHtml += "|" + valsArray[i]; 26 | } 27 | context.panelElement.innerHTML = innerHtml; 28 | context.stateField.value = createPropertyStringFromValues_GridView(valsArray[0], valsArray[1], valsArray[2], valsArray[3]); 29 | } 30 | function GridView_getHiddenFieldContents(arg) { 31 | return arg + "|" + this.stateField.value; 32 | } 33 | function createPropertyStringFromValues_GridView(pageIndex, sortDirection, sortExpression, dataKeys) { 34 | var value = new Array(pageIndex, sortDirection, sortExpression, dataKeys); 35 | return value.join("|"); 36 | } 37 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Scripts/WebForms/MSAjax/MicrosoftAjaxSerialization.js: -------------------------------------------------------------------------------- 1 | //CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxSerialization.js 2 | //---------------------------------------------------------- 3 | // Copyright (C) Microsoft Corporation. All rights reserved. 4 | //---------------------------------------------------------- 5 | // MicrosoftAjaxSerialization.js 6 | Type._registerScript("MicrosoftAjaxSerialization.js",["MicrosoftAjaxCore.js"]);Type.registerNamespace("Sys.Serialization");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass("Sys.Serialization.JavaScriptSerializer");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"',"g");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('["\\\\\\x00-\\x1F]',"i");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('["\\\\\\x00-\\x1F]',"g");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp("[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]","g");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('"(\\\\.|[^"\\\\])*"',"g");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName="__type";Sys.Serialization.JavaScriptSerializer._init=function(){var c=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000b","\\f","\\r","\\u000e","\\u000f","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001a","\\u001b","\\u001c","\\u001d","\\u001e","\\u001f"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]="\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs["\\"]=new RegExp("\\\\","g");Sys.Serialization.JavaScriptSerializer._escapeChars["\\"]="\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"']=new RegExp('"',"g");Sys.Serialization.JavaScriptSerializer._escapeChars['"']='\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,"g");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case "object":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append("[");for(c=0;c0)a.append(",");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append("]")}else{if(Date.isInstanceOfType(b)){a.append('"\\/Date(');a.append(b.getTime());a.append(')\\/"');break}var d=[],f=0;for(var e in b){if(e.startsWith("$"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append("{");var j=false;for(c=0;c0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o==="{}")o=""}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))c=d.get_object();else if(e.startsWith("text/xml"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith("application/json"))c=!c||typeof c.d==="undefined"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,"",""),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||""},get_exceptionType:function(){return this._exceptionType||""},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError"); -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Scripts/_references.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/Scripts/_references.js -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Scripts/respond.min.js: -------------------------------------------------------------------------------- 1 | /* NUGET: BEGIN LICENSE TEXT 2 | * 3 | * Microsoft grants you the right to use these script files for the sole 4 | * purpose of either: (i) interacting through your browser with the Microsoft 5 | * website or online service, subject to the applicable licensing or use 6 | * terms; or (ii) using the files as included with a Microsoft product subject 7 | * to that product's license terms. Microsoft reserves all other rights to the 8 | * files not expressly granted by Microsoft, whether by implication, estoppel 9 | * or otherwise. Insofar as a script file is dual licensed under GPL, 10 | * Microsoft neither took the code under GPL nor distributes it thereunder but 11 | * under the terms set out in this paragraph. All notices and licenses 12 | * below are for informational purposes only. 13 | * 14 | * NUGET: END LICENSE TEXT */ 15 | /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ 16 | /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ 17 | window.matchMedia=window.matchMedia||(function(e,f){var c,a=e.documentElement,b=a.firstElementChild||a.firstChild,d=e.createElement("body"),g=e.createElement("div");g.id="mq-test-1";g.style.cssText="position:absolute;top:-100em";d.style.background="none";d.appendChild(g);return function(h){g.innerHTML='­';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document); 18 | 19 | /*! Respond.js v1.2.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ 20 | (function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this); -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Site.Master: -------------------------------------------------------------------------------- 1 | <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="HiringTrackingSite.SiteMaster" %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <%: Page.Title %> - Hiring Tracker 10 | 11 | 12 | <%: Scripts.Render("~/bundles/modernizr") %> 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%> 23 | <%--Framework Scripts--%> 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | <%--Site Scripts--%> 38 | 39 | 40 | 41 | 60 |
61 | 62 | 63 |
64 |
65 |

© <%: DateTime.Now.Year %> - Hiring Tracker

66 |
67 |
68 |
69 | 70 | 71 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Site.Master.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Security.Claims; 4 | using System.Security.Principal; 5 | using System.Web; 6 | using System.Web.Security; 7 | using System.Web.UI; 8 | using System.Web.UI.WebControls; 9 | using Microsoft.AspNet.Identity; 10 | 11 | namespace HiringTrackingSite 12 | { 13 | public partial class SiteMaster : MasterPage 14 | { 15 | 16 | 17 | 18 | 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Site.Master.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace HiringTrackingSite { 11 | 12 | 13 | public partial class SiteMaster { 14 | 15 | /// 16 | /// MainContent control. 17 | /// 18 | /// 19 | /// Auto-generated field. 20 | /// To modify move field declaration from designer file to code-behind file. 21 | /// 22 | protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Startup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Owin; 2 | using Owin; 3 | 4 | [assembly: OwinStartupAttribute(typeof(HiringTrackingSite.Startup))] 5 | namespace HiringTrackingSite 6 | { 7 | public partial class Startup { 8 | public void Configuration(IAppBuilder app) { 9 | ConfigureAuth(app); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/Web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /Source/HiringTrackingSite/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/favicon.ico -------------------------------------------------------------------------------- /Source/HiringTrackingSite/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Source/HiringTrackingSite/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Source/HiringTrackingSite/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Source/HiringTrackingSite/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Source/HiringTrackingSite/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Target/About.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using Mobilize.WebMap.Common.Attributes; 7 | 8 | [Observable] 9 | public partial class About : Mobilize.Web.UI.Page 10 | { 11 | protected void Page_Load(object sender, EventArgs e) 12 | { 13 | 14 | } 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /Target/About.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | using Mobilize.WebMap.Common.Attributes; 2 | //------------------------------------------------------------------------------ 3 | // 4 | // This code was generated by a tool. 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace HiringTrackingSite 12 | { 13 | 14 | 15 | public partial class About 16 | { 17 | } 18 | } -------------------------------------------------------------------------------- /Target/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 15 | 16 | 18 | 20 | 21 | -------------------------------------------------------------------------------- /Target/App_Data/HiringDb.mdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/App_Data/HiringDb.mdf -------------------------------------------------------------------------------- /Target/App_Data/HiringDb_log.ldf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/App_Data/HiringDb_log.ldf -------------------------------------------------------------------------------- /Target/ClientDetails.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Configuration; 6 | using System.Data; 7 | using System.Data.SqlClient; 8 | using System.Linq; 9 | using Mobilize.WebMap.Common.Attributes; 10 | 11 | [Observable] 12 | public partial class ClientDetails : Mobilize.Web.UI.Page 13 | { 14 | protected override void Page_Load(object sender, EventArgs e) 15 | { 16 | if (!IsPostBack) 17 | { 18 | if (Session["ClientId"] != null) 19 | { 20 | LoadClientInformation(Convert.ToInt32(Session["ClientId"])); 21 | } 22 | else 23 | { 24 | UpdateButton.Visible = false; 25 | InsertButton.Visible = true; 26 | } 27 | } 28 | } 29 | 30 | private void LoadClientInformation(int v) 31 | { 32 | string connectionString = ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString().DataDirectory(); 33 | 34 | using (SqlConnection conn = new SqlConnection(connectionString)) 35 | { 36 | conn.Open(); 37 | SqlCommand cmd = new SqlCommand("SELECT Id, Name, Phone, Email, ContactName, Website FROM Clients Where Id = @Id", conn); 38 | cmd.Parameters.Add("@Id", SqlDbType.Int); 39 | cmd.Parameters["@Id"].Value = v; 40 | var reader = cmd.ExecuteReader(); 41 | if (reader.Read()) 42 | { 43 | IdLabel1.Text = reader.GetInt32(0).ToString(); 44 | NameTextBox.Text = reader.GetString(1); 45 | PhoneTextBox.Text = reader.GetString(2); 46 | EmailTextBox.Text = reader.GetString(3); 47 | ContactNameTextBox.Text = reader.GetString(4); 48 | WebsiteTextBox.Text = reader.GetString(5); 49 | UpdateButton.Visible = true; 50 | InsertButton.Visible = false; 51 | } 52 | else 53 | { 54 | UpdateButton.Visible = false; 55 | InsertButton.Visible = true; 56 | } 57 | } 58 | 59 | } 60 | 61 | protected void UpdateButton_Click(object sender, EventArgs e) 62 | { 63 | string connectionString = ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString().DataDirectory(); 64 | 65 | using (SqlConnection conn = new SqlConnection(connectionString)) 66 | { 67 | conn.Open(); 68 | SqlCommand cmd = new SqlCommand("Update Clients set Name=@Name, Phone=@Phone, Email=@Email, ContactName=@ContactName, Website=@Website where id = @id", conn); 69 | cmd.Parameters.Add("@Name", SqlDbType.VarChar); 70 | cmd.Parameters["@Name"].Value = NameTextBox.Text; 71 | cmd.Parameters.Add("@Phone", SqlDbType.VarChar); 72 | cmd.Parameters["@Phone"].Value = PhoneTextBox.Text; 73 | cmd.Parameters.Add("@Email", SqlDbType.VarChar); 74 | cmd.Parameters["@Email"].Value = EmailTextBox.Text; 75 | cmd.Parameters.Add("@ContactName", SqlDbType.VarChar); 76 | cmd.Parameters["@ContactName"].Value = ContactNameTextBox.Text; 77 | cmd.Parameters.Add("@Website", SqlDbType.VarChar); 78 | cmd.Parameters["@Website"].Value = WebsiteTextBox.Text; 79 | cmd.Parameters.Add("@id", SqlDbType.VarChar); 80 | cmd.Parameters["@id"].Value = IdLabel1.Text; 81 | var affectedRows = cmd.ExecuteNonQuery(); 82 | 83 | if (affectedRows == 1) 84 | { 85 | ClientScript.SendScript($"alert('Client updated succesfully');"); 86 | } 87 | } 88 | } 89 | 90 | protected void InsertButton_Click(object sender, EventArgs e) 91 | { 92 | string connectionString = ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString().DataDirectory(); 93 | 94 | using (SqlConnection conn = new SqlConnection(connectionString)) 95 | { 96 | conn.Open(); 97 | SqlCommand cmd = new SqlCommand("Insert into Clients (Name, Phone, Email, ContactName, Website) OUTPUT INSERTED.ID " + 98 | " values (@Name, @Phone, @Email, @ContactName, @Website)", conn); 99 | cmd.Parameters.Add("@Name", SqlDbType.VarChar); 100 | cmd.Parameters["@Name"].Value = NameTextBox.Text; 101 | cmd.Parameters.Add("@Phone", SqlDbType.VarChar); 102 | cmd.Parameters["@Phone"].Value = PhoneTextBox.Text; 103 | cmd.Parameters.Add("@Email", SqlDbType.VarChar); 104 | cmd.Parameters["@Email"].Value = EmailTextBox.Text; 105 | cmd.Parameters.Add("@ContactName", SqlDbType.VarChar); 106 | cmd.Parameters["@ContactName"].Value = ContactNameTextBox.Text; 107 | cmd.Parameters.Add("@Website", SqlDbType.VarChar); 108 | cmd.Parameters["@Website"].Value = WebsiteTextBox.Text; 109 | var id = cmd.ExecuteScalar(); 110 | IdLabel1.Text = id.ToString(); 111 | ClientScript.SendScript($"alert('Client added succesfully')"); 112 | } 113 | } 114 | 115 | } 116 | } -------------------------------------------------------------------------------- /Target/ClientDetails.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | using Mobilize.WebMap.Common.Attributes; 2 | using System; 3 | //------------------------------------------------------------------------------ 4 | // 5 | // This code was generated by a tool. 6 | // 7 | // Changes to this file may cause incorrect behavior and will be lost if 8 | // the code is regenerated. 9 | // 10 | //------------------------------------------------------------------------------ 11 | 12 | namespace HiringTrackingSite { 13 | 14 | 15 | public partial class ClientDetails { 16 | 17 | [Intercepted] 18 | 19 | /// 20 | /// IdLabel1 control. 21 | /// 22 | /// 23 | /// Auto-generated field. 24 | /// To modify move field declaration from designer file to code-behind file. 25 | /// 26 | protected 27 | Mobilize.Web.UI.WebControls.Label IdLabel1 { get; set; } 28 | 29 | [Intercepted] 30 | 31 | /// 32 | /// NameTextBox control. 33 | /// 34 | /// 35 | /// Auto-generated field. 36 | /// To modify move field declaration from designer file to code-behind file. 37 | /// 38 | protected 39 | Mobilize.Web.UI.WebControls.TextBox NameTextBox { get; set; } 40 | 41 | [Intercepted] 42 | 43 | /// 44 | /// PhoneTextBox control. 45 | /// 46 | /// 47 | /// Auto-generated field. 48 | /// To modify move field declaration from designer file to code-behind file. 49 | /// 50 | protected 51 | Mobilize.Web.UI.WebControls.TextBox PhoneTextBox { get; set; } 52 | 53 | [Intercepted] 54 | 55 | /// 56 | /// EmailTextBox control. 57 | /// 58 | /// 59 | /// Auto-generated field. 60 | /// To modify move field declaration from designer file to code-behind file. 61 | /// 62 | protected 63 | Mobilize.Web.UI.WebControls.TextBox EmailTextBox { get; set; } 64 | 65 | [Intercepted] 66 | 67 | /// 68 | /// ContactNameTextBox control. 69 | /// 70 | /// 71 | /// Auto-generated field. 72 | /// To modify move field declaration from designer file to code-behind file. 73 | /// 74 | protected 75 | Mobilize.Web.UI.WebControls.TextBox ContactNameTextBox { get; set; } 76 | 77 | [Intercepted] 78 | 79 | /// 80 | /// WebsiteTextBox control. 81 | /// 82 | /// 83 | /// Auto-generated field. 84 | /// To modify move field declaration from designer file to code-behind file. 85 | /// 86 | protected 87 | Mobilize.Web.UI.WebControls.TextBox WebsiteTextBox { get; set; } 88 | 89 | [Intercepted] 90 | 91 | /// 92 | /// UpdateButton control. 93 | /// 94 | /// 95 | /// Auto-generated field. 96 | /// To modify move field declaration from designer file to code-behind file. 97 | /// 98 | protected 99 | Mobilize.Web.UI.WebControls.LinkButton UpdateButton { get; set; } 100 | 101 | [Intercepted] 102 | 103 | /// 104 | /// InsertButton control. 105 | /// 106 | /// 107 | /// Auto-generated field. 108 | /// To modify move field declaration from designer file to code-behind file. 109 | /// 110 | protected 111 | Mobilize.Web.UI.WebControls.LinkButton InsertButton { get; set; } 112 | 113 | public ClientDetails() 114 | { 115 | this.InitializeComponent(); 116 | } 117 | 118 | private void InitializeComponent() 119 | { 120 | this.IdLabel1 = new Mobilize.Web.UI.WebControls.Label(); 121 | this.NameTextBox = new Mobilize.Web.UI.WebControls.TextBox(); 122 | this.PhoneTextBox = new Mobilize.Web.UI.WebControls.TextBox(); 123 | this.EmailTextBox = new Mobilize.Web.UI.WebControls.TextBox(); 124 | this.ContactNameTextBox = new Mobilize.Web.UI.WebControls.TextBox(); 125 | this.WebsiteTextBox = new Mobilize.Web.UI.WebControls.TextBox(); 126 | this.UpdateButton = new Mobilize.Web.UI.WebControls.LinkButton(); 127 | this.UpdateButton.Click += UpdateButton_Click; 128 | this.UpdateButton.Text = "Update"; 129 | this.InsertButton = new Mobilize.Web.UI.WebControls.LinkButton(); 130 | this.InsertButton.Click += InsertButton_Click; 131 | this.InsertButton.Text = "Insert"; 132 | } 133 | } 134 | } -------------------------------------------------------------------------------- /Target/ClientsList.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using Mobilize.WebMap.Common.Attributes; 6 | 7 | [Observable] 8 | public partial class ClientsListForm : Mobilize.Web.UI.Page 9 | { 10 | protected override void Page_Load(object sender, EventArgs e) 11 | { 12 | ClientsDataSource.SelectCommand = "Select * from Clients"; 13 | this.DataList1.DataBind(); 14 | } 15 | 16 | protected void Details_ClickHandler(object sender, EventArgs e) 17 | { 18 | Session["ClientId"] = CommandArgument; 19 | this.ExtApp().NavigateTo(new ClientDetails()); 20 | } 21 | 22 | protected void btnFilter_Click(object sender, EventArgs e) 23 | { 24 | List filters = new List(); 25 | if (!string.IsNullOrWhiteSpace(IdFilter.Text)) 26 | { 27 | filters.Add("Id=" + IdFilter.Text); 28 | } 29 | if (!string.IsNullOrWhiteSpace(NameFilter.Text)) 30 | { 31 | filters.Add($"Name like '%{NameFilter.Text}%'"); 32 | } 33 | if (!string.IsNullOrWhiteSpace(PhoneFilter.Text)) 34 | { 35 | filters.Add($"Phone like '%{PhoneFilter.Text}%'"); 36 | } 37 | if (!string.IsNullOrWhiteSpace(EmailFilter.Text)) 38 | { 39 | filters.Add($"Email like '%{EmailFilter.Text}%'"); 40 | } 41 | if (!string.IsNullOrWhiteSpace(ContactNameFilter.Text)) 42 | { 43 | filters.Add($"ContactName like '%{ContactNameFilter.Text}%'"); 44 | } 45 | if (!string.IsNullOrWhiteSpace(WebsiteFilter.Text)) 46 | { 47 | filters.Add($"Website like '%{WebsiteFilter.Text}%'"); 48 | } 49 | 50 | string filter = string.Join(" AND ", filters.ToArray()); 51 | 52 | if (!string.IsNullOrWhiteSpace(filter)) 53 | { 54 | filter = " WHERE " + filter; 55 | } 56 | 57 | ClientsDataSource.SelectCommand += filter; 58 | DataList1.DataBind(); 59 | 60 | } 61 | 62 | protected void AddNewButton_Click(object sender, EventArgs e) 63 | { 64 | Session["ClientId"] = null; 65 | this.ExtApp().NavigateTo(new ClientDetails()); 66 | } 67 | 68 | } 69 | } -------------------------------------------------------------------------------- /Target/Contact.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using Mobilize.WebMap.Common.Attributes; 7 | 8 | [Observable] 9 | public partial class Contact : Mobilize.Web.UI.Page 10 | { 11 | protected override void Page_Load(object sender, EventArgs e) 12 | { 13 | 14 | } 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /Target/Contact.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | using Mobilize.WebMap.Common.Attributes; 2 | //------------------------------------------------------------------------------ 3 | // 4 | // This code was generated by a tool. 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace HiringTrackingSite 12 | { 13 | 14 | 15 | public partial class Contact 16 | { 17 | } 18 | } -------------------------------------------------------------------------------- /Target/DataExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Data; 6 | using System.Data.SqlClient; 7 | using System.Linq; 8 | using Mobilize.WebMap.Common.Attributes; 9 | 10 | [Observable] 11 | public static class DataExtensions 12 | { 13 | 14 | 15 | public static void AddNewParameter(this SqlCommand cmd, string name, SqlDbType type, object value) 16 | { 17 | cmd.Parameters.Add(name, type); 18 | cmd.Parameters[name].Value = value; 19 | } 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /Target/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using Mobilize.WebMap.Common.Attributes; 7 | 8 | [Observable] 9 | public partial class Default : Mobilize.Web.UI.Page 10 | { 11 | protected override void Page_Load(object sender, EventArgs e) 12 | { 13 | 14 | } 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /Target/Default.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | using Mobilize.Web.UI.DataTransfer; 2 | using Mobilize.Web.UI.HtmlControls; 3 | using Mobilize.WebMap.Common.Attributes; 4 | using System; 5 | //------------------------------------------------------------------------------ 6 | // 7 | // This code was generated by a tool. 8 | // 9 | // Changes to this file may cause incorrect behavior and will be lost if 10 | // the code is regenerated. 11 | // 12 | //------------------------------------------------------------------------------ 13 | 14 | namespace HiringTrackingSite 15 | { 16 | 17 | 18 | public partial class Default 19 | { 20 | public Default() 21 | { 22 | this.InitializeComponent(); 23 | } 24 | 25 | [Intercepted] 26 | 27 | public Mobilize.Web.UI.HtmlControls.HtmlAnchor PosititionList { get; set; } 28 | 29 | [Intercepted] 30 | public Mobilize.Web.UI.HtmlControls.HtmlAnchor ClientList { get; set; } 31 | 32 | private void InitializeComponent() 33 | { 34 | this.PosititionList = new Mobilize.Web.UI.HtmlControls.HtmlAnchor(); 35 | this.PosititionList.Text = "View"; 36 | this.PosititionList.Click += PositionListClick; 37 | this.ClientList = new Mobilize.Web.UI.HtmlControls.HtmlAnchor(); 38 | this.ClientList.Text = "View"; 39 | this.ClientList.Click += ClientListClick; 40 | } 41 | 42 | private void PositionListClick(object sender, EventArgs args) 43 | { 44 | this.ExtApp().NavigateTo(new PositionsList()); 45 | } 46 | 47 | private void ClientListClick(object sender, EventArgs args) 48 | { 49 | this.ExtApp().NavigateTo(new ClientsListForm()); 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /Target/Extensions/AppExtensions.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace HiringTrackingSite 3 | { 4 | public static class AppExtensions 5 | { 6 | public static string DataDirectory(this string str) 7 | { 8 | var connStringRaw = str; 9 | var connectionString = connStringRaw.Replace("|DataDirectory|", string.Empty + System.AppDomain.CurrentDomain.GetData("DataDirectory")); 10 | return connectionString; 11 | } 12 | public static ExtApplication ExtApp(this Mobilize.WebMap.Common.DCP.IApplication app) => app as ExtApplication; 13 | public static ExtApplication ExtApp(this object obj) => Mobilize.Web.UI.Application.CurrentApplication as ExtApplication; 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /Target/Extensions/ExtApplication.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace HiringTrackingSite 3 | { 4 | using System; 5 | using System.Collections; 6 | using System.Collections.Generic; 7 | using System.Net.Mail; 8 | using System.Security.Principal; 9 | using System.Text; 10 | using Microsoft.AspNetCore.Http; 11 | using Microsoft.Extensions.Caching.Memory; 12 | using Microsoft.Extensions.DependencyInjection; 13 | using Mobilize.Web; 14 | using Mobilize.WebMap.Common.Core; 15 | using Mobilize.WebMap.Common.DCP; 16 | 17 | public class ExtApplication : Mobilize.Web.UI.Application 18 | { 19 | public ExtApplication(IServiceProvider provider) 20 | : base(provider) 21 | { 22 | this.MasterPages.Add(new SiteMaster()); 23 | } 24 | 25 | public IDictionary Cache { get; set; } 26 | 27 | public IServerUtils Server { get; set; } 28 | public IEmailService Mail { get; set; } 29 | public GenericPrincipal User { get; set; } 30 | 31 | } 32 | } 33 | 34 | -------------------------------------------------------------------------------- /Target/Extensions/IEmailService.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace HiringTrackingSite 3 | { 4 | public interface IEmailService 5 | { 6 | void Send(MailMessage mailMessage); 7 | } 8 | } 9 | 10 | -------------------------------------------------------------------------------- /Target/Extensions/IServerUtils.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace HiringTrackingSite 3 | { 4 | public interface IServerUtils 5 | { 6 | string MapPath(string v); 7 | string HtmlEncode(string contactTelephone); 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /Target/Extensions/MailMessage.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace HiringTrackingSite 3 | { 4 | using System; 5 | using System.Collections; 6 | using System.Collections.Generic; 7 | using System.Net.Mail; 8 | using System.Security.Principal; 9 | using System.Text; 10 | using Microsoft.AspNetCore.Http; 11 | using Microsoft.Extensions.Caching.Memory; 12 | using Microsoft.Extensions.DependencyInjection; 13 | using Mobilize.Web; 14 | using Mobilize.WebMap.Common.Core; 15 | using Mobilize.WebMap.Common.DCP; 16 | 17 | public class MailMessage 18 | { 19 | private string v; 20 | private string email; 21 | 22 | public MailMessage() { } 23 | 24 | public MailMessage(string v, string email) 25 | { 26 | this.v = v; 27 | this.email = email; 28 | } 29 | 30 | public MailAddress From { get; internal set; } 31 | public List To { get; internal set; } 32 | public string Subject { get; internal set; } 33 | public string Body { get; internal set; } 34 | public bool IsBodyHtml { get; internal set; } 35 | public Encoding BodyEncoding { get; internal set; } 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /Target/HiringTrackingSite.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netcoreapp3.1 5 | 2.5 6 | HiringTrackingSite 7 | false 8 | 7.3 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Target/HiringTrackingSite.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 16 3 | VisualStudioVersion = 16.0.30608.117 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HiringTrackingSite", "HiringTrackingSite.csproj", "{98CE5DE0-185E-4F39-AE48-85CC6F5CA6D7}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|Any CPU = Debug|Any CPU 10 | Release|Any CPU = Release|Any CPU 11 | EndGlobalSection 12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 13 | {98CE5DE0-185E-4F39-AE48-85CC6F5CA6D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 14 | {98CE5DE0-185E-4F39-AE48-85CC6F5CA6D7}.Debug|Any CPU.Build.0 = Debug|Any CPU 15 | {98CE5DE0-185E-4F39-AE48-85CC6F5CA6D7}.Release|Any CPU.ActiveCfg = Release|Any CPU 16 | {98CE5DE0-185E-4F39-AE48-85CC6F5CA6D7}.Release|Any CPU.Build.0 = Release|Any CPU 17 | EndGlobalSection 18 | GlobalSection(SolutionProperties) = preSolution 19 | HideSolutionNode = FALSE 20 | EndGlobalSection 21 | GlobalSection(ExtensibilityGlobals) = postSolution 22 | SolutionGuid = {AB57A7B5-81C0-4ED9-BD3C-DE57B5BC66CF} 23 | EndGlobalSection 24 | EndGlobal 25 | -------------------------------------------------------------------------------- /Target/PositionsList.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using Mobilize.WebMap.Common.Attributes; 7 | 8 | [Observable] 9 | public partial class PositionsList : Mobilize.Web.UI.Page 10 | { 11 | protected override void Page_Load(object sender, EventArgs e) 12 | { 13 | PositionsDataSource.SelectCommand = "SELECT Positions.*, Clients.Name as ClientName FROM Positions left join Clients on positions.idclient = clients.id"; 14 | this.DataList1.DataBind(); 15 | } 16 | 17 | protected void Details_ClickHandler(object sender, EventArgs e) 18 | { 19 | Session["PositionId"] = CommandArgument; 20 | this.ExtApp().NavigateTo(new PositionDetailsForm()); 21 | } 22 | 23 | protected void btnFilter_Click(object sender, EventArgs e) 24 | { 25 | List filters = new List(); 26 | if (!string.IsNullOrWhiteSpace(IdFilter.Text)) 27 | { 28 | filters.Add("Id=" + IdFilter.Text); 29 | } 30 | 31 | string filter = string.Join(" AND ", filters.ToArray()); 32 | 33 | if (!string.IsNullOrWhiteSpace(filter)) 34 | { 35 | filter = " WHERE " + filter; 36 | } 37 | 38 | PositionsDataSource.SelectCommand += filter; 39 | DataList1.DataBind(); 40 | 41 | } 42 | 43 | protected void AddNewButton_Click(object sender, EventArgs e) 44 | { 45 | Session["PositionId"] = null; 46 | this.ExtApp().NavigateTo(new PositionDetailsForm()); 47 | } 48 | 49 | } 50 | } -------------------------------------------------------------------------------- /Target/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("e129cce9-b99a-42dc-817f-43fd4c05b2ef")] -------------------------------------------------------------------------------- /Target/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:60163/", 7 | "sslPort": 44386 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "HiringTrackingSite": { 19 | "commandName": "Project", 20 | "launchUrl": "http://localhost:4200", 21 | "environmentVariables": { 22 | "ASPNETCORE_ENVIRONMENT": "Development" 23 | }, 24 | "applicationUrl": "https://+:5001;http://+:5000" 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Target/RegistrationClass.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2018 Mobilize, Inc. All Rights Reserved, 3 | // All classes are provided for customer use only, 4 | // all other use is prohibited without prior written consent from Mobilize.Net, 5 | // no warranty express or implied, 6 | // use at own risk. 7 | // 8 | 9 | namespace WebSite 10 | { 11 | using System.Collections.Generic; 12 | using System.Reflection; 13 | using Microsoft.Extensions.DependencyInjection; 14 | using Microsoft.Extensions.Logging; 15 | using Mobilize.Web; 16 | using Mobilize.Web.DataTransferMapper; 17 | using Mobilize.Web.UI.DataTransfer; 18 | using Mobilize.WebMap.Common.Core; 19 | using Mobilize.WebMap.Common.Core.ObservableWrapper; 20 | using Mobilize.WebMap.Common.Messaging; 21 | using Mobilize.WebMap.Core.ObservableWrapper; 22 | using Mobilize.WebMap.Messaging; 23 | 24 | /// 25 | /// Registration for Wrappers and Mappers 26 | /// 27 | public static class RegistrationClass 28 | { 29 | private static List assembliesForRegistrations = AssemblyRegistration.GetAssembliesForRegistration(Assembly.GetEntryAssembly()); 30 | 31 | /// 32 | /// Registers the model projectors. 33 | /// 34 | /// The services. 35 | public static void RegisterModelMappers(this IServiceCollection services) 36 | { 37 | services.AddSingleton((provider) => 38 | { 39 | var loggerFactory = provider.GetService(); 40 | var catalog = new MapperCatalog(loggerFactory); 41 | var logger = loggerFactory.CreateLogger("Information"); 42 | catalog.AddMapperFactory(new DefaultMapperFactory()); 43 | 44 | new Mobilize.Web.UI.BundleBasic.DTO.Registrations().RegisterMappers(catalog, logger); 45 | catalog.AddMapper(new Mobilize.Web.DataTransfer.ComboBoxItemMapper()); 46 | 47 | catalog.AddMapper(new Mobilize.Web.DataTransfer.ComboBoxMapper()); 48 | // register mappers from Assemblies for registration (it includes current Assembly) 49 | // AssemblyRegistration.RegisterMappers(assembliesForRegistrations, logger, catalog); 50 | 51 | return catalog; 52 | }); 53 | } 54 | 55 | /// 56 | /// Registers the wrappers. 57 | /// 58 | /// The services. 59 | public static void RegisterWrappers(this IServiceCollection services) 60 | { 61 | services.AddSingleton( 62 | (provider) => 63 | { 64 | var catalog = new ObservableWrapperCatalog(); 65 | 66 | // register wrappers from referenced Assemblies 67 | AssemblyRegistration.RegisterWrappers(assembliesForRegistrations, catalog); 68 | 69 | // assembliesForRegistrations is not longer required, so is cleared out. 70 | assembliesForRegistrations.Clear(); 71 | assembliesForRegistrations = null; 72 | return catalog; 73 | }); 74 | } 75 | } 76 | } 77 | 78 | -------------------------------------------------------------------------------- /Target/Site.Master.cs: -------------------------------------------------------------------------------- 1 | namespace HiringTrackingSite 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Security.Claims; 6 | using Mobilize.WebMap.Common.Attributes; 7 | 8 | [Observable] 9 | public partial class SiteMaster : Mobilize.Web.UI.MasterPage 10 | { 11 | 12 | [Intercepted] 13 | public EventHandler NavHome { get; set; } 14 | 15 | [Intercepted] 16 | public EventHandler NavClientList { get; set; } 17 | 18 | [Intercepted] 19 | public EventHandler NavPositionList { get; set; } 20 | } 21 | 22 | 23 | 24 | } -------------------------------------------------------------------------------- /Target/Site.Master.designer.cs: -------------------------------------------------------------------------------- 1 | using Mobilize.WebMap.Common.Attributes; 2 | //------------------------------------------------------------------------------ 3 | // 4 | // This code was generated by a tool. 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace HiringTrackingSite { 12 | 13 | 14 | public partial class SiteMaster { 15 | 16 | [Intercepted] 17 | 18 | /// 19 | /// MainContent control. 20 | /// 21 | /// 22 | /// Auto-generated field. 23 | /// To modify move field declaration from designer file to code-behind file. 24 | /// 25 | protected 26 | Mobilize.Web.UI.WebControls.ContentPlaceHolder MainContent { get; set; } 27 | 28 | public SiteMaster() 29 | { 30 | this.InitializeComponent(); 31 | } 32 | 33 | private void InitializeComponent() 34 | { 35 | this.NavHome += (sender, args) => this.ExtApp().NavigateTo(new Default()); 36 | this.NavClientList += (sender, args) => this.ExtApp().NavigateTo(new ClientsListForm()); 37 | this.NavPositionList += (sender, args) => this.ExtApp().NavigateTo(new PositionsList()); 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /Target/Startup.EntryPoint.cs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | namespace WebSite 5 | { 6 | using HiringTrackingSite; 7 | using Microsoft.AspNetCore; 8 | using Microsoft.AspNetCore.Hosting; 9 | 10 | public partial class Startup 11 | { 12 | /// 13 | /// Entry point of windows form application. 14 | /// 15 | /// The arguments. 16 | public static void Start(string[] args) 17 | { 18 | new Default().Show(); 19 | } 20 | 21 | /// 22 | /// Entry Point of the web Application. 23 | /// 24 | /// The arguments. 25 | public static void Main(string[] args) 26 | { 27 | System.Console.WriteLine("Starting" + System.Configuration.ConfigurationManager.ConnectionStrings["HiringConnectionString"].ToString()); 28 | BuildWebHost(args).Run(); 29 | } 30 | 31 | /// 32 | /// Returns a new WebHost 33 | /// 34 | /// run arguments 35 | /// a new WebHost 36 | public static IWebHost BuildWebHost(string[] args) 37 | { 38 | return WebHost.CreateDefaultBuilder(args) 39 | //// logging 40 | // .ConfigureLogging(builder => builder.AddFile(options => 41 | // { 42 | // options.FileName = "log-"; 43 | // options.LogDirectory = "LogFiles"; 44 | // options.FileSizeLimit = 20 * 1024 * 1024; 45 | // })) 46 | //// IIS Deployment 47 | // .UseUrls("http://localhost:81") 48 | // .UseIISIntegration() 49 | .UseStartup() 50 | .Build(); 51 | } 52 | } 53 | } 54 | 55 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.spec.ts 2 | mockService.ts 3 | test.ts 4 | *.html -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | 👋 Hi! This file was autogenerated by tslint-to-eslint-config. 3 | https://github.com/typescript-eslint/tslint-to-eslint-config 4 | 5 | It represents the closest reasonable ESLint configuration to this 6 | project's original TSLint configuration. 7 | 8 | We recommend eventually switching this configuration to extend from 9 | the recommended rulesets in typescript-eslint. 10 | https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md 11 | 12 | Happy linting! 💖 13 | */ 14 | module.exports = { 15 | env: { 16 | browser: true, 17 | node: true, 18 | }, 19 | parser: "@typescript-eslint/parser", 20 | parserOptions: { 21 | project: "tsconfig.json", 22 | sourceType: "module", 23 | }, 24 | plugins: [ 25 | "eslint-plugin-import", 26 | "@angular-eslint/eslint-plugin", 27 | "@typescript-eslint", 28 | "@typescript-eslint/tslint", 29 | ], 30 | rules: { 31 | "@angular-eslint/component-class-suffix": "error", 32 | "@angular-eslint/component-selector": [ 33 | "error", 34 | { 35 | type: "element", 36 | prefix: "wm", 37 | style: "kebab-case", 38 | }, 39 | ], 40 | "@angular-eslint/directive-class-suffix": "error", 41 | "@angular-eslint/directive-selector": [ 42 | "error", 43 | { 44 | type: "attribute", 45 | prefix: "wm", 46 | style: "kebab-case", 47 | }, 48 | ], 49 | "@angular-eslint/no-input-rename": "error", 50 | "@angular-eslint/no-output-rename": "error", 51 | "@angular-eslint/use-lifecycle-interface": "error", 52 | "@angular-eslint/use-pipe-transform-interface": "error", 53 | "@typescript-eslint/adjacent-overload-signatures": "error", 54 | "@typescript-eslint/consistent-type-assertions": "error", 55 | "@typescript-eslint/consistent-type-definitions": "error", 56 | "@typescript-eslint/dot-notation": "off", 57 | "@typescript-eslint/explicit-member-accessibility": [ 58 | "error", 59 | { 60 | accessibility: "no-public", 61 | }, 62 | ], 63 | "@typescript-eslint/no-explicit-any": "off", 64 | "@typescript-eslint/explicit-module-boundary-types": "off", 65 | "@typescript-eslint/member-ordering": "off", 66 | "@typescript-eslint/no-unused-vars": "off", 67 | "@typescript-eslint/no-empty-function": "off", 68 | "prettier/prettier": [ 69 | "error", 70 | { 71 | endOfLine: "auto", 72 | }, 73 | ], 74 | "@angular-eslint/no-inputs-metadata-property": "off", 75 | }, 76 | extends: [ 77 | "prettier/@typescript-eslint", 78 | "plugin:@angular-eslint/recommended", 79 | "plugin:@typescript-eslint/recommended", 80 | "plugin:prettier/recommended", 81 | ], 82 | }; 83 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /dist-server 6 | /tmp 7 | /out-tsc 8 | 9 | # dependencies 10 | /node_modules 11 | 12 | # IDEs and editors 13 | /.idea 14 | .project 15 | .classpath 16 | .c9/ 17 | *.launch 18 | .settings/ 19 | *.sublime-workspace 20 | 21 | # IDE - VSCode 22 | .vscode/* 23 | !.vscode/settings.json 24 | !.vscode/tasks.json 25 | !.vscode/launch.json 26 | !.vscode/extensions.json 27 | 28 | # misc 29 | /.sass-cache 30 | /connect.lock 31 | /coverage 32 | /libpeerconnection.log 33 | npm-debug.log 34 | testem.log 35 | /typings 36 | 37 | # e2e 38 | /e2e/*.js 39 | /e2e/*.map 40 | 41 | # System Files 42 | .DS_Store 43 | Thumbs.db 44 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/.npmrc: -------------------------------------------------------------------------------- 1 | @mobilize:registry=https://packages.mobilize.net/npm/mobilizenet-npm/ -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/README.md: -------------------------------------------------------------------------------- 1 | # Angular 2 | 3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.7.2. 4 | 5 | ## Development server 6 | 7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. 8 | 9 | ## Code scaffolding 10 | 11 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. 12 | 13 | ## Build 14 | 15 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. 16 | 17 | ## Running unit tests 18 | 19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). 20 | 21 | ## Running end-to-end tests 22 | 23 | Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). 24 | 25 | ## Further help 26 | 27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). 28 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "angular": { 7 | "root": "", 8 | "sourceRoot": "src", 9 | "projectType": "application", 10 | "architect": { 11 | "build": { 12 | "builder": "@angular-devkit/build-angular:browser", 13 | "options": { 14 | "outputPath": "../wwwroot", 15 | "index": "src/index.html", 16 | "main": "src/main.ts", 17 | "tsConfig": "src/tsconfig.app.json", 18 | "polyfills": "src/polyfills.ts", 19 | "assets": [ 20 | "src/assets", 21 | "src/favicon.ico" 22 | ], 23 | "styles": [ 24 | "node_modules/@progress/kendo-theme-default/dist/all.css", 25 | "node_modules/@mobilize/winforms-components/style-min/styles.css", 26 | "node_modules/@mobilize/winforms-components/style-min/jQueryStyles.css", 27 | "src/styles.css", 28 | "src/Content/bootstrap.css", 29 | "src/Content/Site.css" 30 | ], 31 | "scripts": [ 32 | "node_modules/jquery/dist/jquery.min.js", 33 | "node_modules/simple-web-notification/web-notification.js" 34 | ] 35 | }, 36 | "configurations": { 37 | "production": { 38 | "optimization": true, 39 | "outputHashing": "all", 40 | "sourceMap": false, 41 | "extractCss": true, 42 | "namedChunks": false, 43 | "aot": true, 44 | "extractLicenses": true, 45 | "vendorChunk": false, 46 | "buildOptimizer": true, 47 | "fileReplacements": [ 48 | { 49 | "replace": "src/environments/environment.ts", 50 | "with": "src/environments/environment.prod.ts" 51 | } 52 | ] 53 | } 54 | } 55 | }, 56 | "serve": { 57 | "builder": "@angular-devkit/build-angular:dev-server", 58 | "options": { 59 | "browserTarget": "angular:build" 60 | }, 61 | "configurations": { 62 | "production": { 63 | "browserTarget": "angular:build:production" 64 | } 65 | } 66 | }, 67 | "extract-i18n": { 68 | "builder": "@angular-devkit/build-angular:extract-i18n", 69 | "options": { 70 | "browserTarget": "angular:build" 71 | } 72 | }, 73 | "test": { 74 | "builder": "@angular-devkit/build-angular:karma", 75 | "options": { 76 | "main": "src/test.ts", 77 | "karmaConfig": "./karma.conf.js", 78 | "polyfills": "src/polyfills.ts", 79 | "tsConfig": "src/tsconfig.spec.json", 80 | "scripts": [ 81 | "node_modules/jquery/dist/jquery.min.js", 82 | "node_modules/mobilize-client-core/dist/js/webmap.js" 83 | ], 84 | "styles": [ 85 | "node_modules/@progress/kendo-theme-default/dist/all.css", 86 | "node_modules/@mobilize/winforms-components/style-min/styles.css", 87 | "node_modules/@mobilize/winforms-components/style-min/jQueryStyles.css", 88 | "node_modules/material-icons/iconfont/material-icons.css", 89 | "src/styles.css" 90 | ], 91 | "assets": [ 92 | "src/assets", 93 | "src/favicon.ico" 94 | ] 95 | } 96 | }, 97 | "lint": { 98 | "builder": "@angular-devkit/build-angular:tslint", 99 | "options": { 100 | "tsConfig": [ 101 | "src/tsconfig.app.json", 102 | "src/tsconfig.spec.json" 103 | ], 104 | "exclude": [ 105 | "**/node_modules/**" 106 | ] 107 | } 108 | } 109 | } 110 | }, 111 | "angular-e2e": { 112 | "root": "", 113 | "sourceRoot": "", 114 | "projectType": "application", 115 | "architect": { 116 | "e2e": { 117 | "builder": "@angular-devkit/build-angular:protractor", 118 | "options": { 119 | "protractorConfig": "./protractor.conf.js", 120 | "devServerTarget": "angular:serve" 121 | } 122 | }, 123 | "lint": { 124 | "builder": "@angular-devkit/build-angular:tslint", 125 | "options": { 126 | "tsConfig": [ 127 | "e2e/tsconfig.e2e.json" 128 | ], 129 | "exclude": [ 130 | "**/node_modules/**" 131 | ] 132 | } 133 | } 134 | } 135 | } 136 | }, 137 | "defaultProject": "angular", 138 | "schematics": { 139 | "@schematics/angular:component": { 140 | "prefix": "app", 141 | "styleext": "css" 142 | }, 143 | "@schematics/angular:directive": { 144 | "prefix": "app" 145 | } 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/dev.proxy.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "/": { 3 | "target": "http://webmap_webform_backend.dev:5000", 4 | "secure": false, 5 | "changeOrigin": true 6 | } 7 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('angular App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('Welcome to app!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "jasminewd2", 11 | "node" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: "", 7 | frameworks: ["jasmine", "@angular-devkit/build-angular"], 8 | plugins: [ 9 | require("karma-jasmine"), 10 | require("karma-chrome-launcher"), 11 | require("karma-jasmine-html-reporter"), 12 | require("karma-coverage-istanbul-reporter"), 13 | require("@angular-devkit/build-angular/plugins/karma"), 14 | ], 15 | client: { 16 | clearContext: false, // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageReporter: { 19 | dir: path.join("./", "coverage"), 20 | reporters: [ 21 | { type: "html", subdir: "./" }, 22 | { type: "lcovonly", subdir: "./" }, 23 | { type: "cobertura", subdir: "./" }, 24 | ], 25 | fixWebpackSourcePaths: true, 26 | }, 27 | angularCli: { 28 | environment: "dev", 29 | }, 30 | reporters: ["progress", "kjhtml"], 31 | port: 9876, 32 | colors: true, 33 | logLevel: config.LOG_INFO, 34 | autoWatch: true, 35 | browsers: ["Chrome"], 36 | singleRun: false, 37 | }); 38 | }; 39 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "0.0.0", 4 | "license": "UNLICENSED", 5 | "scripts": { 6 | "ng": "ng", 7 | "start:dev": "ng serve --host 0.0.0.0 --proxy-config=proxy.conf.json --poll 1000 --disableHostCheck true", 8 | "start:devcontainer": "ng serve --host 0.0.0.0 --proxy-config=dev.proxy.conf.json --poll 1000 --disableHostCheck true", 9 | "build": "ng build --prod", 10 | "test": "ng test", 11 | "lint": "ng lint", 12 | "e2e": "ng e2e" 13 | }, 14 | "private": true, 15 | "dependencies": { 16 | "@mobilize/winforms-components": "7.0.2", 17 | "@angular/core": "~11.0.9", 18 | "@angular/compiler": "~11.0.9", 19 | "@angular/common": "~11.0.9", 20 | "@angular/forms": "~11.0.9", 21 | "@angular/animations": "~11.0.9", 22 | "@angular/platform-browser": "~11.0.9", 23 | "@angular/platform-browser-dynamic": "~11.0.9", 24 | "@angular/router": "~11.0.9", 25 | "@angular/localize": "~11.0.9", 26 | "rxjs": "~6.5.4", 27 | "tslib": "^1.10.0", 28 | "core-js": "3.6.4", 29 | "@types/core-js": "~2.5.3", 30 | "zone.js": "~0.10.2" 31 | }, 32 | "devDependencies": { 33 | "@angular-devkit/architect": "~0.1100.1", 34 | "@angular-devkit/core": "^11.0.7", 35 | "@angular-devkit/build-angular": "~0.1100.7", 36 | "@angular-devkit/schematics": "~11.0.6", 37 | "@angular-eslint/builder": "^1.0.0", 38 | "@angular-eslint/eslint-plugin": "^1.0.0", 39 | "@angular-eslint/schematics": "^1.0.0", 40 | "@angular-eslint/template-parser": "^1.1.0", 41 | "@angular/cli": "~11.0.7", 42 | "@angular/compiler-cli": "~11.0.9", 43 | "@types/node": "^12.11.1", 44 | "@types/jasmine": "~3.6.0", 45 | "@types/jasminewd2": "~2.0.3", 46 | "@typescript-eslint/eslint-plugin": "^4.13.0", 47 | "@typescript-eslint/eslint-plugin-tslint": "^4.13.0", 48 | "@typescript-eslint/parser": "^4.13.0", 49 | "eslint": "^7.17.0", 50 | "eslint-config-prettier": "^7.1.0", 51 | "eslint-plugin-import": "^2.22.1", 52 | "eslint-plugin-jsdoc": "^31.0.7", 53 | "eslint-plugin-prefer-arrow": "^1.2.2", 54 | "eslint-plugin-prettier": "^3.3.1", 55 | "jasmine-core": "~3.6.0", 56 | "jasmine-spec-reporter": "~5.0.0", 57 | "karma": "~5.1.1", 58 | "karma-chrome-launcher": "~3.1.0", 59 | "karma-cli": "2.0.0", 60 | "karma-coverage": "~2.0.3", 61 | "karma-firefox-launcher": "~2.1.0", 62 | "karma-html-reporter": "0.2.7", 63 | "karma-jasmine": "~4.0.1", 64 | "karma-jasmine-html-reporter": "~1.5.4", 65 | "karma-trx-reporter": "~0.4.3", 66 | "prettier": "^2.2.1", 67 | "protractor": "~7.0.0", 68 | "ts-node": "~8.3.0", 69 | "tslint": "^6.1.3", 70 | "typescript": "4.0.5" 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './e2e/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | onPrepare() { 23 | require('ts-node').register({ 24 | project: 'e2e/tsconfig.e2e.json' 25 | }); 26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/proxy.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "/": { 3 | "target": "http://localhost:5000", 4 | "secure": false 5 | } 6 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/results1.xml: -------------------------------------------------------------------------------- 1 | c:\python37\lib\site-packages\_pytest\python.py:571: in _importtestmodule 2 | mod = import_path(self.fspath, mode=importmode) 3 | c:\python37\lib\site-packages\_pytest\pathlib.py:517: in import_path 4 | importlib.import_module(module_name) 5 | c:\python37\lib\importlib\__init__.py:127: in import_module 6 | return _bootstrap._gcd_import(name[level:], package, level) 7 | <frozen importlib._bootstrap>:1006: in _gcd_import 8 | ??? 9 | <frozen importlib._bootstrap>:983: in _find_and_load 10 | ??? 11 | <frozen importlib._bootstrap>:967: in _find_and_load_unlocked 12 | ??? 13 | <frozen importlib._bootstrap>:677: in _load_unlocked 14 | ??? 15 | c:\python37\lib\site-packages\_pytest\assertion\rewrite.py:162: in exec_module 16 | source_stat, co = _rewrite_test(fn, self.config) 17 | c:\python37\lib\site-packages\_pytest\assertion\rewrite.py:357: in _rewrite_test 18 | tree = ast.parse(source, filename=fn_) 19 | c:\python37\lib\ast.py:35: in parse 20 | return compile(source, filename, mode, PyCF_ONLY_AST) 21 | E File "f:\bug1\webforms-to-webmap\Target\hiringtrackingsite-angular\node_modules\blocking-proxy\examples\e2e_test.py", line 8 22 | E print "Loading angularjs.org" 23 | E ^ 24 | E SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Loading angularjs.org")? -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/Content/Site.css: -------------------------------------------------------------------------------- 1 | /* Move down content because we have a fixed navbar that is 50px tall */ 2 | body { 3 | padding-top: 50px; 4 | padding-bottom: 20px; 5 | } 6 | 7 | /* Wrapping element */ 8 | /* Set some basic padding to keep content from hitting the edges */ 9 | .body-content { 10 | padding-left: 15px; 11 | padding-right: 15px; 12 | } 13 | 14 | /* Override the default bootstrap behavior where horizontal description lists 15 | will truncate terms that are too long to fit in the left column 16 | */ 17 | .dl-horizontal dt { 18 | white-space: normal; 19 | } 20 | 21 | /* Set widths on the form inputs since otherwise they're 100% wide */ 22 | input[type="text"], 23 | input[type="password"], 24 | input[type="email"], 25 | input[type="tel"], 26 | input[type="select"] { 27 | max-width: 280px; 28 | } 29 | 30 | /* Responsive: Portrait tablets and up */ 31 | @media screen and (min-width: 768px) { 32 | .jumbotron { 33 | margin-top: 20px; 34 | } 35 | .body-content { 36 | padding: 0; 37 | } 38 | } 39 | 40 | 41 | .formLabel{ 42 | display:inline-block; 43 | width:200px; 44 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/app.component.css: -------------------------------------------------------------------------------- 1 | #mybutton { 2 | position: fixed; 3 | bottom: 10px; 4 | right: 10px; 5 | } 6 | 7 | #formNavigator { 8 | position: fixed; 9 | bottom: 10px; 10 | left: 10px; 11 | background-color: lightskyblue; 12 | width: 90% 13 | } 14 | 15 | #mobilize-logo { 16 | position: fixed; 17 | top: 2px; 18 | float: right; 19 | right: 3px; 20 | } 21 | 22 | /deep/ .mat-toolbar.mat-primary { 23 | background: #00adee !important; 24 | color: #fff; 25 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 35 |
36 |
37 |
38 | 39 | 40 |
41 |
42 |
43 |
44 |

© {{ year }} - Hiring Tracker

45 |
46 |
47 |
48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | import { AppComponent } from './app.component'; 3 | describe('AppComponent', () => { 4 | beforeEach(async(() => { 5 | TestBed.configureTestingModule({ 6 | declarations: [ 7 | AppComponent 8 | ], 9 | }).compileComponents(); 10 | })); 11 | it('should create the app', async(() => { 12 | const fixture = TestBed.createComponent(AppComponent); 13 | const app = fixture.debugElement.componentInstance; 14 | expect(app).toBeTruthy(); 15 | })); 16 | it(`should have as title 'app'`, async(() => { 17 | const fixture = TestBed.createComponent(AppComponent); 18 | const app = fixture.debugElement.componentInstance; 19 | expect(app.title).toEqual('app'); 20 | })); 21 | it('should render title in a h1 tag', async(() => { 22 | const fixture = TestBed.createComponent(AppComponent); 23 | fixture.detectChanges(); 24 | const compiled = fixture.debugElement.nativeElement; 25 | expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!'); 26 | })); 27 | }); 28 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { WebMapService } from '@mobilize/angularclient'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | templateUrl: './app.component.html', 7 | styleUrls: ['./app.component.css'] 8 | }) 9 | export class AppComponent { 10 | title = 'app'; 11 | year: number; 12 | master:any; 13 | constructor(private webmapService: WebMapService) { 14 | webmapService.init(); 15 | this.year = new Date().getFullYear(); 16 | } 17 | 18 | NavHome() { 19 | this.master?.NavHome(); 20 | } 21 | 22 | NavPositionList() { 23 | this.master?.NavPositionList(); 24 | } 25 | 26 | NavClientList() { 27 | this.master?.NavClientList(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule, CUSTOM_ELEMENTS_SCHEMA, NgZone, ChangeDetectorRef} from '@angular/core'; 3 | import { CommonModule} from '@angular/common'; 4 | import { AppComponent } from './app.component'; 5 | import { BaseComponentsModule } from '@mobilize/base-components'; 6 | import { WebMapKendoModule } from '@mobilize/winforms-components'; 7 | import { WebMapService, WebMapModule } from '@mobilize/angularclient'; 8 | import { HiringTrackingSiteModule } from './hiring-tracking-site.module'; 9 | 10 | @NgModule({ 11 | declarations: [ 12 | AppComponent, 13 | ], 14 | imports: [ 15 | CommonModule, 16 | BrowserModule, 17 | BaseComponentsModule, 18 | WebMapKendoModule, 19 | WebMapModule, 20 | HiringTrackingSiteModule, 21 | ], 22 | providers: [WebMapService ], 23 | bootstrap: [AppComponent], 24 | schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 25 | }) 26 | export class AppModule { 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/client-details/client-details.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/client-details/client-details.component.css -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/client-details/client-details.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | Id: 5 | 6 |
7 | Name: 8 | 9 |
10 | Phone: 11 | 12 |
13 | Email: 14 | 15 |
16 | Contact Name: 17 | 18 |
19 | Website: 20 | 21 |
22 | 23 | 24 | 25 |
26 |
27 |
-------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/client-details/client-details.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ChangeDetectorRef, ElementRef 2 | , Output, Renderer2, ViewEncapsulation} from "@angular/core"; 3 | import { EventData, dataTransfer} from "@mobilize/base-components"; 4 | import { UserControlComponent, WebComponentsService 5 | } from "@mobilize/winforms-components"; 6 | import { WebMapService, NotifyChange} from "@mobilize/angularclient"; 7 | @Component({ 8 | selector : "hiring-tracking-site-client-details", 9 | styleUrls : ["./client-details.component.css"], 10 | templateUrl : "./client-details.component.html", 11 | encapsulation : ViewEncapsulation.None 12 | }) 13 | @dataTransfer(["frmHiringTrackingSiteClientDetails"]) 14 | export class ClientDetailsComponent extends UserControlComponent { 15 | protected webServices : WebMapService; 16 | constructor (wmservice : WebMapService, 17 | changeDetector : ChangeDetectorRef,render2 : Renderer2 18 | ,elem : ElementRef,webComponents : WebComponentsService) { 19 | super(wmservice,changeDetector,render2,elem,webComponents); 20 | } 21 | 22 | 23 | @NotifyChange('ScriptExecuted') 24 | set ScriptExecuted(executed:boolean) 25 | { 26 | this.model.ClientScript.Executed = executed; 27 | } 28 | 29 | 30 | ngDoCheck(){ 31 | if (this.model && this.model.ClientScript && !this.model.ClientScript.Executed) 32 | { 33 | this.ScriptExecuted = true; 34 | eval(this.model.ClientScript.Script); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/clients-list-form/clients-list-form.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/clients-list-form/clients-list-form.component.css -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/clients-list-form/clients-list-form.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 32 | 35 | 38 | 41 | 44 | 47 | 48 | 49 | 50 |
IdClient NamePhoneEmailWebsiteContact Name
27 | {{item.Id}} 28 | 30 | {{item.Name}} 31 | 33 | {{item.Phone}} 34 | 36 | {{item.Email}} 37 | 39 | {{item.WebSite}} 40 | 42 | {{item.ContactName}} 43 | 45 | Details 46 |
51 | Add new client 52 |
53 |
54 |
-------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/clients-list-form/clients-list-form.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ChangeDetectorRef, ElementRef 2 | , Output, Renderer2, ViewEncapsulation} from "@angular/core"; 3 | import { EventData, dataTransfer, serverEvent} from "@mobilize/base-components"; 4 | import { UserControlComponent, WebComponentsService 5 | } from "@mobilize/winforms-components"; 6 | import { WebMapService, NotifyChange} from "@mobilize/angularclient"; 7 | @Component({ 8 | selector : "hiring-tracking-site-clients-list-form", 9 | styleUrls : ["./clients-list-form.component.css"], 10 | templateUrl : "./clients-list-form.component.html", 11 | encapsulation : ViewEncapsulation.None 12 | }) 13 | @dataTransfer(["frmHiringTrackingSiteClientsListForm"]) 14 | export class ClientsListFormComponent extends UserControlComponent { 15 | protected webServices : WebMapService; 16 | constructor (private wmservice : WebMapService, 17 | changeDetector : ChangeDetectorRef,render2 : Renderer2 18 | ,elem : ElementRef,webComponents : WebComponentsService) { 19 | super(wmservice,changeDetector,render2,elem,webComponents); 20 | } 21 | 22 | /* New property to hold URL */ 23 | url: string = 'api/datalist'; 24 | 25 | ngOnInit() { 26 | if (this.model && this.model.DataList1) 27 | { 28 | this.model.DataList1.items = []; 29 | this.wmservice.fetch(this.url, this.model.DataList1.id).subscribe( data => { 30 | this.model.DataList1.items = data; 31 | }); 32 | 33 | } 34 | } 35 | 36 | 37 | @NotifyChange('CommandArgument') 38 | set CommandArgument(value:string) { 39 | this.model.CommandArgument = value; 40 | } 41 | 42 | 43 | @serverEvent('Details_Click') 44 | Details_Click() { 45 | 46 | } 47 | 48 | SetCommandArgumentAndClick(argument) { 49 | this.CommandArgument = argument; 50 | this.Details_Click(); 51 | } 52 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/default/default.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/default/default.component.css -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/default/default.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 |
6 |

Hiring Tracking

7 |

Track positions and candidates.

8 |
9 | 10 |
11 | 20 |
21 |

Positions

22 |

23 | View open positions or query previous hires. 24 |

25 |

26 | 27 |

28 |
29 |
30 |

Clients

31 |

32 | Manage contacts requesting the positions. 33 |

34 |

35 | 36 |

37 |
38 |
39 | 40 |
41 |
42 |
-------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/default/default.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ChangeDetectorRef, ElementRef 2 | , Output, Renderer2, ViewEncapsulation} from "@angular/core"; 3 | import { EventData, dataTransfer} from "@mobilize/base-components"; 4 | import { UserControlComponent, WebComponentsService 5 | } from "@mobilize/winforms-components"; 6 | import { WebMapService} from "@mobilize/angularclient"; 7 | @Component({ 8 | selector : "hiring-tracking-site-default", 9 | styleUrls : ["./default.component.css"], 10 | templateUrl : "./default.component.html", 11 | encapsulation : ViewEncapsulation.None 12 | }) 13 | @dataTransfer(["frmHiringTrackingSiteDefault"]) 14 | export class DefaultComponent extends UserControlComponent { 15 | protected webServices : WebMapService; 16 | constructor (wmservice : WebMapService, 17 | changeDetector : ChangeDetectorRef,render2 : Renderer2 18 | ,elem : ElementRef,webComponents : WebComponentsService) { 19 | super(wmservice,changeDetector,render2,elem,webComponents); 20 | } 21 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/index.ts: -------------------------------------------------------------------------------- 1 | import { DefaultComponent } from './default/default.component'; 2 | import { ClientDetailsComponent } from './client-details/client-details.component'; 3 | import { ClientsListFormComponent } from './clients-list-form/clients-list-form.component'; 4 | import { PositionDetailsFormComponent } from './position-details-form/position-details-form.component'; 5 | import { PositionsListComponent } from './positions-list/positions-list.component'; 6 | import { SiteMasterComponent} from './site-master/site-master.component'; 7 | 8 | export { DefaultComponent}; 9 | export { ClientDetailsComponent }; 10 | export { ClientsListFormComponent }; 11 | export { PositionDetailsFormComponent }; 12 | export { PositionsListComponent }; 13 | export { SiteMasterComponent} 14 | 15 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/position-details-form/position-details-form.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/position-details-form/position-details-form.component.css -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/position-details-form/position-details-form.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | Id: 5 | 6 |
7 | Name: 8 | 9 |
10 | Description: 11 | 12 | 13 |
14 | Start Date: 15 | 16 | 17 |
18 | Deadline: 19 | 20 | 21 |
22 | Hired?: 23 | 24 | 25 |
26 | Client: 27 | 28 |
29 | Client Contact Name: 30 | 31 |
32 | Phone: 33 | 34 |
35 | Email: 36 | 37 |
38 | 39 | 40 | 41 |
42 |
43 |
-------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/position-details-form/position-details-form.component.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Component, ChangeDetectorRef, ElementRef 3 | , Output, Renderer2, ViewEncapsulation 4 | } from "@angular/core"; 5 | import { EventData, dataTransfer } from "@mobilize/base-components"; 6 | import { 7 | UserControlComponent, WebComponentsService 8 | } from "@mobilize/winforms-components"; 9 | import { WebMapService, NotifyChange } from "@mobilize/angularclient"; 10 | @Component({ 11 | selector: "hiring-tracking-site-position-details-form", 12 | styleUrls: ["./position-details-form.component.css"], 13 | templateUrl: "./position-details-form.component.html", 14 | encapsulation: ViewEncapsulation.None 15 | }) 16 | @dataTransfer(["frmHiringTrackingSitePositionDetailsForm"]) 17 | export class PositionDetailsFormComponent extends UserControlComponent { 18 | protected webServices: WebMapService; 19 | 20 | 21 | constructor(private wmservice: WebMapService, 22 | changeDetector: ChangeDetectorRef, render2: Renderer2 23 | , elem: ElementRef, webComponents: WebComponentsService) { 24 | super(wmservice, changeDetector, render2, elem, webComponents); 25 | } 26 | 27 | @NotifyChange('ScriptExecuted') 28 | set ScriptExecuted(executed:boolean) 29 | { 30 | this.model.ClientScript.Executed = executed; 31 | } 32 | 33 | 34 | ngDoCheck(){ 35 | if (this.model && this.model.ClientScript && !this.model.ClientScript.Executed) 36 | { 37 | this.ScriptExecuted = true; 38 | eval(this.model.ClientScript.Script); 39 | } 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/positions-list/positions-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/positions-list/positions-list.component.css -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/positions-list/positions-list.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 36 | 39 | 42 | 45 | 48 | 51 | 52 | 53 | 59 | 60 |
IdNameDescriptionStart DateDeadlinePosition ClosedClient Contact
28 | {{item.Id}} 29 | 31 | {{item.Name}} 32 | 34 | {{item.Description}} 35 | 37 | {{item.StartDate}} 38 | 40 | {{item.Deadline}} 41 | 43 | {{item.Hired}} 44 | 46 | {{item.ClientName}} {{item.ClientContactName}} 47 | 49 | Details 50 |
61 | Add new position 62 | 63 |
64 |
65 |
-------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/positions-list/positions-list.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ChangeDetectorRef, ElementRef 2 | , Output, Renderer2, ViewEncapsulation} from "@angular/core"; 3 | 4 | import { EventData, dataTransfer, serverEvent} from "@mobilize/base-components"; 5 | import { UserControlComponent, WebComponentsService 6 | } from "@mobilize/winforms-components"; 7 | import { WebMapService, NotifyChange} from "@mobilize/angularclient"; 8 | @Component({ 9 | selector : "hiring-tracking-site-positions-list", 10 | styleUrls : ["./positions-list.component.css"], 11 | templateUrl : "./positions-list.component.html", 12 | encapsulation : ViewEncapsulation.None 13 | }) 14 | @dataTransfer(["frmHiringTrackingSitePositionsList"]) 15 | export class PositionsListComponent extends UserControlComponent { 16 | protected webServices : WebMapService; 17 | 18 | /* New property to hold URL */ 19 | url: string = 'api/datalist'; 20 | 21 | constructor (private wmservice : WebMapService, 22 | changeDetector : ChangeDetectorRef,render2 : Renderer2 23 | ,elem : ElementRef,webComponents : WebComponentsService) { 24 | 25 | super(wmservice,changeDetector,render2,elem,webComponents); 26 | } 27 | ngOnInit() { 28 | if (this.model) 29 | { 30 | this.model.DataList1.items = []; 31 | this.wmservice.fetch(this.url, this.model.DataList1.id).subscribe( data => { 32 | this.model.DataList1.items = data; 33 | }); 34 | 35 | } 36 | } 37 | 38 | @NotifyChange('CommandArgument') 39 | set CommandArgument(value:string) { 40 | this.model.CommandArgument = value; 41 | } 42 | 43 | @serverEvent('Details_Click') 44 | Details_Click() { 45 | 46 | } 47 | 48 | SetCommandArgumentAndClick(argument) { 49 | this.CommandArgument = argument; 50 | this.Details_Click(); 51 | } 52 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/site-master/site-master.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/site-master/site-master.component.css -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/site-master/site-master.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
-------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/components/hiring-tracking-site/site-master/site-master.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ChangeDetectorRef, ElementRef 2 | , Output, Renderer2, ViewEncapsulation} from "@angular/core"; 3 | import { EventData, dataTransfer, serverEvent} from "@mobilize/base-components"; 4 | import { UserControlComponent, WebComponentsService 5 | } from "@mobilize/winforms-components"; 6 | import { WebMapService} from "@mobilize/angularclient"; 7 | import { AppComponent } from "../../../app.component"; 8 | @Component({ 9 | selector : "hiring-tracking-site-master", 10 | styleUrls : ["./site-master.component.css"], 11 | templateUrl : "./site-master.component.html", 12 | encapsulation : ViewEncapsulation.None 13 | }) 14 | @dataTransfer(["frmHiringTrackingSiteSiteMaster"]) 15 | export class SiteMasterComponent extends UserControlComponent { 16 | 17 | protected webServices : WebMapService; 18 | constructor (wmservice : WebMapService, 19 | changeDetector : ChangeDetectorRef,render2 : Renderer2 20 | ,elem : ElementRef,webComponents : WebComponentsService, app:AppComponent) 21 | { 22 | super(wmservice,changeDetector,render2,elem,webComponents); 23 | app.master = this; 24 | } 25 | 26 | @serverEvent('NavHome') 27 | NavHome() { 28 | } 29 | 30 | @serverEvent('NavClientList') 31 | NavClientList() { 32 | } 33 | 34 | @serverEvent('NavPositionList') 35 | NavPositionList() { 36 | } 37 | 38 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/app/hiring-tracking-site.module.ts: -------------------------------------------------------------------------------- 1 | 2 | import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 3 | import { CommonModule } from '@angular/common'; 4 | import { BaseComponentsModule } from '@mobilize/base-components'; 5 | import { WebMapKendoModule } from '@mobilize/winforms-components'; 6 | import { WebMapService, WebMapModule } from '@mobilize/angularclient'; 7 | 8 | import * as HiringTrackingSite from './components/hiring-tracking-site'; 9 | 10 | @NgModule({ 11 | imports: [ 12 | CommonModule, 13 | BaseComponentsModule, 14 | WebMapKendoModule, 15 | WebMapModule, 16 | ], 17 | exports: [ 18 | HiringTrackingSite.DefaultComponent, 19 | HiringTrackingSite.ClientDetailsComponent, 20 | HiringTrackingSite.ClientsListFormComponent, 21 | HiringTrackingSite.PositionDetailsFormComponent, 22 | HiringTrackingSite.PositionsListComponent, 23 | HiringTrackingSite.SiteMasterComponent 24 | ], 25 | declarations: [ 26 | HiringTrackingSite.DefaultComponent, 27 | HiringTrackingSite.ClientDetailsComponent, 28 | HiringTrackingSite.ClientsListFormComponent, 29 | HiringTrackingSite.PositionDetailsFormComponent, 30 | HiringTrackingSite.PositionsListComponent, 31 | HiringTrackingSite.SiteMasterComponent 32 | ], 33 | bootstrap: [ 34 | HiringTrackingSite.DefaultComponent, 35 | HiringTrackingSite.ClientDetailsComponent, 36 | HiringTrackingSite.ClientsListFormComponent, 37 | HiringTrackingSite.PositionDetailsFormComponent, 38 | HiringTrackingSite.PositionsListComponent, 39 | HiringTrackingSite.SiteMasterComponent 40 | ], 41 | providers: [WebMapService], 42 | schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 43 | }) 44 | export class HiringTrackingSiteModule { } 45 | 46 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/assets/images/error.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/assets/images/error.ico -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/assets/images/errorprovider.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/assets/images/errorprovider.ico -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/assets/images/info.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/assets/images/info.ico -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/assets/images/warning.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/assets/images/warning.ico -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false 8 | }; 9 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/favicon.ico -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/hiringtrackingsite-angular/src/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.log(err)); 13 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 22 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 23 | 24 | /** 25 | * Web Animations `@angular/platform-browser/animations` 26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 28 | */ 29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 30 | 31 | /** 32 | * By default, zone.js will patch all possible macroTask and DomEvents 33 | * user can disable parts of macroTask/DomEvents patch by setting following flags 34 | * because those flags need to be set before `zone.js` being loaded, and webpack 35 | * will put import in the top of bundle, so user need to create a separate file 36 | * in this directory (for example: zone-flags.ts), and put the following flags 37 | * into that file, and then add the following code before importing zone.js. 38 | * import './zone-flags'; 39 | * 40 | * The flags allowed in zone-flags.ts are listed here. 41 | * 42 | * The following flags will work for all browsers. 43 | * 44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 46 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 47 | * 48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 50 | * 51 | * (window as any).__Zone_enable_cross_context_check = true; 52 | * 53 | */ 54 | 55 | /** Evergreen browsers require these. **/ 56 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. 57 | import 'core-js/es/reflect'; 58 | 59 | /*************************************************************************************************** 60 | * Zone JS is required by default for Angular itself. 61 | */ 62 | import 'zone.js/dist/zone'; // Included with Angular CLI. 63 | 64 | 65 | /*************************************************************************************************** 66 | * APPLICATION IMPORTS 67 | */ 68 | 69 | import '@angular/localize/init'; -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/styles.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-color: lightgrey; 3 | } 4 | 5 | wm-textbox > div { 6 | display: inherit !important; 7 | } 8 | 9 | wm-combobox > div { 10 | display: inherit !important; 11 | } 12 | 13 | wm-label > div { 14 | display: inherit !important; 15 | } 16 | 17 | wm-label > div > div { 18 | display: inherit !important; 19 | } 20 | 21 | wm-checkbox > div { 22 | display: inherit !important; 23 | } -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: any; 11 | 12 | // First, initialize the Angular testing environment. 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting() 16 | ); 17 | // Then we find all the tests. 18 | const context = require.context('./', true, /\.spec\.ts$/); 19 | // And load the modules. 20 | context.keys().map(context); 21 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "types": [ 8 | "jasmine", 9 | "node" 10 | ] 11 | }, 12 | "files": [ 13 | "test.ts", 14 |     "polyfills.ts" 15 | ], 16 | "include": [ 17 | "**/*.spec.ts", 18 | "**/*.d.ts" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/startSpaDevServer.sh: -------------------------------------------------------------------------------- 1 | # replace the contents of this file with the appropriate SPA Dev Server script 2 | npm install -g @angular/cli 3 | npm install 4 | npm run start:dev${DEVCONTAINER} 5 | -------------------------------------------------------------------------------- /Target/hiringtrackingsite-angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "outDir": "./dist/out-tsc", 5 | "sourceMap": true, 6 | "declaration": false, 7 | "moduleResolution": "node", 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "target": "es2018", 11 | "typeRoots": [ 12 | "node_modules/@types" 13 | ], 14 | "lib": [ 15 | "es2017", 16 | "dom" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Target/nuget.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Target/wwwroot/assets/images/error.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/assets/images/error.ico -------------------------------------------------------------------------------- /Target/wwwroot/assets/images/errorprovider.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/assets/images/errorprovider.ico -------------------------------------------------------------------------------- /Target/wwwroot/assets/images/info.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/assets/images/info.ico -------------------------------------------------------------------------------- /Target/wwwroot/assets/images/warning.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/assets/images/warning.ico -------------------------------------------------------------------------------- /Target/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/favicon.ico -------------------------------------------------------------------------------- /Target/wwwroot/glyphicons-halflings-regular.49ebc991af9d42951bd2.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/glyphicons-halflings-regular.49ebc991af9d42951bd2.woff -------------------------------------------------------------------------------- /Target/wwwroot/glyphicons-halflings-regular.75ee6c90e0c39bbf67c2.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/glyphicons-halflings-regular.75ee6c90e0c39bbf67c2.eot -------------------------------------------------------------------------------- /Target/wwwroot/glyphicons-halflings-regular.8ceb2ffe3d3c8273407f.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobilizeNet/WebFormsMigrationDemo/2afe2af374a34ab3eee0688e80a83491fe1123b9/Target/wwwroot/glyphicons-halflings-regular.8ceb2ffe3d3c8273407f.ttf -------------------------------------------------------------------------------- /Target/wwwroot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Target/wwwroot/runtime-es2018.a1ac991fc00ebf39524f.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(r){for(var n,l,f=r[0],i=r[1],p=r[2],c=0,s=[];c