Fix latest posts and tags on the welcome screen
Created new Record kinds
text-align: right;
}
-#latest h2 {
+.latest h2 {
font-size: 16pt;
}
-#latest-tags {
+.latest-tags {
text-align: center;
line-height: 2em;
}
-#latest-tags a {
+.latest-tags a {
margin: 0 0.75em;
}
-#latest-posts {
+.latest-posts {
height: 184pt;
overflow: hidden;
}
-#latest-posts .record {
+.latest-posts .record {
font-size: 12pt;
margin: 8pt 0;
}
name: "blerg.Link",
kind: "Control",
tag: "a",
- href: "#",
+ published: {
+ href: "#",
+ },
handlers: {
onclick: "muteLink",
},
create: function() {
this.inherited(arguments);
+ this.hrefChanged();
+ },
+ hrefChanged: function() {
this.setAttribute('href', this.href);
},
muteLink: function(inSender, inEvent) {
this.bubble('onPost', {data: this.getData()});
},
postVisibilityUpdate: function(inSender, inEvent) {
- if (inEvent.showing)
+ if (inEvent.showing) {
this.show();
- else
+ if (inEvent.data && this.getData() == "")
+ this.setData(inEvent.data);
+ } else {
this.hide();
+ }
},
resizePostContent: function(inSender, inEvent) {
if (this.resizePostContentTimeout)
+enyo.kind({
+ name: "blerg.Record",
+ kind: "Control",
+ classes: "record",
+ published: {
+ data: "",
+ timestamp: 0,
+ author: "",
+ record: null
+ },
+ components: [
+ {name: "data", noDom: true},
+ {classes: "info", components: [
+ {noDom: true, content: "Posted "},
+ {name: "date", noDom: true},
+ {noDom: true, content: ". "},
+ {name: "permalink", kind: "blerg.Link", content: "[permalink]"},
+ {noDom: true, content: " "},
+ {name: "reply", kind: "blerg.Link", content: "[reply]", onclick: "postPopup"}
+ ]}
+ ],
+ create: function() {
+ this.inherited(arguments);
+ this.dataChanged();
+ this.timestampChanged();
+ this.updateLinks();
+ },
+ dataChanged: function() {
+ this.$.data.setContent(postMangle(this.data));
+ },
+ timestampChanged: function() {
+ this.$.date.setContent(new Date(this.timestamp * 1000).toString());
+ },
+ authorChanged: function() {
+ this.updateLinks();
+ },
+ recordChanged: function() {
+ this.updateLinks();
+ },
+ updateLinks: function() {
+ this.$.permalink.setHref(baseURL + enyo.macroize("/#{$author}/{$record}", this));
+ },
+ postPopup: function() {
+ this.bubble('onPostVisibility', {
+ showing: true,
+ data: enyo.macroize("@{$author}/{$record}", this)
+ });
+ return true;
+ }
+});
+
+enyo.kind({
+ name: "blerg.TagRecord",
+ kind: "blerg.Record"
+});
+
+enyo.kind({
+ name: "blerg.BriefRecord",
+ kind: "blerg.Record",
+ components: [
+ {name: "authorlink", kind: "blerg.Link", classes: "author ref"},
+ {noDom: true, content: " "},
+ {name: "data", noDom: true}
+ ],
+ dataChanged: function() {
+ var d = this.data.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
+ this.$.data.setContent(d);
+ },
+ timestampChanged: function() { },
+ updateLinks: function() {
+ this.$.authorlink.setHref(baseURL + '/#' + this.author);
+ this.$.authorlink.setContent('@' + this.author);
+ },
+});
{name: "moreLink", kind: "blerg.Link", onNavigate: "loadMore", content: "Tell me more..."},
{style: "clear: both"},
{name: "contentBox", allowHtml: true},
- {tag: "h2", content: "Latest posts"},
- {name: "latestPosts"},
- {tag: "h2", content: "Latest tags"},
- {name: "latestTags"}
+ {classes: "latest", components: [
+ {tag: "h2", content: "Latest posts"},
+ {name: "latestPosts", classes: "latest-posts", onmouseover: "pauseTicker", onmouseout: "startTicker"},
+ {tag: "h2", content: "Latest tags"},
+ {name: "latestTags", classes: "latest-tags"}
+ ]}
],
rendered: function() {
this.inherited(arguments);
this.bubble("onSetTitle", {section: "Welcome!"});
+ this.loadLatest();
+ },
+ destroy: function() {
+ this.stopTicker();
+ this.inherited(arguments);
},
loadMore: function() {
var req = new enyo.Ajax({
},
startSignup: function() {
this.bubble('onStartSignup');
+ },
+ loadLatest: function() {
+ var req = new enyo.Ajax({
+ url: baseURL + '/latest.json'
+ });
+ req.response(function(inSender, inResponse) {
+ this.$.latestTags.destroyComponents();
+ for (var i = 0; i < inResponse.tags.length; i++) {
+ var v = inResponse.tags[i];
+ this.$.latestTags.createComponent({
+ kind: "blerg.Link",
+ href: baseURL + "/#/tag/" + v,
+ content: "#" + v,
+ classes: "ref"
+ });
+ this.$.latestTags.createComponent({noDom: true, content: " "});
+ }
+ this.$.latestTags.render();
+
+ this.$.latestPosts.destroyComponents();
+ for (var i = 0; i < inResponse.records.length; i++) {
+ var v = inResponse.records[i];
+ this.$.latestPosts.createComponent({kind: "blerg.BriefRecord"}, v);
+ }
+ this.$.latestPosts.render();
+ this.startTickerCycle();
+ }.bind(this));
+ req.go();
+ },
+ startTickerCycle: function() {
+ this.tickerTimeout = setTimeout(function() {
+ this.$.latestPosts.node.scrollTop = 0;
+ this.startTicker();
+ }.bind(this), 2500);
+ },
+ startTicker: function() {
+ if (this.tickerInterval)
+ return;
+ this.tickerInterval = setInterval(this.ticker.bind(this), 100);
+ },
+ pauseTicker: function() {
+ clearInterval(this.tickerInterval);
+ this.tickerInterval = null;
+ },
+ stopTicker: function() {
+ clearTimeout(this.tickerTimeout);
+ this.tickerTimeout = null;
+ clearInterval(this.tickerInterval);
+ this.tickerInterval = null;
+ },
+ ticker: function() {
+ var n = this.$.latestPosts.node;
+ if (n.scrollTop < n.scrollHeight - n.clientHeight) {
+ n.scrollTop += 2;
+ } else {
+ this.stopTicker();
+ this.startTickerCycle();
+ }
}
});
enyo.depends(
'API.js',
'Link.js',
+ 'Record.js',
'Title.js',
'Controls.js',
'Post.js',