From 5c71fc3727dc94b183e2bf063ae0857e99c97439 Mon Sep 17 00:00:00 2001 From: Tobias Reich Date: Sun, 15 Mar 2015 15:10:28 +0100 Subject: [PATCH] Rewritten building and binding of sidebar --- dist/main.css | Bin 34559 -> 34587 bytes dist/main.js | Bin 171551 -> 172209 bytes dist/view.js | Bin 93522 -> 91975 bytes src/scripts/build.js | 131 +-------------------- src/scripts/sidebar.js | 246 +++++++++++++++++++++++++++++++++++---- src/scripts/view.js | 15 ++- src/styles/_sidebar.scss | 6 +- 7 files changed, 242 insertions(+), 156 deletions(-) diff --git a/dist/main.css b/dist/main.css index 500a4a52bc77179b9d51f3d12df24ae9c5f0819b..954d3cc267295960539d77a0baec6d761c69d6f9 100644 GIT binary patch delta 107 zcmez0%QU->X+uD`X>n#sYEoj6f^tb>da;f&3Rgi7D2OIzmy%hgGx=ny@@BvAF22og lQ@=1x4$Ksr%#$g`V`ZRVR8XN{0mKHAbu*JTFUgFS1prm&Cei=^ delta 64 zcmbQ;$MnCKX+uEx=2hVxe3Peyi%eEv=GbhR_Lhm!dUAk=$Yixl9Zub({F0LVTq}#o U4Vfa73o-+MGNPLgWJb#Z02|5|(f|Me diff --git a/dist/main.js b/dist/main.js index 6673c02ca79e13b14214be73c7bc8f1a1a4edc0c..c9d74c7e46379f820acb027c98a05fd34b217eea 100644 GIT binary patch delta 7360 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

A6|@T_UyMeaMwZUC}t`q z1@W*EMXKig$9H+$rs<_l1Oe%#E^KxBr9MzT^%4YLjQ{H-*EsI5vS8Sex^JG5t!d5Z zrUTx^S138|ZyF&@#n)chzZ7-mo*(}Uf=6-1PahyFjyr;SEpSYD|M0ULfuT)5U&T;2 zd^HSkPF`(Cv^TEi5H7xZHN;l_{ug~q7~`)$&jFVI@Y{Pa@P0S9nkarl9l>=<_tz0b zu3$Li*Ef(+^g%mWDmIYaHJEU91=$9_EVZpBOBNHi6kbol+@_p?yhS&W@S`e=W-WD! zCJkxUC_7ZnKiy2mNzVUVGifEs(#y@{99QSkX*x^iXs&dsg*20GIaVvPK#kOgk8SVS zfsmyp0;)4(X0$0y&G0cHC(W|D*Fjrb=KNS2L9OB6*hacHy0K{#z%$4jt!ryB2Qn!h=q@+KznRKlMaXX97eAaRDG4>dc z^l#rx-qXb14Afch8xCip)4Dk+>o}mjgZz54YakhoX%Qh~ls#S(6MUGD@d+Nx-6HW3 zx3psm`6MB(|8HRuTJF+JG^@%Pgt3(CFY6>H@nyP`bS!q$LI$J{q7VKqb&~gP%msOF zNZ8glFN#jqGUwWJaYN|pg*I*w$i_uvqU3auNAa@ahq_@B6QzUQWEk%)r4RNHXUUQg zgH;Tp{<1yf7#Z&bO+x>8-79Ia)7^V10e z@ABW5AY*MvH+XpxN^+gxnZzv=_$loyR1Gn?{u>F>0&8p9N0xJBxU_kIglfpJKQu%> z3(3DRM7EKEQe>E1u3erJRlGwa4AiZ$od2H($xd+FbBJ`-0;ya-b%;ofxs(MgJcH`i zf~U@^I*`YI^bpKXDShz}d5xL=(@8SEB#G0VMABb73Zc3Fo>77n#(#Je4w3YKH%i)% zBkr@TsVA=Ny%tC!k!sx`DUn{bMFkHMR?HRv#d#K7BE4xmBm@r_Vm!+z08whZKFDH$jetP`Q|RaNtj?^BHr_2uhhM!Ode>T5_EHf-&*> zJD>u^S5J@_em;JJ>}s2!uq4EmkaW6GaDg6$f`-=$OyTM(j7bdBnJL{Qct0Puhr4^-kk|u;&pWjevGfZ z+joY;+qSXUjE)eO4LJ%y))4CdSOXdRk+#dgm!mab$O3+Q*k3EUo znEr(vx54k$xuyQDON7=s;yJ^gxj49LhAAgdB&TDC!;*aNb6F!*XsT#HCZM^cJ@J;diRa>#NJVQtJ z1@&2Vh&LU4=P5rjBTuV58ywSaRfF~TW#eJfnvoqwDc8{{ew?A2TitC=%Q)GH|I;aM zMX-KCp0@c4w+{MvR%Aca5z{Eb{eR4GiSv99OAc%(HsC-C+RB@akP0p|hy=rugB=Iu zJf1VkTsiV-waQi!eRi)I{IZ*})TKL#@>36}tP?PlbsZ$f?Z@(JMKb5h6!x({uUc$# zwnDD-%Umn6-hMcEqGaDtFv!7fBgc-gv1Xg;G_3GX-v3w@?>WKs$J|LgD)E#pD9`uD zy11q#_MC>~L-5Z%MRs(shYImrpnX0DJK}FL>Vm($-Htq|t9=;z@7FlqfAuNS+*?;R ztZS35%?Z}<<%fcJuw9^!nBNa0X@2|0*y62K!PZJ$-QH|(A0J_tVYZ7w^@KkBx zx?RgiolLi#!J6J+4YT)ai}=cuMLeTU$*%6eH=fIJoBTshlQsTLPZP;+IL)ovfC}r{ z&E9^iI==LSOXSJjq`q|DF9}^-`r_;4ww&+Y!oA|Zeu@+Pdw)vS`Ti;H9c=hl{s(04 zC~KNZ|1EQ0CH~%TlKSwhsb$)GfQCqIf`<(o(J>L~jlF#w_uqdD*RdK@JoHrF9v#Vv z_;=;F79#rBXE=UC^-INvqmy{n5%5smBbJ`kxfg4J;`f~4`icK73$5#~v$^g~c%JF0 zyxX{JXS`S0YVc}qx{jcfGBzjGkb3`bW;rCPrGKC0-e|1Bo~4)XCqWGouTo@O|7PHU6^u08*02@v8%%5%LUfqB+|% M#M1VUaqq18AEAykUjP6A diff --git a/dist/view.js b/dist/view.js index cad47666cebccdb6029758f52cf5364e73c8f747..993b24aa5785b6e53876df29fd64648ec181b929 100644 GIT binary patch delta 13472 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 delta 14463 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 M^6{oatbE#k1BXWVF8}}l diff --git a/src/scripts/build.js b/src/scripts/build.js index 9a80991..a61805a 100644 --- a/src/scripts/build.js +++ b/src/scripts/build.js @@ -244,13 +244,11 @@ build.uploadModal = function(title, files) { } -build.tags = function(tags, forView = false) { +build.tags = function(tags) { var html = '', editTagsHTML = ''; - if (forView===false&&lychee.publicMode===false) editTagsHTML = ' ' + build.editIcon('edit_tags'); - if (tags!=='') { tags = tags.split(','); @@ -259,11 +257,9 @@ build.tags = function(tags, forView = false) { html += `${ tag }${ build.iconic('x') }` }); - html += editTagsHTML; - } else { - html = `

