diff --git a/src/parser.nim b/src/parser.nim index 70344e6..a0ce710 100644 --- a/src/parser.nim +++ b/src/parser.nim @@ -11,9 +11,9 @@ proc parseTimelineProfile*(node: XmlNode): Profile = fullname: profile.getName(pre & "nameLink"), username: profile.getUsername(pre & "screenname"), joinDate: profile.getDate(pre & "joinDateText"), - location: profile.selectText(pre & "locationText").stripText(), website: profile.selectAttr(pre & "urlText a", "title"), bio: profile.getBio(pre & "bio"), + location: getLocation(profile), userpic: node.getAvatar(".profile-picture img"), verified: isVerified(profile), protected: isProtected(profile), diff --git a/src/parserutils.nim b/src/parserutils.nim index 53be3c9..5d92af9 100644 --- a/src/parserutils.nim +++ b/src/parserutils.nim @@ -92,6 +92,14 @@ proc getBio*(profile: XmlNode; selector: string; fallback=""): string = bio = profile.selectText(fallback) stripText(bio) +proc getLocation*(profile: XmlNode): string = + let sel = ".ProfileHeaderCard-locationText" + result = profile.selectText(sel).stripText() + + let link = profile.selectAttr(sel & " a", "data-place-id") + if link.len > 0: + result &= ":" & link + proc getAvatar*(profile: XmlNode; selector: string): string = profile.selectAttr(selector, "src").getUserpic() diff --git a/src/views/profile.nim b/src/views/profile.nim index 1f0468a..f50cf66 100644 --- a/src/views/profile.nim +++ b/src/views/profile.nim @@ -29,7 +29,12 @@ proc renderProfileCard*(profile: Profile; prefs: Prefs): VNode = if profile.location.len > 0: tdiv(class="profile-location"): - span: icon "location", profile.location + span: icon "location" + let loc = profile.location.split(":") + if loc.len > 1: + a(href=("/search?q=place:" & loc[1])): text loc[0] + else: + span: text loc[0] if profile.website.len > 0: tdiv(class="profile-website"):