UI Cleanup - Updated Form and Handlebars subtree.

This commit is contained in:
Taloth Saldono 2015-02-13 22:05:27 +01:00
parent fb7988edb8
commit a5fd28326e
13 changed files with 345 additions and 311 deletions

View File

@ -2,34 +2,40 @@ var Marionette = require('marionette');
var Handlebars = require('handlebars');
var _ = require('underscore');
module.exports = (function(){
var _fieldBuilder = function(field){
if(!field.type) {
return _templateRenderer.apply(field, ['Form/TextboxTemplate']);
}
if(field.type === 'password') {
return _templateRenderer.apply(field, ['Form/PasswordTemplate']);
}
if(field.type === 'checkbox') {
return _templateRenderer.apply(field, ['Form/CheckboxTemplate']);
}
if(field.type === 'select') {
return _templateRenderer.apply(field, ['Form/SelectTemplate']);
}
if(field.type === 'path') {
return _templateRenderer.apply(field, ['Form/PathTemplate']);
}
return _templateRenderer.apply(field, ['Form/TextboxTemplate']);
};
var _templateRenderer = function(templateName) {
var templateFunction = Marionette.TemplateCache.get(templateName);
return new Handlebars.SafeString(templateFunction(this));
};
var _fieldBuilder = function(field) {
if (!field.type) {
return _templateRenderer.call(field, 'Form/TextboxTemplate');
}
if (field.type === 'password') {
return _templateRenderer.call(field, 'Form/PasswordTemplate');
}
if (field.type === 'checkbox') {
return _templateRenderer.call(field, 'Form/CheckboxTemplate');
}
if (field.type === 'select') {
return _templateRenderer.call(field, 'Form/SelectTemplate');
}
if (field.type === 'path') {
return _templateRenderer.call(field, 'Form/PathTemplate');
}
return _templateRenderer.call(field, 'Form/TextboxTemplate');
};
Handlebars.registerHelper('formBuilder', function() {
var ret = '';
_.each(this.fields, function(field) {
ret += _fieldBuilder(field);
});
return new Handlebars.SafeString(ret);
});
}).call(this);

View File

@ -1,9 +1,7 @@
var Handlebars = require('handlebars');
module.exports = (function(){
Handlebars.registerHelper('debug', function() {
console.group('Handlebar context');
console.log(this);
console.groupEnd();
});
}).call(this);

View File

@ -3,70 +3,88 @@ var moment = require('moment');
var FormatHelpers = require('../../Shared/FormatHelpers');
var UiSettings = require('../../Shared/UiSettingsModel');
module.exports = (function(){
Handlebars.registerHelper('ShortDate', function(input) {
if (!input) {
return '';
}
var date = moment(input);
var result = '<span title="' + date.format(UiSettings.longDateTime()) + '">' + date.format(UiSettings.get('shortDateFormat')) + '</span>';
return new Handlebars.SafeString(result);
});
Handlebars.registerHelper('RelativeDate', function(input) {
if (!input) {
return '';
}
var date = moment(input);
var result = '<span title="{0}">{1}</span>';
var tooltip = date.format(UiSettings.longDateTime());
var text;
if (UiSettings.get('showRelativeDates')) {
text = FormatHelpers.relativeDate(input);
}
else {
} else {
text = date.format(UiSettings.get('shortDateFormat'));
}
result = result.format(tooltip, text);
return new Handlebars.SafeString(result);
});
Handlebars.registerHelper('Day', function(input) {
if (!input) {
return '';
}
return moment(input).format('DD');
});
Handlebars.registerHelper('Month', function(input) {
if (!input) {
return '';
}
return moment(input).format('MMM');
});
Handlebars.registerHelper('StartTime', function(input) {
if (!input) {
return '';
}
return moment(input).format(UiSettings.time(false, false));
});
Handlebars.registerHelper('LTS', function(input) {
if (!input) {
return '';
}
return moment(input).format(UiSettings.time(true, true));
});
Handlebars.registerHelper('if_today', function(context, options) {
var date = moment(context).startOf('day');
var today = moment().startOf('day');
if (date.isSame(today)) {
return options.fn(this);
}
return options.inverse(this);
});
Handlebars.registerHelper('unless_today', function(context, options) {
var date = moment(context).startOf('day');
var today = moment().startOf('day');
if (date.isSame(today)) {
return options.inverse(this);
}
return options.fn(this);
});
}).call(this);

View File

@ -1,17 +1,16 @@
var Handlebars = require('handlebars');
module.exports = (function(){
Handlebars.registerHelper('eachReverse', function(context) {
var options = arguments[arguments.length - 1];
var ret = '';
if (context && context.length > 0) {
for (var i = context.length - 1; i >= 0; i--) {
ret += options.fn(context[i]);
}
}
else {
} else {
ret = options.inverse(this);
}
return ret;
});
}).call(this);

View File

@ -1,18 +1,21 @@
var Handlebars = require('handlebars');
module.exports = (function(){
Handlebars.registerHelper('times', function(n, block) {
var accum = '';
for (var i = 0; i < n; ++i) {
accum += block.fn(i);
}
return accum;
});
Handlebars.registerHelper('for', function(from, to, incr, block) {
var accum = '';
for (var i = from; i < to; i += incr) {
accum += block.fn(i);
}
return accum;
});
}).call(this);

View File