No Tags${ editTagsHTML }
`; + html = `
No Tags
`; } @@ -271,129 +267,6 @@ build.tags = function(tags, forView = false) { } -build.sidebarPhoto = function(data, forView = false) { - - var html = '', - visible = '', - editTitleHTML = '', - editDescriptionHTML = '', - exifHash = '', - info = []; - - switch (data.public) { - - case '0': visible = 'No'; - break; - case '1': visible = 'Yes'; - break; - case '2': visible = 'Yes (Album)'; - break; - default: visible = '-'; - break; - - } - - if (forView===false&&lychee.publicMode===false) { - editTitleHTML = ' ' + build.editIcon('edit_title'); - editDescriptionHTML = ' ' + build.editIcon('edit_description'); - } - - infos = [ - ['', 'Basics'], - ['Title', data.title + editTitleHTML], - ['Uploaded', data.sysdate], - ['Description', data.description + editDescriptionHTML], - ['', 'Image'], - ['Size', data.size], - ['Format', data.type], - ['Resolution', data.width + ' x ' + data.height], - ['Tags', build.tags(data.tags, forView)] - ] - - exifHash = data.takestamp+data.make+data.model+data.shutter+data.aperture+data.focal+data.iso; - - if (exifHash!=='0') { - - infos = infos.concat([ - ['', 'Camera'], - ['Captured', data.takedate], - ['Make', data.make], - ['Type/Model', data.model], - ['Shutter Speed', data.shutter], - ['Aperture', data.aperture], - ['Focal Length', data.focal], - ['ISO', data.iso] - ]); - - } - - infos = infos.concat([ - ['', 'Share'], - ['Public', visible] - ]); - - infos.forEach(function(info, i, items) { - - // Set default for empty values - if (info[1]===''||info[1]===null||info[1]===undefined) info[1] = '-'; - - switch (info[0]) { - - case '': - - // Divider - html += ` - -
-

