aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--twittperator/twlist-win.tw70
1 files changed, 44 insertions, 26 deletions
diff --git a/twittperator/twlist-win.tw b/twittperator/twlist-win.tw
index 8c440b5..511478a 100644
--- a/twittperator/twlist-win.tw
+++ b/twittperator/twlist-win.tw
@@ -37,21 +37,23 @@ g:twlist_max_rows = num
Todo: コマンド or オプションで追加削除出来るようにしろ!
*/
-let win = null;
-let winXML =
+
+XML.ignoreProcessingInstructions = false;
+let winXML = <>
+<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<window id="twlist-window"
- pack="start"
- title="Twittperator"
- width="500"
+ sizemode="normal"
+ title="Twlist - Twittperator"
height="600"
onload="init()"
onunload="twlist.onClose()"
+ windowtype="twittperator:twlist"
xmlns={XUL}
xmlns:xhtml={XHTML}>
<script type="application/javascript; version=1.8"><![CDATA[
const XUL = new Namespace("xul", "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"),
XHTML = new Namespace("xhtml", "http://www.w3.org/1999/xhtml");
- var liberator, twlist, timelineBox, mentionsBox, dmBox, tabBox;
+ var liberator, twlist, timelineBox, mentionsBox, dmBox, tabBox, cmdBox;
function $(id) document.getElementById(id);
function init(){
liberator = window.arguments[0];
@@ -60,6 +62,7 @@ let winXML =
mentionsBox = $("twlist-mentions");
dmBox = $("twlist-dm");
tabBox = $("twlist-tabbox");
+ cmdBox = $("twlist-command");
liberator.plugins.twittperator.Tweets.slice(0,twlist.maxRows).reverse().forEach(add);
if (twlist.trackWords){
@@ -95,8 +98,7 @@ let winXML =
lastIndex: 0,
list: [],
add: function (word){
- let index = tabBox.tabs.itemCount;
- let tab = tabBox.tabs.appendItem("Track - " + word);
+ let tab = tabBox.tabs.appendChild(xmlToDom(<tab label={"Track - " + word} crop="end" maxwidth="150"/>,XUL));
this.lastIndex++;
let panel = tabBox.tabpanels.appendChild(xmlToDom(
<tabpanel flex="1" xmlns={XUL}>
@@ -257,7 +259,8 @@ let winXML =
let item = listbox.selectedItem;
if (!item)
return;
- twlist.onReply(item.querySelector(".twlist-reply"), (listbox == dmBox));
+ cmdBox.value = (listbox == dmBox ? "D @" : "@") + item.getAttribute("searchlabel") + " ";
+ cmdBox.focus();
},
retweet: function(){
let listbox = getCurrentListBox();
@@ -276,6 +279,10 @@ let winXML =
if (!item)
return;
twlist.onFav(item.querySelector(".twlist-fav"));
+ },
+ resetFocus: function(){
+ cmdBox.blur();
+ cmdBox.value = "";
}
};
return self;
@@ -353,6 +360,8 @@ let winXML =
<key id="key_reply" command="cmd_reply" key="R"/>
<key id="key_retweet" command="cmd_retweet" key="R" modifiers="shift"/>
<key id="key_fav" command="cmd_fav" key="F"/>
+ <key id="key_esd" keycode="VK_ESCAPE" oncommand="gActions.resetFocus()"/>
+ <key id="key_command" key=":" oncommand="cmdBox.focus()"/>
</keyset>
<popupset>
<popup id="twlist-context"
@@ -377,9 +386,9 @@ let winXML =
<vbox id="twlist-box" flex="1">
<tabbox id="twlist-tabbox" flex="1">
<tabs id="twlist-tabs" onselect="onTabSelect(event)">
- <tab label="TimeLine"/>
- <tab label="Mentions"/>
- <tab label="DM"/>
+ <tab label="TimeLine" accesskey="T"/>
+ <tab label="Mentions" accesskey="M"/>
+ <tab label="DM" accesskey="D"/>
</tabs>
<tabpanels id="twlist-panels" flex="1" style="background: transparent;" contextmenu="twlist-context">
<tabpanel flex="1">
@@ -398,12 +407,12 @@ let winXML =
</tabbox>
</vbox>
<statusbar id="status-bar">
- <spacer flex="1"/>
+ <statusbarpanel flex="1">
+ <textbox id="twlist-command" flex="1" emptytext="Tweet" onkeydown="twlist.onKeyDown(event)"/>
+ </statusbarpanel>
</statusbar>
-</window>.toXMLString();
-
-let URL = "data:application/vnd.mozilla.xul+xml;base64," +
- btoa('<?xml-stylesheet type="text/css" href="chrome://browser/skin/"?>' + winXML);
+</window>
+</>.toXMLString();
function setStyleSheet() {
styles.addSheet(true, "twlist-styles", "data:*",
@@ -419,6 +428,7 @@ function setStyleSheet() {
#twlist-tabs > tab[selected=true] {
max-width: 300px !important;
}
+ #twlist-command { background-color: white; }
.twlist-item-content {
-moz-user-select: -moz-all;
border-bottom: solid thin silver;
@@ -568,19 +578,14 @@ let listener = {
}
}
}
-function streamListener(msg, raw) {
- if (!win)
- return;
- if ((msg.text && msg.user) || ("direct_message" in msg)) {
- win.add(msg);
- }
-}
+
function onLoad () {
let gv = liberator.globalVariables;
__context__.__defineGetter__("screenName", function() gv.twittperator_screen_name || "");
__context__.__defineGetter__("maxRows", function() gv.twlist_max_rows || 50);
__context__.__defineGetter__("trackWords", function() gv.twittperator_track_words || "");
__context__.__defineGetter__("twlistTrack", function() gv.twlist_track_words);
+ __context__.__defineGetter__("win", function() services.get("windowMediator").getMostRecentWindow("twittperator:twlist"));
setStyleSheet();
@@ -603,10 +608,10 @@ function onLoad () {
}
function open(){
- win = openDialog(URL, null, "chrome,resizable=yes", liberator, __context__ );
+ let URL = "data:application/vnd.mozilla.xul+xml;base64," + btoa(winXML);
+ openDialog(URL, null, "chrome,resizable=yes", liberator, __context__ );
}
function onClose(){
- win = null;
}
function onUnload () {
@@ -768,6 +773,19 @@ function onFav (elm) {
});
}
}
+function onKeyDown(event){
+ switch (event.keyCode){
+ case event.DOM_VK_RETURN:
+ case event.DOM_VK_ENTER:
+ let txt = event.target.value;
+ if (txt){
+ if (/^@\w+#\d+$/.test(txt.trim()))
+ return;
+ liberator.execute('tw ' + txt, null, true);
+ }
+ break;
+ }
+}
onLoad();