20110613¶
Disable slave elements in Insert Window¶
Hier die Problemmeldung eines Benutzers:
Es ist es für den Benutzer nicht logisch, dass er keinen Drittpartner hinzufügen kann, solange er eine neue Notiz nicht mindestens einmal gespeichert hat.
Ja klar. Das hatte ich schon immer geahnt und bisher lediglich noch nicht implementiert: im InsertWindow müssen natürlich alle Slave-Elemente disabled werden. Nicht nur der “Insert”-Button des HtmlPanels, sondern auch die HtmlPanels selber und alle SlaveGridPanels.
Anders als bei disabled fields brauchen diese Felder
natürlich nicht eigens in der AJAX-Response genannt zu werden,
sondern die sind ja automatisch bekann und immer die gleichen.
Deshalb haben Lino.GridPanel und Lino.HtmlBoxPanel
in der linolib.js
einfach ein Attribut
disabled_in_insert_window.
En passant zwei Bugs weniger: Wenn man ein Insert-Fenster per Permalink aufrief, z.B. http://127.0.0.1:8000/api/notes/MyNotes?fmt=insert&mt=1&mk=1, dann kam ein UnboundLocalError: local variable ‘params’ referenced before assignment”. Und nachdem dieser Bug behoben kam, kam außerdem nicht der richtige Titel “Einfügen nach…”.
Intuitiveres Bearbeiten der Drittpartner¶
Und noch eine Problemmeldung eines Benutzers:
Beim Erstellen eines Drittpartners einer Notiz kann man eine Person UND eine Firma gleichzeitig auswählen. Eigentlich geht das aber nicht und führt zu Reaktionen, die für den Benutzer nicht nachvollziehbar sind.
Es ist richtig und nötig, dass man beide Felder (Person und Firma) eines Drittpartners ausfüllen kann, und das bedeutet dann “Person X als Vertreter für Firma Y”. Das wurde dann bisher im Panel allerdings als “Person / Firma” angezeigt. In der Tat nicht gerade selbsterklärend. Für die nächste Version ändere ich diese Anzeige mal nach “<Firma> z.Hd. <Person>”, dann ist der Verwendungszweck wahrscheinlich intuitiv klarer.
Eine andere störende Sache beim Erstellen von Drittpartnern war, dass das Insert-Fenster als solches verwirrte. Deshalb habe ich es jetzt probeweise mal rausgeschmissen. Was allerdings dazu führt, dass auch der “Einfügen”-Button verschwindet. Um Drittpartner einzufügen, muss man momentan also das Drittpartner-Panel “im eigenen Fenster öffnen”. Später kommt dann das Erstellen per Drag & Drop hinzu.
Check-in Revision 4bf5a5344714
Lino location other than “/”¶
Um auf unserem internen Webserver (jana) mehrere Lino-Anwendungen parallel laufen lassen zu können, habe ich erstmals den Fall, dass Lino nicht auf “/” sitzt. Um das zu ermöglichen, habe ich einige Stunden gewurstelt und eine ganze Serie von Check-ins gemacht.
Die momentane Lösung ist möglicherweise auch nicht definitiv,
aber sie geht so:
wenn Lino nicht unter /
läuft, dann muss man
das ebenfalls in der settings.py
im neuen Klassenattribut lino.Lino.root_url
angeben.
In der Apache-Konfig:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /usr/share/apache2/default-site
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
WSGIDaemonProcess example.com processes=2 threads=15
WSGIProcessGroup example.com
WSGIScriptAlias /prj1 /usr/local/django/prj1/apache/django.wsgi
Alias /prj1/media/ /usr/local/django/prj1/media/
<Location /prj1/media/>
SetHandler none
</Location>
WSGIScriptAlias /prj2 /usr/local/django/prj2/apache/django.wsgi
Alias /prj2/media/ /usr/local/django/prj2/media/
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Nebenbei sind bei diesen Arbeiten auch noch einige kleine Änderungen gekommen:
lino.modlib.countries.fixtures.ee
funktioniert noch nichtlino.modlib.countries.fixtures.few_cities
ist jetzt intelligenter und funktioniert auch mit be zusammen.
Der folgende Traceback kommt noch mit Django 1.3, aber mindestens ab Revision 16392 nicht mehr:
luc@mops:/usr/local/django/igen_demo$ python manage.py test
Creating test database for alias 'default'...
.E....
======================================================================
ERROR: test_shortcut_view (django.contrib.contenttypes.tests.ContentTypesTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/var/snapshots/django/django/contrib/contenttypes/tests.py", line 64, in test_shortcut_view
obj = User.objects.create(username="john")
File "/var/snapshots/django/django/db/models/manager.py", line 138, in create
return self.get_query_set().create(**kwargs)
File "/var/snapshots/django/django/db/models/query.py", line 360, in create
obj.save(force_insert=True, using=self.db)
File "/var/snapshots/django/django/db/models/base.py", line 460, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/var/snapshots/django/django/db/models/base.py", line 553, in save_base
result = manager._insert(values, return_id=update_pk, using=using)
File "/var/snapshots/django/django/db/models/manager.py", line 195, in _insert
return insert_query(self.model, values, **kwargs)
File "/var/snapshots/django/django/db/models/query.py", line 1436, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/var/snapshots/django/django/db/models/sql/compiler.py", line 791, in execute_sql
cursor = super(SQLInsertCompiler, self).execute_sql(None)
File "/var/snapshots/django/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/var/snapshots/django/django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File "/var/snapshots/django/django/db/backends/sqlite3/base.py", line 234, in execute
return Database.Cursor.execute(self, query, params)
DatabaseError: no such table: auth_user
----------------------------------------------------------------------
Ran 6 tests in 13.871s
FAILED (errors=1)
Destroying test database for alias 'default'...
Lino 1.1.16¶
Und die heutigen Änderungen releasen wir als https://www.lino-framework.org/releases/2011/0613.html.