Merge branch 'develop' of https://github.com/friendica/friendica into develop

This commit is contained in:
Tobias Diekershoff 2015-11-08 12:37:17 +01:00
commit 5605bb6101
7 changed files with 283 additions and 308 deletions

View file

@ -100,7 +100,7 @@ Web server settings
Visit the [Mozilla's wiki](https://wiki.mozilla.org/Security/Server_Side_TLS) for instructions on how to configure a secure webserver. Visit the [Mozilla's wiki](https://wiki.mozilla.org/Security/Server_Side_TLS) for instructions on how to configure a secure webserver.
They provide recommendations for [different web servers](https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Server_Configurations). They provide recommendations for [different web servers](https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Server_Configurations).
Test you server SSL settings Test your SSL settings
--- ---
When you are done, visit the test site [SSL Labs](https://www.ssllabs.com/ssltest/) to have them check if you succeeded. When you are done, visit the test site [SSL Labs](https://www.ssllabs.com/ssltest/) to have them check if you succeeded.

View file

@ -3,216 +3,124 @@ Friendica mit SSL nutzen
* [Zur Startseite der Hilfe](help) * [Zur Startseite der Hilfe](help)
Wenn du deine eigene Friendica-Seite betreibst, willst du vielleicht SSL (https) nutzen, um die Kommunikation zwischen dir und deinem Server zu verschlüsseln (die Kommunikation zwischen den Servern ist bereits verschlüsselt). Disclaimer
---
**Dieses Dokument wurde im November 2015 aktualisiert.
SSL-Verschlüsselung ist sicherheitskritisch.
Das bedeutet, dass sich die empfohlenen Einstellungen schnell verändern.
Halte deine Installation auf dem aktuellen Stand und verlasse dich nicht darauf, dass dieses Dokument genau so schnell aktualisiert wird, wie sich Technologien verändern!**
Wenn du das auf deiner eigenen Domain machen willst, musst du ein Zertifikat von einer anerkannten Organisation beschaffen (sogenannte selbst-signierte Zertifikate, die unter Computerfreaks beliebt sind, arbeiten nicht sehr gut mit Friendica, weil sie Warnungen im Browser hervorrufen können). Einleitung
---
Wenn du dieses Dokument liest, bevor du Friendica installierst, kannst du eine sehr einfache Option in Betracht ziehen: suche dir ein geteiltes Hosting-Angebot (shared hosting) ohne eigene Domain. Wenn du deine eigene Friendica-Seite betreibst, willst du vielleicht SSL (https) nutzen, um die Kommunikation zwischen den Servern und zwischen dir und deinem Server zu verschlüsseln.
Dadurch wirst du eine Adresse in der Form deinName.deinAnbietername.de erhalten, was nicht so schön wie deinName.de ist.
Aber es wird trotzdem deine ganz persönliche Seite sein und du wirst unter Umständen die Möglichkeit haben, das SSL-Zertifikat deines Anbieters mitzubenutzen.
Das bedeutet, dass du SSL überhaupt nicht konfigurieren musst - es wird einfach sofort funktionieren, wenn die Besucher deiner Seite https statt http eingeben.
Wenn dir diese Lösung nicht gefällt, lies weiter... Dafür gibt es grundsätzlich zwei Arten von SSL-Zertifikaten: Selbst-signierte Zertifikate und Zertifikate, die von einer Zertifizierungsstelle (CA) unterschrieben sind.
Technisch gesehen sorgen beide für valide Verschlüsselung.
Mit selbst-signierten Zertifikaten gibt es jedoch ein Problem:
Sie sind weder in Browsern noch auf anderen Servern installiert.
Deshalb führen sie zu Warnungen über "nicht vertrauenswürdige Zertifikate".
Das ist verwirrend und stört sehr.
**Geteilte Hosting-Angebote/Shared hosts** Aus diesem Grund empfehlen wir, dass du dir ein von einer CA unterschriebenes Zertifikat besorgst.
Normalerweise kosten sie Geld - und sind nur für eine begrenzte Zeit gültig (z.B. ein Jahr oder zwei).
Wenn du ein geteiltes Hosting-Angebot mit einer eigenen Domain nutzt, dann wird dir dein Anbieter ggf. anbieten, dir das Zertifikat zu besorgen und zu installieren. Es gibt aber Möglichkeiten, ein vertrauenswürdiges Zertifikat umsonst zu bekommen.
Du musst es nur beantragen und bezahlen und alles wird eingerichtet.
Wenn das die Lösung für dich ist, musst du das weitere Dokument nicht lesen.
Gehe nur sicher, dass das Zertifikat auch für die Domain gilt, die du für Friendica nutzt: z.B. meinfriendica.de oder friendica.meinserver.de.
Das Vorangehende wird die häufigste Art sein, eine Friendica-Seite zu betreiben, so dass der Rest des Artikels für die meisten Leute nicht von Bedeutung ist. Wähle deinen Domainnamen
---
**Beschaffe dir das Zertifikat selbst** Dein SSL-Zertifikat wird für eine bestimmte Domain gültig sein oder sogar nur für eine Subdomain.
Entscheide dich endgültig für einen Domainnamen, *bevor* du ein Zertifikat bestellst.
Wenn du das Zertifikat hast, brauchst du ein neues, wenn du den Domainnamen ändern möchtest.
Alternativ kannst du dir auch selbst ein Zertifikat besorgen und hochladen, falls dein Anbieter das unterstützt. Gehosteter Webspace
---
Der nächste Abschnitt beschreibt den Ablauf, um ein Zertifikat von StartSSL zu erhalten. Wenn deine Friendica-Instanz auf einem gehosteten Webspace läuft, solltest du dich bei deinem Hosting-Provider informieren.
Das Gute an StartSSL ist, dass du kostenlos ein einfaches, aber perfekt ausreichendes Zertifikat erhältst. Dort bekommst du Instruktionen, wie es dort läuft.
Das ist bei vielen anderen Anbietern nicht so, weshalb wir uns in diesem Dokument auf StartSSL konzentrieren werden. Du kannst bei deinem Provider immer ein kostenpflichtiges Zertifikat bestellen.
Wenn du ein Zertifikat eines anderen Anbieters nutzen willst, musst du die Vorgaben dieser Organisation befolgen. Sie installieren es für dich oder haben in der Weboberfläche eine einfache Upload-Möglichkeit für Zertifikat und Schlüssel.
Wir können hier nicht jede Möglichkeit abdecken.
Die Installation deines erhaltenen Zertifikats hängt von den Vorgaben deines Anbieters ab. Um Geld zu sparen, kann es sich lohnen, dort auch nachzufragen, ob sie ein anderes Zertifikat, das du selbst beschaffst, für dich installieren würden.
Aber generell nutzen solche Anbieter ein einfaches Web-Tool, um die Einrichtung zu unterstützen. Wenn ja, dann lies weiter.
Beachte: dein Zertifikat gilt gewöhnlich nur für eine Subdomain. Ein kostenloses StartSSL-Zertifikat besorgen
Wenn du dein Zertifikat beantragst, sorge dafür, dass es für die Domain und die Subdomain gilt, die du für Friendica nutzt: z.B. meinfriendica.de oder friendica.meinserver.de. ---
**Erhalte ein kostenloses StartSSL-Zertifikat** StartSSL ist eine Zertifizierungsstelle, die kostenlose Zertifikate ausstellt.
Sie sind für ein Jahr gültig und genügen für unsere Zwecke.
Die Webseite von StartSSL führt dich durch den Erstellungsprozess, aber manche Leute haben hier trotzdem Probleme. ### Schritt 1: Client-Zertifikat erstellen
Wir empfehlen dir ausdrücklich, die Installationsanleitung Schritt für Schritt langsam und sorgfältig zu befolgen.
Lese dir jedes Wort durch und schließe deinen Browser erst, wenn alles läuft.
Es heißt, dass es drei Schritte gibt, die den Nutzer verwirren können:
Wenn du dich erstmals bei StartSSL anmeldest, erhältst du ein erstes Zertifikat, dass sich einfach in deinem Browser installiert. Wenn du dich erstmalig bei StartSSL anmeldest, erhältst du ein Zertifikat, das in deinem Browser installiert wird.
Dieses Zertifikat solltest du zur Sicherheit irgendwo speichern, so dass du es für einen neuen Browser neu installieren kannst, wenn du z.B. etwas erneuern musst. Du brauchst es, um dich bei StartSSL einzuloggen, auch wenn du später wiederkommst.
Dieses Authentifizierungszertifikat wird nur für das Login benötigt und hat nichts mit dem Zertifikat zu tun, dass du später für deinen Server benötigst. Dieses Client-Zertifikat hat nichts mit dem SSL-Zertifikat für deinen Server zu tun.
Als Anfänger mit StartSSL kannst du [hier starten](https://www.startssl.com/?lang=de) und die "Express Lane" nutzen, um dein Browser-Zertifikiat zu erhalten.
Im nächsten Schritt kannst du die Einrichtung deines Zertifikats fortsetzen.
Wenn du zuerst nach einer Domain für dein Zertifikat gefragt wirst, musst du die Top-Level-Domain angeben, nicht die Subdomain, die Friendica nutzt. ### Schritt 2: Email-Adresse und Domain validieren
Im nächsten Schritt kannst du dann die Subdomain spezifizieren.
Wenn du also friendica.deinName.de auf deinem Server hast, musst du zuerst deinName.de angeben.
Höre nicht zu früh auf, wenn du am Ende der Einrichtung dein persönliches Server-Zertifikat erhalten hast. Um fortzufahren musst du beweisen, dass du die Email-Adresse, die du angegeben hast, und die Domain, für die du das Zertifikat möchtest, besitzt.
Abhängig von deiner Server-Software benötigst du ein oder zwei generische Dateien, die du mit deinem kostenlosen StartSSL-Zertifikat nutzen musst. Gehe in den "Validation wizard" und fordere einen Bestätigungslink per Mail an.
Diese Dateien sind sub.class1.server.ca.pem und ca.pem. Dasselbe machst du auch für die Validierung der Domain.
Wenn du diesen Schritt bereits übersprungen hast, kannst du die Dateien hier finden: [http://www.startssl.com/?app=21](http://www.startssl.com/?app=21).
Aber am besten funktioniert es, wenn du StartSSL nicht beendest, bevor du den Vorgang komplett abgeschlossen hast und dein https-Zertifikat hochgeladen ist und funktioniert.
**Virtuelle private und dedizierte Server (mit StartSSL free)** ### Schritt 3: Das Zertifikat bestellen
Der Rest dieses Dokuments ist etwas komplizierter, aber es ist auch nur für Personen, die Friendica auf einem virtuellen oder dedizierten Server nutzen. Gehe in den "Certificate wizard".
Jeder andere kann an dieser Stelle mit dem Lesen aufhören. Wähle das Target Webserver.
Bei der ersten Abfrage der Domain gibst du deine Hauptdomain an.
Im nächsten Schritt kannst du eine Subdomain hinzufügen.
Ein Beispiel: Wenn die Adresse der Friendica-Instanz friendica.beispiel.net lautet, gibst du zuerst beispiel.net an und danach friendica.
Folge den weiteren Anleitungen [hier](http://www.startssl.com/?app=20), um den Webserver, den du benutzt (z.B. Apache), für dein Zertifikat einzurichten. Wenn du weißt, wie man einen openssl-Schlüssel und einen Certificate Signing Request (CSR) erstellt, tu das.
Kopiere den CSR in den Browser, um ihn von StartSSL signiert zu bekommen.
Um die nötigen Schritte zu verdeutlichen, setzen wir nun voraus, dass Apache aktiv ist. Wenn du nicht weißt, wie man Schlüssel und CSR erzeugt, nimm das Angebot von StartSSL an, beides für dich zu generieren.
Im Wesentlichen kannst du einfach einen zweiten httpd.conf-Eintrag für Friendica erstellen. Das bedeutet: StartSSL hat den Schlüssel zu deiner SSL-Verschlüsselung, aber das ist immer noch besser als gar kein Zertifikat.
Lade dein Zertifikat von der Website herunter.
(Oder im zweiten Fall: Lade Zertifikat und Schlüssel herunter.)
Um das zu machen, kopiere den existierenden Eintrag und ändere das Ende der ersten Zeile auf "lesen" :443> anstelle von :80> und trage dann die folgenden Zeilen ein, wie du es auch in der Anleitung von StartSSL finden kannst: Um dein Zertifikat auf einem Webserver zu installieren, brauchst du noch ein oder zwei andere Dateien: sub.class1.server.ca.pem und ca.pem, auch von StartSSL.
Gehe in die Rubrik "Tool box" und lade "Class 1 Intermediate Server CA" und "StartCom Root CA (PEM encoded)" herunter.
SSLEngine on Wenn du dein Zertifikat zu deinem Hosting-Provider schicken möchtest, brauchen Sie mindestens Zertifikat und Schlüssel.
SSLProtocol all -SSLv2 Schick zur Sicherheit alle vier Dateien hin.
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM **Du solltest sie auf einem verschlüsselten Weg hinschicken!**
SSLCertificateFile /usr/local/apache/conf/ssl.crt Wenn du deinen eigenen Server betreibst, lade die Dateien hoch und besuche das Mozilla-Wiki (Link unten).
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key
SSLCertificateChainFile /usr/local/apache/conf/sub.class1.server.ca.pem
SSLCACertificateFile /usr/local/apache/conf/ca.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /usr/local/apache/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
(Beachte, dass das Verzeichnis /usr/local/apache/conf/ möglicherweise nicht in deinem System existiert. Let's encrypt
In Debian ist der Pfad bspw. /etc/apache2/, in dem du ein SSL-Unterverzeichnis erstellen kannst, wenn dieses noch nicht vorhanden ist. ---
Dann hast du /etc/apache2/ssl/… statt /usr/local/apache/conf/…)
Du solltest nun zwei Einträgen für deine Friendica-Seite haben - einen für einfaches http und eines für https. Wenn du einen eigenen Server betreibst und den Nameserver kontrollierst, könnte auch die Initiative "Let's encrypt" interessant für dich werden.
Momentan ist deren Angebot noch nicht fertig.
Auf der [Website](https://letsencrypt.org/) kannst du dich über den Stand informieren.
Ein Hinweis für diejenigen, die SSL steuern wollen: setze keine Weiterleitung deines SSL in deine Apache-Einstellung. Friendicas Admin-Panel hat eine spezielle Einstellung für die SSL-Methode. Webserver-Einstellungen
Bitte nutze diese Einstellungen. ---
**Vermische Zertifikate in Apache StartSSL und andere (selbst-signierte)** Im [Wiki von Mozilla](https://wiki.mozilla.org/Security/Server_Side_TLS) gibt es Anleitungen für die Konfiguration sicherer Webserver.
Dort findest du Empfehlungen, die auf [verschiedene Webserver](https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Server_Configurations) zugeschnitten sind.
Viele Leute nutzen einen virtuellen privaten oder einen dedizierten Server, um mehr als Friendica darauf laufen zu lassen. Teste deine SSL-Einstellungen
Sie wollen möglicherweise SSL auch für andere Seiten nutzen, die auf dem Server liegen. ---
Um das zu erreichen, wollen sie mehrere Zertifikate für eine IP nutzen, z.B. ein Zertifikat eines anerkannten Anbieters für Friendica und ein selbst-signiertes für eine persönliche Inhalte (möglw. ein Wildcard-Zertifikat für mehrere Subdomains).
Um das zum Laufen zu bringen, bietet Apache eine NameVirtualHost-Direktive. Wenn du fertig bist, kannst du auf der Testseite [SSL-Labs](https://www.ssllabs.com/ssltest/) prüfen lassen, ob Du alles richtig gemacht hast.
Du findest Informationen zur Nutzung in httpd.conf in den folgenden Ausschnitten.
Beachte, dass Wildcards (*) in httpd.conf dazu führen, dass die NameVirtualHost-Methode nicht funktioniert; du kannst diese in dieser neuen Konfiguration nicht nutzen.
Das bedeutet, dass *80> oder *443> nicht funktionieren.
Und du musst unbedingt die IP definieren, selbst wenn du nur eine hast.
Beachte außerdem, dass du bald zwei Zeilen zu Beginn der Datei hinzufügen musst, um NameVirtualHost für IPv6 vorzubereiten.
NameVirtualHost 12.123.456.1:443
NameVirtualHost 12.123.456.1:80
<VirtualHost www.anywhere.net:80>
DocumentRoot /var/www/anywhere
Servername www.anywhere.net
</VirtualHost>
<VirtualHost www.anywhere.net:443>
DocumentRoot /var/www/anywhere
Servername www.anywhere.net
SSLEngine On
<pointers to a an eligible cert>
<more ssl stuff >
<other stuff>
</VirtualHost>
<VirtualHost www.somewhere-else.net:80>
DocumentRoot /var/www/somewhere-else
Servername www.somewhere-else.net
</VirtualHost>
<VirtualHost www.somewhere-else:443>
DocumentRoot /var/www/somewhere-else
Servername www.somewhere-else.net
SSLEngine On
<pointers to another eligible cert>
<more ssl stuff >
<other stuff>
</VirtualHost>
Natürlich kannst du auch andere Verzeichnisse auf deinem Server nutzen, um Apache zu konfigurieren.
In diesem Fall müssen nur einige Zeilen in httpd.conf oder ports.conf angepasst werden - vor allem die NameVirtualHost-Zeilen.
Aber wenn du sicher im Umgang mit solchen Alternativen bist, wirst du sicherlich die nötigen Anpassungen herausfinden.
Starte dein Apache abschließend neu.
**StartSSL auf Nginx**
Führe zunächst ein Update auf den neuesten Friendica-Code durch.
Folge dann der Anleitung oben, um dein kostenloses Zertifikat zu erhalten.
Aber statt der Apache-Installationsanleitung zu folgen, mache das Folgende:
Lade dein Zertifikat hoch.
Es ist nicht wichtig, wohin du es lädst, solange Nginx es finden kann.
Einige Leute nutzen /home/verschiedeneNummernundBuchstaben, du kannst aber auch z.B. etwas wie /foo/bar nutzen.
Du kannst das Passwort entfernen, wenn du willst.
Es ist zwar möglicherweise nicht die beste Wahl, aber wenn du es nicht machst, wirst du das Passwort immer wieder eingeben müssen, wenn du Ngingx neustartest.
Um es zu entfernen, gebe Folgendes ein:
openssl rsa -in ssl.key-pass -out ssl.key
Nun hole dir das Hifs-Zertifikat:
wget http://www.startssl.com/certs/sub.class1.server.ca.pem
Nun vereinige die Dateien:
cat ssl.crt sub.class1.server.ca.pem > ssl.crt
In manchen Konfigurationen ist ein Bug enthalten, weshalb diese Schritte nicht ordentlich arbeiten.
Du musst daher ggf. ssl.crt bearbeiten:
nano /foo/bar/ssl.crt
Du wirst zwei Zertifikate in der gleichen Date sehen. In der Mitte findest du:
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
Das ist schlecht. Du brauchst die folgenden Einträge:
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Du kannst den Zeilenumbruch manuell eingeben, falls dein System vom Bug betroffen ist.
Beachte, dass nach -----BEGIN CERTIFICATE----- nur ein Zeilenumbruch ist.
Es gibt keine leere Zeile zwischen beiden Einträgen.
Nun musst du Nginx über die Zertifikate informieren.
In /etc/nginx/sites-available/foo.com.conf benötigst du etwas wie:
server {
listen 80;
listen 443 ssl;
listen [::]:80;
listen [::]:443 ipv6only=on ssl;
ssl_certificate /foo/bar/ssl.crt;
ssl_certificate_key /foo/bar/ssl.key;
...
Nun starte Nginx neu:
/etc/init.d/nginx restart
Und das war es schon.
Für multiple Domains ist es mit Nginx einfacher als mit Apache.
Du musst du oben genannten Schritte nur für jedes Zertifikat wiederholen und die spezifischen Informationen im eigenen {server...}-Bereich spezifizieren.

View file

@ -48,7 +48,7 @@ function ostatus_follow_friends($uid, $url) {
$r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND $r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND
(`nurl` = '%s' OR `alias` = '%s' OR `alias` = '%s') AND (`nurl` = '%s' OR `alias` = '%s' OR `alias` = '%s') AND
`network` != '%s' LIMIT 1", `network` != '%s' LIMIT 1",
intval($uid), dbesc(normalise_link($url)), intval($uid), dbesc(normalise_link($url)),
dbesc(normalise_link($url)), dbesc($url), dbesc(NETWORK_STATUSNET)); dbesc(normalise_link($url)), dbesc($url), dbesc(NETWORK_STATUSNET));
if (!$r) { if (!$r) {
$data = probe_url($friend->statusnet_profile_url); $data = probe_url($friend->statusnet_profile_url);
@ -315,7 +315,7 @@ function ostatus_import($xml,$importer,&$contact, &$hub) {
$orig_uri = $xpath->query("activity:object/atom:id", $entry)->item(0)->nodeValue; $orig_uri = $xpath->query("activity:object/atom:id", $entry)->item(0)->nodeValue;
logger("Favorite ".$orig_uri." ".print_r($item, true)); logger("Favorite ".$orig_uri." ".print_r($item, true));
$item["verb"] = ACTIVITY_LIKE; $item["verb"] = ACTIVITY_LIKE;
$item["parent-uri"] = $orig_uri; $item["parent-uri"] = $orig_uri;
$item["gravity"] = GRAVITY_LIKE; $item["gravity"] = GRAVITY_LIKE;
} }
@ -702,9 +702,13 @@ function ostatus_completion($conversation_url, $uid, $item = array()) {
$conv_as = str_replace(',"statusnet:notice_info":', ',"statusnet_notice_info":', $conv_as); $conv_as = str_replace(',"statusnet:notice_info":', ',"statusnet_notice_info":', $conv_as);
$conv_as = json_decode($conv_as); $conv_as = json_decode($conv_as);
$no_of_items = sizeof($items);
if (@is_array($conv_as->items)) if (@is_array($conv_as->items))
$items = array_merge($items, $conv_as->items); foreach ($conv_as->items AS $item)
else $items[$item->id] = $item;
if ($no_of_items == sizeof($items))
break; break;
$pageno++; $pageno++;

View file

@ -1,7 +1,7 @@
/** /**
* Filebrowser - Friendica Communications Server * Filebrowser - Friendica Communications Server
* *
* Copyright (c) 2010-2013 the Friendica Project * Copyright (c) 2010-2015 the Friendica Project
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by * it under the terms of the GNU Affero General Public License as published by
@ -13,33 +13,34 @@
* *
* To load filebrowser in colorbox, call * To load filebrowser in colorbox, call
* *
* $.colorbox({href: ulr, iframe:true,innerWidth:'500px',innerHeight:'400px'}) * Dialog.doImageBrowser(eventname, id);
* *
* where url is: * or
* *
* <baseurl>/fbrowser/<type>/?mode=minimal[#<eventname>-<id>] * Dialog.doFileBrowser(eventname, id);
*
* where:
* *
* baseurl: baseurl from friendica
* type: one of "image", "file"
* eventname: event name to catch return value * eventname: event name to catch return value
* id: id returned to event handler * id: id returned to event handler
* *
* When user select an item, an event in fired in parent page, on body element * When user select an item, an event in fired in parent page, on body element
* The event is named * The event is named
* *
* fbrowser.<type>.[<eventname>] * fbrowser.<type>.[<eventname>]
* *
* with params: * <type> will be one of "image" or "file", and the event handler will
* get the following params:
* *
* filemane: filename of item choosed by user * filemane: filename of item choosed by user
* embed: bbcode to embed element into posts * embed: bbcode to embed element into posts
* id: id from url * id: id from caller code
* *
* example: * example:
* *
* // open dialog for select an image for a textarea with id "myeditor" * // open dialog for select an image for a textarea with id "myeditor"
* var id="myeditor"; * var id="myeditor";
* $.colorbox({href: baseurl + "/fbrowser/image/?mode=minimal#example-"+id, iframe:true,innerWidth:'500px',innerHeight:'400px'}) * Dialog.doImageBrowser("example", id);
* *
* // setup event handler to get user selection * // setup event handler to get user selection
* $("body").on("fbrowser.image.example", function(event, filename, bbcode, id) { * $("body").on("fbrowser.image.example", function(event, filename, bbcode, id) {

View file

@ -4,20 +4,20 @@
} }
function openClose(theID) { function openClose(theID) {
if(document.getElementById(theID).style.display == "block") { if(document.getElementById(theID).style.display == "block") {
document.getElementById(theID).style.display = "none" document.getElementById(theID).style.display = "none"
}
else {
document.getElementById(theID).style.display = "block"
} }
else {
document.getElementById(theID).style.display = "block"
}
} }
function openMenu(theID) { function openMenu(theID) {
document.getElementById(theID).style.display = "block" document.getElementById(theID).style.display = "block"
} }
function closeMenu(theID) { function closeMenu(theID) {
document.getElementById(theID).style.display = "none" document.getElementById(theID).style.display = "none"
} }
@ -50,14 +50,14 @@
if (e.hasClass("ttright")) pos="right"; if (e.hasClass("ttright")) pos="right";
e.tipTip({defaultPosition: pos, edgeOffset: 8}); e.tipTip({defaultPosition: pos, edgeOffset: 8});
});*/ });*/
/* setup comment textarea buttons */ /* setup comment textarea buttons */
/* comment textarea buttons needs some "data-*" attributes to work: /* comment textarea buttons needs some "data-*" attributes to work:
* data-role="insert-formatting" : to mark the element as a formatting button * data-role="insert-formatting" : to mark the element as a formatting button
* data-comment="<string>" : string for "Comment", used by insertFormatting() function * data-comment="<string>" : string for "Comment", used by insertFormatting() function
* data-bbcode="<string>" : name of the bbcode element to insert. insertFormatting() will insert it as "[name][/name]" * data-bbcode="<string>" : name of the bbcode element to insert. insertFormatting() will insert it as "[name][/name]"
* data-id="<string>" : id of the comment, used to find other comment-related element, like the textarea * data-id="<string>" : id of the comment, used to find other comment-related element, like the textarea
* */ * */
$('body').on('click','[data-role="insert-formatting"]', function(e) { $('body').on('click','[data-role="insert-formatting"]', function(e) {
e.preventDefault(); e.preventDefault();
var o = $(this); var o = $(this);
@ -65,10 +65,9 @@
var bbcode = o.data('bbcode'); var bbcode = o.data('bbcode');
var id = o.data('id'); var id = o.data('id');
if (bbcode=="img") { if (bbcode=="img") {
$.colorbox({href: baseurl + "/fbrowser/image/?mode=minimal#comment-"+id, iframe:true,innerWidth:'500px',innerHeight:'400px'}) Dialog.doImageBrowser("comment", id);
return; return;
} }
insertFormatting(comment, bbcode, id); insertFormatting(comment, bbcode, id);
}); });
@ -82,18 +81,18 @@
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
textarea.value = textarea.value.substring(0, start) + bbcode + textarea.value.substring(end, textarea.value.length); textarea.value = textarea.value.substring(0, start) + bbcode + textarea.value.substring(end, textarea.value.length);
}); });
/* setup onoff widgets */ /* setup onoff widgets */
$(".onoff input").each(function(){ $(".onoff input").each(function(){
val = $(this).val(); val = $(this).val();
id = $(this).attr("id"); id = $(this).attr("id");
$("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden"); $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
}); });
$(".onoff > a").click(function(event){ $(".onoff > a").click(function(event){
event.preventDefault(); event.preventDefault();
var input = $(this).siblings("input"); var input = $(this).siblings("input");
var val = 1-input.val(); var val = 1-input.val();
var id = input.attr("id"); var id = input.attr("id");
@ -102,7 +101,7 @@
input.val(val); input.val(val);
//console.log(id); //console.log(id);
}); });
/* setup field_richtext */ /* setup field_richtext */
setupFieldRichtext(); setupFieldRichtext();
@ -139,20 +138,20 @@
$('html').click(function() { $('html').click(function() {
close_last_popup_menu(); close_last_popup_menu();
}); });
// fancyboxes // fancyboxes
$("a.popupbox").colorbox({ $("a.popupbox").colorbox({
'inline' : true, 'inline' : true,
'transition' : 'elastic' 'transition' : 'elastic'
}); });
/* notifications template */ /* notifications template */
var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html()); var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
var notifications_all = unescape($('<div>').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack var notifications_all = unescape($('<div>').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
var notifications_mark = unescape($('<div>').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack var notifications_mark = unescape($('<div>').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
var notifications_empty = unescape($("#nav-notifications-menu").html()); var notifications_empty = unescape($("#nav-notifications-menu").html());
/* nav update event */ /* nav update event */
$('nav').bind('nav-update', function(e,data){; $('nav').bind('nav-update', function(e,data){;
var invalid = $(data).find('invalid').text(); var invalid = $(data).find('invalid').text();
@ -165,7 +164,7 @@
var home = $(data).find('home').text(); var home = $(data).find('home').text();
if(home == 0) { home = ''; $('#home-update').removeClass('show') } else { $('#home-update').addClass('show') } if(home == 0) { home = ''; $('#home-update').removeClass('show') } else { $('#home-update').addClass('show') }
$('#home-update').html(home); $('#home-update').html(home);
var intro = $(data).find('intro').text(); var intro = $(data).find('intro').text();
if(intro == 0) { intro = ''; $('#intro-update').removeClass('show') } else { $('#intro-update').addClass('show') } if(intro == 0) { intro = ''; $('#intro-update').removeClass('show') } else { $('#intro-update').addClass('show') }
$('#intro-update').html(intro); $('#intro-update').html(intro);
@ -173,7 +172,7 @@
var mail = $(data).find('mail').text(); var mail = $(data).find('mail').text();
if(mail == 0) { mail = ''; $('#mail-update').removeClass('show') } else { $('#mail-update').addClass('show') } if(mail == 0) { mail = ''; $('#mail-update').removeClass('show') } else { $('#mail-update').addClass('show') }
$('#mail-update').html(mail); $('#mail-update').html(mail);
var intro = $(data).find('intro').text(); var intro = $(data).find('intro').text();
if(intro == 0) { intro = ''; $('#intro-update-li').removeClass('show') } else { $('#intro-update-li').addClass('show') } if(intro == 0) { intro = ''; $('#intro-update-li').removeClass('show') } else { $('#intro-update-li').addClass('show') }
$('#intro-update-li').html(intro); $('#intro-update-li').html(intro);
@ -206,7 +205,7 @@
var eNotif = $(data).find('notif') var eNotif = $(data).find('notif')
if (eNotif.children("note").length==0){ if (eNotif.children("note").length==0){
$("#nav-notifications-menu").html(notifications_empty); $("#nav-notifications-menu").html(notifications_empty);
} else { } else {
@ -244,7 +243,7 @@
}); });
} }
} }
}); });
notification_lastitem = notification_id; notification_lastitem = notification_id;
localStorage.setItem("notification-lastitem", notification_lastitem) localStorage.setItem("notification-lastitem", notification_lastitem)
@ -267,7 +266,7 @@
} }
if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') } if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') }
$('#notify-update').html(notif); $('#notify-update').html(notif);
var eSysmsg = $(data).find('sysmsgs'); var eSysmsg = $(data).find('sysmsgs');
eSysmsg.children("notice").each(function(){ eSysmsg.children("notice").each(function(){
text = $(this).text(); text = $(this).text();
@ -277,10 +276,10 @@
text = $(this).text(); text = $(this).text();
$.jGrowl(text, { sticky: false, theme: 'info', life: 5000 }); $.jGrowl(text, { sticky: false, theme: 'info', life: 5000 });
}); });
}); });
NavUpdate(); NavUpdate();
// Allow folks to stop the ajax page updates with the pause/break key // Allow folks to stop the ajax page updates with the pause/break key
$(document).keydown(function(event) { $(document).keydown(function(event) {
if(event.keyCode == '8') { if(event.keyCode == '8') {
@ -306,8 +305,8 @@
} }
} }
}); });
}); });
function NavUpdate() { function NavUpdate() {
@ -318,8 +317,8 @@
$(data).find('result').each(function() { $(data).find('result').each(function() {
// send nav-update event // send nav-update event
$('nav').trigger('nav-update', this); $('nav').trigger('nav-update', this);
// start live update // start live update
if($('#live-network').length) { src = 'network'; liveUpdate(); } if($('#live-network').length) { src = 'network'; liveUpdate(); }
@ -330,19 +329,19 @@
/* if($('#live-display').length) { /* if($('#live-display').length) {
if(liking) { if(liking) {
liking = 0; liking = 0;
window.location.href=window.location.href window.location.href=window.location.href
} }
}*/ }*/
if($('#live-photos').length) { if($('#live-photos').length) {
if(liking) { if(liking) {
liking = 0; liking = 0;
window.location.href=window.location.href window.location.href=window.location.href
} }
} }
}); });
}) ; }) ;
} }
@ -432,8 +431,8 @@
}); });
$('#' + prev).after($(this)); $('#' + prev).after($(this));
} }
else { else {
$('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago')); $('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago'));
if($('#' + ident + ' ' + '.comment-edit-text-empty').length) if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
$('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper')); $('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
$('#' + ident + ' ' + '.hide-comments-total').replaceWith($(this).find('.hide-comments-total')); $('#' + ident + ' ' + '.hide-comments-total').replaceWith($(this).find('.hide-comments-total'));
@ -443,7 +442,7 @@
$(this).attr('src',$(this).attr('dst')); $(this).attr('src',$(this).attr('dst'));
}); });
} }
prev = ident; prev = ident;
}); });
*/ */
$('.like-rotator').hide(); $('.like-rotator').hide();
@ -467,10 +466,10 @@
$(node).removeClass("drop").addClass("drophide"); $(node).removeClass("drop").addClass("drophide");
} }
// Since our ajax calls are asynchronous, we will give a few // Since our ajax calls are asynchronous, we will give a few
// seconds for the first ajax call (setting like/dislike), then // seconds for the first ajax call (setting like/dislike), then
// run the updater to pick up any changes and display on the page. // run the updater to pick up any changes and display on the page.
// The updater will turn any rotators off when it's done. // The updater will turn any rotators off when it's done.
// This function will have returned long before any of these // This function will have returned long before any of these
// events have completed and therefore there won't be any // events have completed and therefore there won't be any
// visible feedback that anything changed without all this // visible feedback that anything changed without all this
@ -582,14 +581,14 @@
commentBusy = true; commentBusy = true;
$('body').css('cursor', 'wait'); $('body').css('cursor', 'wait');
$("#comment-preview-inp-" + id).val("0"); $("#comment-preview-inp-" + id).val("0");
$.post( $.post(
"item", "item",
$("#comment-edit-form-" + id).serialize(), $("#comment-edit-form-" + id).serialize(),
function(data) { function(data) {
if(data.success) { if(data.success) {
$("#comment-edit-wrapper-" + id).hide(); $("#comment-edit-wrapper-" + id).hide();
$("#comment-edit-text-" + id).val(''); $("#comment-edit-text-" + id).val('');
var tarea = document.getElementById("comment-edit-text-" + id); var tarea = document.getElementById("comment-edit-text-" + id);
if(tarea) if(tarea)
commentClose(tarea,id); commentClose(tarea,id);
if(timer) clearTimeout(timer); if(timer) clearTimeout(timer);
@ -600,28 +599,27 @@
window.location.href=data.reload; window.location.href=data.reload;
} }
}, },
"json" "json"
); );
return false; return false;
} }
function preview_comment(id) { function preview_comment(id) {
$("#comment-preview-inp-" + id).val("1"); $("#comment-preview-inp-" + id).val("1");
$("#comment-edit-preview-" + id).show(); $("#comment-edit-preview-" + id).show();
$.post( $.post(
"item", "item",
$("#comment-edit-form-" + id).serialize(), $("#comment-edit-form-" + id).serialize(),
function(data) { function(data) {
if(data.preview) { if(data.preview) {
$("#comment-edit-preview-" + id).html(data.preview); $("#comment-edit-preview-" + id).html(data.preview);
$("#comment-edit-preview-" + id + " a").click(function() { return false; }); $("#comment-edit-preview-" + id + " a").click(function() { return false; });
} }
}, },
"json" "json"
); );
return true; return true;
} }
@ -643,19 +641,19 @@
$("#jot-preview").val("1"); $("#jot-preview").val("1");
$("#jot-preview-content").show(); $("#jot-preview-content").show();
tinyMCE.triggerSave(); tinyMCE.triggerSave();
$.post( $.post(
"item", "item",
$("#profile-jot-form").serialize(), $("#profile-jot-form").serialize(),
function(data) { function(data) {
if(data.preview) { if(data.preview) {
$("#jot-preview-content").html(data.preview); $("#jot-preview-content").html(data.preview);
$("#jot-preview-content" + " a").click(function() { return false; }); $("#jot-preview-content" + " a").click(function() { return false; });
} }
}, },
"json" "json"
); );
$("#jot-preview").val("0"); $("#jot-preview").val("0");
return true; return true;
} }
@ -663,38 +661,38 @@
// unpause auto reloads if they are currently stopped // unpause auto reloads if they are currently stopped
totStopped = false; totStopped = false;
stopped = false; stopped = false;
$('#pause').html(''); $('#pause').html('');
} }
function bin2hex(s){
// Converts the binary representation of data to hex function bin2hex(s){
// // Converts the binary representation of data to hex
// version: 812.316 //
// discuss at: http://phpjs.org/functions/bin2hex // version: 812.316
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // discuss at: http://phpjs.org/functions/bin2hex
// + bugfixed by: Onno Marsman // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Linuxworld // + bugfixed by: Onno Marsman
// * example 1: bin2hex('Kev'); // + bugfixed by: Linuxworld
// * returns 1: '4b6576' // * example 1: bin2hex('Kev');
// * example 2: bin2hex(String.fromCharCode(0x00)); // * returns 1: '4b6576'
// * returns 2: '00' // * example 2: bin2hex(String.fromCharCode(0x00));
var v,i, f = 0, a = []; // * returns 2: '00'
s += ''; var v,i, f = 0, a = [];
f = s.length; s += '';
f = s.length;
for (i = 0; i<f; i++) {
a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1"); for (i = 0; i<f; i++) {
} a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
}
return a.join('');
} return a.join('');
}
function groupChangeMember(gid, cid, sec_token) { function groupChangeMember(gid, cid, sec_token) {
$('body .fakelink').css('cursor', 'wait'); $('body .fakelink').css('cursor', 'wait');
$.get('group/' + gid + '/' + cid + "?t=" + sec_token, function(data) { $.get('group/' + gid + '/' + cid + "?t=" + sec_token, function(data) {
$('#group-update-wrapper').html(data); $('#group-update-wrapper').html(data);
$('body .fakelink').css('cursor', 'auto'); $('body .fakelink').css('cursor', 'auto');
}); });
} }
@ -702,7 +700,7 @@
$('body .fakelink').css('cursor', 'wait'); $('body .fakelink').css('cursor', 'wait');
$.get('profperm/' + gid + '/' + cid, function(data) { $.get('profperm/' + gid + '/' + cid, function(data) {
$('#prof-update-wrapper').html(data); $('#prof-update-wrapper').html(data);
$('body .fakelink').css('cursor', 'auto'); $('body .fakelink').css('cursor', 'auto');
}); });
} }
@ -784,9 +782,9 @@ function setupFieldRichtext(){
} }
/** /**
* sprintf in javascript * sprintf in javascript
* "{0} and {1}".format('zero','uno'); * "{0} and {1}".format('zero','uno');
**/ **/
String.prototype.format = function() { String.prototype.format = function() {
var formatted = this; var formatted = this;
@ -826,3 +824,68 @@ function getNotificationPermission() {
return Notification.permission; return Notification.permission;
} }
} }
/**
* Show a dialog loaded from an url
* By defaults this load the url in an iframe in colorbox
* Themes can overwrite `show()` function to personalize it
*/
var Dialog = {
/**
* Show the dialog
*
* @param string url
* @return object colorbox
*/
show : function (url) {
var size = Dialog._get_size();
return $.colorbox({href: url, iframe:true,innerWidth: size.width+'px',innerHeight: size.height+'px'})
},
/**
* Show the Image browser dialog
*
* @param string name
* @param string id (optional)
* @return object
*
* The name will be used to build the event name
* fired by image browser dialog when the user select
* an image. The optional id will be passed as argument
* to the event handler
*/
doImageBrowser : function (name, id) {
var url = Dialog._get_url("image",name,id);
return Dialog.show(url);
},
/**
* Show the File browser dialog
*
* @param string name
* @param string id (optional)
* @return object
*
* The name will be used to build the event name
* fired by file browser dialog when the user select
* a file. The optional id will be passed as argument
* to the event handler
*/
doFileBrowser : function (name, id) {
var url = Dialog._get_url("file",name,id);
return Dialog.show(url);
},
_get_url : function(type, name, id) {
var hash = name;
if (id !== undefined) hash = hash + "-" + id;
return baseurl + "/fbrowser/"+type+"/?mode=minimal#"+hash;
},
_get_size: function() {
return {
width: window.innerWidth-50,
height: window.innerHeight-100
};
}
}

