added 260907 version of worker toolkit

This commit is contained in:
2026-09-08 20:30:51 -04:00
parent cbd3f0f8ca
commit 97aca37663
1283 changed files with 142951 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
import Ember from 'ember';
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';
const {
get,
Route,
inject: {
service,
},
} = Ember;
export default Route.extend(ApplicationRouteMixin, {
notifications: service(),
session: service(),
beforeModel() {
get(this, 'notifications').loadNotifications();
},
sessionAuthenticated() {
this._super(...arguments);
get(this, 'notifications').loadNotifications();
},
actions: {
routeToLogin() {
this.router.transitionTo('login');
},
},
});

View File

@@ -0,0 +1,9 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
Route,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, {
});

View File

@@ -0,0 +1,22 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
import CheckinByDate from 'flaredown/mixins/checkin-by-date';
import moment from 'moment';
const {
set,
Route,
RSVP,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, CheckinByDate, {
beforeModel: function(transition){
set(this, 'date', transition.queryParams.date);
},
model(params) {
const date = params.date_key || moment(new Date()).format('YYYY-MM-DD');
return RSVP.hash({ checkins: this.checkinByDate(date), date: date })
},
});

View File

@@ -0,0 +1,29 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
import CheckinByDate from 'flaredown/mixins/checkin-by-date';
import moment from 'moment';
const {
get,
set,
Route,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, CheckinByDate, {
beforeModel: function(transition){
set(this, 'date', transition.queryParams.date);
},
model() {
const date = get(this, 'date') || moment(new Date()).format('YYYY-MM-DD');
this.checkinByDate(date).then(
() => {
this.routeToCheckin(date);
},
() => {
this.routeToNewCheckin(date);
}
);
},
});

View File

@@ -0,0 +1,35 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
get,
set,
RSVP,
Route,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, {
beforeModel() {
this._super(...arguments);
const store = get(this, 'store');
if(store.peekAll('condition').length > 0){
store.unloadAll('condition');
}
},
model(params) {
var checkinId = params.checkin_id;
var stepId = `${this.routeName.split('.')[0]}-${params.step_key}`;
return RSVP.hash({
stepId,
checkin: this.store.findRecord('checkin', checkinId),
});
},
afterModel(model) {
set(this, 'stepsService.checkin', model.checkin);
},
});

View File

@@ -0,0 +1,12 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
Route,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, {
model() {
return this.get('session.currentUser');
},
});

View File

@@ -0,0 +1,26 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
ajax: Ember.inject.service(),
beforeModel(transition) {
var promise = this.get('ajax').request('/api/discourse', {
headers: {
"Authorization": `Token token="${this.get('session.token')}", email="${this.get('session.email')}"`
},
method: 'POST',
data: {
sso: transition.queryParams.sso,
sig: transition.queryParams.sig
}
});
promise.then( (payload) => {
window.location = payload.url;
});
return promise;
}
});

View File

@@ -0,0 +1,50 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
import CheckinByDate from 'flaredown/mixins/checkin-by-date';
import moment from 'moment';
const {
get,
Route,
} = Ember;
export default Route.extend(CheckinByDate, AuthenticatedRouteMixin, {
/*
REQUIREMENTS:
If the user hasn't completed the onboarding process
default route is the last completed onboarding step
Else
If the user has already checked-in today
default route should be start screen of today's check-in
Else
default route should be summary screen of today's check-in
*/
beforeModel(transition) {
if (typeof FastBoot !== 'undefined') { return; }
transition.abort();
if (get(this, 'session.isAuthenticated')) {
get(this, 'session.currentUser').then(currentUser => {
get(currentUser, 'profile').then(profile => {
if (get(profile, 'isOnboarded')) {
const date = moment(new Date()).format('YYYY-MM-DD');
this.checkinByDate(date).then(
() => {
this.routeToCheckinsForDate(date);
},
() => {
this.routeToNewCheckin(date);
}
);
} else {
this.transitionTo('onboarding', get(profile, 'onboardingStep.stepName'));
}
});
});
} else {
return this._super(...arguments);
}
},
});

