Skip to content

Commit

Permalink
Merge pull request #28 from adiwg/feature-24-basic-layout-and-navigation
Browse files Browse the repository at this point in the history
Feature 24 basic layout and navigation
  • Loading branch information
jlblcc committed Mar 11, 2016
2 parents 787fb1b + c1159a8 commit 9e2ded5
Show file tree
Hide file tree
Showing 177 changed files with 3,663 additions and 94 deletions.
1 change: 1 addition & 0 deletions .jshintrc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"-Promise"
],
"browser": true,
"jquery": true,
"boss": true,
"curly": true,
"debug": false,
Expand Down
45 changes: 27 additions & 18 deletions app/app.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
import Ember from 'ember';
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';
import config from './config/environment';

var App;

Ember.MODEL_FACTORY_INJECTIONS = true;

App = Ember.Application.extend({
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix,
Resolver: Resolver
});

loadInitializers(App, config.modulePrefix);

export default App;
import Ember from 'ember';
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';
import config from './config/environment';

let App;

Ember.MODEL_FACTORY_INJECTIONS = true;

App = Ember.Application.extend({
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix,
Resolver
});

loadInitializers(App, config.modulePrefix);

//for bootstrap
Ember.LinkComponent.reopen({
attributeBindings: ['data-toggle', 'data-placement']
});
//for crumbly
Ember.Route.reopen({
//breadCrumb: null
});

export default App;
2 changes: 2 additions & 0 deletions app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
<link rel="stylesheet" href="assets/vendor.css">
<link rel="stylesheet" href="assets/mdeditor.css">

<link rel="shortcut icon" href="./favicon.ico">

{{content-for 'head-footer'}}
</head>
<body>
Expand Down
33 changes: 33 additions & 0 deletions app/models/contact.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import Ember from 'ember';
import DS from 'ember-data';
import UUID from "npm:node-uuid";

export default DS.Model.extend({
json: DS.attr('json', {
defaultValue: function () {
var obj = {
"contactId": UUID.v4(),
"organizationName": null,
"individualName": "New Contact",
"positionName": null,
"phoneBook": [],
"address": {},
"onlineResource": [],
"contactInstructions": null
};
return obj;
}
}),
title: Ember.computed('json.individualName', 'json.organizationName',
function () {
const json = this.get('json');

return json.individualName || json.organizationName;
}),
icon: Ember.computed('json.individualName', 'json.organizationName',
function () {
const name = this.get('json.individualName');

return name ? 'user' : 'users';
})
});
31 changes: 31 additions & 0 deletions app/models/dictionary.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import Ember from 'ember';
import DS from 'ember-data';

export default DS.Model.extend({
json: DS.attr('json', {
defaultValue() {
const obj = {
"dictionaryInfo": {
"citation": {
"title": "My Dictionary",
"date": [{
"date": new Date()
.toISOString(),
"dateType": "creation"
}]
},
"description": "Data dictionary.",
"resourceType": null
},
"domain": [],
"entity": []
};

return obj;
}
}),
title: Ember.computed('json.dictionaryInfo.citation.title', function () {
return this.get('json.dictionaryInfo.citation.title');
}),
icon: 'book'
});
56 changes: 56 additions & 0 deletions app/models/record.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import Ember from 'ember';
import DS from 'ember-data';
import UUID from "npm:node-uuid";

export default DS.Model.extend({
profile: DS.attr('string', {
defaultValue: 'full'
}),
json: DS.attr('json', {
defaultValue() {
const obj = Ember.Object.create({
"version": {
"name": "mdJson",
"version": "1.0.0"
},
"contact": [],
"metadata": {
"metadataInfo": {
"metadataIdentifier": {
"identifier": UUID.v4(),
"type": "uuid"
}
},
"resourceInfo": {
"resourceType": null,
"citation": {
"title": "My Record",
"date": [{
"date": new Date()
.toISOString(),
"dateType": "creation"
}]
},
"pointOfContact": [],
"abstract": null,
"status": null,
"language": ["eng; USA"]
}
}
});

return obj;
}
}),

title: Ember.computed('json.metadata.resourceInfo.citation.title', function () {
return this.get('json.metadata.resourceInfo.citation.title');
}),
icon: Ember.computed('json.metadata.resourceInfo.resourceType', function () {
const type = this.get('json.metadata.resourceInfo.resourceType');
const list = Ember.getOwner(this)
.lookup('service:icon');

return type ? list.get(type) || list.get('default') : list.get('defaultFile');
})
});
182 changes: 182 additions & 0 deletions app/pods/components/input/md-input-codelist-single/component.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
import Ember from 'ember';

