Skip to content

Commit

Permalink
Refactor package (#31)
Browse files Browse the repository at this point in the history
* Refactor package

* Upgrade packages

* Fix tests

* Upgrade qunit
  • Loading branch information
Exelord committed May 1, 2017
1 parent 679e68a commit 125ab0e
Show file tree
Hide file tree
Showing 25 changed files with 223 additions and 151 deletions.
4 changes: 0 additions & 4 deletions .bowerrc

This file was deleted.

2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
module.exports = {
root: true,
parserOptions: {
ecmaVersion: 6,
ecmaVersion: 2017,
sourceType: 'module'
},
extends: 'eslint:recommended',
Expand Down
8 changes: 2 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ sudo: false
cache:
directories:
- $HOME/.npm
- $HOME/.cache # includes bowers cache

env:
# we recommend testing LTS's and latest stable release (bonus points to beta/canary)
Expand All @@ -25,14 +24,11 @@ matrix:

before_install:
- npm config set spin false
- npm install -g bower
- bower --version
- npm install phantomjs-prebuilt
- node_modules/phantomjs-prebuilt/bin/phantomjs --version
- npm install -g phantomjs-prebuilt
- phantomjs --version

install:
- npm install
- bower install

script:
# Usually, it's ok to finish the test scenario without reverting
Expand Down
10 changes: 5 additions & 5 deletions addon/mixins/initials/index.js → addon/mixins/initials.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import Ember from 'ember';
import { colorIndex } from './-private/utils';
import { generateInitials } from './-private/generators';
import ColorIndex from '../utils/color-index';
import Initials from '../utils/initials';

export default Ember.Mixin.create({
tagName: 'img',
attributeBindings: ['width', 'height', 'src', 'onError'],

initialsStore: Ember.inject.service('ember-initials/initials-store'),
initialsStore: Ember.inject.service('ember-initials-store'),

defaultName: '?',
defaultBackground: '#dd6a58',
Expand Down Expand Up @@ -47,7 +47,7 @@ export default Ember.Mixin.create({
if (this.get('seedText') === this.get('defaultName')) {
return this.get('defaultBackground');
} else {
let index = colorIndex(this.get('seedText'), this.get('colors.length'));
let index = ColorIndex(this.get('seedText'), this.get('colors.length'));
return this.get('colors')[index];
}
}),
Expand Down Expand Up @@ -80,7 +80,7 @@ export default Ember.Mixin.create({
return {
width: 100,
height: 100,
initials: generateInitials(this.get('name') || this.get('defaultName')),
initials: Initials(this.get('name') || this.get('defaultName')),
initialsColor: this.get('textColor'),
textStyles: Ember.assign(this._textStyles(), this.get('textStyles')),
backgroundStyles: Ember.assign(this._backgroundStyles(), this.get('backgroundStyles')),
Expand Down
59 changes: 0 additions & 59 deletions addon/mixins/initials/-private/generators.js

This file was deleted.

27 changes: 27 additions & 0 deletions addon/services/ember-initials-store.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Ember from 'ember';
import hash from 'object-hash';
import SvgGenerator from '../utils/generators/svg';

const { computed, Service } = Ember;

export default Service.extend({
initials: {},

generator: computed(function() {
return new SvgGenerator;
}),

removeAll() {
Object.keys(this.get(`initials`)).forEach((key) => this.get('generator').revoke(key))
this.set('initials', {});
},

initialsFor(properties) {
let key = hash(properties);
return this.get(`initials`)[key] || this._create(key, properties);
},

_create(key, properties) {
return this.get('initials')[key] = this.get('generator').generate(properties);
}
});
20 changes: 0 additions & 20 deletions addon/services/initials-store.js

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
export function hashCode(string) {
export default function (seedText, colorsLength) {
let code = hashCode(seedText);
return Math.abs(Math.floor(code % colorsLength));
}

// Private

function hashCode(string) {
let hash = 0;

if (string.length === 0) return hash;
Expand All @@ -11,8 +18,3 @@ export function hashCode(string) {

return hash;
}

export function colorIndex(seedText, colorsLength) {
let code = hashCode(seedText);
return Math.abs(Math.floor(code % colorsLength));
}
23 changes: 23 additions & 0 deletions addon/utils/generators/base.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// This is an Initials Image Generator Interface
// You have to implement these methods if you want to create your own generator

// revoke(url) {
// should revoke image from browser cache
// }

// generate(properties) {
// should return generated image url
// }

export default class {
constructor() {
this._implement(this.revoke, 'revoke');
this._implement(this.generate, 'generate');
}

_implement(fn, name) {
if (typeof fn !== "function" || fn.length !== 1) {
throw `Base Generator: '${name}' function has to be implemented with exactly one argument!`
}
}
}
45 changes: 45 additions & 0 deletions addon/utils/generators/svg.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import Ember from 'ember';
import Base from './base';

export default class extends Base {
revoke(url) {
URL.revokeObjectURL(url);
}

generate(properties) {
let textElement = this._generateTextElement(properties.initials, properties.initialsColor, properties.textStyles);
let svgElement = this._generateSvgElement(properties.width, properties.height, properties.backgroundStyles);

svgElement.append(textElement);
let finalElement = Ember.$('<div>').append(svgElement);
let blob = new Blob([finalElement.html()], { type: "image/svg+xml" });
return URL.createObjectURL(blob);
}

// Private

_generateTextElement(text, color, styles = {}) {
return this._generateElement('<text></text>', styles, {
y: '50%',
x: '50%',
dy: '0.35em',
'text-anchor': 'middle',
'pointer-events': 'auto',
fill: color,
}).html(text);
}

_generateElement(name, styles = {}, attrs = {}) {
return Ember.$(name).attr(attrs).css(styles);
}

_generateSvgElement(width, height, styles = {}) {
return this._generateElement('<svg></svg>', styles, {
width,
height,
xmlns: 'http://www.w3.org/2000/svg',
'pointer-events': 'none',
'viewBox': '0 0 100 100'
});
}
}
20 changes: 20 additions & 0 deletions addon/utils/initials.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
export default function(name) {
let initials = name ? name.trim() : '';
let letters = initials.split(' ');

if (letters.length > 1) {
let first = capitalizedFirstLetter(letters.shift());
let last = capitalizedFirstLetter(letters.pop());
initials = first + last;
} else if (letters.length === 1) {
initials = capitalizedFirstLetter(letters.shift());
}

return initials;
}

// Private

function capitalizedFirstLetter(word) {
return word ? word[0].toUpperCase() : '';
}
1 change: 1 addition & 0 deletions app/services/ember-initials-store.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'ember-initials/services/ember-initials-store';
1 change: 0 additions & 1 deletion app/services/ember-initials/initials-store.js

This file was deleted.

3 changes: 0 additions & 3 deletions bower.json

This file was deleted.

4 changes: 2 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ module.exports = {
this._super.included(app);

app.import('vendor/ember-initials/md5.js');
app.import('vendor/ember-initials/shims/md5/' + shimFor('md5'), {
app.import('vendor/shims/md5/' + shimFor('md5'), {
type: 'vendor'
});

app.import('vendor/ember-initials/object_hash.js');
app.import('vendor/ember-initials/shims/object-hash/' + shimFor('object-hash'), {
app.import('vendor/shims/object-hash/' + shimFor('object-hash'), {
type: 'vendor'
});
},
Expand Down
24 changes: 12 additions & 12 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,22 @@
"devDependencies": {
"bootstrap-sass": "^3.3.7",
"broccoli-asset-rev": "2.5.0",
"ember-ajax": "2.5.6",
"ember-bootstrap": "1.0.0-alpha.9",
"ember-cli": "2.12.1",
"ember-ajax": "^3.0.0",
"ember-bootstrap": "1.0.0-alpha.12",
"ember-cli": "2.13.0",
"ember-cli-app-version": "3.0.0",
"ember-cli-dependency-checker": "^1.3.0",
"ember-cli-eslint": "^3.0.0",
"ember-cli-fastboot": "1.0.0-beta.16",
"ember-cli-fastboot": "1.0.0-beta.18",
"ember-cli-favicon": "1.0.0-beta.4",
"ember-cli-github-pages": "0.1.2",
"ember-cli-htmlbars": "^1.1.1",
"ember-cli-htmlbars-inline-precompile": "^0.3.6",
"ember-cli-htmlbars-inline-precompile": "^0.4.0",
"ember-cli-inject-live-reload": "^1.4.1",
"ember-cli-qunit": "^3.1.0",
"ember-cli-qunit": "^4.0.0",
"ember-cli-release": "^1.0.0-beta.2",
"ember-cli-sass": "6.1.2",
"ember-cli-shims": "^1.0.2",
"ember-cli-sass": "6.1.3",
"ember-cli-shims": "^1.1.0",
"ember-cli-sri": "^2.1.0",
"ember-cli-test-loader": "^2.1.0",
"ember-cli-uglify": "^1.2.0",
Expand All @@ -60,14 +60,14 @@
"ember-load-initializers": "^1.0.0",
"ember-resolver": "^4.1.0",
"ember-scroll-to": "0.6.4",
"ember-source": "~2.12.0",
"loader.js": "4.2.3"
"ember-source": "~2.13.0",
"loader.js": "4.3.0"
},
"dependencies": {
"blueimp-md5": "^2.7.0",
"broccoli-funnel": "1.1.0",
"broccoli-funnel": "1.2.0",
"broccoli-merge-trees": "2.0.0",
"ember-cli-babel": "^5.2.4",
"ember-cli-babel": "^6.1.0",
"object-hash": "^1.1.8"
},
"fastbootDependencies": [
Expand Down
2 changes: 2 additions & 0 deletions tests/test-helper.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import resolver from './helpers/resolver';
import { setResolver } from 'ember-qunit';
import { start } from 'ember-cli-qunit';

setResolver(resolver);
start();
Loading

0 comments on commit 125ab0e

Please sign in to comment.