@ -3,51 +3,59 @@ var FormatHelpers = require('../../Shared/FormatHelpers');
var moment = require('moment');
require('../../Activity/Queue/QueueCollection');
module.exports = (function(){
Handlebars.registerHelper('EpisodeNumber', function() {
if (this.series.seriesType === 'daily') {
return moment(this.airDate).format('L');
}
else if(this.series.seriesType === 'anime' && this.absoluteEpisodeNumber !== undefined) {
} else if (this.series.seriesType === 'anime' && this.absoluteEpisodeNumber !== undefined) {
return '{0}x{1} ({2})'.format(this.seasonNumber, FormatHelpers.pad(this.episodeNumber, 2), FormatHelpers.pad(this.absoluteEpisodeNumber, 2));
}
else {
} else {
return '{0}x{1}'.format(this.seasonNumber, FormatHelpers.pad(this.episodeNumber, 2));
}
});
Handlebars.registerHelper('StatusLevel', function() {
var hasFile = this.hasFile;
var downloading = require('../../Activity/Queue/QueueCollection').findEpisode(this.id) || this.downloading;
var currentTime = moment();
var start = moment(this.airDateUtc);
var end = moment(this.end);
if (hasFile) {
return 'success';
}
if (downloading) {
return 'purple';
}
if (this.episodeNumber === 1) {
return 'premiere';
}
if (currentTime.isAfter(start) && currentTime.isBefore(end)) {
return 'warning';
}
if (start.isBefore(currentTime) && !hasFile) {
return 'danger';
}
return 'primary';
});
Handlebars.registerHelper('EpisodeProgressClass', function() {
if (this.episodeFileCount === this.episodeCount) {
if (this.status === 'continuing') {
return '';
}
return 'progress-bar-success';
}
if (this.monitored) {
return 'progress-bar-danger';
}
return 'progress-bar-warning';
});
}).call(this);

View File

@ -2,25 +2,29 @@ var $ = require('jquery');
var Handlebars = require('handlebars');
var StatusModel = require('../../System/StatusModel');
module.exports = (function(){
var placeholder = StatusModel.get('urlBase') + '/Content/Images/poster-dark.png';
window.NzbDrone.imageError = function(img) {
if (!img.src.contains(placeholder)) {
img.src = placeholder;
$(img).addClass('placeholder-image');
}
img.onerror = null;
};
Handlebars.registerHelper('defaultImg', function(src, size) {
if (!src) {
return new Handlebars.SafeString('onerror="window.NzbDrone.imageError(this);"');
}
if (size) {
src = src.replace(/\.jpg($|\?)/g, '-' + size + '.jpg$1');
}
return new Handlebars.SafeString('src="{0}" onerror="window.NzbDrone.imageError(this);"'.format(src));
});
Handlebars.registerHelper('UrlBase', function() {
return new Handlebars.SafeString(StatusModel.get('urlBase'));
});
}).call(this);

View File

@ -1,14 +1,14 @@
var Handlebars = require('handlebars');
var FormatHelpers = require('../../Shared/FormatHelpers');
module.exports = (function(){
Handlebars.registerHelper('Bytes', function(size) {
return new Handlebars.SafeString(FormatHelpers.bytes(size));
});
Handlebars.registerHelper('Pad2', function(input) {
return FormatHelpers.pad(input, 2);
});
Handlebars.registerHelper('Number', function(input) {
return FormatHelpers.number(input);
});
}).call(this);

View File

@ -1,12 +1,12 @@
var Handlebars = require('handlebars');
var ProfileCollection = require('../../Profile/ProfileCollection');
module.exports = (function(){
Handlebars.registerHelper('profile', function(profileId) {
var profile = ProfileCollection.get(profileId);
if (profile) {
return new Handlebars.SafeString('<span class="label label-default profile-label">' + profile.get('name') + '</span>');
}
return undefined;
});
}).call(this);

View File

@ -1,10 +1,7 @@
'use strict';
define(
[
'handlebars',
'System/StatusModel',
'underscore'
], function (Handlebars, StatusModel, _) {
var Handlebars = require('handlebars');
var StatusModel = require('../../System/StatusModel');
var _ = require('underscore');
Handlebars.registerHelper('poster', function() {
var placeholder = StatusModel.get('urlBase') + '/Content/Images/poster-dark.png';
@ -80,4 +77,3 @@ define(
return new Handlebars.SafeString('{0} <span class="year">({1})</span>'.format(this.title, this.year));
});
});

View File

@ -1,9 +1,7 @@
var Handlebars = require('handlebars');
module.exports = (function(){
Handlebars.registerHelper('TitleCase', function(input) {
return new Handlebars.SafeString(input.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}));
});
}).call(this);

View File

@ -1,17 +1,18 @@
var Handlebars = require('handlebars');
var StatusModel = require('../../System/StatusModel');
module.exports = (function(){
Handlebars.registerHelper('if_windows', function(options) {
if (StatusModel.get('isWindows')) {
return options.fn(this);
}
return options.inverse(this);
});
Handlebars.registerHelper('if_mono', function(options) {
if (StatusModel.get('isMono')) {
return options.fn(this);
}
return options.inverse(this);
});
}).call(this);

View File

@ -14,10 +14,13 @@ require('./Handlebars.Debug');
module.exports = function() {
this.get = function(templateId) {
var templateKey = templateId.toLowerCase().replace('template', '');
var templateFunction = window.T[templateKey];
if (!templateFunction) {
throw 'couldn\'t find pre-compiled template ' + templateKey;
}
return function(data) {
try {
var wrappedTemplate = Handlebars.template.call(Handlebars, templateFunction);