${ info[1] }

-
- - ` - - break; - - case 'Tags': - - // Tags - if (forView===false&&lychee.publicMode===false) { - - html += ` -
-
-

${ info[0] }

-
-
${ info[1] }
- ` - - } - - break; - - default: - - // Item - html += ` - - ${ info[0] } - ${ info[1] } - - ` - - break; - - } - - - }); - - html += ` - - ` - - return html; - -} - build.sidebarAlbum = function(data, forView = false) { var html = '', diff --git a/src/scripts/sidebar.js b/src/scripts/sidebar.js index 2e3828b..ecfbfd6 100644 --- a/src/scripts/sidebar.js +++ b/src/scripts/sidebar.js @@ -5,7 +5,12 @@ sidebar = { - _dom: $('#sidebar') + _dom: $('#sidebar'), + types: { + DEFAULT: 0, + TAGS: 1 + }, + createStructure: {} } @@ -19,23 +24,42 @@ sidebar.dom = function(selector) { sidebar.bind = function() { // This function should be called after building and appending - // the sidebars content to the DOM + // the sidebars content to the DOM. + // This function can be called multiple times, therefore + // event handlers should be removed before binding a new one. // Event Name var eventName = ('ontouchend' in document.documentElement) ? 'touchend' : 'click'; - sidebar.dom('#edit_title').on(eventName, function() { - if (visible.photo()) photo.setTitle([photo.getID()]); - else if (visible.album()) album.setTitle([album.getID()]); - }); + sidebar + .dom('#edit_title') + .off(eventName) + .on(eventName, function() { + if (visible.photo()) photo.setTitle([photo.getID()]); + else if (visible.album()) album.setTitle([album.getID()]); + }); - sidebar.dom('#edit_description').on(eventName, function() { - if (visible.photo()) photo.setDescription(photo.getID()); - else if (visible.album()) album.setDescription(album.getID()); - }); + sidebar + .dom('#edit_description') + .off(eventName) + .on(eventName, function() { + if (visible.photo()) photo.setDescription(photo.getID()); + else if (visible.album()) album.setDescription(album.getID()); + }); - sidebar.dom('#edit_tags') .on(eventName, function() { photo.editTags([photo.getID()]) }); - sidebar.dom('#tags .tag span') .on(eventName, function() { photo.deleteTag(photo.getID(), $(this).data('index')) }); + sidebar + .dom('#edit_tags') + .off(eventName) + .on(eventName, function() { + photo.editTags([photo.getID()]) + }); + + sidebar + .dom('#tags .tag span') + .off(eventName) + .on(eventName, function() { + photo.deleteTag(photo.getID(), $(this).data('index')) + }); return true; @@ -69,20 +93,202 @@ sidebar.setSelectable = function(selectable = true) { } -sidebar.changeAttr = function(attr, value, editable = false) { +sidebar.changeAttr = function(attr, value = '-') { if (attr===undefined||attr===null||attr==='') return false; - // This will add an edit-icon next to the value when editable is true. - // The id of the edit-icon always starts with 'edit_' followed by the name of the attribute. - if (editable===true) value = value + ' ' + build.editIcon('edit_' + attr); + // Set a default for the value + if (value===''||value===null) value = '-'; sidebar.dom('.attr_' + attr).html(value); - // The new edit-icon needs an event, therefore the binding function - // should be executed again after changing the value - if (editable===true) sidebar.bind(); - return true; +} + +sidebar.createStructure.photo = function(data) { + + if (data===undefined||data===null||data==='') return false; + + var editable = false, + exifHash = data.takestamp + data.make + data.model + data.shutter + data.aperture + data.focal + data.iso, + structure = {}, + visible = ''; + + // Enable editable when user logged in + if (lychee.publicMode===false) editable = true; + + // Set value for public + switch (data.public) { + + case '0': visible = 'No'; + break; + case '1': visible = 'Yes'; + break; + case '2': visible = 'Yes (Album)'; + break; + default: visible = '-'; + break; + + } + + structure.basics = { + title: 'Basics', + type: sidebar.types.DEFAULT, + rows: [ + { title: 'Title', value: data.title, editable }, + { title: 'Uploaded', value: data.sysdate }, + { title: 'Description', value: data.description, editable }, + ] + } + + structure.image = { + title: 'Image', + type: sidebar.types.DEFAULT, + rows: [ + { title: 'Size', value: data.size }, + { title: 'Format', value: data.type }, + { title: 'Resolution', value: data.width + ' x ' + data.height } + ] + } + + // Only create tags section when user logged in + if (lychee.publicMode===false) { + + structure.tags = { + title: 'Tags', + type: sidebar.types.TAGS, + value: build.tags(data.tags), + editable + } + + } else { + + structure.tags = {} + + } + + // Only create EXIF section when EXIF data available + if (exifHash!=='0') { + + structure.exif = { + title: 'Camera', + type: sidebar.types.DEFAULT, + rows: [ + { title: 'Captured', value: data.takedate }, + { title: 'Make', value: data.make }, + { title: 'Type/Model', value: data.model }, + { title: 'Shutter Speed', value: data.shutter }, + { title: 'Aperture', value: data.aperture }, + { title: 'Focal Length', value: data.focal }, + { title: 'ISO', value: data.iso } + ] + } + + } else { + + structure.exif = {} + + } + + structure.sharing = { + title: 'Sharing', + type: sidebar.types.DEFAULT, + rows: [ + { title: 'Public', value: visible }, + ] + } + + // Construct all parts of the structure + structure = [ + structure.basics, + structure.image, + structure.tags, + structure.exif, + structure.sharing + ] + + return structure; + +} + +sidebar.render = function(structure) { + + if (structure===undefined||structure===null||structure==='') return false; + + var html = ''; + + var renderDefault = function(section) { + + let _html = ''; + + _html += ` +
+