View File

@@ -0,0 +1,6 @@
import Ember from 'ember';
import UnauthenticatedRouteMixin from 'flaredown/mixins/unauthenticated-route-mixin';
export default Ember.Route.extend(UnauthenticatedRouteMixin, {
});

View File

@@ -0,0 +1,9 @@
import Ember from 'ember';
import UnauthenticatedRouteMixin from 'flaredown/mixins/unauthenticated-route-mixin';
const {
Route,
} = Ember;
export default Route.extend(UnauthenticatedRouteMixin, {
});

View File

@@ -0,0 +1,18 @@
import Ember from 'ember';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
const {
get,
inject: {
service,
},
Route
} = Ember;
export default Route.extend(HistoryTrackable, {
notifications: service('notifications'),
model() {
return get(this, 'notifications');
},
});

View File

@@ -0,0 +1,37 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
get,
RSVP,
Route,
getProperties,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, {
model(params) {
return get(this, 'session.currentUser').then(currentUser => {
const stepId = `${this.routeName}-${params.step_key}`;
return RSVP.hash({
stepId,
profile: get(currentUser, 'profile'),
});
});
},
afterModel(model, transition) {
get(this, 'session.currentUser.profile').then(profile => {
const savedStep = get(profile, 'onboardingStep');
const currentStep = get(this, `stepsService.steps.${model.stepId}`);
if (currentStep.priority > savedStep.priority) {
transition.abort();
const { prefix, stepName } = getProperties(savedStep, 'prefix', 'stepName');
this.transitionTo(prefix, stepName);
}
});
},
});

View File

@@ -0,0 +1,8 @@
import Ember from 'ember';
const {
Route,
} = Ember;
export default Route.extend({
});

View File

@@ -0,0 +1,11 @@
import Ember from 'ember';
const {
Route,
} = Ember;
export default Route.extend({
model() {
return this.store.createRecord('oracleRequest', { symptomIds: [] });
},
});

View File

@@ -0,0 +1,11 @@
import Ember from 'ember';
const {
Route,
} = Ember;
export default Route.extend({
model(params) {
return this.store.findRecord('oracleRequest', params.id);
}
});

View File

@@ -0,0 +1,4 @@
import Ember from 'ember';
import UnauthenticatedRouteMixin from 'flaredown/mixins/unauthenticated-route-mixin';
export default Ember.Route.extend(UnauthenticatedRouteMixin, {});

View File

@@ -0,0 +1,15 @@
import Ember from 'ember';
import UnauthenticatedRouteMixin from 'flaredown/mixins/unauthenticated-route-mixin';
const {
get,
Route,
} = Ember;
export default Route.extend(UnauthenticatedRouteMixin, {
model(params) {
if (typeof FastBoot === 'undefined') {
return get(this, 'store').findRecord('password', params.password_id).catch(() => null);
}
},
});

View File

@@ -0,0 +1,13 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
get,
Route,
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, {
model() {
return get(this, 'store').findAll('pattern');
},
});

View File

@@ -0,0 +1,21 @@
import Ember from 'ember';
import config from 'flaredown/config/environment';
import CryptoJS from 'cryptojs';
const {
get,
Route,
} = Ember;
export default Route.extend({
secretPhrase: config.encryptionSecret,
staticUrl: config.staticUrl,
model(params) {
const friendlyUrl = decodeURIComponent(params.friendly_id);
const decryptedArray = CryptoJS.AES.decrypt(friendlyUrl, get(this, 'secretPhrase')).toString(CryptoJS.enc.Utf8);
const patternIds = decryptedArray.split(', ').map((id) => id.replace(/\s+/g,""));
return get(this, 'store').query('pattern', { pattern_ids: patternIds });
},
});

