diff --git a/.gitignore b/.gitignore index db1f13a..abcac95 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,4 @@ # not shared with .npmignore /public/app.js -/public/views.js /public/app.css diff --git a/build b/build index 5a8cc62..fd508d0 100755 --- a/build +++ b/build @@ -2,4 +2,3 @@ mkdir -p public ./node_modules/.bin/stylus -o public/ -c --include-css src/client/styles ./node_modules/.bin/browserify src/client/app.js --outfile public/app.js -./node_modules/.bin/handlebars -f public/views.js src/client/views/ diff --git a/package.json b/package.json index 175319e..73ea5f2 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "multiparty": "^3.2.3" }, "devDependencies": { - "handlebars": "1.0.7", "stylus": "^0.42.3", "browserify": "~3.32.0" }, diff --git a/src/client/app.js b/src/client/app.js index 4271f7d..acc9e5b 100644 --- a/src/client/app.js +++ b/src/client/app.js @@ -1,5 +1,4 @@ var $ = window.$; -var Handlebars = window.Handlebars; var shuffle = require('mess'); var querystring = require('querystring'); @@ -902,13 +901,61 @@ function render(){ handleResize(); } -function genericToggleExpansion($li, options){ +function renderArtist($ul, albumList) { + albumList.forEach(function(album) { + $ul.append( + '
  • ' + + '' + + '' + + '
  • '); + var liDom = $ul.get(0).lastChild; + var divDom = liDom.children[0]; + divDom.setAttribute('id', toAlbumId(album.key)); + divDom.setAttribute('data-key', album.key); + var spanDom = divDom.children[1]; + spanDom.textContent = album.name || '[Unknown Album]'; + + var artistUlDom = liDom.children[1]; + var $artistUlDom = $(artistUlDom); + album.trackList.forEach(function(track) { + $artistUlDom.append( + '
  • ' + + '
    ' + + '' + + '
    ' + + '
  • '); + var trackLiDom = artistUlDom.lastChild; + var trackDivDom = trackLiDom.children[0]; + trackDivDom.setAttribute('id', toTrackId(track.key)); + trackDivDom.setAttribute('data-key', track.key); + var trackSpanDom = trackDivDom.children[0]; + var caption = ""; + if (track.track) { + caption += track.track + ". "; + } + if (track.compilation) { + caption += track.artistName + " - "; + } + caption += track.name; + trackSpanDom.textContent = caption; + }); + }); +} + +function toggleLibraryExpansion($li){ var $div = $li.find("> div"); var $ul = $li.find("> ul"); - if ($div.attr('data-type') === options.top_level_type) { + if ($div.attr('data-type') === 'artist') { if (!$li.data('cached')) { $li.data('cached', true); - $ul.html(options.template(options.context($div.attr('data-key')))); + var artistKey = $div.attr('data-key'); + var albumList = player.searchResults.artistTable[artistKey].albumList; + + renderArtist($ul, albumList); + $ul.toggle(); refreshSelection(); } @@ -924,18 +971,6 @@ function genericToggleExpansion($li, options){ $div.find("div").removeClass(old_class).addClass(new_class); } -function toggleLibraryExpansion($li){ - return genericToggleExpansion($li, { - top_level_type: 'artist', - template: Handlebars.templates.albums, - context: function(key){ - return { - albumList: player.searchResults.artistTable[key].albumList - }; - } - }); -} - function confirmDelete(keysList) { var fileList = keysList.map(function(key) { return player.library.trackTable[key].file; @@ -2197,17 +2232,15 @@ function setUpUi(){ setUpUploadUi(); setUpSettingsUi(); } -function initHandlebars(){ - Handlebars.registerHelper('artistid', function(s){ - return "lib-artist-" + toHtmlId(s); - }); - Handlebars.registerHelper('albumid', function(s){ - return "lib-album-" + toHtmlId(s); - }); - Handlebars.registerHelper('trackid', function(s){ - return "lib-track-" + toHtmlId(s); - }); + +function toAlbumId(s) { + return "lib-album-" + toHtmlId(s); } + +function toTrackId(s) { + return "lib-track-" + toHtmlId(s); +} + function handleResize(){ $nowplaying.width(MARGIN); $pl_window.height(MARGIN); @@ -2291,7 +2324,6 @@ $document.ready(function(){ render(); }); setUpUi(); - initHandlebars(); streaming.init(player, socket); render(); $window.resize(handleResize); diff --git a/src/client/views/albums.handlebars b/src/client/views/albums.handlebars deleted file mode 100644 index 4bee81b..0000000 --- a/src/client/views/albums.handlebars +++ /dev/null @@ -1,17 +0,0 @@ -{{#albumList}} -
  • - - -
  • -{{/albumList}} diff --git a/src/public/index.html b/src/public/index.html index 307b3bb..4c3aef1 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -312,8 +312,6 @@ - - diff --git a/src/public/vendor/handlebars.runtime.js b/src/public/vendor/handlebars.runtime.js deleted file mode 100644 index 87d47ef..0000000 --- a/src/public/vendor/handlebars.runtime.js +++ /dev/null @@ -1,243 +0,0 @@ -// lib/handlebars/base.js - -/*jshint eqnull:true*/ -this.Handlebars = {}; - -(function() { - -Handlebars.VERSION = "1.0.rc.1"; - -Handlebars.helpers = {}; -Handlebars.partials = {}; - -Handlebars.registerHelper = function(name, fn, inverse) { - if(inverse) { fn.not = inverse; } - this.helpers[name] = fn; -}; - -Handlebars.registerPartial = function(name, str) { - this.partials[name] = str; -}; - -Handlebars.registerHelper('helperMissing', function(arg) { - if(arguments.length === 2) { - return undefined; - } else { - throw new Error("Could not find property '" + arg + "'"); - } -}); - -var toString = Object.prototype.toString, functionType = "[object Function]"; - -Handlebars.registerHelper('blockHelperMissing', function(context, options) { - var inverse = options.inverse || function() {}, fn = options.fn; - - - var ret = ""; - var type = toString.call(context); - - if(type === functionType) { context = context.call(this); } - - if(context === true) { - return fn(this); - } else if(context === false || context == null) { - return inverse(this); - } else if(type === "[object Array]") { - if(context.length > 0) { - for(var i=0, j=context.length; i 0) { - for(var i=0, j=context.length; i": ">", - '"': """, - "'": "'", - "`": "`" - }; - - var badChars = /&(?!\w+;)|[<>"'`]/g; - var possible = /[&<>"'`]/; - - var escapeChar = function(chr) { - return escape[chr] || "&"; - }; - - Handlebars.Utils = { - escapeExpression: function(string) { - // don't escape SafeStrings, since they're already safe - if (string instanceof Handlebars.SafeString) { - return string.toString(); - } else if (string == null || string === false) { - return ""; - } - - if(!possible.test(string)) { return string; } - return string.replace(badChars, escapeChar); - }, - - isEmpty: function(value) { - if (typeof value === "undefined") { - return true; - } else if (value === null) { - return true; - } else if (value === false) { - return true; - } else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) { - return true; - } else { - return false; - } - } - }; -})();; -// lib/handlebars/runtime.js -Handlebars.VM = { - template: function(templateSpec) { - // Just add water - var container = { - escapeExpression: Handlebars.Utils.escapeExpression, - invokePartial: Handlebars.VM.invokePartial, - programs: [], - program: function(i, fn, data) { - var programWrapper = this.programs[i]; - if(data) { - return Handlebars.VM.program(fn, data); - } else if(programWrapper) { - return programWrapper; - } else { - programWrapper = this.programs[i] = Handlebars.VM.program(fn); - return programWrapper; - } - }, - programWithDepth: Handlebars.VM.programWithDepth, - noop: Handlebars.VM.noop - }; - - return function(context, options) { - options = options || {}; - return templateSpec.call(container, Handlebars, context, options.helpers, options.partials, options.data); - }; - }, - - programWithDepth: function(fn, data, $depth) { - var args = Array.prototype.slice.call(arguments, 2); - - return function(context, options) { - options = options || {}; - - return fn.apply(this, [context, options.data || data].concat(args)); - }; - }, - program: function(fn, data) { - return function(context, options) { - options = options || {}; - - return fn(context, options.data || data); - }; - }, - noop: function() { return ""; }, - invokePartial: function(partial, name, context, helpers, partials, data) { - var options = { helpers: helpers, partials: partials, data: data }; - - if(partial === undefined) { - throw new Handlebars.Exception("The partial " + name + " could not be found"); - } else if(partial instanceof Function) { - return partial(context, options); - } else if (!Handlebars.compile) { - throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in runtime-only mode"); - } else { - partials[name] = Handlebars.compile(partial); - return partials[name](context, options); - } - } -}; - -Handlebars.template = Handlebars.VM.template; -;