UI Cleanup - Updated Form and Handlebars subtree.

pull/3113/head
Taloth Saldono 10 years ago
parent fb7988edb8
commit a5fd28326e

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

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

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

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

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

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

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

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

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

@ -1,83 +1,79 @@
'use strict'; var Handlebars = require('handlebars');
define( var StatusModel = require('../../System/StatusModel');
[ var _ = require('underscore');
'handlebars',
'System/StatusModel', Handlebars.registerHelper('poster', function() {
'underscore'
], function (Handlebars, StatusModel, _) { var placeholder = StatusModel.get('urlBase') + '/Content/Images/poster-dark.png';
Handlebars.registerHelper('poster', function () { var poster = _.where(this.images, { coverType : 'poster' });
var placeholder = StatusModel.get('urlBase') + '/Content/Images/poster-dark.png'; if (poster[0]) {
var poster = _.where(this.images, {coverType: 'poster'}); if (!poster[0].url.match(/^https?:\/\//)) {
return new Handlebars.SafeString('<img class="series-poster" {0}>'.format(Handlebars.helpers.defaultImg.call(null, poster[0].url, 250)));
if (poster[0]) { } else {
if (!poster[0].url.match(/^https?:\/\//)) { return new Handlebars.SafeString('<img class="series-poster" {0}>'.format(Handlebars.helpers.defaultImg.call(null, poster[0].url)));
return new Handlebars.SafeString('<img class="series-poster" {0}>'.format(Handlebars.helpers.defaultImg.call(null, poster[0].url, 250))); }
} else { }
return new Handlebars.SafeString('<img class="series-poster" {0}>'.format(Handlebars.helpers.defaultImg.call(null, poster[0].url)));
} return new Handlebars.SafeString('<img class="series-poster placeholder-image" src="{0}">'.format(placeholder));
} });
return new Handlebars.SafeString('<img class="series-poster placeholder-image" src="{0}">'.format(placeholder)); Handlebars.registerHelper('traktUrl', function() {
}); return 'http://trakt.tv/show/' + this.titleSlug;
});
Handlebars.registerHelper('traktUrl', function () {
return 'http://trakt.tv/show/' + this.titleSlug; Handlebars.registerHelper('imdbUrl', function() {
}); return 'http://imdb.com/title/' + this.imdbId;
});
Handlebars.registerHelper('imdbUrl', function () {
return 'http://imdb.com/title/' + this.imdbId; Handlebars.registerHelper('tvdbUrl', function() {
}); return 'http://www.thetvdb.com/?tab=series&id=' + this.tvdbId;
});
Handlebars.registerHelper('tvdbUrl', function () {
return 'http://www.thetvdb.com/?tab=series&id=' + this.tvdbId; Handlebars.registerHelper('tvRageUrl', function() {
}); return 'http://www.tvrage.com/shows/id-' + this.tvRageId;
});
Handlebars.registerHelper('tvRageUrl', function () {
return 'http://www.tvrage.com/shows/id-' + this.tvRageId; Handlebars.registerHelper('route', function() {
}); return StatusModel.get('urlBase') + '/series/' + this.titleSlug;
});
Handlebars.registerHelper('route', function () {
return StatusModel.get('urlBase') + '/series/' + this.titleSlug; Handlebars.registerHelper('percentOfEpisodes', function() {
}); var episodeCount = this.episodeCount;
var episodeFileCount = this.episodeFileCount;
Handlebars.registerHelper('percentOfEpisodes', function () {
var episodeCount = this.episodeCount; var percent = 100;
var episodeFileCount = this.episodeFileCount;
if (episodeCount > 0) {
var percent = 100; percent = episodeFileCount / episodeCount * 100;
}
if (episodeCount > 0) {
percent = episodeFileCount / episodeCount * 100; return percent;
} });
return percent; Handlebars.registerHelper('seasonCountHelper', function() {
}); var seasonCount = this.seasonCount;
var continuing = this.status === 'continuing';
Handlebars.registerHelper('seasonCountHelper', function () {
var seasonCount = this.seasonCount; if (continuing) {
var continuing = this.status === 'continuing'; return new Handlebars.SafeString('<span class="label label-info">Season {0}</span>'.format(seasonCount));
}
if (continuing) {
return new Handlebars.SafeString('<span class="label label-info">Season {0}</span>'.format(seasonCount)); if (seasonCount === 1) {
} return new Handlebars.SafeString('<span class="label label-info">{0} Season</span>'.format(seasonCount));
}
if (seasonCount === 1) {
return new Handlebars.SafeString('<span class="label label-info">{0} Season</span>'.format(seasonCount)); return new Handlebars.SafeString('<span class="label label-info">{0} Seasons</span>'.format(seasonCount));
} });
return new Handlebars.SafeString('<span class="label label-info">{0} Seasons</span>'.format(seasonCount)); Handlebars.registerHelper('titleWithYear', function() {
}); if (this.title.endsWith(' ({0})'.format(this.year))) {
return this.title;
Handlebars.registerHelper('titleWithYear', function () { }
if (this.title.endsWith(' ({0})'.format(this.year))) {
return this.title; if (!this.year) {
} return this.title;
}
if (!this.year) {
return this.title; return new Handlebars.SafeString('{0} <span class="year">({1})</span>'.format(this.title, this.year));
} });
return new Handlebars.SafeString('{0} <span class="year">({1})</span>'.format(this.title, this.year));
});
});

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

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

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

Loading…
Cancel
Save