modules_basic/follow.jsView |
---|
1 | | -var h = require('hyperscript') |
| 1 … | +const fs = require('fs') |
| 2 … | +const h = require('../h') |
2 | 3 … | |
3 | 4 … | |
4 | 5 … | |
5 | 6 … | function isRelated(value, name) { |
17 | 18 … | exports.gives = { |
18 | 19 … | message_content: true, |
19 | 20 … | message_content_mini: true, |
20 | 21 … | avatar_action: true, |
| 22 … | + mcss: true |
21 | 23 … | } |
22 | 24 … | |
23 | 25 … | exports.create = function (api) { |
24 | | - var exports = {} |
25 | | - exports.message_content = |
26 | | - exports.message_content_mini = function (msg) { |
27 | | - var content = msg.value.content |
28 | | - if(content.type == 'contact' && content.contact) { |
29 | | - var relation = isRelated(content.following, 'follows') |
30 | | - if(content.blocking) relation = 'blocks' |
| 26 … | + return { |
| 27 … | + message_content_mini, |
| 28 … | + message_content, |
| 29 … | + avatar_action, |
| 30 … | + mcss: () => fs.readFileSync(__filename.replace(/js$/, 'mcss'), 'utf8') |
| 31 … | + } |
| 32 … | + |
| 33 … | + function message_content_mini (msg) { |
| 34 … | + const { type, contact, following, blocking } = msg.value.content |
| 35 … | + if(type == 'contact' && contact) { |
| 36 … | + var relation = isRelated(following, 'follows') |
| 37 … | + if(blocking) relation = 'blocks' |
31 | 38 … | return [ |
32 | | - relation, ' ', |
33 | | - api.avatar_link(content.contact, api.avatar_name(content.contact), '') |
| 39 … | + relation, |
| 40 … | + ' ', |
| 41 … | + api.avatar_link(contact, api.avatar_name(contact), '') |
34 | 42 … | ] |
35 | 43 … | } |
36 | 44 … | } |
37 | 45 … | |
38 | | - exports.message_content = function (msg) { |
39 | | - |
40 | | - var content = msg.value.content |
41 | | - if(content.type == 'contact' && content.contact) { |
42 | | - var relation = isRelated(content.following, 'follows') |
43 | | - if(content.blocking) relation = 'blocks' |
44 | | - return h('div.contact', relation, api.avatar(msg.value.content.contact, 'thumbnail')) |
| 46 … | + function message_content (msg) { |
| 47 … | + const { type, contact, following, blocking } = msg.value.content |
| 48 … | + if(type == 'contact' && contact) { |
| 49 … | + var relation = isRelated(following, 'follows') |
| 50 … | + if(blocking) relation = 'blocks' |
| 51 … | + return h('div.contact', [ |
| 52 … | + relation, |
| 53 … | + api.avatar(contact, 'thumbnail') |
| 54 … | + ]) |
45 | 55 … | } |
46 | 56 … | } |
47 | 57 … | |
48 | | - exports.avatar_action = function (id) { |
| 58 … | + function avatar_action (id) { |
49 | 59 … | var follows_you, you_follow |
50 | 60 … | |
51 | 61 … | var self_id = require('../keys').id |
52 | | - api.follower_of(self_id, id, function (err, f) { |
| 62 … | + api.follower_of(self_id, id, (err, f) => { |
53 | 63 … | you_follow = f |
54 | 64 … | update() |
55 | 65 … | }) |
56 | | - api.follower_of(id, self_id, function (err, f) { |
| 66 … | + api.follower_of(id, self_id, (err, f) => { |
57 | 67 … | follows_you = f |
58 | 68 … | update() |
59 | 69 … | }) |
60 | 70 … | |
61 | | - var state = h('label') |
62 | | - var label = h('span') |
| 71 … | + var followBtn = h('button', { 'ev-click': toggleFollow }, 'loading') |
| 72 … | + var state = h('label', 'loading') |
63 | 73 … | |
64 | 74 … | function update () { |
65 | 75 … | state.textContent = ( |
66 | | - follows_you && you_follow ? 'friend' |
| 76 … | + follows_you && you_follow ? 'you are friends' |
67 | 77 … | : follows_you ? 'follows you' |
68 | 78 … | : you_follow ? 'you follow' |
69 | 79 … | : '' |
70 | 80 … | ) |
| 81 … | + |
| 82 … | + if (you_follow === undefined) return |
| 83 … | + followBtn.textContent = you_follow ? 'unfollow' : 'follow' |
| 84 … | + } |
71 | 85 … | |
72 | | - label.textContent = you_follow ? 'unfollow' : 'follow' |
| 86 … | + return h('Follow', [ |
| 87 … | + followBtn, |
| 88 … | + state |
| 89 … | + ]) |
| 90 … | + |
| 91 … | + function toggleFollow () { |
| 92 … | + if (followBtn.textContent === 'loading') return |
| 93 … | + const msg = { |
| 94 … | + type: 'contact', |
| 95 … | + contact: id, |
| 96 … | + following: !you_follow |
| 97 … | + } |
| 98 … | + |
| 99 … | + api.message_confirm(msg, (err, msg) => { |
| 100 … | + if (err) return console.error(err) |
| 101 … | + |
| 102 … | + you_follow = msg.value.content.following |
| 103 … | + update() |
| 104 … | + }) |
73 | 105 … | } |
74 | | - |
75 | | - return h('div', state, |
76 | | - h('a', {href:'#', onclick: function () { |
77 | | - api.message_confirm({ |
78 | | - type: 'contact', |
79 | | - contact: id, |
80 | | - following: !you_follow |
81 | | - }, function (err, msg) { |
82 | | - if (err) return console.error(err) |
83 | | - you_follow = msg.value.content.following |
84 | | - update() |
85 | | - }) |
86 | | - }}, h('br'), label) |
87 | | - ) |
| 106 … | + |
88 | 107 … | } |
89 | 108 … | return exports |
90 | 109 … | } |