export default Ember.Component.extend({
/**
* [service description]
* @param {[type]} 'codelist' [description]
* @return {[type]} [description]
*/
mdCodes: Ember.inject.service('codelist'),

/**
* [service description]
* @return {Object} [description]
*/
icons: Ember.inject.service('icon'),

/**
* [create description]
* @type {Boolean}
*/
create: false,

/**
* [tooltip description]
* @type {Boolean}
*/
tooltip: false,

/**
* [icon description]
* @type {Boolean}
*/
icon: false,

/**
* [allowClear description]
* @type {Boolean}
*/
allowClear: false,

/**
* [mdCodeName description]
* @type {String} mdCodeName
*/

/**
* [placeholder description]
* @type {String}
*/
placeholder: "Select one option",

/**
* [label description]
* @type {String} label
*/

/**
* [width description]
* @type {String} width
*/
width: "100%",

/**
* [disabled description]
* @type {Boolean} width
*/
disabled: false,

/**
* codelist is an array of code objects in mdCodelist format
* the initial codelist for 'mdCodeName' is pulled from the 'codelist' service;
* then if a new value was created by the user a new object will be added into the codelist;
* then a new 'selected' element will be added to each codelist object to let select2
* know if this item should be selected.
*
* @return {Array}
*/
codelist: Ember.computed('value', function() {
let codelist = [];
let codelistName = this.get('mdCodeName');
let mdCodelist = this.get('mdCodes')
.get(codelistName)
.codelist
.sortBy('codeName');
mdCodelist.forEach(function(item) {
let newObject = {
code: item['code'],
codeName: item['codeName'],
description: item['description'],
selected: false
};
codelist.pushObject(newObject);
});

let selectedItem = this.get('value');
let create = this.get('create');
if(selectedItem) {
if(create) {
let index = mdCodelist.indexOf(selectedItem);
if(index === -1) {
let newObject = {
code: Math.floor(Math.random() * 100000) + 1,
codeName: selectedItem,
description: 'Undefined',
selected: false
};
codelist.pushObject(newObject);
}
}

codelist.forEach(function(item) {
item['selected'] = (item['codeName'] === selectedItem);
});
}

return codelist;
}),

// Format options for the select tag
// Add tooltips,icons if requested
didInsertElement: function() {
let tooltip = this.get('tooltip');
let icon = this.get('icon');
let icons = this.get('icons');

function formatOption(option) {
let text = option['text'];
let $option = $(`<div> ${text}</div>`);

if(icon) {
$option.prepend(
`<span class="fa fa-${icons.get(text) || icons.get('defaultList')}"> </span>`
);
}

if(tooltip) {
let tip = $(option.element)
.data('tooltip');

$option = $option.append(
$(
`<span class="badge pull-right" data-toggle="tooltip"
data-placement="left" data-container="body"
title="${tip}">?</span>`
)
.on('mousedown', function(e) {
$(e.target)
.tooltip('destroy');
return true;
})
.tooltip());
}
return $option;
}

this.$('.md-input-codelist-single')
.select2({
placeholder: this.get('placeholder'),
allowClear: this.get('allowClear'),
tags: this.get('create'),
templateResult: formatOption,
width: this.get('width'),
minimumResultsForSearch: 10,
theme: 'bootstrap'
});
},

didRender() {
this.$('.md-input-codelist-single')
.trigger('change.select2');
},

actions: {
// do the binding to value
setValue: function() {
let selectedEl = this.$('select');
let selectedValue = selectedEl.val();
this.set('value', selectedValue);
}
}

});
22 changes: 22 additions & 0 deletions app/pods/components/input/md-input-codelist-single/template.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{{#if label}}
<div class="form-group">
<label>{{label}}</label>
<select class="form-control md-input-codelist-single" {{action 'setValue' on='change'}}>
<option></option>
{{#each codelist as |code index|}}
<option value={{code.codeName}} selected={{code.selected}}
data-tooltip={{code.description}}>{{code.codeName}}</option>
{{/each}}
{{yield}}
</select>
</div>
{{else}}
<select class="form-control md-input-codelist-single" {{action 'setValue' on='change'}}>
<option></option>
{{#each codelist as |code index|}}
<option value={{code.codeName}} selected={{code.selected}}
data-tooltip={{code.description}}>{{code.codeName}}</option>
{{/each}}
{{yield}}
</select>
{{/if}}
Loading

0 comments on commit 9e2ded5

Please sign in to comment.