View File

@@ -0,0 +1,4 @@
import Ember from 'ember';
export default Ember.Route.extend({
});

View File

@@ -0,0 +1,14 @@
import Ember from 'ember';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
get,
Route,
} = Ember;
export default Route.extend(HistoryTrackable, AuthenticatedRouteMixin, {
model() {
return get(this, 'session.currentUser').then(user => get(user, 'topicFollowing'));
},
});

View File

@@ -0,0 +1,77 @@
import Ember from 'ember';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
import ToggleHeaderLogo from 'flaredown/mixins/toggle-header-logo';
import AddMetaTags from 'flaredown/mixins/add-meta-tags';
const {
set,
get,
Route,
RSVP: {
hash,
},
} = Ember;
export default Route.extend(HistoryTrackable, ToggleHeaderLogo, AddMetaTags, {
queryParams: {
following: { refreshModel: true },
query: { refreshModel: true }
},
model(params) {
set(this, 'query', params.query);
const currentUser = get(this, 'session.currentUser');
return hash({
posts: get(this, 'store').query('post', params).then(q => q.toArray()),
topicFollowing: currentUser ? currentUser.then(user => get(user, 'topicFollowing')) : [],
});
},
setHeadTags: function() {
const currentUrl = get(this, 'currentUrl');
const headTags = [
{ type: 'meta',
tagId: 'title',
attrs: {
property: 'og:title',
content: 'Discussion',
},
},
{ type: 'meta',
tagId: 'description',
attrs: {
property: 'og:description',
content: 'Discussion',
},
},
{ type: 'meta',
tagId: 'url',
attrs: {
property: 'og:url',
content: currentUrl,
},
},
//Twitter meta tags
{ type: 'meta',
tagId: 'card',
attrs: {
name: 'twitter:card',
content: 'summary',
},
},
{
type: 'meta',
tagId: 'googleDesc',
attrs: {
name: 'description',
content: 'Discussion',
},
},
];
set(this, 'headTags', headTags);
},
});

View File

@@ -0,0 +1,26 @@
import Ember from 'ember';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
const {
get,
Route,
} = Ember;
export default Route.extend(HistoryTrackable, {
model() {
return get(this, 'store')
.createRecord(
'post',
{
tagIds: [],
symptomIds: [],
conditionIds: [],
treatmentIds: [],
}
);
},
historyEntry() {
return null;
},
});

View File

@@ -0,0 +1,13 @@
import Ember from 'ember';
import PostableGetable from 'flaredown/mixins/postable-getable';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
const {
Route,
} = Ember;
export default Route.extend(PostableGetable, HistoryTrackable, {
model() {
return this.getPostables(1);
},
});

View File

@@ -0,0 +1,94 @@
import Ember from 'ember';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
import ToggleHeaderLogo from 'flaredown/mixins/toggle-header-logo';
import AddMetaTags from 'flaredown/mixins/add-meta-tags';
import UpdateNotifications from 'flaredown/mixins/update-notifications';
const {
get,
set,
run: {
schedule,
},
Route,
} = Ember;
export default Route.extend(HistoryTrackable, ToggleHeaderLogo, AddMetaTags, UpdateNotifications, {
updateNotifications: true,
afterModel() {
const currentModel = this.modelFor(this.routeName);
schedule('afterRender', this, this.updatePostNotifications, currentModel);
},
resetController(controller, isExiting) {
if (isExiting) {
set(controller, 'anchor', null);
}
},
model(params) {
return get(this, 'store').find('post', params.id);
},
setupController(controller, model) {
this._super(controller, model);
set(controller, 'newComment', get(this, 'store').createRecord('comment'));
},
historyEntry(model) {
let entry = this._super(...arguments);
entry.pushObject([get(model, 'id')]);
return entry;
},
setHeadTags: function(model) {
const currentUrl = get(this, 'currentUrl');
const headTags = [
{ type: 'meta',
tagId: 'title',
attrs: {
property: 'og:title',
content: model.get('title'),
},
},
{ type: 'meta',
tagId: 'description',
attrs: {
property: 'og:description',
content: model.get('body'),
},
},
{ type: 'meta',
tagId: 'url',
attrs: {
property: 'og:url',
content: currentUrl,
},
},
//Twitter meta tags
{ type: 'meta',
tagId: 'card',
attrs: {
name: 'twitter:card',
content: 'summary',
},
},
{
type: 'meta',
tagId: 'googleDesc',
attrs: {
name: 'description',
content: model.get('body'),
},
},
];
set(this, 'headTags', headTags);
},
});