${ section.title }

+
+ + ` + + section.rows.forEach(function(row) { + + let value = row.value; + + // Set a default for the value + if (value===''||value===null||value===undefined) value = '-'; + + // Wrap span-element around value for easier selecting on change + value = `${ value }`; + + // Add edit-icon to the value when editable + if (row.editable===true) value += ' ' + build.editIcon('edit_' + row.title.toLowerCase()); + + _html += ` + + + + + ` + + }); + + _html += ` +
${ row.title }${ value }
+ ` + + return _html; + + }; + + var renderTags = function(section) { + + let _html = ''; + + _html += ` +
+

${ section.title }

+
+
+
${ section.value }
+ ` + + // Add edit-icon to the value when editable + if (section.editable===true) _html += build.editIcon('edit_tags'); + + _html += ` +
+ ` + + return _html; + + } + + structure.forEach(function(section) { + + if (section.type===sidebar.types.DEFAULT) html += renderDefault(section); + else if (section.type===sidebar.types.TAGS) html += renderTags(section); + + }); + + return html; + } \ No newline at end of file diff --git a/src/scripts/view.js b/src/scripts/view.js index f0ec38c..f623288 100644 --- a/src/scripts/view.js +++ b/src/scripts/view.js @@ -137,7 +137,7 @@ view.album = { lychee.setTitle('Unsorted', false); break; default: - if (album.json.init) sidebar.changeAttr('title', album.json.title, true); + if (album.json.init) sidebar.changeAttr('title', album.json.title); lychee.setTitle(album.json.title, true); break; } @@ -216,7 +216,7 @@ view.album = { description: function() { - sidebar.changeAttr('description', album.json.description, true); + sidebar.changeAttr('description', album.json.description); }, @@ -334,14 +334,14 @@ view.photo = { title: function() { - if (photo.json.init) sidebar.changeAttr('title', photo.json.title, true); + if (photo.json.init) sidebar.changeAttr('title', photo.json.title); lychee.setTitle(photo.json.title, true); }, description: function() { - if (photo.json.init) sidebar.changeAttr('description', photo.json.description, true); + if (photo.json.init) sidebar.changeAttr('description', photo.json.description); }, @@ -380,7 +380,7 @@ view.photo = { tags: function() { - sidebar.dom('#tags').html(build.tags(photo.json.tags)); + sidebar.changeAttr('tags', build.tags(photo.json.tags)); sidebar.bind(); }, @@ -418,7 +418,10 @@ view.photo = { sidebar: function() { - sidebar.dom('.wrapper').html(build.sidebarPhoto(photo.json)); + var structure = sidebar.createStructure.photo(photo.json), + html = sidebar.render(structure); + + sidebar.dom('.wrapper').html(html); sidebar.bind(); } diff --git a/src/styles/_sidebar.scss b/src/styles/_sidebar.scss index 7ed425d..966597a 100644 --- a/src/styles/_sidebar.scss +++ b/src/styles/_sidebar.scss @@ -141,9 +141,13 @@ display: inline-block; } + #tags > div { + display: inline-block; + } + #tags .empty { font-size: 14px; - margin-bottom: 8px; + margin: 0 2px 8px 0; } #tags .edit { margin-top: 6px; }