From c08a33fd57dbf5882c954f117f5246dec29f9e40 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Thu, 13 Dec 2018 12:19:18 -0600 Subject: [PATCH] Sort reverse option --- .../javascripts/app/controllers/notes.js | 12 +++++++---- app/assets/javascripts/app/filters/sortBy.js | 13 ++++++++---- app/assets/stylesheets/app/_ionicons.scss | 19 ++++++++++++++---- app/assets/stylesheets/app/_notes.scss | 13 +++++++++++- app/assets/templates/notes.html.haml | 18 ++++++++++------- dist/assets/ionicons.eot | Bin 1930 -> 2090 bytes dist/assets/ionicons.svg | 16 +++++++++------ dist/assets/ionicons.ttf | Bin 1752 -> 1912 bytes dist/assets/ionicons.woff | Bin 1260 -> 1348 bytes 9 files changed, 65 insertions(+), 26 deletions(-) mode change 100644 => 100755 dist/assets/ionicons.svg mode change 100644 => 100755 dist/assets/ionicons.ttf mode change 100644 => 100755 dist/assets/ionicons.woff diff --git a/app/assets/javascripts/app/controllers/notes.js b/app/assets/javascripts/app/controllers/notes.js index 6c0f54644..068a40362 100644 --- a/app/assets/javascripts/app/controllers/notes.js +++ b/app/assets/javascripts/app/controllers/notes.js @@ -44,6 +44,7 @@ angular.module('app') let prevSortValue = this.sortBy; this.sortBy = authManager.getUserPrefValue("sortBy", "created_at"); + this.sortReverse = authManager.getUserPrefValue("sortReverse", false); if(this.sortBy == "updated_at") { // use client_updated_at instead @@ -55,7 +56,6 @@ angular.module('app') this.selectFirstNote(); }) } - this.sortDescending = this.sortBy != "title"; this.showArchived = authManager.getUserPrefValue("showArchived", false); this.hidePinned = authManager.getUserPrefValue("hidePinned", false); @@ -301,17 +301,21 @@ angular.module('app') this.selectedSortByCreated = function() { this.setSortBy("created_at"); - this.sortDescending = true; } this.selectedSortByUpdated = function() { this.setSortBy("client_updated_at"); - this.sortDescending = true; } this.selectedSortByTitle = function() { this.setSortBy("title"); - this.sortDescending = false; + } + + this.toggleReverseSort = function() { + this.selectedMenuItem(); + this.sortReverse = !this.sortReverse; + authManager.setUserPrefValue("sortReverse", this.sortReverse); + authManager.syncUserPreferences(); } this.setSortBy = function(type) { diff --git a/app/assets/javascripts/app/filters/sortBy.js b/app/assets/javascripts/app/filters/sortBy.js index e182b19a5..c1fa496a8 100644 --- a/app/assets/javascripts/app/filters/sortBy.js +++ b/app/assets/javascripts/app/filters/sortBy.js @@ -1,6 +1,6 @@ angular.module('app') .filter('sortBy', function ($filter) { - return function(items, sortBy) { + return function(items, sortBy, reverse) { let sortValueFn = (a, b, pinCheck = false) => { if(!pinCheck) { if(a.pinned && b.pinned) { @@ -14,6 +14,11 @@ angular.module('app') var bValue = b[sortBy] || ""; let vector = 1; + + if(reverse) { + vector *= -1; + } + if(sortBy == "title") { aValue = aValue.toLowerCase(); bValue = bValue.toLowerCase(); @@ -21,11 +26,11 @@ angular.module('app') if(aValue.length == 0 && bValue.length == 0) { return 0; } else if(aValue.length == 0 && bValue.length != 0) { - return 1; + return 1 * vector; } else if(aValue.length != 0 && bValue.length == 0) { - return -1; + return -1 * vector; } else { - vector = -1; + vector *= -1; } } diff --git a/app/assets/stylesheets/app/_ionicons.scss b/app/assets/stylesheets/app/_ionicons.scss index 884e1f781..70647fb73 100644 --- a/app/assets/stylesheets/app/_ionicons.scss +++ b/app/assets/stylesheets/app/_ionicons.scss @@ -11,14 +11,25 @@ Modified icons to fit ionicon’s grid from original. */ @font-face { font-family: "Ionicons"; src: url("../assets/ionicons.eot?v=2.0.0"); src: url("../assets/ionicons.eot?v=2.0.1#iefix") format("embedded-opentype"), url("../assets/ionicons.ttf?v=2.0.1") format("truetype"), url("../assets/ionicons.woff?v=2.0.1") format("woff"), url("../assets/ionicons.svg?v=2.0.1#Ionicons") format("svg"); font-weight: normal; font-style: normal; } -.ion, .ionicons, .ion-ios-box:before, .ion-bookmark:before, .ion-locked:before { display: inline-block; font-family: "Ionicons"; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; text-rendering: auto; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + +.ion, .ionicons, +.ion-ios-box:before, +.ion-bookmark:before, +.ion-locked:before, +.ion-arrow-return-left:before, +.ion-arrow-return-right:before +{ + display: inline-block; font-family: "Ionicons"; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; text-rendering: auto; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; +} .ion-ios-box:before { content: "\f3ec"; } .ion-locked:before { content: "\f200"; } -.ion-bookmark:before { - content: "\f26b"; -} +.ion-bookmark:before { content: "\f26b"; } + +.ion-arrow-return-left:before { content: "\f265"; } + +.ion-arrow-return-right:before { content: "\f266"; } /*# sourceMappingURL=ionicons.css.map */ diff --git a/app/assets/stylesheets/app/_notes.scss b/app/assets/stylesheets/app/_notes.scss index fb659a42a..d087ca044 100644 --- a/app/assets/stylesheets/app/_notes.scss +++ b/app/assets/stylesheets/app/_notes.scss @@ -153,6 +153,17 @@ opacity: 0.6; } + .note-flags { + display: flex; + flex-direction: row; + align-items: center; + + .pinned, .archived { + color: var(--sn-stylekit-info-color); + margin-right: 10px; + } + } + progress { background-color: var(--sn-stylekit-contrast-background-color); color: var(--sn-stylekit-info-color); @@ -170,7 +181,7 @@ background-color: var(--sn-stylekit-info-color); color: var(--sn-stylekit-info-contrast-color); - .pinned { + .pinned, .archived { color: var(--sn-stylekit-info-contrast-color); } diff --git a/app/assets/templates/notes.html.haml b/app/assets/templates/notes.html.haml index 7e82d7719..fc27d7772 100644 --- a/app/assets/templates/notes.html.haml +++ b/app/assets/templates/notes.html.haml @@ -24,6 +24,9 @@ .sk-menu-panel.dropdown-menu{"ng-if" => "ctrl.showMenu"} .sk-menu-panel-header .sk-menu-panel-header-title Sort By + .sk-button.sk-secondary-contrast{"ng-click" => "ctrl.toggleReverseSort()"} + .sk-label + %i.icon{"ng-class" => "{'ion-arrow-return-left' : ctrl.sortReverse == false, 'ion-arrow-return-right' : ctrl.sortReverse == true }"} %menu-row{"label" => "'Date Added'", "circle" => "ctrl.sortBy == 'created_at' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByCreated()", "desc" => "'Sort notes by newest first'"} %menu-row{"label" => "'Date Modified'", "circle" => "ctrl.sortBy == 'client_updated_at' && 'success'", "action" => "ctrl.selectedMenuItem(); ctrl.selectedSortByUpdated()", "desc" => "'Sort notes with the most recently updated first'"} @@ -41,18 +44,19 @@ .scrollable .infinite-scroll#notes-scrollable{"infinite-scroll" => "ctrl.paginate()", "can-load" => "true", "threshold" => "200"} - .note{"ng-repeat" => "note in (ctrl.sortedNotes = (ctrl.tag.notes | filter: ctrl.filterNotes | sortBy: ctrl.sortBy | limitTo:ctrl.notesToDisplay)) track by note.uuid", + .note{"ng-repeat" => "note in (ctrl.sortedNotes = (ctrl.tag.notes | filter: ctrl.filterNotes | sortBy: ctrl.sortBy:ctrl.sortReverse | limitTo:ctrl.notesToDisplay)) track by note.uuid", "ng-click" => "ctrl.selectNote(note, true)", "ng-class" => "{'selected' : ctrl.selectedNote == note}"} %strong.red.medium-text{"ng-if" => "note.conflict_of"} Conflicted copy %strong.red.medium-text{"ng-if" => "note.errorDecrypting"} Unable to Decrypt - .pinned.tinted{"ng-if" => "note.pinned", "ng-class" => "{'tinted-selected' : ctrl.selectedNote == note}"} - %i.icon.ion-bookmark - %strong.medium-text Pinned + .note-flags + .pinned{"ng-if" => "note.pinned"} + %i.icon.ion-bookmark + %strong.medium-text Pinned - .archived.tinted{"ng-if" => "note.archived && !ctrl.tag.isSmartTag()", "ng-class" => "{'tinted-selected' : ctrl.selectedNote == note}"} - %i.icon.ion-ios-box - %strong.medium-text Archived + .archived{"ng-if" => "note.archived && !ctrl.tag.isSmartTag()"} + %i.icon.ion-ios-box + %strong.medium-text Archived .tags-string{"ng-if" => "ctrl.shouldShowTags(note)"} .faded {{note.savedTagsString || note.tagsString()}} diff --git a/dist/assets/ionicons.eot b/dist/assets/ionicons.eot index 9edec390724f6b60699890755bc10e13069a594a..84145da254ce268171db6307fcd2fa877cb740d3 100644 GIT binary patch delta 686 zcmY*XKWGzi6#m}*{Z-p0sf~-RCRT|p1k+0!B32tw97?r<8MFvVh-p$x+F+x^#T*@q zxRo0m6m$_pa1c?%K_ZAQ4h|7INQi?{#Gyom48`~^Jw*@R{l4$L_q{*&yPK|uZf!&W zWqnnPD3i5%V>Py1SxFcLK)(QBVCL*Wh8@qzajr_a|O)?;n6f#l@x4adjmN zXf2M`uAd~Jf7m%zf4eO$#6V?U|(zMkpj-0ivDy~|cSc_Zy1{W|X88EV$L z{I+73@p0cI`hXqYurWyeL;k%-XzVbJ4|xM-ONd|Zg=kedCnh$82njQm?6m)@Bb`(K zmy&5#|40eRn8`X;$G9DjYClynp<6GMTY>#}-Koc)j~Cf=unIQ?9IQdmlvP%Pfhm;j z<&`eZb>pjpRo+2$u*SNm^-g`PhY`dm3~O0CpoD{?hV@9hZ0*+l!~C~#VTmM?Ngwt>Vw^QC^ zu2O+w{VI7dm6>|jcV+Mv{VwLWr$@X8H7o7_y)TT;GzHZ!DSGwf(R4OHQ?N^@qp(Kd zWM(|+$vJSCY9@EHULl8G4AN&qM8>@A$o8ehR?f~)JIsww=J!ARU^7jQ9tdB?@u{r&)E!5~j -Created by FontForge 20170925 at Fri Jan 19 12:18:20 2018 +Created by FontForge 20170925 at Thu Dec 13 12:01:05 2018 By mo Copyright (c) 2018, mo - + - - + + + diff --git a/dist/assets/ionicons.ttf b/dist/assets/ionicons.ttf old mode 100644 new mode 100755 index 01db5bbde6fa8d93db391190fc81b876258dffc1..ca804f472261c8a633570e1e89c6aaa1b9a52056 GIT binary patch delta 698 zcmY*WJ7`m36#mYA{?(>!YT}?NrdEjx!Stq$0c(vY8A@MZ1}%Z)64RuZw82J+i@8&A z_6`mTf*`nxC{7YVbnQ?fgOqkqL>we41T5BbldIwnhx7Wr^ZJ{fc3&L?zyk|1=99_P z%v#1M1A3aHfw_w(jdRa3aeywdpUsuc%BRa8E9^H}7IHVLL3rr`AdhigDVVF3-CeE( zJ;lB#lx{Be`1il#{50bq7xU&7Z~x{b=ial#ip6~0l;>%QlRgd{DVD1>{R6!0zhFOD zTFIHTL$|pA4}rn5S*u_MJRCWGaM>*9Up|_6#l61+5>-}KtLN3V0-&`yztCBZ7u?$1 zIGgF8_<_9=hk<5%cB`wU+3h=YN*5iZuqSDVrtLJ9(qwTH7BpBVSn~|71Ug_K#S!Ov z0Vr_B*#iLyQVXrc*41xc_!3|{-?jT>&jZiB-h&R~sZTmY`YqhYb8Of#`EA`P6C{hW z7zFnDqs9>VMurccp|R66KH?8qZ6SWG3(;;cCLz8G5fN4*+iCxoM><3Qr;=qg{!j_o zgvC5&C%7Gt>bwRosoO%i8#;>DoqBvsUS!9$RSZzbwKWKuvfn7-&=hLU@=6b52k_ao zRo+2$ZH;+x`+)jHk0Ojw81}k)Oo@g^4g05h%`R!f#|5`1{xykYQb;9DzrMVbG$N6% Sj*YuIWY>0eSa0|VP0ps0+0u)dMw)_5@n2F3^=KOs3c zvEWnd%L73E1t1PeE-O)B5M*>=U|?1O%Cn>=78m^g4>XB^Z3~dkk)BhT=3^V<3zWA2 zsyE3tuEZeY&= zJ-FuNQ@(h9o39MqOh918=eZ-5?!v-p^KXYxogFm6_1l4oSDVVE`9i~0EER+dHT zDh!9fMgUz1)ch05W@QjyRDrVD7&sW+C;PGLs(Ub0fGlL;1gaHacn)Q=GAJ-ILD_6T zeWsHav2J9wWYA?WoE*ib!EC8(IJu3jX!1`s1yMGjBN-W(7?~KE8Clp%^D^Cx3=Aea Mv1{=leEjSU0AVI>;s5{u diff --git a/dist/assets/ionicons.woff b/dist/assets/ionicons.woff old mode 100644 new mode 100755 index 20532652fd7c2f2ad0fcbd0551a7461534a4fbe1..83246bd1ff1f6250c7c8153a858314633b4660c6 GIT binary patch literal 1348 zcmZuxYfw{16yBRaf{27T2seTnl!u^(SHW1LqF@9yh7r&qlj6;T3z-mLAdP`45S0i8 zDxelnYEe@jVi7@cQW+7VYMZ}*<>eCOVCcIWJV zE}IPy0Ec}PSYTVpO56N@gUycTK;25{^MLSF?+cM};{rnfKs3;fhQKyo-NzKk1epL3 z9H6}$`gr4szh{aRaysPrkhA*;DiW0<$c8$5$OD_!!Dl(ZZi>f|tPFGS7LlaNSQbIQw;yL6*;_AL?pU^ z7&a+hhX6c)c>O=W344TNI6!>qxEK_#3mRA10f!85;bXkOEU4A#?&^TXfTHNoS@T{} zjM|Mv@+IxTNlcfBAR6H@KMq~IG5A2p0Pk6XgkAQLoECobeBwB1aVi;b4(MW8Pivu!^b{%jd&8PR?)^+J_>CD9=amI$J zhZ!HNDHv#r^Ge%@56^bC=V;F6o-L>-Ll`=}op&`Fi>$cWN(SyIwGNQ}F}ts4FO%_4q=c@^re zaGw}cE>m^&sRFT4-@{Ew!OlrpReszv&n#m}u{uHlnP1?zm@lKY_-Pe{SA8A4oYP|$ zmiweVdE9bB(UR~+S}B?cElEV$8^6rImh{^>Wn1~r5=Y(4(sk)30t0#Qet1pK&C8Xy zBEySLEfGIAH158#BQ!c!ZjvglHhHL92C57b(<@83la~k5|FrzrAsxT;)5!fj%{AF4 z#+keNZ|@>sFK9EIJV@&YFT+d5GGETN$xG*5CFapJgVZdSkmHqyL-m6 zKWX4I{Zm$!U^3uZn56K~4Zo>Y0cp?H9HY#k=6FYXc)Tkk5I=`Km>HOE3#;}Tt$E$q z5s6QRw{sGs7fNgHh1I6w6*1>p#-CP7d)D$3{@9*6lz1myQP|2jB}$g|8E^5V+82LO z8lrZt_|#)UaM(&ly=kq8Gi)(TC>Dxwu|S+G76ta+lZS=`6+FW0V~tMR*Q+F=y(vI7 lwtxXc5qK{V{_PJjIMn>A{vxSw?drLu5fev2!X~l``~wW?{l@?R literal 1260 zcmZuxc~BEq9DbXPD`2>+LlZC@ErS&mHbJ0JPJ!SNAPUGRST>sj9IjNk9OXt4X)O$b z5YbSlX*E=#h((~lR*^#rgiASej9OX*IRtF$R83!KXZlay&i8)veee6;dwaZ13*qqq z0$`)R0EW7Xjp_RTYdl_95cH|xm<7bf+;?PNNT?$h0OV`PcS8`qH>1r&2|^hFG(E@z z;n=>Vlg}wpYO*!d1W==|!W8k35gvs;dN<@cubx&5(3tpRQs@)IoH@jHzGqZWtVF2e zIP`EJTnuZC!eXHaHK+qNge@vSVqz1L)1kHqIa3Gv6fliX5wbhzSBbb>5^{ zy1P7iLZXq9ASZ5a;8VZnt_+6O3U|RBz!5hlH3U*T46|VH-%Qk^7Rj>|p{NPi#lylV z3`jphoBkUoL~1D^1&E!sR16B;@aY^n&~pPhsSY2|}7purMBGvWP4(e>!1?q1Js!KA*u*Fuf#Mnaf)5+`C;re^MH_UbT+F z9A|2xc-5B0UK^-x`~?CgGK^RN!1oGgwO_qRa01A6bF+(EgYV!b*$brH%GdUSOTguz z(vf|k93S&d%6)!i%H!u#XVh0~DS1hR&(=o=cG~g0Y3PT3(b<)2);ztG{B4LLxNSKH zV}MJa8PXZIwwcb?-}^Xk;nqlG^nri|>?_;djpwd2*jYCW%HHSK3Gn_)mVX?NdQi&< zSe9dpX&p3UnV~C)xHE{_4L6nBg>nj891OzU-2(%AaQ4d{wQS|OWYX+#l37uo{;bvS zN5&Vv=xS|Cid2-(ZEKuVrtMhqaI~zRed^N}w}TvfqoGx^Te^q+O>RDF*&Gx)Ux&vy z-EhEF-l?h!+gZZ1HK+PV4d;g`{ep{bo%+UT!P=_JTHfK{s~uJM1I>3GTYO8tGA^C+ zSfhJ38E3ywyp1#S2W$k*Vf>5Q9K?40c!@o-#XcbdYc>nmdz#MS`r12=7EJf9u$o_y z4~^KT&%KGxR4f=#Y_DqBvH22g|MW9wS-!JxXd`?mA~>#(ree3 zjR*HLH5^&T!$ykj@yt`k?~Bkl_y^=1U&*3q2sW0=}t{t6; znZ#yqv$sSR-M1S(*z4SA)f=*>L3d_Ikf&YCv}M&HF7QYYq?i;-#X`rv-ee~(o~@P! t6BA>jEYMx4R}ViqfWZF;O_w7GG03f1_~tuo@WF(l_0&)jAhh~I@HaYu&bt5r