MarkdownEditor and ProfileView migrated
Lots of other site-wide changes: - Components now set the page title in the browser - Transitions between components have a bit of fade out/in
This commit is contained in:
parent
e8696e0e94
commit
b0ae93cc07
|
@ -382,6 +382,16 @@ module Continent =
|
||||||
r.Table(Table.Continent)
|
r.Table(Table.Continent)
|
||||||
.RunResultAsync<Continent list> conn)
|
.RunResultAsync<Continent list> conn)
|
||||||
|
|
||||||
|
/// Get a continent by its ID
|
||||||
|
let findById (contId : ContinentId) conn = task {
|
||||||
|
let! continent =
|
||||||
|
withReconn(conn).ExecuteAsync(fun () ->
|
||||||
|
r.Table(Table.Continent)
|
||||||
|
.Get(contId)
|
||||||
|
.RunResultAsync<Continent> conn)
|
||||||
|
return toOption continent
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Job listing data access functions
|
/// Job listing data access functions
|
||||||
[<RequireQualifiedAccess>]
|
[<RequireQualifiedAccess>]
|
||||||
|
|
|
@ -204,6 +204,29 @@ module Profile =
|
||||||
| None -> return! Error.notFound next ctx
|
| None -> return! Error.notFound next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GET: /api/profile/view/[id]
|
||||||
|
let view citizenId : HttpHandler =
|
||||||
|
authorize
|
||||||
|
>=> fun next ctx -> task {
|
||||||
|
let citId = CitizenId citizenId
|
||||||
|
let dbConn = conn ctx
|
||||||
|
match! Data.Profile.findById citId dbConn with
|
||||||
|
| Some profile ->
|
||||||
|
match! Data.Citizen.findById citId dbConn with
|
||||||
|
| Some citizen ->
|
||||||
|
match! Data.Continent.findById profile.continentId dbConn with
|
||||||
|
| Some continent ->
|
||||||
|
return!
|
||||||
|
json {
|
||||||
|
profile = profile
|
||||||
|
citizen = citizen
|
||||||
|
continent = continent
|
||||||
|
} next ctx
|
||||||
|
| None -> return! Error.notFound next ctx
|
||||||
|
| None -> return! Error.notFound next ctx
|
||||||
|
| None -> return! Error.notFound next ctx
|
||||||
|
}
|
||||||
|
|
||||||
// GET: /api/profile/count
|
// GET: /api/profile/count
|
||||||
let count : HttpHandler =
|
let count : HttpHandler =
|
||||||
authorize
|
authorize
|
||||||
|
@ -365,6 +388,7 @@ let allEndpoints = [
|
||||||
route "" Profile.current
|
route "" Profile.current
|
||||||
route "/count" Profile.count
|
route "/count" Profile.count
|
||||||
routef "/get/%O" Profile.get
|
routef "/get/%O" Profile.get
|
||||||
|
routef "/view/%O" Profile.view
|
||||||
route "/public-search" Profile.publicSearch
|
route "/public-search" Profile.publicSearch
|
||||||
route "/search" Profile.search
|
route "/search" Profile.search
|
||||||
]
|
]
|
||||||
|
|
13
src/JobsJobsJobs/App/package-lock.json
generated
13
src/JobsJobsJobs/App/package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "jobs-jobs-jobs",
|
"name": "jobs-jobs-jobs",
|
||||||
"version": "0.1.0",
|
"version": "1.0.1",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1353,6 +1353,12 @@
|
||||||
"integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==",
|
"integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/marked": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-L9VRSe0Id8xbPL99mUo/4aKgD7ZoRwFZqUQScNKHi2pFjF9ZYSMNShUHD6VlMT6J/prQq0T1mxuU25m3R7dFzg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/mime": {
|
"@types/mime": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||||
|
@ -8454,6 +8460,11 @@
|
||||||
"object-visit": "^1.0.0"
|
"object-visit": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"marked": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA=="
|
||||||
|
},
|
||||||
"md5.js": {
|
"md5.js": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdi/font": "5.9.55",
|
"@mdi/font": "5.9.55",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
|
"marked": "^2.1.3",
|
||||||
"roboto-fontface": "*",
|
"roboto-fontface": "*",
|
||||||
"vue": "^3.0.0",
|
"vue": "^3.0.0",
|
||||||
"vue-router": "^4.0.0-0",
|
"vue-router": "^4.0.0-0",
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
"vuex": "^4.0.0-0"
|
"vuex": "^4.0.0-0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/marked": "^2.0.4",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.18.0",
|
"@typescript-eslint/eslint-plugin": "^4.18.0",
|
||||||
"@typescript-eslint/parser": "^4.18.0",
|
"@typescript-eslint/parser": "^4.18.0",
|
||||||
"@vue/cli-plugin-babel": "~4.5.0",
|
"@vue/cli-plugin-babel": "~4.5.0",
|
||||||
|
|
|
@ -8,7 +8,11 @@
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
<v-main>
|
<v-main>
|
||||||
<v-container fluid>
|
<v-container fluid>
|
||||||
<router-view></router-view>
|
<router-view v-slot="{ Component }">
|
||||||
|
<transition name="fade" mode="out-in">
|
||||||
|
<component :is="Component" />
|
||||||
|
</transition>
|
||||||
|
</router-view>
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-main>
|
</v-main>
|
||||||
<v-footer app>
|
<v-footer app>
|
||||||
|
@ -29,11 +33,6 @@ export default defineComponent({
|
||||||
AppFooter,
|
AppFooter,
|
||||||
AppNav,
|
AppNav,
|
||||||
TitleBar
|
TitleBar
|
||||||
},
|
|
||||||
setup () {
|
|
||||||
return {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -66,4 +65,11 @@ ul
|
||||||
justify-content: center
|
justify-content: center
|
||||||
.v-footer
|
.v-footer
|
||||||
flex-direction: row-reverse
|
flex-direction: row-reverse
|
||||||
|
// Route transitions
|
||||||
|
.fade-enter-active,
|
||||||
|
.fade-leave-active
|
||||||
|
transition: opacity 0.125s ease
|
||||||
|
.fade-enter-from,
|
||||||
|
.fade-leave-to
|
||||||
|
opacity: 0
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { Citizen, Continent, Count, LogOnSuccess, Profile } from './types'
|
import { MarkedOptions } from 'marked'
|
||||||
|
import { Citizen, Continent, Count, LogOnSuccess, Profile, ProfileForView } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a URL that will access the API
|
* Create a URL that will access the API
|
||||||
|
@ -24,6 +25,31 @@ const reqInit = (method : string, user : LogOnSuccess) : RequestInit => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a result for an API call
|
||||||
|
*
|
||||||
|
* @param resp The response received from the API
|
||||||
|
* @param action The action being performed (used in error messages)
|
||||||
|
* @returns The expected result (if found), undefined (if not found), or an error string
|
||||||
|
*/
|
||||||
|
async function apiResult<T> (resp : Response, action : string) : Promise<T | undefined | string> {
|
||||||
|
if (resp.status === 200) return await resp.json() as T
|
||||||
|
if (resp.status === 404) return undefined
|
||||||
|
return `Error ${action} - ${await resp.text()}`
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run an API action that does not return a result
|
||||||
|
*
|
||||||
|
* @param resp The response received from the API call
|
||||||
|
* @param action The action being performed (used in error messages)
|
||||||
|
* @returns Undefined (if successful), or an error string
|
||||||
|
*/
|
||||||
|
const apiAction = async (resp : Response, action : string) : Promise<string | undefined> => {
|
||||||
|
if (resp.status === 200) return undefined
|
||||||
|
return `Error ${action} - ${await resp.text()}`
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
/** API functions for citizens */
|
/** API functions for citizens */
|
||||||
|
@ -48,11 +74,8 @@ export default {
|
||||||
* @param user The currently logged-on user
|
* @param user The currently logged-on user
|
||||||
* @returns The citizen, or an error
|
* @returns The citizen, or an error
|
||||||
*/
|
*/
|
||||||
retrieve: async (id : string, user : LogOnSuccess) : Promise<Citizen | string> => {
|
retrieve: async (id : string, user : LogOnSuccess) : Promise<Citizen | string | undefined> =>
|
||||||
const resp = await fetch(apiUrl(`citizen/get/${id}`), reqInit('GET', user))
|
apiResult<Citizen>(await fetch(apiUrl(`citizen/get/${id}`), reqInit('GET', user)), `retrieving citizen ${id}`),
|
||||||
if (resp.status === 200) return await resp.json() as Citizen
|
|
||||||
return `Error retrieving citizen ${id} - ${await resp.text()}`
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete the current citizen's entire Jobs, Jobs, Jobs record
|
* Delete the current citizen's entire Jobs, Jobs, Jobs record
|
||||||
|
@ -60,11 +83,8 @@ export default {
|
||||||
* @param user The currently logged-on user
|
* @param user The currently logged-on user
|
||||||
* @returns Undefined if successful, an error if not
|
* @returns Undefined if successful, an error if not
|
||||||
*/
|
*/
|
||||||
delete: async (user : LogOnSuccess) : Promise<string | undefined> => {
|
delete: async (user : LogOnSuccess) : Promise<string | undefined> =>
|
||||||
const resp = await fetch(apiUrl('citizen'), reqInit('DELETE', user))
|
apiAction(await fetch(apiUrl('citizen'), reqInit('DELETE', user)), 'deleting citizen')
|
||||||
if (resp.status === 200) return undefined
|
|
||||||
return `Error deleting citizen - ${await resp.text()}`
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/** API functions for continents */
|
/** API functions for continents */
|
||||||
|
@ -75,11 +95,8 @@ export default {
|
||||||
*
|
*
|
||||||
* @returns All continents, or an error
|
* @returns All continents, or an error
|
||||||
*/
|
*/
|
||||||
all: async () : Promise<Continent[] | string> => {
|
all: async () : Promise<Continent[] | string | undefined> =>
|
||||||
const resp = await fetch(apiUrl('continent/all'), { method: 'GET' })
|
apiResult<Continent[]>(await fetch(apiUrl('continent/all'), { method: 'GET' }), 'retrieving continents')
|
||||||
if (resp.status === 200) return await resp.json() as Continent[]
|
|
||||||
return `Error retrieving continents - ${await resp.text()}`
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/** API functions for profiles */
|
/** API functions for profiles */
|
||||||
|
@ -99,6 +116,16 @@ export default {
|
||||||
if (resp.status !== 204) return `Error retrieving profile - ${await resp.text()}`
|
if (resp.status !== 204) return `Error retrieving profile - ${await resp.text()}`
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a profile for viewing
|
||||||
|
*
|
||||||
|
* @param id The ID of the profile to retrieve for viewing
|
||||||
|
* @param user The currently logged-on user
|
||||||
|
* @returns The profile (if found), undefined (if not found), or an error string
|
||||||
|
*/
|
||||||
|
retreiveForView: async (id : string, user : LogOnSuccess) : Promise<ProfileForView | string | undefined> =>
|
||||||
|
apiResult<ProfileForView>(await fetch(apiUrl(`profile/view/${id}`), reqInit('GET', user)), 'retrieving profile'),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Count profiles in the system
|
* Count profiles in the system
|
||||||
*
|
*
|
||||||
|
@ -120,12 +147,15 @@ export default {
|
||||||
* @param user The currently logged-on user
|
* @param user The currently logged-on user
|
||||||
* @returns Undefined if successful, an error if not
|
* @returns Undefined if successful, an error if not
|
||||||
*/
|
*/
|
||||||
delete: async (user : LogOnSuccess) : Promise<string | undefined> => {
|
delete: async (user : LogOnSuccess) : Promise<string | undefined> =>
|
||||||
const resp = await fetch(apiUrl('profile'), reqInit('DELETE', user))
|
apiAction(await fetch(apiUrl('profile'), reqInit('DELETE', user)), 'deleting profile')
|
||||||
if (resp.status === 200) return undefined
|
|
||||||
return `Error deleting profile - ${await resp.text()}`
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** The standard Jobs, Jobs, Jobs options for `marked` (GitHub-Flavo(u)red Markdown (GFM) with smart quotes) */
|
||||||
|
export const markedOptions : MarkedOptions = {
|
||||||
|
gfm: true,
|
||||||
|
smartypants: true
|
||||||
|
}
|
||||||
|
|
||||||
export * from './types'
|
export * from './types'
|
||||||
|
|
|
@ -71,6 +71,16 @@ export interface Profile {
|
||||||
skills : Skill[]
|
skills : Skill[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** The data required to show a viewable profile */
|
||||||
|
export interface ProfileForView {
|
||||||
|
/** The profile itself */
|
||||||
|
profile : Profile
|
||||||
|
/** The citizen to whom the profile belongs */
|
||||||
|
citizen : Citizen
|
||||||
|
/** The continent for the profile */
|
||||||
|
continent : Continent
|
||||||
|
}
|
||||||
|
|
||||||
/** A count */
|
/** A count */
|
||||||
export interface Count {
|
export interface Count {
|
||||||
/** The count being returned */
|
/** The count being returned */
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<nav class="nav nav-pills">
|
<nav class="nav nav-pills">
|
||||||
<a href="#" class="nav-link @MarkdownClass" @click.prevent="showMarkdown">Markdown</a>
|
<v-btn rounded="pill" :color="sourceColor" @click="showMarkdown">Markdown</v-btn>
|
||||||
<a href="#" class="nav-link @PreviewClass" @click.prevent="showPreview">Preview</a>
|
<v-btn rounded="pill" :color="previewColor" @click="showPreview">Preview</v-btn>
|
||||||
</nav>
|
</nav>
|
||||||
<section v-if="preview" class="preview" v-html="previewHtml">
|
<section v-if="preview" class="preview" v-html="previewHtml">
|
||||||
</section>
|
</section>
|
||||||
|
@ -10,7 +10,10 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, ref } from 'vue'
|
import { computed, defineComponent, ref } from 'vue'
|
||||||
|
import marked from 'marked'
|
||||||
|
import { markedOptions } from '../api'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'MarkdownEditor',
|
name: 'MarkdownEditor',
|
||||||
props: {
|
props: {
|
||||||
|
@ -32,12 +35,13 @@ export default defineComponent({
|
||||||
const previewHtml = ref('')
|
const previewHtml = ref('')
|
||||||
|
|
||||||
/** Show the Markdown source */
|
/** Show the Markdown source */
|
||||||
const showMarkdown = () => { preview.value = false }
|
const showMarkdown = () => {
|
||||||
|
preview.value = false
|
||||||
|
}
|
||||||
|
|
||||||
/** Show the Markdown preview */
|
/** Show the Markdown preview */
|
||||||
const showPreview = () => {
|
const showPreview = () => {
|
||||||
// TODO: render markdown as HTML
|
previewHtml.value = marked(props.text, markedOptions)
|
||||||
previewHtml.value = props.text
|
|
||||||
preview.value = true
|
preview.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,8 +49,15 @@ export default defineComponent({
|
||||||
preview,
|
preview,
|
||||||
previewHtml,
|
previewHtml,
|
||||||
showMarkdown,
|
showMarkdown,
|
||||||
showPreview
|
showPreview,
|
||||||
|
sourceColor: computed(() => preview.value ? '' : 'primary'),
|
||||||
|
previewColor: computed(() => preview.value ? 'primary' : '')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
textarea
|
||||||
|
width: 100%
|
||||||
|
</style>
|
||||||
|
|
39
src/JobsJobsJobs/App/src/components/PageTitle.vue
Normal file
39
src/JobsJobsJobs/App/src/components/PageTitle.vue
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<template>
|
||||||
|
<p v-if="false"></p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, onMounted } from 'vue'
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'PageTitle',
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setup (props) {
|
||||||
|
/** The name of the application */
|
||||||
|
const appName = 'Jobs, Jobs, Jobs'
|
||||||
|
|
||||||
|
/** Set the page title based on the input title attribute */
|
||||||
|
const setTitle = () => {
|
||||||
|
if (props.title === '') {
|
||||||
|
document.title = appName
|
||||||
|
} else {
|
||||||
|
document.title = `${props.title} | ${appName}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(setTitle)
|
||||||
|
|
||||||
|
return {
|
||||||
|
setTitle
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
title: 'setTitle'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
|
@ -3,9 +3,13 @@ import vuetify from './plugins/vuetify'
|
||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
import router from './router'
|
import router from './router'
|
||||||
import store, { key } from './store'
|
import store, { key } from './store'
|
||||||
|
import PageTitle from './components/PageTitle.vue'
|
||||||
|
|
||||||
createApp(App)
|
const app = createApp(App)
|
||||||
.use(router)
|
.use(router)
|
||||||
.use(store, key)
|
.use(store, key)
|
||||||
.use(vuetify)
|
.use(vuetify)
|
||||||
.mount('#app')
|
|
||||||
|
app.component('PageTitle', PageTitle)
|
||||||
|
|
||||||
|
app.mount('#app')
|
||||||
|
|
|
@ -4,8 +4,11 @@ import api, { Continent, LogOnSuccess } from '../api'
|
||||||
|
|
||||||
/** The state tracked by the application */
|
/** The state tracked by the application */
|
||||||
export interface State {
|
export interface State {
|
||||||
|
/** The currently logged-on user */
|
||||||
user: LogOnSuccess | undefined
|
user: LogOnSuccess | undefined
|
||||||
|
/** The state of the log on process */
|
||||||
logOnState: string
|
logOnState: string
|
||||||
|
/** All continents (use `ensureContinents` action) */
|
||||||
continents: Continent[]
|
continents: Continent[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,13 +29,13 @@ export default createStore({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
setUser (state, user: LogOnSuccess) {
|
setUser (state, user : LogOnSuccess) {
|
||||||
state.user = user
|
state.user = user
|
||||||
},
|
},
|
||||||
clearUser (state) {
|
clearUser (state) {
|
||||||
state.user = undefined
|
state.user = undefined
|
||||||
},
|
},
|
||||||
setLogOnState (state, message) {
|
setLogOnState (state, message : string) {
|
||||||
state.logOnState = message
|
state.logOnState = message
|
||||||
},
|
},
|
||||||
setContinents (state, continents : Continent[]) {
|
setContinents (state, continents : Continent[]) {
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
<template>
|
<template>
|
||||||
<p>
|
<article>
|
||||||
Welcome to Jobs, Jobs, Jobs (AKA No Agenda Careers), where citizens of Gitmo Nation can assist one another in
|
<page-title title="Welcome!" />
|
||||||
finding employment. This will enable them to continue providing value-for-value to Adam and John, as they continue
|
<p>
|
||||||
their work deconstructing the misinformation that passes for news on a day-to-day basis.
|
Welcome to Jobs, Jobs, Jobs (AKA No Agenda Careers), where citizens of Gitmo Nation can assist one another in
|
||||||
</p>
|
finding employment. This will enable them to continue providing value-for-value to Adam and John, as they continue
|
||||||
<p>
|
their work deconstructing the misinformation that passes for news on a day-to-day basis.
|
||||||
Do you not understand the terms in the paragraph above? No worries; just head over to
|
</p>
|
||||||
<a href="https://noagendashow.net" target="_blank">The Best Podcast in the Universe</a>
|
<p>
|
||||||
<em><audio-clip clip="thats-true"> (that’s true!)</audio-clip></em> and find out what you’re missing.
|
Do you not understand the terms in the paragraph above? No worries; just head over to
|
||||||
</p>
|
<a href="https://noagendashow.net" target="_blank">The Best Podcast in the Universe</a>
|
||||||
|
<em><audio-clip clip="thats-true"> (that’s true!)</audio-clip></em> and find out what you’re missing.
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,79 +1,83 @@
|
||||||
<template>
|
<template>
|
||||||
<h3>How It Works</h3>
|
<article>
|
||||||
|
<page-title title="How It Works" />
|
||||||
|
<h3>How It Works</h3>
|
||||||
|
|
||||||
<h4>Completing Your Profile</h4>
|
<h4>Completing Your Profile</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
The “View Your Employment Profile” link (which you”ll see on this page, once your profile is
|
The “View Your Employment Profile” link (which you”ll see on this page, once your profile is
|
||||||
established) shows your profile the way all other validated users will be able to see it. While this site does not
|
established) shows your profile the way all other validated users will be able to see it. While this site does
|
||||||
perform communication with others over No Agenda Social, the name on employment profiles is a link to that
|
not perform communication with others over No Agenda Social, the name on employment profiles is a link to that
|
||||||
user’s profile; from there, others can communicate further with you using the tools Mastodon provides.
|
user’s profile; from there, others can communicate further with you using the tools Mastodon provides.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
The “Professional Biography” and “Experience” sections support Markdown, a plain-text way
|
The “Professional Biography” and “Experience” sections support Markdown, a plain-text
|
||||||
to specify formatting quite similar to that provided by word processors. The
|
way to specify formatting quite similar to that provided by word processors. The
|
||||||
<a href="https://daringfireball.net/projects/markdown/" target="_blank">original page</a> for the project is a
|
<a href="https://daringfireball.net/projects/markdown/" target="_blank">original page</a> for the project is a
|
||||||
good overview of its capabilities, and the pages at
|
good overview of its capabilities, and the pages at
|
||||||
<a href="https://www.markdownguide.org/" target="_blank">Markdown Guide</a> give in-depth lessons to make the most
|
<a href="https://www.markdownguide.org/" target="_blank">Markdown Guide</a> give in-depth lessons to make the
|
||||||
of this language. The version of Markdown employed here supports many popular extensions, include smart quotes
|
most of this language. The version of Markdown employed here supports many popular extensions, include smart
|
||||||
(turning "a quote" into “a quote”), tables, super/subscripts, and more.
|
quotes (turning "a quote" into “a quote”), tables, super/subscripts, and more.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Skills are optional, but they are the place to record skills you have. Along with the skill, there is a
|
Skills are optional, but they are the place to record skills you have. Along with the skill, there is a
|
||||||
“Notes” section, which can be used to indicate the time you’ve practiced a particular skill, the
|
“Notes” section, which can be used to indicate the time you’ve practiced a particular skill,
|
||||||
mastery you have of that skill, etc. It is free-form text, so it is all up to you how you utilize the field.
|
the mastery you have of that skill, etc. It is free-form text, so it is all up to you how you utilize the field.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
The “Experience” field is intended to capture a chronological or topical employment history; with this
|
The “Experience” field is intended to capture a chronological or topical employment history; with
|
||||||
“quick-n-dirty” implementation, this Markdown box can be used to capture that information however you
|
this “quick-n-dirty” implementation, this Markdown box can be used to capture that information
|
||||||
would like it presented to fellow citizens.
|
however you would like it presented to fellow citizens.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
If you check the “Allow my profile to be searched publicly” checkbox, <strong>and</strong> you are
|
If you check the “Allow my profile to be searched publicly” checkbox, <strong>and</strong> you are
|
||||||
seeking employment, your continent, region, and skills fields will be searchable and displayed to public users of
|
seeking employment, your continent, region, and skills fields will be searchable and displayed to public users
|
||||||
the site. They will not be tied to your No Agenda Social handle or real name; they are there to let people peek
|
of the site. They will not be tied to your No Agenda Social handle or real name; they are there to let people
|
||||||
behind the curtain a bit, and hopefully inspire them to join us.
|
peek behind the curtain a bit, and hopefully inspire them to join us.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>Searching Profiles</h4>
|
<h4>Searching Profiles</h4>
|
||||||
<p>
|
<p>
|
||||||
The “View Profiles” link at the side allows you to search for profiles by continent, the citizen’s
|
The “View Profiles” link at the side allows you to search for profiles by continent, the
|
||||||
desire for remote work, a skill, or any text in their professional biography and experience. If you find someone
|
citizen’s desire for remote work, a skill, or any text in their professional biography and experience. If
|
||||||
with whom you’d like to discuss potential opportunities, the name at the top of the profile links to their No
|
you find someone with whom you’d like to discuss potential opportunities, the name at the top of the profile
|
||||||
Agenda Social account, where you can use its features to get in touch.
|
links to their No Agenda Social account, where you can use its features to get in touch.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4>Finding Employment</h4>
|
<h4>Finding Employment</h4>
|
||||||
<p>
|
<p>
|
||||||
If your profile indicates that you are seeking employment, and you secure employment, that is something you will
|
If your profile indicates that you are seeking employment, and you secure employment, that is something you will
|
||||||
want to update (and – congratulations!). From both the Dashboard and the Edit Profile pages, you will see a
|
want to update (and – congratulations!). From both the Dashboard and the Edit Profile pages, you will see a
|
||||||
link that encourages you to tell us about it. Click either of those links, and you will be brought to a page that
|
link that encourages you to tell us about it. Click either of those links, and you will be brought to a page that
|
||||||
allows you to indicate whether your employment actually came from someone finding your profile on Jobs, Jobs, Jobs,
|
allows you to indicate whether your employment actually came from someone finding your profile on Jobs, Jobs,
|
||||||
and gives you a place to write about the experience. These stories are only viewable by validated users, so feel
|
Jobs, and gives you a place to write about the experience. These stories are only viewable by validated users, so
|
||||||
free to use as much (or as little) identifying information as you’d like. You can also submit this page with
|
feel free to use as much (or as little) identifying information as you’d like. You can also submit this page
|
||||||
all the fields blank; in that case, your “Seeking Employment” flag is cleared, and the
|
with all the fields blank; in that case, your “Seeking Employment” flag is cleared, and the
|
||||||
“story” is recorded.
|
“story” is recorded.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
As a validated user, you can also view others success stories. Clicking “Success Stories” in the sidebar
|
As a validated user, you can also view others success stories. Clicking “Success Stories” in the
|
||||||
will display a list of all the stories that have been recorded. If there is a story to be read, there will be a link
|
sidebar will display a list of all the stories that have been recorded. If there is a story to be read, there will
|
||||||
to read it; if you submitted the story, there will also be an “Edit” link.
|
be a link to read it; if you submitted the story, there will also be an “Edit” link.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4>Publicly Available Information</h4>
|
<h4>Publicly Available Information</h4>
|
||||||
<p>
|
<p>
|
||||||
The “Job Seekers” page for profile information will allow users to search for and display the continent,
|
The “Job Seekers” page for profile information will allow users to search for and display the
|
||||||
region, skills, and notes of users who are seeking employment <strong>and</strong> have opted in to their
|
continent, region, skills, and notes of users who are seeking employment <strong>and</strong> have opted in to
|
||||||
information being publicly searchable. If you are a public user, this information is always the latest we have;
|
their information being publicly searchable. If you are a public user, this information is always the latest we
|
||||||
check out the link at the top of the search results for how you can learn more about these fine human resources!
|
have; check out the link at the top of the search results for how you can learn more about these fine human
|
||||||
</p>
|
resources!
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Help / Suggestions</h4>
|
<h4>Help / Suggestions</h4>
|
||||||
<p>
|
<p>
|
||||||
This is open-source software
|
This is open-source software
|
||||||
<a href="https://github.com/bit-badger/jobs-jobs-jobs" _target="_blank">developed on Github</a>; feel free to
|
<a href="https://github.com/bit-badger/jobs-jobs-jobs" _target="_blank">developed on Github</a>; feel free to
|
||||||
<a href="https://github.com/bit-badger/jobs-jobs-jobs/issues" target="_blank">create an issue there</a>, or look up
|
<a href="https://github.com/bit-badger/jobs-jobs-jobs/issues" target="_blank">create an issue there</a>, or look
|
||||||
@danieljsummers on No Agenda Social.
|
up @danieljsummers on No Agenda Social.
|
||||||
</p>
|
</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,411 +1,414 @@
|
||||||
<template>
|
<template>
|
||||||
|
<article>
|
||||||
|
<page-title title="Privacy Policy" />
|
||||||
|
<h3>Privacy Policy</h3>
|
||||||
|
<p><em>(as of February 6<sup>th</sup>, 2021)</em></p>
|
||||||
|
|
||||||
<h3>Privacy Policy</h3>
|
<p>
|
||||||
<p><em>(as of February 6<sup>th</sup>, 2021)</em></p>
|
{{name}} (“we,” “our,” or “us”) is committed to protecting your privacy. This Privacy Policy explains how your
|
||||||
|
personal information is collected, used, and disclosed by {{name}}.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
This Privacy Policy applies to our website, and its associated subdomains (collectively, our “Service”) alongside
|
||||||
|
our application, {{name}}. By accessing or using our Service, you signify that you have read, understood, and
|
||||||
|
agree to our collection, storage, use, and disclosure of your personal information as described in this Privacy
|
||||||
|
Policy and our Terms of Service.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<h4>Definitions and key terms</h4>
|
||||||
{{name}} (“we,” “our,” or “us”) is committed to protecting your privacy. This Privacy Policy explains how your
|
<p>
|
||||||
personal information is collected, used, and disclosed by {{name}}.
|
To help explain things as clearly as possible in this Privacy Policy, every time any of these terms are
|
||||||
</p>
|
referenced, are strictly defined as:
|
||||||
<p>
|
</p>
|
||||||
This Privacy Policy applies to our website, and its associated subdomains (collectively, our “Service”) alongside
|
|
||||||
our application, {{name}}. By accessing or using our Service, you signify that you have read, understood, and agree
|
|
||||||
to our collection, storage, use, and disclosure of your personal information as described in this Privacy Policy and
|
|
||||||
our Terms of Service.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Definitions and key terms</h4>
|
<ul>
|
||||||
<p>
|
<li>
|
||||||
To help explain things as clearly as possible in this Privacy Policy, every time any of these terms are referenced,
|
Cookie: small amount of data generated by a website and saved by your web browser. It is used to identify your
|
||||||
are strictly defined as:
|
browser, provide analytics, remember information about you such as your language preference or login
|
||||||
</p>
|
information.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Company: when this policy mentions “Company,” “we,” “us,” or “our,” it refers to {{name}}, that is responsible
|
||||||
|
for your information under this Privacy Policy.
|
||||||
|
</li>
|
||||||
|
<li>Country: where {{name}} or the owners/founders of {{name}} are based, in this case is US.</li>
|
||||||
|
<li>
|
||||||
|
Customer: refers to the company, organization or person that signs up to use the {{name}} Service to manage the
|
||||||
|
relationships with your consumers or service users.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Device: any internet connected device such as a phone, tablet, computer or any other device that can be used to
|
||||||
|
visit {{name}} and use the services.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
IP address: Every device connected to the Internet is assigned a number known as an Internet protocol (IP)
|
||||||
|
address. These numbers are usually assigned in geographic blocks. An IP address can often be used to identify
|
||||||
|
the location from which a device is connecting to the Internet.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Personnel: refers to those individuals who are employed by {{name}} or are under contract to perform a service
|
||||||
|
on behalf of one of the parties.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Personal Data: any information that directly, indirectly, or in connection with other information — including a
|
||||||
|
personal identification number — allows for the identification or identifiability of a natural person.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Service: refers to the service provided by {{name}} as described in the relative terms (if available) and on
|
||||||
|
this platform.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Third-party service: refers to advertisers, contest sponsors, promotional and marketing partners, and others who
|
||||||
|
provide our content or whose products or services we think may interest you.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Website: {{name}}’s site, which can be accessed via this URL:
|
||||||
|
<router-link to="/">https://noagendacareers.com/</router-link>
|
||||||
|
</li>
|
||||||
|
<li>You: a person or entity that is registered with {{name}} to use the Services.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<ul>
|
<h4>What Information Do We Collect?</h4>
|
||||||
<li>
|
<p>
|
||||||
Cookie: small amount of data generated by a website and saved by your web browser. It is used to identify your
|
We collect information from you when you visit our website, register on our site, or fill out a form.
|
||||||
browser, provide analytics, remember information about you such as your language preference or login information.
|
</p>
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Company: when this policy mentions “Company,” “we,” “us,” or “our,” it refers to {{name}}, that is responsible for
|
|
||||||
your information under this Privacy Policy.
|
|
||||||
</li>
|
|
||||||
<li>Country: where {{name}} or the owners/founders of {{name}} are based, in this case is US.</li>
|
|
||||||
<li>
|
|
||||||
Customer: refers to the company, organization or person that signs up to use the {{name}} Service to manage the
|
|
||||||
relationships with your consumers or service users.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Device: any internet connected device such as a phone, tablet, computer or any other device that can be used to
|
|
||||||
visit {{name}} and use the services.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
IP address: Every device connected to the Internet is assigned a number known as an Internet protocol (IP)
|
|
||||||
address. These numbers are usually assigned in geographic blocks. An IP address can often be used to identify the
|
|
||||||
location from which a device is connecting to the Internet.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Personnel: refers to those individuals who are employed by {{name}} or are under contract to perform a service on
|
|
||||||
behalf of one of the parties.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Personal Data: any information that directly, indirectly, or in connection with other information — including a
|
|
||||||
personal identification number — allows for the identification or identifiability of a natural person.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Service: refers to the service provided by {{name}} as described in the relative terms (if available) and on this
|
|
||||||
platform.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Third-party service: refers to advertisers, contest sponsors, promotional and marketing partners, and others who
|
|
||||||
provide our content or whose products or services we think may interest you.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Website: {{name}}’s site, which can be accessed via this URL:
|
|
||||||
<router-link to="/">https://noagendacareers.com/</router-link>
|
|
||||||
</li>
|
|
||||||
<li>You: a person or entity that is registered with {{name}} to use the Services.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>What Information Do We Collect?</h4>
|
<ul>
|
||||||
<p>
|
<li>Name / Username</li>
|
||||||
We collect information from you when you visit our website, register on our site, or fill out a form.
|
<li>Coarse Geographic Location</li>
|
||||||
</p>
|
<li>Employment History</li>
|
||||||
|
<li>No Agenda Social Account Name / Profile</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<ul>
|
<h4>How Do We Use The Information We Collect?</h4>
|
||||||
<li>Name / Username</li>
|
<p>
|
||||||
<li>Coarse Geographic Location</li>
|
Any of the information we collect from you may be used in one of the following ways:
|
||||||
<li>Employment History</li>
|
</p>
|
||||||
<li>No Agenda Social Account Name / Profile</li>
|
<ul>
|
||||||
</ul>
|
<li>To personalize your experience (your information helps us to better respond to your individual needs)</li>
|
||||||
|
<li>
|
||||||
|
To improve our website (we continually strive to improve our website offerings based on the information and
|
||||||
|
feedback we receive from you)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
To improve customer service (your information helps us to more effectively respond to your customer service
|
||||||
|
requests and support needs)
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h4>How Do We Use The Information We Collect?</h4>
|
<h4>When does {{name}} use end user information from third parties?</h4>
|
||||||
<p>
|
<p>{{name}} will collect End User Data necessary to provide the {{name}} services to our customers.</p>
|
||||||
Any of the information we collect from you may be used in one of the following ways:
|
<p>
|
||||||
</p>
|
End users may voluntarily provide us with information they have made available on social media websites
|
||||||
<ul>
|
(specifically No Agenda Social). If you provide us with any such information, we may collect publicly available
|
||||||
<li>To personalize your experience (your information helps us to better respond to your individual needs)</li>
|
information from the social media websites you have indicated. You can control how much of your information social
|
||||||
<li>
|
media websites make public by visiting these websites and changing your privacy settings.
|
||||||
To improve our website (we continually strive to improve our website offerings based on the information and
|
</p>
|
||||||
feedback we receive from you)
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
To improve customer service (your information helps us to more effectively respond to your customer service
|
|
||||||
requests and support needs)
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>When does {{name}} use end user information from third parties?</h4>
|
<h4>When does {{name}} use customer information from third parties?</h4>
|
||||||
<p>{{name}} will collect End User Data necessary to provide the {{name}} services to our customers.</p>
|
<p>We do not utilize third party information apart from the end-user data described above.</p>
|
||||||
<p>
|
|
||||||
End users may voluntarily provide us with information they have made available on social media websites
|
|
||||||
(specifically No Agenda Social). If you provide us with any such information, we may collect publicly available
|
|
||||||
information from the social media websites you have indicated. You can control how much of your information social
|
|
||||||
media websites make public by visiting these websites and changing your privacy settings.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>When does {{name}} use customer information from third parties?</h4>
|
<h4>Do we share the information we collect with third parties?</h4>
|
||||||
<p>We do not utilize third party information apart from the end-user data described above.</p>
|
<p>
|
||||||
|
We may disclose personal and non-personal information about you to government or law enforcement officials or
|
||||||
|
private parties as we, in our sole discretion, believe necessary or appropriate in order to respond to claims,
|
||||||
|
legal process (including subpoenas), to protect our rights and interests or those of a third party, the safety of
|
||||||
|
the public or any person, to prevent or stop any illegal, unethical, or legally actionable activity, or to
|
||||||
|
otherwise comply with applicable court orders, laws, rules and regulations.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Do we share the information we collect with third parties?</h4>
|
<h4>Where and when is information collected from customers and end users?</h4>
|
||||||
<p>
|
<p>
|
||||||
We may disclose personal and non-personal information about you to government or law enforcement officials or
|
{{name}} will collect personal information that you submit to us. We may also receive personal information about
|
||||||
private parties as we, in our sole discretion, believe necessary or appropriate in order to respond to claims, legal
|
you from third parties as described above.
|
||||||
process (including subpoenas), to protect our rights and interests or those of a third party, the safety of the
|
</p>
|
||||||
public or any person, to prevent or stop any illegal, unethical, or legally actionable activity, or to otherwise
|
|
||||||
comply with applicable court orders, laws, rules and regulations.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Where and when is information collected from customers and end users?</h4>
|
<h4>How Do We Use Your E-mail Address?</h4>
|
||||||
<p>
|
<p>
|
||||||
{{name}} will collect personal information that you submit to us. We may also receive personal information about you
|
We do not collect nor use an e-mail address. If you have provided it in the free text areas of the site, other
|
||||||
from third parties as described above.
|
validated users may be able to view it, but {{name}} does not search for nor utilize e-mail addresses from those
|
||||||
</p>
|
areas.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>How Do We Use Your E-mail Address?</h4>
|
<h4>How Long Do We Keep Your Information?</h4>
|
||||||
<p>
|
<p>
|
||||||
We do not collect nor use an e-mail address. If you have provided it in the free text areas of the site, other
|
We keep your information only so long as we need it to provide {{name}} to you and fulfill the purposes described
|
||||||
validated users may be able to view it, but {{name}} does not search for nor utilize e-mail addresses from those
|
in this policy. When we no longer need to use your information and there is no need for us to keep it to comply
|
||||||
areas.
|
with our legal or regulatory obligations, we’ll either remove it from our systems or depersonalize it so that we
|
||||||
</p>
|
can’t identify you.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>How Long Do We Keep Your Information?</h4>
|
<h4>How Do We Protect Your Information?</h4>
|
||||||
<p>
|
<p>
|
||||||
We keep your information only so long as we need it to provide {{name}} to you and fulfill the purposes described in
|
We implement a variety of security measures to maintain the safety of your personal information when you enter,
|
||||||
this policy. When we no longer need to use your information and there is no need for us to keep it to comply with
|
submit, or access your personal information. We mandate the use of a secure server. We cannot, however, ensure or
|
||||||
our legal or regulatory obligations, we’ll either remove it from our systems or depersonalize it so that we
|
warrant the absolute security of any information you transmit to {{name}} or guarantee that your information on
|
||||||
can’t identify you.
|
the Service may not be accessed, disclosed, altered, or destroyed by a breach of any of our physical, technical,
|
||||||
</p>
|
or managerial safeguards.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>How Do We Protect Your Information?</h4>
|
<h4>Could my information be transferred to other countries?</h4>
|
||||||
<p>
|
<p>
|
||||||
We implement a variety of security measures to maintain the safety of your personal information when you enter,
|
{{name}} is hosted in the US. Information collected via our website may be viewed and hosted anywhere in the
|
||||||
submit, or access your personal information. We mandate the use of a secure server. We cannot, however, ensure or
|
world, including countries that may not have laws of general applicability regulating the use and transfer of such
|
||||||
warrant the absolute security of any information you transmit to {{name}} or guarantee that your information on the
|
data. To the fullest extent allowed by applicable law, by using any of the above, you voluntarily consent to the
|
||||||
Service may not be accessed, disclosed, altered, or destroyed by a breach of any of our physical, technical, or
|
trans-border transfer and hosting of such information.
|
||||||
managerial safeguards.
|
</p>
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Could my information be transferred to other countries?</h4>
|
<h4>Is the information collected through the {{name}} Service secure?</h4>
|
||||||
<p>
|
<p>
|
||||||
{{name}} is hosted in the US. Information collected via our website may be viewed and hosted anywhere in the world,
|
We take precautions to protect the security of your information. We have physical, electronic, and managerial
|
||||||
including countries that may not have laws of general applicability regulating the use and transfer of such data. To
|
procedures to help safeguard, prevent unauthorized access, maintain data security, and correctly use your
|
||||||
the fullest extent allowed by applicable law, by using any of the above, you voluntarily consent to the trans-border
|
information. However, neither people nor security systems are foolproof, including encryption systems. In
|
||||||
transfer and hosting of such information.
|
addition, people can commit intentional crimes, make mistakes, or fail to follow policies. Therefore, while we use
|
||||||
</p>
|
reasonable efforts to protect your personal information, we cannot guarantee its absolute security. If applicable
|
||||||
|
law imposes any non-disclaimable duty to protect your personal information, you agree that intentional misconduct
|
||||||
|
will be the standards used to measure our compliance with that duty.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Is the information collected through the {{name}} Service secure?</h4>
|
<h4>Can I update or correct my information?</h4>
|
||||||
<p>
|
<p>
|
||||||
We take precautions to protect the security of your information. We have physical, electronic, and managerial
|
The rights you have to request updates or corrections to the information {{name}} collects depend on your
|
||||||
procedures to help safeguard, prevent unauthorized access, maintain data security, and correctly use your
|
relationship with {{name}}.
|
||||||
information. However, neither people nor security systems are foolproof, including encryption systems. In addition,
|
</p>
|
||||||
people can commit intentional crimes, make mistakes, or fail to follow policies. Therefore, while we use reasonable
|
<p>
|
||||||
efforts to protect your personal information, we cannot guarantee its absolute security. If applicable law imposes
|
Customers have the right to request the restriction of certain uses and disclosures of personally identifiable
|
||||||
any non-disclaimable duty to protect your personal information, you agree that intentional misconduct will be the
|
information as follows. You can contact us in order to (1) update or correct your personally identifiable
|
||||||
standards used to measure our compliance with that duty.
|
information, or (3) delete the personally identifiable information maintained about you on our systems (subject to
|
||||||
</p>
|
the following paragraph), by cancelling your account. Such updates, corrections, changes and deletions will have
|
||||||
|
no effect on other information that we maintain in accordance with this Privacy Policy prior to such update,
|
||||||
|
correction, change, or deletion. You are responsible for maintaining the secrecy of your unique password and
|
||||||
|
account information at all times.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{name}} also provides ways for users to modify or remove the information we have collected from them from the
|
||||||
|
application; these actions will have the same effect as contacting us to modify or remove data.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You should be aware that it is not technologically possible to remove each and every record of the information you
|
||||||
|
have provided to us from our system. The need to back up our systems to protect information from inadvertent loss
|
||||||
|
means that a copy of your information may exist in a non-erasable form that will be difficult or impossible for us
|
||||||
|
to locate. Promptly after receiving your request, all personal information stored in databases we actively use,
|
||||||
|
and other readily searchable media will be updated, corrected, changed, or deleted, as appropriate, as soon as and
|
||||||
|
to the extent reasonably and technically practicable.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you are an end user and wish to update, delete, or receive any information we have about you, you may do so by
|
||||||
|
contacting the organization of which you are a customer.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Can I update or correct my information?</h4>
|
<h4>Governing Law</h4>
|
||||||
<p>
|
<p>
|
||||||
The rights you have to request updates or corrections to the information {{name}} collects depend on your
|
This Privacy Policy is governed by the laws of US without regard to its conflict of laws provision. You consent to
|
||||||
relationship with {{name}}.
|
the exclusive jurisdiction of the courts in connection with any action or dispute arising between the parties
|
||||||
</p>
|
under or in connection with this Privacy Policy except for those individuals who may have rights to make claims
|
||||||
<p>
|
under Privacy Shield, or the Swiss-US framework.
|
||||||
Customers have the right to request the restriction of certain uses and disclosures of personally identifiable
|
</p>
|
||||||
information as follows. You can contact us in order to (1) update or correct your personally identifiable
|
<p>
|
||||||
information, or (3) delete the personally identifiable information maintained about you on our systems (subject to
|
The laws of US, excluding its conflicts of law rules, shall govern this Agreement and your use of the website.
|
||||||
the following paragraph), by cancelling your account. Such updates, corrections, changes and deletions will have no
|
Your use of the website may also be subject to other local, state, national, or international laws.
|
||||||
effect on other information that we maintain in accordance with this Privacy Policy prior to such update,
|
</p>
|
||||||
correction, change, or deletion. You are responsible for maintaining the secrecy of your unique password and account
|
<p>
|
||||||
information at all times.
|
By using {{name}} or contacting us directly, you signify your acceptance of this Privacy Policy. If you do not
|
||||||
</p>
|
agree to this Privacy Policy, you should not engage with our website, or use our services. Continued use of the
|
||||||
<p>
|
website, direct engagement with us, or following the posting of changes to this Privacy Policy that do not
|
||||||
{{name}} also provides ways for users to modify or remove the information we have collected from them from the
|
significantly affect the use or disclosure of your personal information will mean that you accept those changes.
|
||||||
application; these actions will have the same effect as contacting us to modify or remove data.
|
</p>
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
You should be aware that it is not technologically possible to remove each and every record of the information you
|
|
||||||
have provided to us from our system. The need to back up our systems to protect information from inadvertent loss
|
|
||||||
means that a copy of your information may exist in a non-erasable form that will be difficult or impossible for us
|
|
||||||
to locate. Promptly after receiving your request, all personal information stored in databases we actively use, and
|
|
||||||
other readily searchable media will be updated, corrected, changed, or deleted, as appropriate, as soon as and to
|
|
||||||
the extent reasonably and technically practicable.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
If you are an end user and wish to update, delete, or receive any information we have about you, you may do so by
|
|
||||||
contacting the organization of which you are a customer.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Governing Law</h4>
|
<h4>Your Consent</h4>
|
||||||
<p>
|
<p>
|
||||||
This Privacy Policy is governed by the laws of US without regard to its conflict of laws provision. You consent to
|
We’ve updated our Privacy Policy to provide you with complete transparency into what is being set when you
|
||||||
the exclusive jurisdiction of the courts in connection with any action or dispute arising between the parties under
|
visit our site and how it’s being used. By using our website, registering an account, or making a purchase,
|
||||||
or in connection with this Privacy Policy except for those individuals who may have rights to make claims under
|
you hereby consent to our Privacy Policy and agree to its terms.
|
||||||
Privacy Shield, or the Swiss-US framework.
|
</p>
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The laws of US, excluding its conflicts of law rules, shall govern this Agreement and your use of the website. Your
|
|
||||||
use of the website may also be subject to other local, state, national, or international laws.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
By using {{name}} or contacting us directly, you signify your acceptance of this Privacy Policy. If you do not agree
|
|
||||||
to this Privacy Policy, you should not engage with our website, or use our services. Continued use of the website,
|
|
||||||
direct engagement with us, or following the posting of changes to this Privacy Policy that do not significantly
|
|
||||||
affect the use or disclosure of your personal information will mean that you accept those changes.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Your Consent</h4>
|
<h4>Links to Other Websites</h4>
|
||||||
<p>
|
<p>
|
||||||
We’ve updated our Privacy Policy to provide you with complete transparency into what is being set when you
|
This Privacy Policy applies only to the Services. The Services may contain links to other websites not operated or
|
||||||
visit our site and how it’s being used. By using our website, registering an account, or making a purchase,
|
controlled by {{name}}. We are not responsible for the content, accuracy or opinions expressed in such websites,
|
||||||
you hereby consent to our Privacy Policy and agree to its terms.
|
and such websites are not investigated, monitored or checked for accuracy or completeness by us. Please remember
|
||||||
</p>
|
that when you use a link to go from the Services to another website, our Privacy Policy is no longer in effect.
|
||||||
|
Your browsing and interaction on any other website, including those that have a link on our platform, is subject
|
||||||
|
to that website’s own rules and policies. Such third parties may use their own cookies or other methods to collect
|
||||||
|
information about you.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Links to Other Websites</h4>
|
<h4>Cookies</h4>
|
||||||
<p>
|
<p>{{name}} does not use Cookies.</p>
|
||||||
This Privacy Policy applies only to the Services. The Services may contain links to other websites not operated or
|
|
||||||
controlled by {{name}}. We are not responsible for the content, accuracy or opinions expressed in such websites, and
|
|
||||||
such websites are not investigated, monitored or checked for accuracy or completeness by us. Please remember that
|
|
||||||
when you use a link to go from the Services to another website, our Privacy Policy is no longer in effect. Your
|
|
||||||
browsing and interaction on any other website, including those that have a link on our platform, is subject to that
|
|
||||||
website’s own rules and policies. Such third parties may use their own cookies or other methods to collect
|
|
||||||
information about you.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Cookies</h4>
|
<h4>Kids' Privacy</h4>
|
||||||
<p>{{name}} does not use Cookies.</p>
|
<p>
|
||||||
|
We do not address anyone under the age of 13. We do not knowingly collect personally identifiable information from
|
||||||
|
anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with
|
||||||
|
Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the
|
||||||
|
age of 13 without verification of parental consent, We take steps to remove that information from Our servers.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Kids' Privacy</h4>
|
<h4>Changes To Our Privacy Policy</h4>
|
||||||
<p>
|
<p>
|
||||||
We do not address anyone under the age of 13. We do not knowingly collect personally identifiable information from
|
We may change our Service and policies, and we may need to make changes to this Privacy Policy so that they
|
||||||
anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with
|
accurately reflect our Service and policies. Unless otherwise required by law, we will notify you (for example,
|
||||||
Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age
|
through our Service) before we make changes to this Privacy Policy and give you an opportunity to review them
|
||||||
of 13 without verification of parental consent, We take steps to remove that information from Our servers.
|
before they go into effect. Then, if you continue to use the Service, you will be bound by the updated Privacy
|
||||||
</p>
|
Policy. If you do not want to agree to this or any updated Privacy Policy, you can delete your account.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Changes To Our Privacy Policy</h4>
|
<h4>Third-Party Services</h4>
|
||||||
<p>
|
<p>
|
||||||
We may change our Service and policies, and we may need to make changes to this Privacy Policy so that they
|
We may display, include or make available third-party content (including data, information, applications and other
|
||||||
accurately reflect our Service and policies. Unless otherwise required by law, we will notify you (for example,
|
products services) or provide links to third-party websites or services (“Third-Party Services”).
|
||||||
through our Service) before we make changes to this Privacy Policy and give you an opportunity to review them before
|
</p>
|
||||||
they go into effect. Then, if you continue to use the Service, you will be bound by the updated Privacy Policy. If
|
<p>
|
||||||
you do not want to agree to this or any updated Privacy Policy, you can delete your account.
|
You acknowledge and agree that {{name}} shall not be responsible for any Third-Party Services, including their
|
||||||
</p>
|
accuracy, completeness, timeliness, validity, copyright compliance, legality, decency, quality or any other aspect
|
||||||
|
thereof. {{name}} does not assume and shall not have any liability or responsibility to you or any other person or
|
||||||
|
entity for any Third-Party Services.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Third-Party Services and links thereto are provided solely as a convenience to you and you access and use them
|
||||||
|
entirely at your own risk and subject to such third parties' terms and conditions.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Third-Party Services</h4>
|
<h4>Tracking Technologies</h4>
|
||||||
<p>
|
<p>
|
||||||
We may display, include or make available third-party content (including data, information, applications and other
|
{{name}} does not use any tracking technologies. When an authorization code is received from No Agenda Social,
|
||||||
products services) or provide links to third-party websites or services (“Third-Party Services”).
|
that token is stored in the browser’s memory, and the Service uses tokens on each request for data. If the
|
||||||
</p>
|
page is refreshed or the browser window/tab is closed, this token disappears, and a new one must be generated
|
||||||
<p>
|
before the application can be used again.
|
||||||
You acknowledge and agree that {{name}} shall not be responsible for any Third-Party Services, including their
|
</p>
|
||||||
accuracy, completeness, timeliness, validity, copyright compliance, legality, decency, quality or any other aspect
|
|
||||||
thereof. {{name}} does not assume and shall not have any liability or responsibility to you or any other person or
|
|
||||||
entity for any Third-Party Services.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Third-Party Services and links thereto are provided solely as a convenience to you and you access and use them
|
|
||||||
entirely at your own risk and subject to such third parties' terms and conditions.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Tracking Technologies</h4>
|
<h4>Information about General Data Protection Regulation (GDPR)</h4>
|
||||||
<p>
|
<p>
|
||||||
{{name}} does not use any tracking technologies. When an authorization code is received from No Agenda Social, that
|
We may be collecting and using information from you if you are from the European Economic Area (EEA), and in this
|
||||||
token is stored in the browser’s memory, and the Service uses tokens on each request for data. If the page is
|
section of our Privacy Policy we are going to explain exactly how and why is this data collected, and how we
|
||||||
refreshed or the browser window/tab is closed, this token disappears, and a new one must be generated before the
|
maintain this data under protection from being replicated or used in the wrong way.
|
||||||
application can be used again.
|
</p>
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Information about General Data Protection Regulation (GDPR)</h4>
|
<h4>What is GDPR?</h4>
|
||||||
<p>
|
<p>
|
||||||
We may be collecting and using information from you if you are from the European Economic Area (EEA), and in this
|
GDPR is an EU-wide privacy and data protection law that regulates how EU residents’ data is protected by
|
||||||
section of our Privacy Policy we are going to explain exactly how and why is this data collected, and how we maintain
|
companies and enhances the control the EU residents have, over their personal data.
|
||||||
this data under protection from being replicated or used in the wrong way.
|
</p>
|
||||||
</p>
|
<p>
|
||||||
|
The GDPR is relevant to any globally operating company and not just the EU-based businesses and EU residents. Our
|
||||||
|
customers’ data is important irrespective of where they are located, which is why we have implemented GDPR
|
||||||
|
controls as our baseline standard for all our operations worldwide.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>What is GDPR?</h4>
|
<h4>What is personal data?</h4>
|
||||||
<p>
|
<p>
|
||||||
GDPR is an EU-wide privacy and data protection law that regulates how EU residents’ data is protected by
|
Any data that relates to an identifiable or identified individual. GDPR covers a broad spectrum of information
|
||||||
companies and enhances the control the EU residents have, over their personal data.
|
that could be used on its own, or in combination with other pieces of information, to identify a person. Personal
|
||||||
</p>
|
data extends beyond a person’s name or email address. Some examples include financial information, political
|
||||||
<p>
|
opinions, genetic data, biometric data, IP addresses, physical address, sexual orientation, and ethnicity.
|
||||||
The GDPR is relevant to any globally operating company and not just the EU-based businesses and EU residents. Our
|
</p>
|
||||||
customers’ data is important irrespective of where they are located, which is why we have implemented GDPR controls
|
<p>The Data Protection Principles include requirements such as:</p>
|
||||||
as our baseline standard for all our operations worldwide.
|
<ul>
|
||||||
</p>
|
<li>
|
||||||
|
Personal data collected must be processed in a fair, legal, and transparent way and should only be used in a way
|
||||||
|
that a person would reasonably expect.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Personal data should only be collected to fulfil a specific purpose and it should only be used for that purpose.
|
||||||
|
Organizations must specify why they need the personal data when they collect it.
|
||||||
|
</li>
|
||||||
|
<li>Personal data should be held no longer than necessary to fulfil its purpose.</li>
|
||||||
|
<li>
|
||||||
|
People covered by the GDPR have the right to access their own personal data. They can also request a copy of
|
||||||
|
their data, and that their data be updated, deleted, restricted, or moved to another organization.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h4>What is personal data?</h4>
|
<h4>Why is GDPR important?</h4>
|
||||||
<p>
|
<p>
|
||||||
Any data that relates to an identifiable or identified individual. GDPR covers a broad spectrum of information that
|
GDPR adds some new requirements regarding how companies should protect individuals’ personal data that they
|
||||||
could be used on its own, or in combination with other pieces of information, to identify a person. Personal data
|
collect and process. It also raises the stakes for compliance by increasing enforcement and imposing greater fines
|
||||||
extends beyond a person’s name or email address. Some examples include financial information, political opinions,
|
for breach. Beyond these facts, it’s simply the right thing to do. At {{name}} we strongly believe that your
|
||||||
genetic data, biometric data, IP addresses, physical address, sexual orientation, and ethnicity.
|
data privacy is very important and we already have solid security and privacy practices in place that go beyond
|
||||||
</p>
|
the requirements of this regulation.
|
||||||
<p>The Data Protection Principles include requirements such as:</p>
|
</p>
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Personal data collected must be processed in a fair, legal, and transparent way and should only be used in a way
|
|
||||||
that a person would reasonably expect.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Personal data should only be collected to fulfil a specific purpose and it should only be used for that purpose.
|
|
||||||
Organizations must specify why they need the personal data when they collect it.
|
|
||||||
</li>
|
|
||||||
<li>Personal data should be held no longer than necessary to fulfil its purpose.</li>
|
|
||||||
<li>
|
|
||||||
People covered by the GDPR have the right to access their own personal data. They can also request a copy of their
|
|
||||||
data, and that their data be updated, deleted, restricted, or moved to another organization.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Why is GDPR important?</h4>
|
<h4>Individual Data Subject’s Rights - Data Access, Portability, and Deletion</h4>
|
||||||
<p>
|
<p>
|
||||||
GDPR adds some new requirements regarding how companies should protect individuals’ personal data that they
|
We are committed to helping our customers meet the data subject rights requirements of GDPR. {{name}} processes or
|
||||||
collect and process. It also raises the stakes for compliance by increasing enforcement and imposing greater fines
|
stores all personal data in fully vetted, DPA compliant vendors. We do store all conversation and personal data
|
||||||
for breach. Beyond these facts, it’s simply the right thing to do. At {{name}} we strongly believe that your
|
for up to 6 years unless your account is deleted. In which case, we dispose of all data in accordance with our
|
||||||
data privacy is very important and we already have solid security and privacy practices in place that go beyond the
|
Terms of Service and Privacy Policy, but we will not hold it longer than 60 days.
|
||||||
requirements of this regulation.
|
</p>
|
||||||
</p>
|
<p>
|
||||||
|
We are aware that if you are working with EU customers, you need to be able to provide them with the ability to
|
||||||
|
access, update, retrieve and remove personal data. We got you! We've been set up as self service from the start
|
||||||
|
and have always given you access to your data. Our customer support team is here for you to answer any questions
|
||||||
|
you might have about working with the API.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h4>Individual Data Subject’s Rights - Data Access, Portability, and Deletion</h4>
|
<h4>California Residents</h4>
|
||||||
<p>
|
<p>
|
||||||
We are committed to helping our customers meet the data subject rights requirements of GDPR. {{name}} processes or
|
The California Consumer Privacy Act (CCPA) requires us to disclose categories of Personal Information we collect
|
||||||
stores all personal data in fully vetted, DPA compliant vendors. We do store all conversation and personal data for
|
and how we use it, the categories of sources from whom we collect Personal Information, and the third parties with
|
||||||
up to 6 years unless your account is deleted. In which case, we dispose of all data in accordance with our Terms of
|
whom we share it, which we have explained above.
|
||||||
Service and Privacy Policy, but we will not hold it longer than 60 days.
|
</p>
|
||||||
</p>
|
<p>
|
||||||
<p>
|
We are also required to communicate information about rights California residents have under California law. You
|
||||||
We are aware that if you are working with EU customers, you need to be able to provide them with the ability to
|
may exercise the following rights:
|
||||||
access, update, retrieve and remove personal data. We got you! We've been set up as self service from the start and
|
</p>
|
||||||
have always given you access to your data. Our customer support team is here for you to answer any questions you
|
<ul>
|
||||||
might have about working with the API.
|
<li>
|
||||||
</p>
|
Right to Know and Access. You may submit a verifiable request for information regarding the: (1) categories of
|
||||||
|
Personal Information we collect, use, or share; (2) purposes for which categories of Personal Information are
|
||||||
|
collected or used by us; (3) categories of sources from which we collect Personal Information; and (4) specific
|
||||||
|
pieces of Personal Information we have collected about you.
|
||||||
|
</li>
|
||||||
|
<li>Right to Equal Service. We will not discriminate against you if you exercise your privacy rights.</li>
|
||||||
|
<li>
|
||||||
|
Right to Delete. You may submit a verifiable request to close your account and we will delete Personal
|
||||||
|
Information about you that we have collected.
|
||||||
|
</li>
|
||||||
|
<li>Request that a business that sells a consumer's personal data, not sell the consumer's personal data.</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights,
|
||||||
|
please contact us.
|
||||||
|
</p>
|
||||||
|
<p>We do not sell the Personal Information of our users.</p>
|
||||||
|
<p>For more information about these rights, please contact us.</p>
|
||||||
|
|
||||||
<h4>California Residents</h4>
|
<h4>California Online Privacy Protection Act (CalOPPA)</h4>
|
||||||
<p>
|
<p>
|
||||||
The California Consumer Privacy Act (CCPA) requires us to disclose categories of Personal Information we collect and
|
CalOPPA requires us to disclose categories of Personal Information we collect and how we use it, the categories of
|
||||||
how we use it, the categories of sources from whom we collect Personal Information, and the third parties with whom
|
sources from whom we collect Personal Information, and the third parties with whom we share it, which we have
|
||||||
we share it, which we have explained above.
|
explained above.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>CalOPPA users have the following rights:</p>
|
||||||
We are also required to communicate information about rights California residents have under California law. You may
|
<ul>
|
||||||
exercise the following rights:
|
<li>
|
||||||
</p>
|
Right to Know and Access. You may submit a verifiable request for information regarding the: (1) categories of
|
||||||
<ul>
|
Personal Information we collect, use, or share; (2) purposes for which categories of Personal Information are
|
||||||
<li>
|
collected or used by us; (3) categories of sources from which we collect Personal Information; and (4) specific
|
||||||
Right to Know and Access. You may submit a verifiable request for information regarding the: (1) categories of
|
pieces of Personal Information we have collected about you.
|
||||||
Personal Information we collect, use, or share; (2) purposes for which categories of Personal Information are
|
</li>
|
||||||
collected or used by us; (3) categories of sources from which we collect Personal Information; and (4) specific
|
<li>Right to Equal Service. We will not discriminate against you if you exercise your privacy rights.</li>
|
||||||
pieces of Personal Information we have collected about you.
|
<li>
|
||||||
</li>
|
Right to Delete. You may submit a verifiable request to close your account and we will delete Personal
|
||||||
<li>Right to Equal Service. We will not discriminate against you if you exercise your privacy rights.</li>
|
Information about you that we have collected.
|
||||||
<li>
|
</li>
|
||||||
Right to Delete. You may submit a verifiable request to close your account and we will delete Personal Information
|
<li>
|
||||||
about you that we have collected.
|
Right to request that a business that sells a consumer's personal data, not sell the consumer's personal data.
|
||||||
</li>
|
</li>
|
||||||
<li>Request that a business that sells a consumer's personal data, not sell the consumer's personal data.</li>
|
</ul>
|
||||||
</ul>
|
<p>
|
||||||
<p>
|
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights,
|
||||||
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights,
|
please contact us.
|
||||||
please contact us.
|
</p>
|
||||||
</p>
|
<p>We do not sell the Personal Information of our users.</p>
|
||||||
<p>We do not sell the Personal Information of our users.</p>
|
<p>For more information about these rights, please contact us.</p>
|
||||||
<p>For more information about these rights, please contact us.</p>
|
|
||||||
|
|
||||||
<h4>California Online Privacy Protection Act (CalOPPA)</h4>
|
<h4>Contact Us</h4>
|
||||||
<p>
|
<p>Don't hesitate to contact us if you have any questions.</p>
|
||||||
CalOPPA requires us to disclose categories of Personal Information we collect and how we use it, the categories of
|
<ul>
|
||||||
sources from whom we collect Personal Information, and the third parties with whom we share it, which we have
|
<li>Via this Link: <router-link to="/how-it-works">https://noagendacareers.com/how-it-works</router-link></li>
|
||||||
explained above.
|
</ul>
|
||||||
</p>
|
</article>
|
||||||
<p>CalOPPA users have the following rights:</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Right to Know and Access. You may submit a verifiable request for information regarding the: (1) categories of
|
|
||||||
Personal Information we collect, use, or share; (2) purposes for which categories of Personal Information are
|
|
||||||
collected or used by us; (3) categories of sources from which we collect Personal Information; and (4) specific
|
|
||||||
pieces of Personal Information we have collected about you.
|
|
||||||
</li>
|
|
||||||
<li>Right to Equal Service. We will not discriminate against you if you exercise your privacy rights.</li>
|
|
||||||
<li>
|
|
||||||
Right to Delete. You may submit a verifiable request to close your account and we will delete Personal Information
|
|
||||||
about you that we have collected.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Right to request that a business that sells a consumer's personal data, not sell the consumer's personal data.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights,
|
|
||||||
please contact us.
|
|
||||||
</p>
|
|
||||||
<p>We do not sell the Personal Information of our users.</p>
|
|
||||||
<p>For more information about these rights, please contact us.</p>
|
|
||||||
|
|
||||||
<h4>Contact Us</h4>
|
|
||||||
<p>Don't hesitate to contact us if you have any questions.</p>
|
|
||||||
<ul>
|
|
||||||
<li>Via this Link: <router-link to="/how-it-works">https://noagendacareers.com/how-it-works</router-link></li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,40 +1,43 @@
|
||||||
<template>
|
<template>
|
||||||
<h3>Terms of Service</h3>
|
<article>
|
||||||
<p><em>(as of February 6<sup>th</sup>, 2021)</em></p>
|
<page-title title="Terms of Service" />
|
||||||
|
<h3>Terms of Service</h3>
|
||||||
|
<p><em>(as of February 6<sup>th</sup>, 2021)</em></p>
|
||||||
|
|
||||||
<h4>Acceptance of Terms</h4>
|
<h4>Acceptance of Terms</h4>
|
||||||
<p>
|
<p>
|
||||||
By accessing this web site, you are agreeing to be bound by these Terms and Conditions, and that you are responsible
|
By accessing this web site, you are agreeing to be bound by these Terms and Conditions, and that you are
|
||||||
to ensure that your use of this site complies with all applicable laws. Your continued use of this site implies your
|
responsible to ensure that your use of this site complies with all applicable laws. Your continued use of this
|
||||||
acceptance of these terms.
|
site implies your acceptance of these terms.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4>Description of Service and Registration</h4>
|
<h4>Description of Service and Registration</h4>
|
||||||
<p>
|
<p>
|
||||||
Jobs, Jobs, Jobs is a service that allows individuals to enter and amend employment profiles, restricting access to
|
Jobs, Jobs, Jobs is a service that allows individuals to enter and amend employment profiles, restricting access
|
||||||
the details of these profiles to other users of <a href="https://noagendasocial.com" target="_blank">No Agenda
|
to the details of these profiles to other users of <a href="https://noagendasocial.com" target="_blank">No Agenda
|
||||||
Social</a>. Registration is accomplished by allowing Jobs, Jobs, Jobs to read one’s No Agenda Social profile.
|
Social</a>. Registration is accomplished by allowing Jobs, Jobs, Jobs to read one’s No Agenda Social
|
||||||
See our <router-link to="/privacy-policy">privacy policy</router-link> for details on the personal (user)
|
profile. See our <router-link to="/privacy-policy">privacy policy</router-link> for details on the personal (user)
|
||||||
information we maintain.
|
information we maintain.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4>Liability</h4>
|
<h4>Liability</h4>
|
||||||
<p>
|
<p>
|
||||||
This service is provided “as is”, and no warranty (express or implied) exists. The service and its
|
This service is provided “as is”, and no warranty (express or implied) exists. The service and its
|
||||||
developers may not be held liable for any damages that may arise through the use of this service.
|
developers may not be held liable for any damages that may arise through the use of this service.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4>Updates to Terms</h4>
|
<h4>Updates to Terms</h4>
|
||||||
<p>
|
<p>
|
||||||
These terms and conditions may be updated at any time. When these terms are updated, users will be notified via a
|
These terms and conditions may be updated at any time. When these terms are updated, users will be notified via a
|
||||||
notice on the dashboard page. Additionally, the date at the top of this page will be updated, and any substantive
|
notice on the dashboard page. Additionally, the date at the top of this page will be updated, and any substantive
|
||||||
updates will also be accompanied by a summary of those changes.
|
updates will also be accompanied by a summary of those changes.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
You may also wish to review our <router-link to="/privacy-policy">privacy policy</router-link> to learn how we
|
You may also wish to review our <router-link to="/privacy-policy">privacy policy</router-link> to learn how we
|
||||||
handle your data.
|
handle your data.
|
||||||
</p>
|
</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<p>{{message}}</p>
|
<article>
|
||||||
|
<page-title title="Logging on..." />
|
||||||
|
<p>{{message}}</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,35 +1,39 @@
|
||||||
<template>
|
<template>
|
||||||
<h3>Welcome, {{user.name}}</h3>
|
<article>
|
||||||
<load-data :load="retrieveData">
|
<page-title title="Dashboard" />
|
||||||
<template v-if="profile">
|
<h3>Welcome, {{user.name}}</h3>
|
||||||
|
<load-data :load="retrieveData">
|
||||||
|
<template v-if="profile">
|
||||||
|
<p>
|
||||||
|
Your employment profile was last updated {{profile.lastUpdatedOn}}. Your profile currently lists
|
||||||
|
{{profile.skills.length}} skill<span v-if="profile.skills.length !== 1">s</span>.
|
||||||
|
</p>
|
||||||
|
<p><router-link :to="'/profile/view/' + user.citizenId">View Your Employment Profile</router-link></p>
|
||||||
|
<p v-if="profile.seekingEmployment">
|
||||||
|
Your profile indicates that you are seeking employment. Once you find it,
|
||||||
|
<router-link to="/success-story/add">tell your fellow citizens about it!</router-link>
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<p>
|
||||||
|
You do not have an employment profile established; click “Edit Profile” in the menu to get
|
||||||
|
started!
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
|
<hr>
|
||||||
<p>
|
<p>
|
||||||
Your employment profile was last updated {{profile.lastUpdatedOn}}. Your profile currently lists
|
There <template v-if="profileCount === 1">is</template><template v-else>are</template>
|
||||||
{{profile.skills.length}} skill<span v-if="profile.skills.length !== 1">s</span>.
|
<template v-if="profileCount === 0">no</template><template v-else>{{profileCount}}</template>
|
||||||
|
employment profile<template v-if="profileCount !== 1">s</template> from citizens of Gitmo Nation.
|
||||||
|
<template v-if="profileCount > 0">Take a look around and see if you can help them find work!</template>
|
||||||
</p>
|
</p>
|
||||||
<p><router-link :to="'/profile/view/' + user.citizenId">View Your Employment Profile</router-link></p>
|
</load-data>
|
||||||
<p v-if="profile.seekingEmployment">
|
|
||||||
Your profile indicates that you are seeking employment. Once you find it,
|
|
||||||
<router-link to="/success-story/add">tell your fellow citizens about it!</router-link>
|
|
||||||
</p>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<p>
|
|
||||||
You do not have an employment profile established; click “Edit Profile” in the menu to get
|
|
||||||
started!
|
|
||||||
</p>
|
|
||||||
</template>
|
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
<p>
|
||||||
There <span v-if="profileCount === 1">is</span><span v-else>are</span> <span v-if="profileCount === 0">no</span><span v-else>{{profileCount}}</span>
|
To see how this application works, check out “How It Works” in the sidebar (last updated June
|
||||||
employment profile<span v-if="profileCount !== 1">s</span> from citizens of Gitmo Nation.
|
14<sup>th</sup>, 2021).
|
||||||
<span v-if="profileCount > 0">Take a look around and see if you can help them find work!</span>
|
|
||||||
</p>
|
</p>
|
||||||
</load-data>
|
</article>
|
||||||
<hr>
|
|
||||||
<p>
|
|
||||||
To see how this application works, check out “How It Works” in the sidebar (last updated June
|
|
||||||
14<sup>th</sup>, 2021).
|
|
||||||
</p>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,112 +1,116 @@
|
||||||
<template>
|
<template>
|
||||||
<h3>Employment Profile</h3>
|
<article>
|
||||||
|
<page-title title="Edit Profile" />
|
||||||
<load-data :load="retrieveData">
|
<h3>Employment Profile</h3>
|
||||||
<form>
|
<load-data :load="retrieveData">
|
||||||
<v-container>
|
<form>
|
||||||
<v-row>
|
<v-container>
|
||||||
<v-col cols="12" sm="10" md="8" lg="6">
|
<v-row>
|
||||||
<label for="realName">Real Name</label>
|
<v-col cols="12" sm="10" md="8" lg="6">
|
||||||
<input type="text" id="realName" v-model="realName" maxlength="255"
|
<label for="realName">Real Name</label>
|
||||||
placeholder="Leave blank to use your NAS display name">
|
<input type="text" id="realName" v-model="realName" maxlength="255"
|
||||||
</v-col>
|
placeholder="Leave blank to use your NAS display name">
|
||||||
</v-row>
|
</v-col>
|
||||||
<v-row>
|
</v-row>
|
||||||
<v-col>
|
<v-row>
|
||||||
<label>
|
<v-col>
|
||||||
<input type="checkbox" v-model="profile.seekingEmployment">
|
<label>
|
||||||
I am currently seeking employment
|
<input type="checkbox" v-model="profile.seekingEmployment">
|
||||||
</label>
|
I am currently seeking employment
|
||||||
<em v-if="profile?.seekingEmployment"> If you have found employment, consider
|
</label>
|
||||||
<router-link to="/success-story/add">telling your fellow citizens about it</router-link>
|
<em v-if="profile?.seekingEmployment"> If you have found employment, consider
|
||||||
</em>
|
<router-link to="/success-story/add">telling your fellow citizens about it</router-link>
|
||||||
</v-col>
|
</em>
|
||||||
</v-row>
|
</v-col>
|
||||||
<v-row>
|
</v-row>
|
||||||
<v-col cols="12" sm="6" md="4">
|
<v-row>
|
||||||
<label for="continentId" class="jjj-required">Continent</label>
|
<v-col cols="12" sm="6" md="4">
|
||||||
<select id="continentId">
|
<label for="continentId" class="jjj-required">Continent</label>
|
||||||
<option v-for="c in continents" :key="c.id" :value="c.id"
|
<select id="continentId">
|
||||||
:selected="c.id === profile?.continentId ? 'selected' : null">{{c.name}}</option>
|
<option v-for="c in continents" :key="c.id" :value="c.id"
|
||||||
</select>
|
:selected="c.id === profile?.continentId ? 'selected' : null">{{c.name}}</option>
|
||||||
</v-col>
|
</select>
|
||||||
<v-col cols="12" sm="6" md="8">
|
</v-col>
|
||||||
<label for="region" class="jjj-required">Region</label>
|
<v-col cols="12" sm="6" md="8">
|
||||||
<input type="text" id="region" v-model="profile.region" maxlength="255"
|
<label for="region" class="jjj-required">Region</label>
|
||||||
placeholder="Country, state, geographic area, etc.">
|
<input type="text" id="region" v-model="profile.region" maxlength="255"
|
||||||
</v-col>
|
placeholder="Country, state, geographic area, etc.">
|
||||||
</v-row>
|
</v-col>
|
||||||
<v-row>
|
</v-row>
|
||||||
<v-col>
|
<v-row>
|
||||||
<label for="bio" class="jjj-required">Professional Biography</label>
|
<v-col>
|
||||||
<markdown-editor id="bio" v-model:text="profile.biography" />
|
<label for="bio" class="jjj-required">Professional Biography</label>
|
||||||
</v-col>
|
<markdown-editor id="bio" v-model:text="profile.biography" />
|
||||||
</v-row>
|
</v-col>
|
||||||
<v-row>
|
</v-row>
|
||||||
<v-col cols="12" sm="12" offset-md="2" md="4">
|
<v-row>
|
||||||
<label>
|
<v-col cols="12" sm="12" offset-md="2" md="4">
|
||||||
<input type="checkbox" v-model="profile.remoteWork">
|
<label>
|
||||||
I am looking for remote work
|
<input type="checkbox" v-model="profile.remoteWork">
|
||||||
</label>
|
I am looking for remote work
|
||||||
</v-col>
|
</label>
|
||||||
<v-col cols="12" sm="12" md="4">
|
</v-col>
|
||||||
<label>
|
<v-col cols="12" sm="12" md="4">
|
||||||
<input type="checkbox" v-model="profile.fullTime">
|
<label>
|
||||||
I am looking for full-time work
|
<input type="checkbox" v-model="profile.fullTime">
|
||||||
</label>
|
I am looking for full-time work
|
||||||
</v-col>
|
</label>
|
||||||
</v-row>
|
</v-col>
|
||||||
<hr>
|
</v-row>
|
||||||
<h4>
|
<hr>
|
||||||
Skills
|
<h4>
|
||||||
<button type="button" class="btn btn-outline-primary" @onclick="AddNewSkill">Add a Skill</button>
|
Skills
|
||||||
</h4>
|
<button type="button" class="btn btn-outline-primary" @onclick="AddNewSkill">Add a Skill</button>
|
||||||
@foreach (var skill in ProfileForm.Skills)
|
</h4>
|
||||||
{
|
@foreach (var skill in ProfileForm.Skills)
|
||||||
[SkillEdit Skill=@skill OnRemove=@RemoveSkill /]
|
{
|
||||||
}
|
[SkillEdit Skill=@skill OnRemove=@RemoveSkill /]
|
||||||
<hr>
|
}
|
||||||
<h4>Experience</h4>
|
<hr>
|
||||||
<p>
|
<h4>Experience</h4>
|
||||||
This application does not have a place to individually list your chronological job history; however, you can
|
<p>
|
||||||
use this area to list prior jobs, their dates, and anything else you want to include that’s not already a
|
This application does not have a place to individually list your chronological job history; however, you can
|
||||||
part of your Professional Biography above.
|
use this area to list prior jobs, their dates, and anything else you want to include that’s not
|
||||||
</p>
|
already a part of your Professional Biography above.
|
||||||
<v-row>
|
</p>
|
||||||
<v-col>
|
<v-row>
|
||||||
<markdown-editor id="experience" v-model:text="profile.experience" />
|
<v-col>
|
||||||
</v-col>
|
<markdown-editor id="experience" v-model:text="profile.experience" />
|
||||||
</v-row>
|
</v-col>
|
||||||
<v-row>
|
</v-row>
|
||||||
<v-col>
|
<v-row>
|
||||||
<label>
|
<v-col>
|
||||||
<input type="checkbox" v-model="profile.isPublic">
|
<label>
|
||||||
Allow my profile to be searched publicly (outside NA Social)
|
<input type="checkbox" v-model="profile.isPublic">
|
||||||
</label>
|
Allow my profile to be searched publicly (outside NA Social)
|
||||||
</v-col>
|
</label>
|
||||||
</v-row>
|
</v-col>
|
||||||
<v-row>
|
</v-row>
|
||||||
<v-col>
|
<v-row>
|
||||||
<br>
|
<v-col>
|
||||||
<button type="submit" class="btn btn-outline-primary">Save</button>
|
<br>
|
||||||
</v-col>
|
<v-btn text color="primary">Save</v-btn>
|
||||||
</v-row>
|
</v-col>
|
||||||
</v-container>
|
</v-row>
|
||||||
</form>
|
</v-container>
|
||||||
<p v-if="!isNew">
|
</form>
|
||||||
<br><router-link :to="`/profile/view/${user.citizenId}`"><v-icon icon="file-account-outline" /> View Your User
|
<p v-if="!isNew">
|
||||||
Profile</router-link>
|
<br>
|
||||||
|
<v-btn color="primary" @click="viewProfile">
|
||||||
|
<v-icon icon="mdi-file-account-outline" /> View Your User Profile
|
||||||
|
</v-btn>
|
||||||
|
</p>
|
||||||
|
</load-data>
|
||||||
|
<p>
|
||||||
|
<br>If you want to delete your profile, or your entire account, <router-link to="/so-long/options">see your
|
||||||
|
deletion options here</router-link>.
|
||||||
</p>
|
</p>
|
||||||
</load-data>
|
</article>
|
||||||
<p>
|
|
||||||
<br>If you want to delete your profile, or your entire account, <router-link to="/so-long/options">see your deletion
|
|
||||||
options here</router-link>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, Ref, ref } from 'vue'
|
import { computed, defineComponent, Ref, ref } from 'vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
import api, { LogOnSuccess, Profile } from '../../api'
|
import api, { LogOnSuccess, Profile } from '../../api'
|
||||||
import MarkdownEditor from '../../components/MarkdownEditor.vue'
|
import MarkdownEditor from '../../components/MarkdownEditor.vue'
|
||||||
import LoadData from '../../components/shared/LoadData.vue'
|
import LoadData from '../../components/shared/LoadData.vue'
|
||||||
|
@ -120,6 +124,7 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
setup () {
|
setup () {
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
/** The currently logged-on user */
|
/** The currently logged-on user */
|
||||||
const user = store.state.user as LogOnSuccess
|
const user = store.state.user as LogOnSuccess
|
||||||
|
@ -148,7 +153,7 @@ export default defineComponent({
|
||||||
const nameResult = await api.citizen.retrieve(user.citizenId, user)
|
const nameResult = await api.citizen.retrieve(user.citizenId, user)
|
||||||
if (typeof nameResult === 'string') {
|
if (typeof nameResult === 'string') {
|
||||||
errors.push(nameResult)
|
errors.push(nameResult)
|
||||||
} else {
|
} else if (typeof nameResult !== 'undefined') {
|
||||||
realName.value = nameResult.realName || ''
|
realName.value = nameResult.realName || ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,7 +164,8 @@ export default defineComponent({
|
||||||
isNew,
|
isNew,
|
||||||
profile,
|
profile,
|
||||||
realName,
|
realName,
|
||||||
continents: computed(() => store.state.continents)
|
continents: computed(() => store.state.continents),
|
||||||
|
viewProfile: () => router.push(`/profile/view/${user.citizenId}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<p>Logging off…</p>
|
<article>
|
||||||
|
<page-title title="Logging off..." />
|
||||||
|
<p>Logging off…</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,19 +1,103 @@
|
||||||
<template>
|
<template>
|
||||||
<p>TODO: convert this template</p>
|
<article>
|
||||||
|
<page-title :title="pageTitle" />
|
||||||
|
<load-data :load="retrieveProfile">
|
||||||
|
<h2><a :href="it.citizen.profileUrl" target="_blank">{{citizenName}}</a></h2>
|
||||||
|
<h4>{{it.continent.name}}, {{it.profile.region}}</h4>
|
||||||
|
<p v-html="workTypes"></p>
|
||||||
|
<hr>
|
||||||
|
<div v-html="bioHtml"></div>
|
||||||
|
|
||||||
|
<template v-if="it.profile.skills.length > 0">
|
||||||
|
<hr>
|
||||||
|
<h4>Skills</h4>
|
||||||
|
<ul>
|
||||||
|
<li v-for="(skill, idx) in it.profile.skills" :key="idx">
|
||||||
|
{{skill.description}}<template v-if="skill.notes"> ({{skill.notes}})</template>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="it.profile.experience">
|
||||||
|
<hr>
|
||||||
|
<h4>Experience / Employment History</h4>
|
||||||
|
<div v-html="expHtml"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="user.citizenId === it.citizen.id">
|
||||||
|
<br><br>
|
||||||
|
<v-btn color="primary" @click="editProfile"><v-icon icon="mdi-pencil" /> Edit Your Profile</v-btn>
|
||||||
|
</template>
|
||||||
|
</load-data>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from 'vue'
|
import { computed, defineComponent, ref, Ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
import marked from 'marked'
|
||||||
|
import LoadData from '../../components/shared/LoadData.vue'
|
||||||
|
import { useStore } from '../../store'
|
||||||
|
import api, { LogOnSuccess, markedOptions, ProfileForView } from '../../api'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'ProfileEdit',
|
name: 'ProfileEdit',
|
||||||
|
components: { LoadData },
|
||||||
setup () {
|
setup () {
|
||||||
|
const store = useStore()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const profileId = route.params.id
|
const router = useRouter()
|
||||||
|
|
||||||
|
/** The currently logged-on user */
|
||||||
|
const user = store.state.user as LogOnSuccess
|
||||||
|
|
||||||
|
/** The requested profile */
|
||||||
|
const it : Ref<ProfileForView | undefined> = ref(undefined)
|
||||||
|
|
||||||
|
/** The citizen's name (real, display, or NAS, whichever is found first) */
|
||||||
|
const citizenName = computed(() => {
|
||||||
|
const c = it.value?.citizen
|
||||||
|
return c?.realName || c?.displayName || c?.naUser || ''
|
||||||
|
})
|
||||||
|
|
||||||
|
/** The work types for the top of the page */
|
||||||
|
const workTypes = computed(() => {
|
||||||
|
const parts : string[] = []
|
||||||
|
if (it.value) {
|
||||||
|
const p = it.value.profile
|
||||||
|
if (p.seekingEmployment) {
|
||||||
|
parts.push('<strong><em>CURRENTLY SEEKING EMPLOYMENT</em></strong>')
|
||||||
|
} else {
|
||||||
|
parts.push('Not actively seeking employment')
|
||||||
|
}
|
||||||
|
parts.push(`${p.fullTime ? 'I' : 'Not i'}nterested in full-time employment`)
|
||||||
|
parts.push(`${p.remoteWork ? 'I' : 'Not i'}nterested in remote opportunities`)
|
||||||
|
}
|
||||||
|
return parts.join(' • ')
|
||||||
|
})
|
||||||
|
|
||||||
|
/** Retrieve the profile and supporting data */
|
||||||
|
const retrieveProfile = async (errors : string[]) => {
|
||||||
|
const profileResp = await api.profile.retreiveForView(route.params.id as string, user)
|
||||||
|
if (typeof profileResp === 'string') {
|
||||||
|
errors.push(profileResp)
|
||||||
|
} else if (typeof profileResp === 'undefined') {
|
||||||
|
errors.push('Profile not found')
|
||||||
|
} else {
|
||||||
|
it.value = profileResp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
profileId
|
pageTitle: computed(() => it.value ? `Employment profile for ${citizenName.value}` : 'Loading Profile...'),
|
||||||
|
user,
|
||||||
|
retrieveProfile,
|
||||||
|
it,
|
||||||
|
workTypes,
|
||||||
|
citizenName,
|
||||||
|
bioHtml: computed(() => marked(it.value?.profile.biography || '', markedOptions)),
|
||||||
|
expHtml: computed(() => marked(it.value?.profile.experience || '', markedOptions)),
|
||||||
|
editProfile: () => router.push('/citizen/profile')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,37 +1,40 @@
|
||||||
<template>
|
<template>
|
||||||
<h3>Account Deletion Options</h3>
|
<article>
|
||||||
|
<page-title title="Account Deletion Options" />
|
||||||
|
<h3>Account Deletion Options</h3>
|
||||||
|
|
||||||
<p v-if="error !== ''">{{error}}</p>
|
<p v-if="error !== ''">{{error}}</p>
|
||||||
|
|
||||||
<h4>Option 1 – Delete Your Profile</h4>
|
<h4>Option 1 – Delete Your Profile</h4>
|
||||||
<p>
|
<p>
|
||||||
Utilizing this option will remove your current employment profile and skills. This will preserve any success stories
|
Utilizing this option will remove your current employment profile and skills. This will preserve any success
|
||||||
you may have written, and preserves this application’s knowledge of you. This is what you want to use if you
|
stories you may have written, and preserves this application’s knowledge of you. This is what you want to
|
||||||
want to clear out your profile and start again (and remove the current one from others’ view).
|
use if you want to clear out your profile and start again (and remove the current one from others’ view).
|
||||||
</p>
|
</p>
|
||||||
<p class="text-center">
|
<p class="text-center">
|
||||||
<button class="btn btn-danger" @click="deleteProfile">Delete Your Profile</button>
|
<v-btn color="error" @click="deleteProfile">Delete Your Profile</v-btn>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<h4>Option 2 – Delete Your Account</h4>
|
<h4>Option 2 – Delete Your Account</h4>
|
||||||
<p>
|
<p>
|
||||||
This option will make it like you never visited this site. It will delete your profile, skills, success stories, and
|
This option will make it like you never visited this site. It will delete your profile, skills, success stories,
|
||||||
account. This is what you want to use if you want to disappear from this application. Clicking the button below
|
and account. This is what you want to use if you want to disappear from this application. Clicking the button
|
||||||
<strong>will not</strong> affect your No Agenda Social account in any way; its effects are limited to Jobs, Jobs,
|
below <strong>will not</strong> affect your No Agenda Social account in any way; its effects are limited to Jobs,
|
||||||
Jobs.
|
Jobs, Jobs.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<em>
|
<em>
|
||||||
(This will not revoke this application’s permissions on No Agenda Social; you will have to remove this
|
(This will not revoke this application’s permissions on No Agenda Social; you will have to remove this
|
||||||
yourself. The confirmation message has a link where you can do this; once the page loads, find the
|
yourself. The confirmation message has a link where you can do this; once the page loads, find the
|
||||||
<strong>Jobs, Jobs, Jobs</strong> entry, and click the <strong>× Revoke</strong> link for that entry.)
|
<strong>Jobs, Jobs, Jobs</strong> entry, and click the <strong>× Revoke</strong> link for that entry.)
|
||||||
</em>
|
</em>
|
||||||
</p>
|
</p>
|
||||||
<p class="text-center">
|
<p class="text-center">
|
||||||
<button class="btn btn-danger" @click="deleteAccount">Delete Your Entire Account</button>
|
<v-btn color="error" @click="deleteAccount">Delete Your Entire Account</v-btn>
|
||||||
</p>
|
</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<h3>Account Deletion Success</h3>
|
<article>
|
||||||
<p>
|
<page-title title="Account Deletion Success" />
|
||||||
Your account has been successfully deleted. To revoke the permissions you have previously granted to this
|
<h3>Account Deletion Success</h3>
|
||||||
application, find it in <a href="https://noagendasocial.com/oauth/authorized_applications">this list</a> and click
|
<p>
|
||||||
<strong>× Revoke</strong>. Otherwise, clicking “Log On” in the left-hand menu will create a new,
|
Your account has been successfully deleted. To revoke the permissions you have previously granted to this
|
||||||
empty account without prompting you further.
|
application, find it in <a href="https://noagendasocial.com/oauth/authorized_applications">this list</a> and click
|
||||||
</p>
|
<strong>× Revoke</strong>. Otherwise, clicking “Log On” in the left-hand menu will create a new,
|
||||||
<p>
|
empty account without prompting you further.
|
||||||
Thank you for participating, and thank you for your courage. #GitmoNation
|
</p>
|
||||||
</p>
|
<p>
|
||||||
|
Thank you for participating, and thank you for your courage. #GitmoNation
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -122,6 +122,17 @@ type ProfileSearchResult = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// The data required to show a viewable profile
|
||||||
|
type ProfileForView = {
|
||||||
|
/// The profile itself
|
||||||
|
profile : Profile
|
||||||
|
/// The citizen to whom the profile belongs
|
||||||
|
citizen : Citizen
|
||||||
|
/// The continent for the profile
|
||||||
|
continent : Continent
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// The parameters for a public job search
|
/// The parameters for a public job search
|
||||||
type PublicSearch = {
|
type PublicSearch = {
|
||||||
/// Retrieve citizens from this continent
|
/// Retrieve citizens from this continent
|
||||||
|
|
Loading…
Reference in New Issue
Block a user