View File

@@ -0,0 +1,97 @@
import Ember from 'ember';
import HistoryTrackable from 'flaredown/mixins/history-trackable';
import ToggleHeaderLogo from 'flaredown/mixins/toggle-header-logo';
import AddMetaTags from 'flaredown/mixins/add-meta-tags';
const {
get,
set,
inject: {
service,
},
Route,
getProperties,
RSVP: {
hash,
},
} = Ember;
const availableTypes = ['tag', 'symptom', 'condition', 'treatment'];
export default Route.extend(HistoryTrackable, ToggleHeaderLogo, AddMetaTags, {
session: service(),
model(params) {
const { id, type } = params;
if (!availableTypes.includes(type)) {
return this.transitionTo('posts');
}
const store = get(this, 'store');
const currentUser = get(this, 'session.currentUser');
return hash({
id,
type,
page: 1,
posts: store.query('post', { id, type }).then(q => q.toArray()),
topic: store.findRecord(type, id),
topicFollowing: currentUser ? currentUser.then(user => get(user, 'topicFollowing')) : [],
});
},
historyEntry(model) {
const { id, type } = getProperties(model, 'id', 'type');
return this._super(...arguments).pushObjects([type, id]);
},
setHeadTags: function(model) {
const currentUrl = get(this, 'currentUrl');
const headTags = [
{ type: 'meta',
tagId: 'title',
attrs: {
property: 'og:title',
content: 'Topic',
},
},
{ type: 'meta',
tagId: 'description',
attrs: {
property: 'og:description',
content: get(model, 'topic.name'),
},
},
{ type: 'meta',
tagId: 'url',
attrs: {
property: 'og:url',
content: currentUrl,
},
},
//Twitter meta tags
{ type: 'meta',
tagId: 'card',
attrs: {
name: 'twitter:card',
content: 'summary',
},
},
{
type: 'meta',
tagId: 'googleDesc',
attrs: {
name: 'description',
content: get(model, 'topic.name'),
},
},
];
set(this, 'headTags', headTags);
},
});

View File

@@ -0,0 +1,19 @@
import Ember from 'ember';
import AuthenticatedRouteMixin from 'flaredown/mixins/authenticated-route-mixin';
const {
Route,
get
} = Ember;
export default Route.extend(AuthenticatedRouteMixin, {
model() {
return get(this, 'session.currentUser').then(user => user.get('profile'));
},
actions: {
invalidateSession() {
this.get('session').invalidate();
},
},
});

View File

@@ -0,0 +1,13 @@
import Ember from 'ember';
import UnauthenticatedRouteMixin from 'flaredown/mixins/unauthenticated-route-mixin';
const {
Route,
} = Ember;
export default Route.extend(UnauthenticatedRouteMixin, {
model() {
return this.store.createRecord('registration');
},
});

View File

@@ -0,0 +1,20 @@
import Ember from 'ember';
const {
get,
Route,
inject : { service }
} = Ember;
export default Route.extend({
ajax: service('ajax'),
beforeModel(transition) {
const notifyToken = transition.params.unsubscribe.notify_token;
get(this, 'ajax').request(`/unsubscribe/${ notifyToken }`, {
type: 'GET',
data: transition.queryParams,
});
}
});