View file

@ -40,9 +40,9 @@ function fbrowser_content($a){
dbesc('Contact Photos'), dbesc('Contact Photos'),
dbesc( t('Contact Photos')) dbesc( t('Contact Photos'))
); );
// anon functions only from 5.3.0... meglio tardi che mai..
$folder1 = function($el) use ($mode) {return array(bin2hex($el['album']),$el['album']);}; function _map_folder1($el){return array(bin2hex($el['album']),$el['album']);};
$albums = array_map( $folder1 , $albums); $albums = array_map( "_map_folder1" , $albums);
} }
@ -62,7 +62,7 @@ function fbrowser_content($a){
dbesc( t('Contact Photos')) dbesc( t('Contact Photos'))
); );
function files1($rr){ function _map_files1($rr){
global $a; global $a;
$types = Photo::supportedTypes(); $types = Photo::supportedTypes();
$ext = $types[$rr['type']]; $ext = $types[$rr['type']];
@ -75,12 +75,12 @@ function fbrowser_content($a){
} }
return array( return array(
$a->get_baseurl() . '/photo/' . $rr['resource-id'] . '.' .$ext, $a->get_baseurl() . '/photos/' . $a->user['nickname'] . '/image/' . $rr['resource-id'],
$filename_e, $filename_e,
$a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.'. $ext $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.'. $ext
); );
} }
$files = array_map("files1", $r); $files = array_map("_map_files1", $r);
$tpl = get_markup_template($template_file); $tpl = get_markup_template($template_file);
@ -102,7 +102,7 @@ function fbrowser_content($a){
intval(local_user()) intval(local_user())
); );
function files2($rr){ global $a; function _map_files2($rr){ global $a;
list($m1,$m2) = explode("/",$rr['filetype']); list($m1,$m2) = explode("/",$rr['filetype']);
$filetype = ( (file_exists("images/icons/$m1.png"))?$m1:"zip"); $filetype = ( (file_exists("images/icons/$m1.png"))?$m1:"zip");
@ -115,8 +115,7 @@ function fbrowser_content($a){
return array( $a->get_baseurl() . '/attach/' . $rr['id'], $filename_e, $a->get_baseurl() . '/images/icons/16/' . $filetype . '.png'); return array( $a->get_baseurl() . '/attach/' . $rr['id'], $filename_e, $a->get_baseurl() . '/images/icons/16/' . $filetype . '.png');
} }
$files = array_map("files2", $files); $files = array_map("_map_files2", $files);
//echo "<pre>"; var_dump($files); killme();
$tpl = get_markup_template($template_file); $tpl = get_markup_template($template_file);

View file

@ -74,7 +74,7 @@ function initEditor(cb){
} }
else { else {
$('#profile-jot-desc').html('&nbsp;'); $('#profile-jot-desc').html('&nbsp;');
} }
//Character count //Character count
@ -110,7 +110,7 @@ function initEditor(cb){
$("a#jot-perms-icon").colorbox({ $("a#jot-perms-icon").colorbox({
'inline' : true, 'inline' : true,
'transition' : 'elastic' 'transition' : 'elastic'
}); });
} else { } else {
if (typeof cb!="undefined") cb(); if (typeof cb!="undefined") cb();
} }
@ -127,20 +127,20 @@ function enableOnUser(){
<script> <script>
var ispublic = '{{$ispublic}}'; var ispublic = '{{$ispublic}}';
$(document).ready(function() { $(document).ready(function() {
/* enable tinymce on focus and click */ /* enable tinymce on focus and click */
$("#profile-jot-text").focus(enableOnUser); $("#profile-jot-text").focus(enableOnUser);
$("#profile-jot-text").click(enableOnUser); $("#profile-jot-text").click(enableOnUser);
/* show images / file browser window /* show images / file browser window
* *
**/ **/
/* callback */ /* callback */
$('body').on('fbrowser.image.main', function(e, filename, embedcode, id) { $('body').on('fbrowser.image.main', function(e, filename, embedcode, id) {
$.colorbox.close(); $.colorbox.close();
@ -150,16 +150,16 @@ function enableOnUser(){
$.colorbox.close(); $.colorbox.close();
addeditortext(embedcode); addeditortext(embedcode);
}); });
$('#wall-image-upload').on('click', function(){ $('#wall-image-upload').on('click', function(){
$.colorbox({href: baseurl + "/fbrowser/image/?mode=minimal#main", iframe:true,innerWidth:'500px',innerHeight:'400px'}) Dialog.doImageBrowser("main");
}); });
$('#wall-file-upload').on('click', function(){ $('#wall-file-upload').on('click', function(){
$.colorbox({href: baseurl + "/fbrowser/file/?mode=minimal#main", iframe:true,innerWidth:'500px',innerHeight:'400px'}) Dialog.doFileBrowser("main");
}); });
/** /**
var uploader = new window.AjaxUpload( var uploader = new window.AjaxUpload(
'wall-image-upload', 'wall-image-upload',
{ action: 'wall_upload/{{$nickname}}', { action: 'wall_upload/{{$nickname}}',
@ -168,7 +168,7 @@ function enableOnUser(){
onComplete: function(file,response) { onComplete: function(file,response) {
addeditortext(response); addeditortext(response);
$('#profile-rotator').hide(); $('#profile-rotator').hide();
} }
} }
); );
var file_uploader = new window.AjaxUpload( var file_uploader = new window.AjaxUpload(
@ -179,10 +179,10 @@ function enableOnUser(){
onComplete: function(file,response) { onComplete: function(file,response) {
addeditortext(response); addeditortext(response);
$('#profile-rotator').hide(); $('#profile-rotator').hide();
} }
} }
); );
} }
**/ **/
}); });
@ -301,9 +301,9 @@ function enableOnUser(){
} }
function itemFiler(id) { function itemFiler(id) {
var bordercolor = $("input").css("border-color"); var bordercolor = $("input").css("border-color");
$.get('filer/', function(data){ $.get('filer/', function(data){
$.colorbox({html:data}); $.colorbox({html:data});
$("#id_term").keypress(function(){ $("#id_term").keypress(function(){
@ -312,7 +312,7 @@ function enableOnUser(){
$("#select_term").change(function(){ $("#select_term").change(function(){
$("#id_term").css("border-color",bordercolor); $("#id_term").css("border-color",bordercolor);
}) })
$("#filer_save").click(function(e){ $("#filer_save").click(function(e){
e.preventDefault(); e.preventDefault();
reply = $("#id_term").val(); reply = $("#id_term").val();
@ -345,7 +345,7 @@ function enableOnUser(){
} }
else else
tinyMCE.execCommand('mceInsertRawHTML',false,data); tinyMCE.execCommand('mceInsertRawHTML',false,data);
} }
{{$geotag}} {{$geotag}}