more textarea fixes
This commit is contained in:
parent
650f107d21
commit
36e45d04ab
8 changed files with 317 additions and 117 deletions
|
@ -107,15 +107,12 @@ class Controller(QtCore.QObject):
|
||||||
QtCore.QObject.__init__(self)
|
QtCore.QObject.__init__(self)
|
||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
oldpath = os.path.expanduser('~/.bungloo/')
|
name = "bungloo2"
|
||||||
if os.path.isdir(oldpath):
|
|
||||||
shutil.copytree(oldpath, os.path.expanduser('~/.config/bungloo/'))
|
|
||||||
shutil.rmtree(os.path.expanduser('~/.bungloo/'))
|
|
||||||
|
|
||||||
if not os.path.exists(os.path.expanduser("~/.config/bungloo/")):
|
if not os.path.exists(os.path.expanduser("~/.config/" + name + "/")):
|
||||||
os.makedirs(os.path.expanduser("~/.config/bungloo/"))
|
os.makedirs(os.path.expanduser("~/.config/" + name + "/"))
|
||||||
|
|
||||||
self.config_path = os.path.expanduser('~/.config/bungloo/bungloo.cfg')
|
self.config_path = os.path.expanduser('~/.config/' + name + '/bungloo.cfg')
|
||||||
|
|
||||||
if os.access(self.config_path, os.R_OK):
|
if os.access(self.config_path, os.R_OK):
|
||||||
with open(self.config_path, 'r') as f:
|
with open(self.config_path, 'r') as f:
|
||||||
|
@ -180,15 +177,12 @@ class Controller(QtCore.QObject):
|
||||||
|
|
||||||
@QtCore.pyqtSlot(str, str, str, bool)
|
@QtCore.pyqtSlot(str, str, str, bool)
|
||||||
def openNewMessageWindowInReplyTostatusIdwithStringIsPrivate(self, entity, status_id, string, is_private):
|
def openNewMessageWindowInReplyTostatusIdwithStringIsPrivate(self, entity, status_id, string, is_private):
|
||||||
new_message_window = Windows.NewPost(self.app)
|
new_message_window = Windows.NewPost(self.app, string, "[]", is_private)
|
||||||
new_message_window.inReplyToStatusIdWithString(entity, status_id, string)
|
|
||||||
new_message_window.setIsPrivate(is_private)
|
|
||||||
new_message_window.show()
|
new_message_window.show()
|
||||||
new_message_window.setAttribute(QtCore.Qt.WA_DeleteOnClose)
|
new_message_window.setAttribute(QtCore.Qt.WA_DeleteOnClose)
|
||||||
self.app.new_message_windows.append(new_message_window)
|
self.app.new_message_windows.append(new_message_window)
|
||||||
new_message_window.activateWindow()
|
new_message_window.activateWindow()
|
||||||
new_message_window.setFocus()
|
new_message_window.setFocus()
|
||||||
new_message_window.textInput.setFocus()
|
|
||||||
new_message_window.show()
|
new_message_window.show()
|
||||||
new_message_window.raise_()
|
new_message_window.raise_()
|
||||||
|
|
||||||
|
@ -268,6 +262,11 @@ class Controller(QtCore.QObject):
|
||||||
msgBox.setInformativeText(message)
|
msgBox.setInformativeText(message)
|
||||||
msgBox.exec_()
|
msgBox.exec_()
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(result=str)
|
||||||
|
def getCachedEntities(self):
|
||||||
|
entities = self.app.timeline.evaluateJavaScript("JSON.stringify(bungloo.cache.entities);")
|
||||||
|
return entities.toString()
|
||||||
|
|
||||||
def logout(self, sender):
|
def logout(self, sender):
|
||||||
print "logout is not implemented yet"
|
print "logout is not implemented yet"
|
||||||
|
|
||||||
|
@ -297,7 +296,7 @@ class Console(QtCore.QObject):
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
key = 'BUNGLOO'
|
key = 'BUNGLOO2'
|
||||||
|
|
||||||
if len(sys.argv) > 1 and sys.argv[1] == "--help":
|
if len(sys.argv) > 1 and sys.argv[1] == "--help":
|
||||||
print """
|
print """
|
||||||
|
|
100
Qt/Windows.py
100
Qt/Windows.py
|
@ -242,7 +242,7 @@ class Oauth:
|
||||||
new_manager.sslErrors.connect(lambda reply, errors: self.handleSslErrors(reply, errors))
|
new_manager.sslErrors.connect(lambda reply, errors: self.handleSslErrors(reply, errors))
|
||||||
self.auth_view.page().setNetworkAccessManager(new_manager)
|
self.auth_view.page().setNetworkAccessManager(new_manager)
|
||||||
self.auth_view.show()
|
self.auth_view.show()
|
||||||
|
print url
|
||||||
self.auth_view.load_url(url)
|
self.auth_view.load_url(url)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -329,25 +329,29 @@ class FindEntity(QtGui.QDialog):
|
||||||
|
|
||||||
|
|
||||||
class NewPost(Helper.RestorableWindow):
|
class NewPost(Helper.RestorableWindow):
|
||||||
def __init__(self, app):
|
def __init__(self, app, string, mentions, is_private):
|
||||||
self.app = app
|
self.app = app
|
||||||
|
self.string = string
|
||||||
|
self.mentions = mentions
|
||||||
|
self.is_private = is_private
|
||||||
|
|
||||||
Helper.RestorableWindow.__init__(self, "newpost", self.app)
|
Helper.RestorableWindow.__init__(self, "newpost", self.app)
|
||||||
|
self.activateWindow()
|
||||||
|
self.raise_()
|
||||||
|
|
||||||
self.setWindowIcon(QtGui.QIcon(self.app.resources_path() + "/images/Icon.png"))
|
self.setWindowIcon(QtGui.QIcon(self.app.resources_path() + "/images/Icon.png"))
|
||||||
|
|
||||||
self.textInput = QtGui.QPlainTextEdit(self)
|
self.webView = Helper.WebViewCreator(self.app, True, self)
|
||||||
self.setCentralWidget(self.textInput)
|
self.webView.load_local(self.load_finished)
|
||||||
self.textInput.textChanged.connect(self.onChanged)
|
self.setCentralWidget(self.webView)
|
||||||
|
|
||||||
|
self.initUI()
|
||||||
|
|
||||||
|
self.webView.triggerPageAction(QtWebKit.QWebPage.InspectElement)
|
||||||
|
|
||||||
self.setWindowTitle("New Post")
|
self.setWindowTitle("New Post")
|
||||||
self.resize(300, 150)
|
self.resize(300, 150)
|
||||||
self.setMinimumSize(100, 100)
|
self.setMinimumSize(100, 100)
|
||||||
self.initUI()
|
|
||||||
|
|
||||||
self.setIsPrivate(False)
|
|
||||||
self.status_id = None
|
|
||||||
self.reply_to_entity = None
|
|
||||||
self.imageFilePath = None
|
|
||||||
|
|
||||||
def initUI(self):
|
def initUI(self):
|
||||||
newPostAction = QtGui.QAction("&New Post", self)
|
newPostAction = QtGui.QAction("&New Post", self)
|
||||||
|
@ -396,69 +400,29 @@ class NewPost(Helper.RestorableWindow):
|
||||||
aboutAction.setStatusTip("Open about page in Webbrowser")
|
aboutAction.setStatusTip("Open about page in Webbrowser")
|
||||||
aboutAction.triggered.connect(self.app.open_about)
|
aboutAction.triggered.connect(self.app.open_about)
|
||||||
|
|
||||||
|
developerExtrasAction = QtGui.QAction("&Developer Extras", self)
|
||||||
|
developerExtrasAction.setStatusTip("Activate webkit inspector")
|
||||||
|
developerExtrasAction.triggered.connect(self.developer_extras)
|
||||||
|
|
||||||
helpMenu = menubar.addMenu("&Help")
|
helpMenu = menubar.addMenu("&Help")
|
||||||
helpMenu.addAction(aboutAction)
|
helpMenu.addAction(aboutAction)
|
||||||
|
helpMenu.addAction(developerExtrasAction)
|
||||||
|
|
||||||
|
|
||||||
self.statusBar().showMessage('256')
|
def load_finished(self, widget):
|
||||||
|
is_private = "false"
|
||||||
|
if self.is_private:
|
||||||
|
is_private = "true"
|
||||||
|
|
||||||
self.addButton = QtGui.QToolButton()
|
callback = "function() { bungloo.newpost.setString('%s'); bungloo.newpost.setIsPrivate(%s); bungloo.newpost.setMentions(%s);}" % (self.string, is_private, self.mentions)
|
||||||
self.addButton.setToolTip("Add photo")
|
|
||||||
self.addButton.clicked.connect(self.openFileDialog)
|
|
||||||
self.addButton.setAutoRaise(True)
|
|
||||||
#addIcon = QtGui.QIcon.fromTheme("insert-image", QtGui.QIcon(self.app.resources_path() + "/images/Actions-insert-image-icon.png"))
|
|
||||||
addIcon = QtGui.QIcon(self.app.resources_path() + "/images/glyphicons_138_picture.png")
|
|
||||||
self.addButton.setIcon(addIcon)
|
|
||||||
self.statusBar().addPermanentWidget(self.addButton)
|
|
||||||
|
|
||||||
self.isPrivateButton = QtGui.QToolButton()
|
script = "function HostAppGo() { start('newpost', " + callback + "); }"
|
||||||
self.isPrivateButton.setToolTip("Make private")
|
self.webView.page().mainFrame().evaluateJavaScript(script)
|
||||||
self.isPrivateButton.clicked.connect(self.toggleIsPrivate)
|
self.webView.setFocus()
|
||||||
self.isPrivateButton.setAutoRaise(True)
|
|
||||||
#self.isPrivateIcon = QtGui.QIcon(self.app.resources_path() + "/images/Lock-Lock-icon.png")
|
|
||||||
self.isPrivateIcon = QtGui.QIcon(self.app.resources_path() + "/images/glyphicons_203_lock.png")
|
|
||||||
#self.isNotPrivateIcon = QtGui.QIcon(self.app.resources_path() + "/images/Lock-Unlock-icon.png")
|
|
||||||
self.isNotPrivateIcon = QtGui.QIcon(self.app.resources_path() + "/images/glyphicons_204_unlock.png")
|
|
||||||
self.isPrivateButton.setIcon(self.isNotPrivateIcon)
|
|
||||||
self.statusBar().addPermanentWidget(self.isPrivateButton)
|
|
||||||
|
|
||||||
self.sendButton = QtGui.QToolButton()
|
|
||||||
self.sendButton.setToolTip("Send")
|
|
||||||
self.sendButton.clicked.connect(self.sendMessage)
|
|
||||||
self.sendButton.setAutoRaise(True)
|
|
||||||
#sendIcon = QtGui.QIcon.fromTheme("mail-send", QtGui.QIcon(self.app.resources_path() + "/images/send-icon.png"))
|
|
||||||
sendIcon = QtGui.QIcon(self.app.resources_path() + "/images/glyphicons_123_message_out.png")
|
|
||||||
self.sendButton.setIcon(sendIcon)
|
|
||||||
self.statusBar().addPermanentWidget(self.sendButton)
|
|
||||||
|
|
||||||
def setIsPrivate(self, is_private):
|
|
||||||
self.isPrivate = is_private
|
|
||||||
icon = self.isNotPrivateIcon
|
|
||||||
if self.isPrivate:
|
|
||||||
icon = self.isPrivateIcon
|
|
||||||
|
|
||||||
self.isPrivateButton.setIcon(icon)
|
|
||||||
|
|
||||||
def toggleIsPrivate(self):
|
def toggleIsPrivate(self):
|
||||||
self.setIsPrivate(not self.isPrivate)
|
script = "bungloo.newpost.toggleIsPrivate();"
|
||||||
|
self.webView.page().mainFrame().evaluateJavaScript(script)
|
||||||
def setString(self, string):
|
|
||||||
self.inReplyToStatusIdWithString(None, None, string)
|
|
||||||
|
|
||||||
def inReplyToStatusIdWithString(self, reply_to, status_id, string):
|
|
||||||
self.reply_to_entity = reply_to
|
|
||||||
self.status_id = status_id
|
|
||||||
self.textInput.setPlainText(string)
|
|
||||||
|
|
||||||
cursor = self.textInput.textCursor()
|
|
||||||
cursor.movePosition(QtGui.QTextCursor.End, QtGui.QTextCursor.MoveAnchor)
|
|
||||||
cursor.movePosition(QtGui.QTextCursor.Start, QtGui.QTextCursor.KeepAnchor)
|
|
||||||
cursor.movePosition(QtGui.QTextCursor.EndOfLine, QtGui.QTextCursor.KeepAnchor)
|
|
||||||
self.textInput.setTextCursor(cursor)
|
|
||||||
|
|
||||||
def onChanged(self):
|
|
||||||
count = 256 - len(self.textInput.toPlainText())
|
|
||||||
self.statusBar().showMessage(str(count))
|
|
||||||
|
|
||||||
def sendMessage(self):
|
def sendMessage(self):
|
||||||
count = len(self.textInput.toPlainText())
|
count = len(self.textInput.toPlainText())
|
||||||
|
@ -482,3 +446,7 @@ class NewPost(Helper.RestorableWindow):
|
||||||
else:
|
else:
|
||||||
self.imageFilePath = None
|
self.imageFilePath = None
|
||||||
|
|
||||||
|
def developer_extras(self, widget):
|
||||||
|
QtWebKit.QWebSettings.globalSettings().setAttribute(QtWebKit.QWebSettings.DeveloperExtrasEnabled, True)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -446,4 +446,18 @@ form.search input {
|
||||||
p.noresult {
|
p.noresult {
|
||||||
padding : 10px;
|
padding : 10px;
|
||||||
text-align : center;
|
text-align : center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.new_post #sidebar, .new_post #content { display: none; }
|
||||||
|
.new_post { height: 100%; }
|
||||||
|
#new_post_container { position: absolute; border-collapse: collapse; height: 100%; width: 100%; }
|
||||||
|
#new_post_container td { position: relative; height: 90%; }
|
||||||
|
#new_post_container .text td { background: white; }
|
||||||
|
#new_post_container textarea { resize: none; box-sizing: border-box; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; background: transparent; outline: none; }
|
||||||
|
#new_post_container div { box-sizing: border-box; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; background: white; color: white; padding: 2px; }
|
||||||
|
|
||||||
|
#new_post_container div span { background: #D8DFEA; }
|
||||||
|
#suggestions { position: absolute; left: 0; bottom: 0; }
|
||||||
|
#suggestions .active { color: red; }
|
||||||
|
#status_bar { height: 1em; }
|
||||||
|
#status_bar p { float: right; }
|
197
WebKit/scripts/controller/NewPost.js
Normal file
197
WebKit/scripts/controller/NewPost.js
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
define([
|
||||||
|
],
|
||||||
|
|
||||||
|
function() {
|
||||||
|
|
||||||
|
function NewPost() {
|
||||||
|
|
||||||
|
this.entities = JSON.parse(controller.getCachedEntities());
|
||||||
|
this.mentions = [];
|
||||||
|
this.is_private = false;
|
||||||
|
document.body.className = "new_post";
|
||||||
|
|
||||||
|
// Textarea
|
||||||
|
|
||||||
|
this.container = $("<table id='new_post_container'><tr class='text'><td><div></div><textarea></textarea></td></tr><tr><td id='status_bar'></td></tr></table>");
|
||||||
|
this.textarea = this.container.find("textarea");
|
||||||
|
this.highlighter = this.container.find("div");
|
||||||
|
|
||||||
|
$(document.body).append(this.container);
|
||||||
|
|
||||||
|
this.textarea.keyup(this.keyup.bind(this));
|
||||||
|
this.textarea.keydown(this.keydown.bind(this));
|
||||||
|
|
||||||
|
this.suggestions = $("<ul id='suggestions'></ul>");
|
||||||
|
|
||||||
|
$(document.body).append(this.suggestions);
|
||||||
|
|
||||||
|
// Status bar
|
||||||
|
this.counter = $("<span>256</span>");
|
||||||
|
var buttons = $(
|
||||||
|
"<p>" +
|
||||||
|
"<button id='images'><img src='images/images.png'></button>" +
|
||||||
|
"<button id='private'><img src='images/public.png'></button>" +
|
||||||
|
"<button id='send'><img src='images/send.png'></button>" +
|
||||||
|
"</p>");
|
||||||
|
|
||||||
|
this.buttons = {
|
||||||
|
images: buttons.find("#images"),
|
||||||
|
is_private: buttons.find("#private"),
|
||||||
|
send: buttons.find("#send")
|
||||||
|
}
|
||||||
|
|
||||||
|
//this.buttons.images.bind("click", this.addImage.bind(this));
|
||||||
|
//this.buttons.is_private.bind("click", this.togglePrivate.bind(this));
|
||||||
|
this.buttons.send.bind("click", this.send.bind(this));
|
||||||
|
|
||||||
|
this.container.find("#status_bar").append(this.counter);
|
||||||
|
this.container.find("#status_bar").append(buttons);
|
||||||
|
|
||||||
|
this.textarea.focus()
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.setString = function(string) {
|
||||||
|
this.textarea.val(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.setMentions = function(mentions) {
|
||||||
|
|
||||||
|
if(mentions && mentions.length > 0) {
|
||||||
|
var mentions_string = " ";
|
||||||
|
for (var i = 0; i < mentions.length; i++) {
|
||||||
|
mentions_string += mentions[i].name + " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
this.textarea.val(this.textarea.val() + " " + mentions_string);
|
||||||
|
this.mentions = mentions;
|
||||||
|
}
|
||||||
|
this.keyup();
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.setIsPrivate = function(is_private) {
|
||||||
|
this.is_private = is_private;
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.toggleIsPrivate = function() {
|
||||||
|
this.is_private = !this.is_private;
|
||||||
|
};
|
||||||
|
|
||||||
|
NewPost.prototype.keyup = function(e) {
|
||||||
|
if(!e) return;
|
||||||
|
|
||||||
|
var key = e.which;
|
||||||
|
if(key != 38 && key != 40 && key != 13) {
|
||||||
|
|
||||||
|
this.applyText($(this.textarea).val());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
var lis = this.suggestions.find("li");
|
||||||
|
|
||||||
|
if (lis.length > 0) {
|
||||||
|
e.preventDefault();
|
||||||
|
var active = this.suggestions.find(".active");
|
||||||
|
if(key == 38) { // up
|
||||||
|
var prev = active.prev();
|
||||||
|
if(active.lentgh == 0) {
|
||||||
|
lis.last().addClass("active");
|
||||||
|
} else if(prev) {
|
||||||
|
active.removeClass("active");
|
||||||
|
prev.addClass("active");
|
||||||
|
}
|
||||||
|
} else if(key == 40) { // down
|
||||||
|
var next = active.next();
|
||||||
|
if(active.length == 0) {
|
||||||
|
lis.first().addClass("active");
|
||||||
|
} else if(next) {
|
||||||
|
active.removeClass("active");
|
||||||
|
next.addClass("active");
|
||||||
|
}
|
||||||
|
} else if(key == 13) { // enter
|
||||||
|
if(active.length > 0) {
|
||||||
|
this.replaceWithName(this.textarea.val(), this.suggestions.find("li.active").get(0).item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.keydown = function(e) {
|
||||||
|
var key = e.which;
|
||||||
|
var lis = this.suggestions.find("li");
|
||||||
|
if(lis.length > 0 && (key == 38 || key == 40 || key == 13)) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.replaceAll = function(txt, replace, with_this) {
|
||||||
|
return txt.replace(new RegExp(replace, 'g'),with_this);
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.replaceWithName = function(txt, with_item) {
|
||||||
|
var words = txt.match(/(^|\s)\^([^\s]+)/);
|
||||||
|
var replace = words[2];
|
||||||
|
|
||||||
|
var original = txt.replace("^" + replace, with_item.name);
|
||||||
|
this.textarea.val(original);
|
||||||
|
|
||||||
|
this.mentions.push(with_item);
|
||||||
|
|
||||||
|
this.applyText(original);
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.applyText = function (text) {
|
||||||
|
var words = text.match(/(^|\s)\^([^\s]+)/);
|
||||||
|
this.suggestions.html("");
|
||||||
|
|
||||||
|
if(words) {
|
||||||
|
var name = words[2];
|
||||||
|
for (var key in this.entities.length) {
|
||||||
|
var item = this.entities[key];
|
||||||
|
if(item.name.toLowerCase().indexOf(name.toLowerCase()) != -1 || item.entity.toLowerCase().indexOf(name.toLowerCase()) != -1) {
|
||||||
|
var li = $("<li><strong>" + item.name + "</strong> <em>" + item.entity + "</em></li>")
|
||||||
|
li.get(0).item = item;
|
||||||
|
this.suggestions.append(li)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse the text:
|
||||||
|
// replace all the line braks by <br/>, and all the double spaces by the html version
|
||||||
|
text = this.replaceAll(text,'\n','<br/>');
|
||||||
|
text = this.replaceAll(text,' ',' ');
|
||||||
|
|
||||||
|
// replace the words by a highlighted version of the words
|
||||||
|
|
||||||
|
var remove = [];
|
||||||
|
|
||||||
|
for (var i=0;i<this.mentions.length; i++) {
|
||||||
|
var name = this.mentions[i].name;
|
||||||
|
if(text.match(new RegExp(name))) {
|
||||||
|
text = this.replaceAll(text, name, '<span>' + name + '</span>');
|
||||||
|
} else {
|
||||||
|
remove.push(this.mentions[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < remove.length; i++) {
|
||||||
|
this.mentions.splice(this.mentions.indexOf(remove[i]), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// re-inject the processed text into the div
|
||||||
|
this.highlighter.html(text);
|
||||||
|
|
||||||
|
var count = 256 - this.textarea.val().length + (this.mentions.length * 6);
|
||||||
|
this.counter.html(count)
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
NewPost.prototype.send = function() {
|
||||||
|
debug("Send not implemented yet");
|
||||||
|
$("textarea").focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return NewPost;
|
||||||
|
})
|
|
@ -14,7 +14,7 @@ function(HostApp, APICalls, Hmac) {
|
||||||
"url": "http://jabs.nu/bungloo/",
|
"url": "http://jabs.nu/bungloo/",
|
||||||
"description": "A desktop Tent client.",
|
"description": "A desktop Tent client.",
|
||||||
"redirect_uri": "bungloo://oauthtoken",
|
"redirect_uri": "bungloo://oauthtoken",
|
||||||
"post_types": {
|
"types": {
|
||||||
"read": [
|
"read": [
|
||||||
"https://tent.io/types/meta/v0",
|
"https://tent.io/types/meta/v0",
|
||||||
"https://tent.io/types/relationship/v0",
|
"https://tent.io/types/relationship/v0",
|
||||||
|
@ -87,12 +87,12 @@ function(HostApp, APICalls, Hmac) {
|
||||||
|
|
||||||
Oauth.prototype.register = function (url) {
|
Oauth.prototype.register = function (url) {
|
||||||
var those = this;
|
var those = this;
|
||||||
debug(url)
|
|
||||||
APICalls.get(url, {
|
APICalls.get(url, {
|
||||||
no_auth: true,
|
no_auth: true,
|
||||||
callback: function(resp) {
|
callback: function(resp) {
|
||||||
|
|
||||||
those.profile = JSON.parse(resp.responseText);
|
those.profile = JSON.parse(resp.responseText).post;
|
||||||
those.entity = those.profile.content.entity;
|
those.entity = those.profile.content.entity;
|
||||||
HostApp.setStringForKey(those.entity, "entity")
|
HostApp.setStringForKey(those.entity, "entity")
|
||||||
HostApp.setServerUrls(those.profile.content.servers[0].urls);
|
HostApp.setServerUrls(those.profile.content.servers[0].urls);
|
||||||
|
@ -101,19 +101,19 @@ function(HostApp, APICalls, Hmac) {
|
||||||
content_type: "https://tent.io/types/app/v0#",
|
content_type: "https://tent.io/types/app/v0#",
|
||||||
no_auth: true,
|
no_auth: true,
|
||||||
callback: function(resp) {
|
callback: function(resp) {
|
||||||
|
var app_id = JSON.parse(resp.responseText).post.id;
|
||||||
|
var header_string = resp.getAllResponseHeaders();
|
||||||
|
var regexp = /https:\/\/tent.io\/rels\/credentials/i
|
||||||
|
var url = APICalls.parseHeaderForLink(header_string, regexp);
|
||||||
|
|
||||||
var app_id = JSON.parse(resp.responseText).id;
|
APICalls.get(url, {
|
||||||
var header_string = resp.getAllResponseHeaders();
|
content_type: "https://tent.io/types/app/v0#",
|
||||||
var regexp = /https:\/\/tent.io\/rels\/credentials/i
|
no_auth: true,
|
||||||
var url = APICalls.parseHeaderForLink(header_string, regexp);
|
callback: function(resp) {
|
||||||
|
var data = JSON.parse(resp.responseText);
|
||||||
APICalls.get(url, {
|
those.authRequest(data.post, app_id);
|
||||||
content_type: "https://tent.io/types/app/v0#",
|
}
|
||||||
no_auth: true,
|
});
|
||||||
callback: function(resp) {
|
|
||||||
var data = JSON.parse(resp.responseText);
|
|
||||||
those.authRequest(data, app_id);
|
|
||||||
}});
|
|
||||||
}});
|
}});
|
||||||
|
|
||||||
}});
|
}});
|
||||||
|
@ -150,8 +150,7 @@ function(HostApp, APICalls, Hmac) {
|
||||||
url,
|
url,
|
||||||
"POST",
|
"POST",
|
||||||
HostApp.stringForKey("app_hawk_id"),
|
HostApp.stringForKey("app_hawk_id"),
|
||||||
HostApp.stringForKey("app_hawk_key"),
|
HostApp.stringForKey("app_hawk_key")
|
||||||
requestBody
|
|
||||||
);
|
);
|
||||||
|
|
||||||
APICalls.post(url, requestBody, {
|
APICalls.post(url, requestBody, {
|
||||||
|
|
|
@ -24,7 +24,7 @@ function(HostApp, Core, APICalls, URI) {
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|
||||||
var _this = this;
|
var _this = this;
|
||||||
setTimeout(function() { _this.showProfileForEntity() }, 5000); // Load users profile on start
|
setTimeout(function() { _this.showProfileForEntity() }, 500); // Load users profile on start
|
||||||
}
|
}
|
||||||
|
|
||||||
Profile.prototype = Object.create(Core.prototype);
|
Profile.prototype = Object.create(Core.prototype);
|
||||||
|
@ -239,20 +239,14 @@ function(HostApp, Core, APICalls, URI) {
|
||||||
this.profile = profile;
|
this.profile = profile;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
APICalls.findProfileURL(this.entity, function(profile_url) {
|
var url = HostApp.serverUrl("posts_feed") + "?types=" + encodeURIComponent("https://tent.io/types/meta/v0") + "&entities=" + encodeURIComponent(this.entity)
|
||||||
|
debug(url)
|
||||||
if (profile_url) {
|
APICalls.get(url, {
|
||||||
|
callback: function(resp) {
|
||||||
APICalls.http_call(profile_url, "GET", function(resp) {
|
profile = JSON.parse(resp.responseText);
|
||||||
|
_this.showProfile(profile);
|
||||||
profile = JSON.parse(resp.responseText);
|
_this.profile = profile;
|
||||||
_this.showProfile(profile);
|
}});
|
||||||
_this.profile = profile;
|
|
||||||
|
|
||||||
}, null, false); // do not send auth-headers
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,6 +272,9 @@ function(HostApp, Core, APICalls, URI) {
|
||||||
|
|
||||||
Profile.prototype.showProfile = function(profile) {
|
Profile.prototype.showProfile = function(profile) {
|
||||||
|
|
||||||
|
debug(profile)
|
||||||
|
return
|
||||||
|
|
||||||
var basic = profile["https://tent.io/types/info/basic/v0.1.0"];
|
var basic = profile["https://tent.io/types/info/basic/v0.1.0"];
|
||||||
|
|
||||||
if (profile && basic) {
|
if (profile && basic) {
|
||||||
|
|
|
@ -212,7 +212,8 @@ function(jQuery, APICalls, URI, HostApp, Cache) {
|
||||||
template.reply_to.onclick = function() {
|
template.reply_to.onclick = function() {
|
||||||
|
|
||||||
var mentions = [];
|
var mentions = [];
|
||||||
var status_mentions = status.mentions.slice(0);
|
var status_mentions = [];
|
||||||
|
if(status.mentions) status_mentions = status.mentions.slice(0);
|
||||||
|
|
||||||
if (typeof status.__repost != "undefined") {
|
if (typeof status.__repost != "undefined") {
|
||||||
status_mentions.push({entity:status.__repost.entity});
|
status_mentions.push({entity:status.__repost.entity});
|
||||||
|
@ -507,10 +508,13 @@ function(jQuery, APICalls, URI, HostApp, Cache) {
|
||||||
|
|
||||||
var url = URI(HostApp.serverUrl("new_post"));
|
var url = URI(HostApp.serverUrl("new_post"));
|
||||||
|
|
||||||
var http_method = "POST";
|
var type = in_reply_to_status_id.length == 0 ? "https://tent.io/types/status/v0#" : "https://tent.io/types/status/v0#reply";
|
||||||
|
debug(typeof in_reply_to_status_id)
|
||||||
|
debug(in_reply_to_status_id.length)
|
||||||
|
debug(type)
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
"type": in_reply_to_status_id ? "https://tent.io/types/status/v0#" : "https://tent.io/types/status/v0#reply",
|
"type": type,
|
||||||
"published_at": parseInt(new Date().getTime(), 10),
|
"published_at": parseInt(new Date().getTime(), 10),
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"public": !is_private
|
"public": !is_private
|
||||||
|
@ -521,7 +525,7 @@ function(jQuery, APICalls, URI, HostApp, Cache) {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (location) {
|
if (location) {
|
||||||
data["content"]["location"] = { "type": "Point", "coordinates": location }
|
//data["content"]["location"] = { "type": "Point", "coordinates": location }
|
||||||
}
|
}
|
||||||
|
|
||||||
var mentions = this.parseMentions(content, in_reply_to_status_id, in_reply_to_entity);
|
var mentions = this.parseMentions(content, in_reply_to_status_id, in_reply_to_entity);
|
||||||
|
@ -1041,7 +1045,6 @@ function(jQuery, APICalls, URI, HostApp, Cache) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return Core;
|
return Core;
|
||||||
|
|
||||||
});
|
});
|
|
@ -7,7 +7,8 @@ var bungloo = {
|
||||||
entityProfile: null,
|
entityProfile: null,
|
||||||
conversation: null,
|
conversation: null,
|
||||||
search: null,
|
search: null,
|
||||||
cache: {}
|
cache: {},
|
||||||
|
newpost: null
|
||||||
};
|
};
|
||||||
|
|
||||||
requirejs.config({
|
requirejs.config({
|
||||||
|
@ -33,6 +34,15 @@ function start(view, callback) {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
} else if (view == "newpost") {
|
||||||
|
|
||||||
|
require(["controller/NewPost"], function(NewPost) {
|
||||||
|
|
||||||
|
bungloo.newpost = new NewPost();
|
||||||
|
if(callback) callback();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,6 +65,19 @@ function start(view, callback) {
|
||||||
|
|
||||||
bungloo.sidebar.showContentForTimeline();
|
bungloo.sidebar.showContentForTimeline();
|
||||||
|
|
||||||
|
bungloo.cache.entities = {
|
||||||
|
"https://jeena.net" : {
|
||||||
|
name: "Jeena",
|
||||||
|
entity: "https://jeena.net",
|
||||||
|
avatar: "https://jeena.net/avatar.png"
|
||||||
|
},
|
||||||
|
"https://ck.kennt-wayne.de": {
|
||||||
|
name: "Christian",
|
||||||
|
entity: "http://ck.kennt-wayne.de",
|
||||||
|
avatar: "http://ck.kennt-wayne.de/pavatar.png"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue