redoc/lib/utils/pipes.js

68 lines
1.7 KiB
JavaScript
Raw Normal View History

2015-10-08 20:16:45 +03:00
'use strict';
2015-12-14 19:31:17 +03:00
import {Pipe} from 'angular2/core';
import {isString, stringify, isBlank} from 'angular2/src/facade/lang';
import {BaseException} from 'angular2/src/facade/exceptions';
2015-10-08 20:16:45 +03:00
import {JsonPointer} from './JsonPointer';
import marked from 'marked';
marked.setOptions({
renderer: new marked.Renderer(),
gfm: true,
tables: true,
breaks: false,
pedantic: false,
smartLists: true,
smartypants: false
});
2015-12-14 19:31:17 +03:00
class InvalidPipeArgumentException extends BaseException {
constructor(type, value) {
super(`Invalid argument '${value}' for pipe '${stringify(type)}'`);
}
}
2015-10-08 20:16:45 +03:00
2015-12-14 19:14:14 +03:00
@Pipe({ name: 'keys' })
2015-10-08 20:16:45 +03:00
export class KeysPipe {
2015-12-14 19:31:17 +03:00
transform(value) {
if (isBlank(value)) return value;
if (typeof value !== 'object') {
throw new InvalidPipeArgumentException(ValuesPipe, value);
2015-12-14 19:14:14 +03:00
}
2015-12-14 19:31:17 +03:00
return Object.keys(value);
2015-10-08 20:16:45 +03:00
}
}
2015-12-14 19:14:14 +03:00
@Pipe({ name: 'values' })
2015-10-08 20:16:45 +03:00
export class ValuesPipe {
2015-12-14 19:14:14 +03:00
transform(value) {
2015-12-14 19:31:17 +03:00
if (isBlank(value)) return value;
2015-12-14 19:14:14 +03:00
if (typeof value !== 'object') {
throw new InvalidPipeArgumentException(ValuesPipe, value);
}
return Object.keys(value).map(key => value[key]);
2015-10-08 20:16:45 +03:00
}
}
2015-12-14 19:14:14 +03:00
@Pipe({ name: 'jsonPointerEscape' })
2015-10-08 20:16:45 +03:00
export class JsonPointerEscapePipe {
2015-12-14 19:14:14 +03:00
transform(value) {
2015-12-14 19:31:17 +03:00
if (isBlank(value)) return value;
2015-12-14 19:14:14 +03:00
if (!isString(value)) {
throw new InvalidPipeArgumentException(JsonPointerEscapePipe, value);
}
return JsonPointer.escape(value);
2015-10-08 20:16:45 +03:00
}
}
2015-12-14 19:14:14 +03:00
@Pipe({ name: 'marked' })
export class MarkedPipe {
2015-12-14 19:14:14 +03:00
transform(value) {
2015-12-14 19:31:17 +03:00
if (isBlank(value)) return value;
2015-12-14 19:14:14 +03:00
if (!isString(value)) {
throw new InvalidPipeArgumentException(JsonPointerEscapePipe, value);
}
return `<span class="redoc-markdown-block">${marked(value)}</span>`;
}
}