diff options
author | Neha shah <shan.akshata@gmail.com> | 2012-05-30 15:05:33 +0530 |
---|---|---|
committer | Neha shah <shan.akshata@gmail.com> | 2012-05-30 15:05:33 +0530 |
commit | f53d73be28062f9feff74522e20fa60dfd054e32 (patch) | |
tree | 1ba3014ca9d280787a487081c8a39cf9dcba94df | |
parent | 29ae5dbc1e26de261fe08eec6f5fa2445f969132 (diff) | |
parent | 81f1310e441c5dfd71e332aaa09e0964052ab9e3 (diff) | |
download | gnowsys-f53d73be28062f9feff74522e20fa60dfd054e32.tar.gz |
Merge remote branch 'sr/master'
132 files changed, 3795 insertions, 5972 deletions
@@ -1,2 +1,11 @@ build/ demo/demo.db + +### tilde, pyc and hash files + +*.pyc +*~ +\#*\# + + + @@ -1,73 +1,130 @@ -================== -gstudio: Gnowledge Studio -================== +============== +GNOWSYS Studio +============== -A collaborative workspace for constructing and publishing semantic -knowledge networks and ontologies as blogs. +A collaborative workspace (studio) for constructing and publishing semantic +knowledge networks and ontologies. -Features taking shape -===================== -As and when a feature is tested and working it will be listed below. +Features +======== -Nodes implemented -================= +The application is devided into two sub-apps. Gstudio and +Objectapp. The former includes classes for organizing the network or +constructing an ontology. The latter includes classes for holding the +instances of object-types, process-types and system-types. Gstudio Components ------------------ * Metatypes + + To hold Classes which have other classes as its members. e.g. "abstract noun", "adjective", "phylem", "class", "genus", "species" etc. * Object types + + To hold Classes: e.g. "thing", "being", "living being", "animals", "cat", "place", "person" etc. * Relation types + +To define binary relations (object properties) between classes and objects. e.g., "part of", "friend of", "composed of", "located in" etc. * Attribute types -* System types + + To define datatype properties for classes and objects. e.g., "population", "size", "length", "height", "first name", "phone number" etc. +* System types + + To bring together some of the classes into a system or + an ontology, a collection of the types defined above for + convenience. You can bring together the required classes, relations + and attributes into * Process types + + To define a process as prior and post states of classes or objects. * Attributes + + To store attributes * Relations + + To store binary relations * Node Specification + + A node specified (described) by its relations or attributes or both. * Relation Specification + + To create an expression using a relation with a subject, e.g., + "friend of Tom", "components of a cell" etc. + * Attribute Specification + + To specify an attribute by a subject to say for example: + population of India, color of a flower etc. These do not yeild a + proposition but an expression, which can be used as a subject in + another sentence. + +* Expression + + Expression is more like a relation between two terms, but it does not yeild a proposition, e.g., + "Researchers in India", "students residing in India" etc. It is modelled more like relation + class, except that the result is not a proposition/triple. + * Union + + To define a class by a union relation between two or more classes. + * Complement + + To define a class as a compleemnt of two or more classes. + * Intersection + To define a class as an intersection between two or more classes. Objectapp Components ------------------ * Objects + + To hold the instances of Object types: "Mumbai", "Tom" etc. + * Systems + + To hold the instances of System types. + * Processes + To hold the instances of processes. + Online Collaborative Platform ============================= -The application is built as a collaborative on line platform. +The application is built as a collaborative on line platform with the following features. Version Control --------------- -All the nodes above are also registered with django-reversion for -version control using django-reversion. + +All the changes by the users will be recorded. This feature is implemented using using django-reversion. User Registration ----------------- -Basic registration using django-registration +Basic registration, authentication mechanism. -Features you will see soon: -=========================== +Network Navigation using SVG graphs +================================== * neighbourhood graphs and concept graphs -* dynamic forms for adding attributes and relations following the - definition -Other Semantic Web features to come -=================================== + + +Other Semantic Web features +=========================== * data in RDF format * rdf feed to a triple store * sparql endpoint + +Features to be implemented +========================== + * export and import of standard knowledge representation languages: CL, OWL, XTM etc. Features adopted from Django-Blog-Zinnia @@ -79,42 +136,51 @@ django-blog-zinnia, which taught us best software development practices as well! After reviewing each feature for the purpose of semantic blogging, we will retain or extend the following features. + + * Comments -* `Sitemaps`_ +* Sitemaps * Archives views * Related entries * Private entries * RSS or Atom Feeds -* Tags and categories views -* `Advanced search engine`_ +* Tags +* Advanced search engine * Prepublication and expiration -* Edition in `MarkDown`_, `Textile`_ or `reStructuredText`_ +* Edition in MarkDown, Textile or reStructuredText * Widgets (Popular entries, Similar entries, ...) -* Spam protection with `Akismet`_ or `TypePad`_ +* Spam protection with Akismet or TypePad * Admin dashboard -* `MetaWeblog API`_ +* MetaWeblog API, xmlrpc * Ping Directories * Ping External links -* `Bit.ly`_ support -* `Twitter`_ support -* `Gravatar`_ support -* `Django-CMS`_ plugins +* Bit.ly support +* Twitter support +* Gravatar support +* Django-CMS plugins * Collaborative work * Tags autocompletion -* `Entry model extendable`_ +* Entry model extendable * Pingback/Trackback support -* `Blogger conversion utility`_ -* `WordPress conversion utility`_ -* `WYMeditor`_, `TinyMCE`_ and `MarkItUp`_ support +* Blogger conversion utility +* WordPress conversion utility +* WYMeditor, TinyMCE and MarkItUp support * Ready to use and extendables templates -* `Windows Live Writer`_ compatibility +* Windows Live Writer compatibility Examples ======== -We will soon create a sandbox site for users to play and test the features. +A sandbox site will give you a preview of the application. Visit http://sbox.gnowledge.org/ Project Page ============ -https://www.metastudio.org/groups/gstudio/overview +The project management is done from Savannah: https://savannah.gnu.org/projects/gnowsys/ + +Mailing list +============ + +Join this list if you are intersted in using or contributing as a hacker. + +http://gnowledge.org/cgi-bin/mailman/listinfo/gnowsys-dev diff --git a/demo/__init__.pyc b/demo/__init__.pyc Binary files differdeleted file mode 100644 index 3aa84235..00000000 --- a/demo/__init__.pyc +++ /dev/null diff --git a/demo/dashboard.py b/demo/dashboard.py index 93b08055..3e4c726c 100644 --- a/demo/dashboard.py +++ b/demo/dashboard.py @@ -92,17 +92,29 @@ class CustomIndexDashboard(Dashboard): collapsible=False, children = [ modules.AppList( - #Gstudio models here ( other than attribute datatype) - _('Gstudio'), + _('Gstudio (Basic)'), column=1, collapsible=False, models=( - 'gstudio.models.Objecttype', + 'gstudio.models.Objecttype', + 'gstudio.models.Attributetype', + 'gstudio.models.Relationtype', + 'objectapp.models.Gbobject', + ), + ), + + modules.AppList( + + + #Gstudio models here ( other than attribute datatype and collapsible ones) + _('Gstudio (Advanced)'), + column=1, + collapsible=True, + models=( + 'gstudio.models.Metatype', 'gstudio.models.Relation', - 'gstudio.models.Relationtype', 'gstudio.models.Attribute', - 'gstudio.models.Attributetype', 'gstudio.models.Systemtype', 'gstudio.models.Processtype', 'gstudio.models.AttributeSpecification', @@ -112,22 +124,27 @@ class CustomIndexDashboard(Dashboard): 'gstudio.models.Complement', 'gstudio.models.Intersection', 'gstudio.models.Expression', + 'gstudio.models.Peer', ), ), #Object App models here - modules.AppList( - _('Object App'), + _('Object App (Advanced)'), column=1, - collapsible=False, + collapsible=True, models=( - 'objectapp.models.*', + 'objectapp.models.Process', + 'objectapp.models.System', ), ), + + + + # Gstudio Attribute datatype models here modules.AppList( diff --git a/demo/dashboard.pyc b/demo/dashboard.pyc Binary files differdeleted file mode 100644 index d0e061ea..00000000 --- a/demo/dashboard.pyc +++ /dev/null diff --git a/demo/demo.db-old b/demo/demo.db-old Binary files differdeleted file mode 100644 index 76a326ba..00000000 --- a/demo/demo.db-old +++ /dev/null diff --git a/demo/graphviz/__init__.pyc b/demo/graphviz/__init__.pyc Binary files differdeleted file mode 100644 index 02e3f24d..00000000 --- a/demo/graphviz/__init__.pyc +++ /dev/null diff --git a/demo/graphviz/admin.pyc b/demo/graphviz/admin.pyc Binary files differdeleted file mode 100644 index d712f1cc..00000000 --- a/demo/graphviz/admin.pyc +++ /dev/null diff --git a/demo/graphviz/management/__init__.pyc b/demo/graphviz/management/__init__.pyc Binary files differdeleted file mode 100644 index 4fb5495f..00000000 --- a/demo/graphviz/management/__init__.pyc +++ /dev/null diff --git a/demo/graphviz/models.pyc b/demo/graphviz/models.pyc Binary files differdeleted file mode 100644 index 00d027e3..00000000 --- a/demo/graphviz/models.pyc +++ /dev/null diff --git a/demo/grappelli/__init__.pyc b/demo/grappelli/__init__.pyc Binary files differdeleted file mode 100644 index ad6c9f32..00000000 --- a/demo/grappelli/__init__.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/__init__.pyc b/demo/grappelli/dashboard/__init__.pyc Binary files differdeleted file mode 100644 index db1644a2..00000000 --- a/demo/grappelli/dashboard/__init__.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/dashboards.pyc b/demo/grappelli/dashboard/dashboards.pyc Binary files differdeleted file mode 100644 index 8359b870..00000000 --- a/demo/grappelli/dashboard/dashboards.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/management/__init__.pyc b/demo/grappelli/dashboard/management/__init__.pyc Binary files differdeleted file mode 100644 index 8296cb8d..00000000 --- a/demo/grappelli/dashboard/management/__init__.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/modules.pyc b/demo/grappelli/dashboard/modules.pyc Binary files differdeleted file mode 100644 index 02cc73ca..00000000 --- a/demo/grappelli/dashboard/modules.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/registry.pyc b/demo/grappelli/dashboard/registry.pyc Binary files differdeleted file mode 100644 index fca1a27a..00000000 --- a/demo/grappelli/dashboard/registry.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/templatetags/__init__.pyc b/demo/grappelli/dashboard/templatetags/__init__.pyc Binary files differdeleted file mode 100644 index 892c9838..00000000 --- a/demo/grappelli/dashboard/templatetags/__init__.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/templatetags/grp_dashboard_tags.pyc b/demo/grappelli/dashboard/templatetags/grp_dashboard_tags.pyc Binary files differdeleted file mode 100644 index 392f3299..00000000 --- a/demo/grappelli/dashboard/templatetags/grp_dashboard_tags.pyc +++ /dev/null diff --git a/demo/grappelli/dashboard/utils.pyc b/demo/grappelli/dashboard/utils.pyc Binary files differdeleted file mode 100644 index cecc4b0f..00000000 --- a/demo/grappelli/dashboard/utils.pyc +++ /dev/null diff --git a/demo/grappelli/models.pyc b/demo/grappelli/models.pyc Binary files differdeleted file mode 100644 index 2635511e..00000000 --- a/demo/grappelli/models.pyc +++ /dev/null diff --git a/demo/grappelli/settings.pyc b/demo/grappelli/settings.pyc Binary files differdeleted file mode 100644 index f8f4c5a2..00000000 --- a/demo/grappelli/settings.pyc +++ /dev/null diff --git a/demo/grappelli/static/grappelli/css/forms.css b/demo/grappelli/static/grappelli/css/forms.css index 84e21f6d..277334ee 100644 --- a/demo/grappelli/static/grappelli/css/forms.css +++ b/demo/grappelli/static/grappelli/css/forms.css @@ -2,7 +2,7 @@ /* Basic Settings, Fieldsets, Form-Rows ------------------------------------------------------------------------------------------------------- */ +----------------------------------------------------------------------------------------------------- */ form { margin: 0; @@ -657,7 +657,7 @@ select.span-16, textarea.span-16, div.autocomplete-wrapper-m2m.span-16, .span-20 label + input[type=text], .span-20 label + input[type=password], .span-20 label + select, .span-20 label + textarea { - width: 598px; + width: 230px; } .span-16 div.autocomplete-wrapper-m2m ul.repr, .span-16 div.autocomplete-wrapper-m2m ul.repr li, @@ -1240,4 +1240,4 @@ div.autocomplete-wrapper-m2m input.vManyToManyRawIdAdminField, div.autocomplete- background: transparent !important; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; cursor: default !important; -}
\ No newline at end of file +} diff --git a/demo/grappelli/static/grappelli/css/grappelli-skin-default.css b/demo/grappelli/static/grappelli/css/grappelli-skin-default.css index 6f5e721f..fe718a3e 100644 --- a/demo/grappelli/static/grappelli/css/grappelli-skin-default.css +++ b/demo/grappelli/static/grappelli/css/grappelli-skin-default.css @@ -7,7 +7,7 @@ /* Paragraphs ------------------------------------------------------------------------------------------------------- */ +----------------------------------------------------------------------------------------------------- */ .module p.help, p.help { @@ -166,6 +166,7 @@ body { background: -moz-linear-gradient(top, white, white); background: -webkit-gradient(linear, left top, left bottom, from(white), to(white)); background: -o-linear-gradient(top, white, white); + background: #2B3959; } #header a:hover, #header a:active { color: red; @@ -1907,7 +1908,7 @@ a:hover, a:active, a.selected { } #header a:link, #header a:visited { - color: #0872B4; + color: white; } #header a:hover, #header a:active { color: red; @@ -2016,11 +2017,11 @@ hr { /* User Tools ................................................... */ #user-tools { - border-left: 1px solid #303030; + border-left: 0px solid #303030; } #user-tools>li { - border-left: 1px solid #404040; - border-right: 1px solid #303030; + border-left: 0px solid #404040; + border-right: 0px solid #303030; } li.user-options-container.open a.user-options-handler { color: #eee !important; @@ -2946,7 +2947,7 @@ ul.pagination li.separator span { /* Tooltips ------------------------------------------------------------------------------------------------------- */ +----------------------------------------------------------------------------------------------------- */ .module.search .tooltip .tooltip-content { border: 1px solid #ccc; diff --git a/demo/grappelli/templates/admin/change_form.html b/demo/grappelli/templates/admin/change_form.html index c5a26544..72282905 100644 --- a/demo/grappelli/templates/admin/change_form.html +++ b/demo/grappelli/templates/admin/change_form.html @@ -17,6 +17,7 @@ <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_inline.js" type="text/javascript"></script> {% if change %} <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/URI.js"></script> + <script type="text/javascript" charset="utf-8"> (function($){ $(document).ready(function() { diff --git a/demo/grappelli/templatetags/__init__.pyc b/demo/grappelli/templatetags/__init__.pyc Binary files differdeleted file mode 100644 index 6873fc5c..00000000 --- a/demo/grappelli/templatetags/__init__.pyc +++ /dev/null diff --git a/demo/grappelli/templatetags/grp_tags.pyc b/demo/grappelli/templatetags/grp_tags.pyc Binary files differdeleted file mode 100644 index 1d9bfaa0..00000000 --- a/demo/grappelli/templatetags/grp_tags.pyc +++ /dev/null diff --git a/demo/grappelli/urls.pyc b/demo/grappelli/urls.pyc Binary files differdeleted file mode 100644 index 24a0b72d..00000000 --- a/demo/grappelli/urls.pyc +++ /dev/null diff --git a/demo/grappelli/views/__init__.pyc b/demo/grappelli/views/__init__.pyc Binary files differdeleted file mode 100644 index 1533e6e5..00000000 --- a/demo/grappelli/views/__init__.pyc +++ /dev/null diff --git a/demo/grappelli/views/related.pyc b/demo/grappelli/views/related.pyc Binary files differdeleted file mode 100644 index 01e8189e..00000000 --- a/demo/grappelli/views/related.pyc +++ /dev/null diff --git a/demo/init.py b/demo/init.py deleted file mode 100644 index 3df8dfc2..00000000 --- a/demo/init.py +++ /dev/null @@ -1,17 +0,0 @@ -from gstudio.models import * -from objectapp.models import * -from reversion.models import * - -mts = Metatype.objects.all() -ots = Objecttype.objects.all() -ot = Objecttype.objects.get(title='person') -ot2 = Objecttype.objects.get(title='city') -ot3 = Objecttype.objects.get(title='country') -ot4 = Objecttype.objects.get(title='place') -rts = Relationtype.objects.all() -rt1 = Relationtype.objects.get(title='capital of') -rs= Relation.objects.all() -#r1 = Relation.objects.get(relationtype=rt1.id) -at1 = Attributetype.objects.get(title='population') -o =Gbobject.objects.get(title='Mumbai') -a = Attribute.objects.all() diff --git a/demo/rdfstore/__db.001 b/demo/rdfstore/__db.001 Binary files differdeleted file mode 100644 index c30dd62f..00000000 --- a/demo/rdfstore/__db.001 +++ /dev/null diff --git a/demo/rdfstore/__db.002 b/demo/rdfstore/__db.002 Binary files differdeleted file mode 100644 index 12a404df..00000000 --- a/demo/rdfstore/__db.002 +++ /dev/null diff --git a/demo/rdfstore/__db.003 b/demo/rdfstore/__db.003 Binary files differdeleted file mode 100644 index 7599b34a..00000000 --- a/demo/rdfstore/__db.003 +++ /dev/null diff --git a/demo/rdfstore/__db.004 b/demo/rdfstore/__db.004 Binary files differdeleted file mode 100644 index f5c6f0d2..00000000 --- a/demo/rdfstore/__db.004 +++ /dev/null diff --git a/demo/rdfstore/c^o^s^p^ b/demo/rdfstore/c^o^s^p^ Binary files differdeleted file mode 100644 index 298ca221..00000000 --- a/demo/rdfstore/c^o^s^p^ +++ /dev/null diff --git a/demo/rdfstore/c^p^o^s^ b/demo/rdfstore/c^p^o^s^ Binary files differdeleted file mode 100644 index 4e2d9397..00000000 --- a/demo/rdfstore/c^p^o^s^ +++ /dev/null diff --git a/demo/rdfstore/c^s^p^o^ b/demo/rdfstore/c^s^p^o^ Binary files differdeleted file mode 100644 index 5eb631cf..00000000 --- a/demo/rdfstore/c^s^p^o^ +++ /dev/null diff --git a/demo/rdfstore/contexts b/demo/rdfstore/contexts Binary files differdeleted file mode 100644 index 8063f531..00000000 --- a/demo/rdfstore/contexts +++ /dev/null diff --git a/demo/rdfstore/i2k b/demo/rdfstore/i2k Binary files differdeleted file mode 100644 index bf455a4c..00000000 --- a/demo/rdfstore/i2k +++ /dev/null diff --git a/demo/rdfstore/k2i b/demo/rdfstore/k2i Binary files differdeleted file mode 100644 index 637056d4..00000000 --- a/demo/rdfstore/k2i +++ /dev/null diff --git a/demo/rdfstore/namespace b/demo/rdfstore/namespace Binary files differdeleted file mode 100644 index 1bfa2de8..00000000 --- a/demo/rdfstore/namespace +++ /dev/null diff --git a/demo/rdfstore/prefix b/demo/rdfstore/prefix Binary files differdeleted file mode 100644 index 55593176..00000000 --- a/demo/rdfstore/prefix +++ /dev/null diff --git a/demo/sampledata.json b/demo/sampledata.json deleted file mode 100644 index ccb4fedc..00000000 --- a/demo/sampledata.json +++ /dev/null @@ -1 +0,0 @@ -[{"pk": 1, "model": "gstudio.nid", "fields": {"title": "person"}}, {"pk": 2, "model": "gstudio.nid", "fields": {"title": "concept class"}}, {"pk": 3, "model": "gstudio.nid", "fields": {"title": "place"}}, {"pk": 4, "model": "gstudio.nid", "fields": {"title": "country"}}, {"pk": 5, "model": "gstudio.nid", "fields": {"title": "city"}}, {"pk": 6, "model": "gstudio.nid", "fields": {"title": "capital of"}}, {"pk": 7, "model": "gstudio.nid", "fields": {"title": "lives in"}}, {"pk": 8, "model": "gstudio.nid", "fields": {"title": "Charles Darwin"}}, {"pk": 9, "model": "gstudio.nid", "fields": {"title": "India"}}, {"pk": 10, "model": "gstudio.nid", "fields": {"title": "Mumbai"}}, {"pk": 11, "model": "gstudio.nid", "fields": {"title": "New Delhi"}}, {"pk": 12, "model": "gstudio.nid", "fields": {"title": " New Delhi capital of India"}}, {"pk": 13, "model": "gstudio.nid", "fields": {"title": "Nagarjuna"}}, {"pk": 14, "model": "gstudio.nid", "fields": {"title": " Nagarjuna mostly lives in Mumbai"}}, {"pk": 15, "model": "gstudio.nid", "fields": {"title": "population"}}, {"pk": 16, "model": "gstudio.nid", "fields": {"title": "lived in"}}, {"pk": 17, "model": "gstudio.nid", "fields": {"title": "London"}}, {"pk": 18, "model": "gstudio.nid", "fields": {"title": " Charles Darwin lived in several locations of London"}}, {"pk": 19, "model": "gstudio.nid", "fields": {"title": "the population of India is 1210193422"}}, {"pk": 20, "model": "gstudio.nid", "fields": {"title": "the population of Mumbai is 20245000"}}, {"pk": 21, "model": "gstudio.nid", "fields": {"title": "the population of London is 7825200"}}, {"pk": 22, "model": "gstudio.nid", "fields": {"title": "times"}}, {"pk": 23, "model": "gstudio.nid", "fields": {"title": " the population of Mumbai is 20245000 three times more than the population of London is 7825200"}}, {"pk": 24, "model": "gstudio.nid", "fields": {"title": "geographical collection"}}, {"pk": 25, "model": "gstudio.nid", "fields": {"title": "geographical facts of India"}}, {"pk": 26, "model": "gstudio.nid", "fields": {"title": "population change"}}, {"pk": 27, "model": "gstudio.nid", "fields": {"title": "the population of Mumbai is 21245000"}}, {"pk": 28, "model": "gstudio.nid", "fields": {"title": "population change of mumbai"}}, {"pk": 1, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "human being", "plural": "pesons", "rating_votes": 0}}, {"pk": 2, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "abstract term", "plural": null, "rating_votes": 0}}, {"pk": 3, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "location", "plural": "places", "rating_votes": 0}}, {"pk": 4, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "nation", "plural": "countries", "rating_votes": 0}}, {"pk": 5, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "metropolis", "plural": "cities", "rating_votes": 0}}, {"pk": 6, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 7, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "resides in", "plural": null, "rating_votes": 0}}, {"pk": 8, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 9, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "Bharat", "plural": null, "rating_votes": 0}}, {"pk": 10, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 11, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 13, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 15, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 16, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "had home in", "plural": null, "rating_votes": 0}}, {"pk": 17, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 22, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 24, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 25, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 26, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 28, "model": "gstudio.node", "fields": {"rating_score": 0, "altnames": "", "plural": null, "rating_votes": 0}}, {"pk": 12, "model": "gstudio.edge", "fields": {}}, {"pk": 14, "model": "gstudio.edge", "fields": {}}, {"pk": 18, "model": "gstudio.edge", "fields": {}}, {"pk": 19, "model": "gstudio.edge", "fields": {}}, {"pk": 20, "model": "gstudio.edge", "fields": {}}, {"pk": 21, "model": "gstudio.edge", "fields": {}}, {"pk": 23, "model": "gstudio.edge", "fields": {}}, {"pk": 27, "model": "gstudio.edge", "fields": {}}, {"pk": 2, "model": "gstudio.metatype", "fields": {"rght": 2, "description": "the class of all concepts", "parent": null, "level": 0, "lft": 1, "tree_id": 1, "slug": "concept-class"}}, {"pk": 26, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 05:41:16", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 05:45:08", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 5, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 05:41:16", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "population-change", "level": 0}}, {"pk": 24, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 04:34:03", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 04:36:18", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 4, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 04:34:03", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "geographical-collection", "level": 0}}, {"pk": 22, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 04:22:38", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [], "last_update": "2011-12-07 04:27:49", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 3, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 04:22:38", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "times", "level": 0}}, {"pk": 16, "model": "gstudio.nodetype", "fields": {"rght": 3, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 04:08:04", "lft": 2, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [], "last_update": "2011-12-07 04:09:46", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 2, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 04:08:04", "status": 2, "parent": 7, "tags": "", "authors": [1], "password": "", "slug": "lived", "level": 1}}, {"pk": 15, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 04:03:48", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 04:07:31", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 1, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 04:03:48", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "population", "level": 0}}, {"pk": 7, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 02:45:01", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [], "last_update": "2011-12-07 02:46:40", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 2, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 02:45:01", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "lives", "level": 0}}, {"pk": 6, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [], "excerpt": "", "creation_date": "2011-12-07 02:16:54", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [], "last_update": "2011-12-07 02:19:08", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 1, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 02:16:54", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "capital-of", "level": 0}}, {"pk": 5, "model": "gstudio.nodetype", "fields": {"rght": 3, "posteriornodes": [], "image": "", "metatypes": [2], "excerpt": "", "creation_date": "2011-12-07 02:10:54", "lft": 2, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 02:11:24", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 2, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 02:10:54", "status": 2, "parent": 3, "tags": "", "authors": [1], "password": "", "slug": "city", "level": 1}}, {"pk": 4, "model": "gstudio.nodetype", "fields": {"rght": 5, "posteriornodes": [], "image": "", "metatypes": [2], "excerpt": "", "creation_date": "2011-12-07 02:08:37", "lft": 4, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 02:10:44", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 2, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 02:08:37", "status": 2, "parent": 3, "tags": "", "authors": [1], "password": "", "slug": "country", "level": 1}}, {"pk": 3, "model": "gstudio.nodetype", "fields": {"rght": 6, "posteriornodes": [], "image": "", "metatypes": [2], "excerpt": "", "creation_date": "2011-12-07 02:07:58", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 02:08:28", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 2, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 02:07:58", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "place", "level": 0}}, {"pk": 1, "model": "gstudio.nodetype", "fields": {"rght": 2, "posteriornodes": [], "image": "", "metatypes": [2], "excerpt": "", "creation_date": "2011-12-07 01:38:11", "lft": 1, "featured": false, "pingback_enabled": true, "priornodes": [], "comment_enabled": true, "login_required": false, "sites": [1], "last_update": "2011-12-07 02:07:53", "content": "", "template": "gstudio/nodetype_detail.html", "tree_id": 1, "end_publication": "2042-03-15 00:00:00", "start_publication": "2011-12-07 01:38:11", "status": 2, "parent": null, "tags": "", "authors": [1], "password": "", "slug": "person", "level": 0}}, {"pk": 5, "model": "gstudio.objecttype", "fields": {"priornodes": [], "posteriornodes": [], "metatypes": [2], "sites": [1], "lft": 2, "authors": [1]}}, {"pk": 4, "model": "gstudio.objecttype", "fields": {"priornodes": [], "posteriornodes": [], "metatypes": [2], "sites": [1], "lft": 2, "authors": [1]}}, {"pk": 3, "model": "gstudio.objecttype", "fields": {"priornodes": [], "posteriornodes": [], "metatypes": [2], "sites": [1], "lft": 1, "authors": [1]}}, {"pk": 1, "model": "gstudio.objecttype", "fields": {"priornodes": [], "posteriornodes": [], "metatypes": [2], "sites": [1], "lft": 1, "authors": [1]}}, {"pk": 22, "model": "gstudio.edgetype", "fields": {"priornodes": [], "authors": [1], "posteriornodes": [], "sites": [], "metatypes": []}}, {"pk": 16, "model": "gstudio.edgetype", "fields": {"priornodes": [], "authors": [1], "posteriornodes": [], "sites": [], "metatypes": []}}, {"pk": 15, "model": "gstudio.edgetype", "fields": {"priornodes": [], "authors": [1], "posteriornodes": [], "sites": [1], "metatypes": []}}, {"pk": 7, "model": "gstudio.edgetype", "fields": {"priornodes": [], "authors": [1], "posteriornodes": [], "sites": [], "metatypes": []}}, {"pk": 6, "model": "gstudio.edgetype", "fields": {"priornodes": [], "authors": [1], "posteriornodes": [], "sites": [], "metatypes": []}}, {"pk": 22, "model": "gstudio.relationtype", "fields": {"rght": 2, "inverse": "portions of", "cardinalityLeft": null, "isTransitive": false, "cardinalityRight": null, "level": 0, "isSymmetrical": false, "sites": [], "metatypes": [], "lft": 1, "posteriornodes": [], "subjecttypeLeft": 15, "priornodes": [], "subjecttypeRight": 15, "applicablenodetypes1": "OT", "authors": [1], "applicablenodetypes2": "OT", "tree_id": 3, "isReflexive": false}}, {"pk": 16, "model": "gstudio.relationtype", "fields": {"rght": 3, "inverse": "had resident", "cardinalityLeft": null, "isTransitive": null, "cardinalityRight": null, "level": 1, "isSymmetrical": null, "sites": [], "metatypes": [], "lft": 2, "posteriornodes": [], "subjecttypeLeft": 1, "priornodes": [], "subjecttypeRight": 3, "applicablenodetypes1": "OT", "authors": [1], "applicablenodetypes2": "OT", "tree_id": 2, "isReflexive": null}}, {"pk": 7, "model": "gstudio.relationtype", "fields": {"rght": 4, "inverse": "living place of", "cardinalityLeft": null, "isTransitive": null, "cardinalityRight": null, "level": 0, "isSymmetrical": null, "sites": [], "metatypes": [], "lft": 1, "posteriornodes": [], "subjecttypeLeft": 1, "priornodes": [], "subjecttypeRight": 3, "applicablenodetypes1": "OT", "authors": [1], "applicablenodetypes2": "OT", "tree_id": 2, "isReflexive": null}}, {"pk": 6, "model": "gstudio.relationtype", "fields": {"rght": 2, "inverse": "has capital", "cardinalityLeft": 1, "isTransitive": false, "cardinalityRight": 1, "level": 0, "isSymmetrical": false, "sites": [], "metatypes": [], "lft": 1, "posteriornodes": [], "subjecttypeLeft": 5, "priornodes": [], "subjecttypeRight": 4, "applicablenodetypes1": "OT", "authors": [1], "applicablenodetypes2": "OT", "tree_id": 1, "isReflexive": false}}, {"pk": 15, "model": "gstudio.attributetype", "fields": {"rght": 2, "posteriornodes": [], "validators": [], "metatypes": [], "lft": 1, "max_digits": null, "blank": null, "help_text": "", "null": null, "priornodes": [], "subjecttype": 3, "upload_to": "", "sites": [1], "label": null, "auto_now": null, "tree_id": 1, "verbose_name": "", "verify_exists": null, "dataType": "6", "editable": null, "applicablenodetypes": "OT", "authors": [1], "auto_now_add": null, "path": "", "unique": null, "min_length": null, "decimal_places": null, "level": 0, "default": null, "required": null}}, {"pk": 12, "model": "gstudio.relation", "fields": {"subject1Scope": "", "relationTypeScope": "", "subject1": 11, "subject2": 9, "relationtype": 6, "objectScope": ""}}, {"pk": 14, "model": "gstudio.relation", "fields": {"subject1Scope": "", "relationTypeScope": "mostly", "subject1": 13, "subject2": 10, "relationtype": 7, "objectScope": ""}}, {"pk": 18, "model": "gstudio.relation", "fields": {"subject1Scope": "", "relationTypeScope": "", "subject1": 8, "subject2": 17, "relationtype": 16, "objectScope": "several locations of"}}, {"pk": 23, "model": "gstudio.relation", "fields": {"subject1Scope": "", "relationTypeScope": "three", "subject1": 20, "subject2": 21, "relationtype": 22, "objectScope": "more than"}}, {"pk": 19, "model": "gstudio.attribute", "fields": {"svalue": "1210193422", "attributeTypeScope": "", "valueScope": "", "attributeType": 15, "subjectScope": "", "subject": 9}}, {"pk": 20, "model": "gstudio.attribute", "fields": {"svalue": "20245000", "attributeTypeScope": "", "valueScope": "", "attributeType": 15, "subjectScope": "", "subject": 10}}, {"pk": 21, "model": "gstudio.attribute", "fields": {"svalue": "7825200", "attributeTypeScope": "", "valueScope": "", "attributeType": 15, "subjectScope": "", "subject": 17}}, {"pk": 27, "model": "gstudio.attribute", "fields": {"svalue": "21245000", "attributeTypeScope": "", "valueScope": "", "attributeType": 15, "subjectScope": "", "subject": 10}}, {"pk": 26, "model": "gstudio.processtype", "fields": {"priornodes": [], "posteriornodes": [], "relationtype_set": [], "metatypes": [], "sites": [1], "attributetype_set": [15], "lft": 1, "authors": [1]}}, {"pk": 24, "model": "gstudio.systemtype", "fields": {"priornodes": [], "posteriornodes": [], "relationtype_set": [], "metatype_set": [], "nodetype_set": [], "metatypes": [], "sites": [1], "processtype_set": [], "attributetype_set": [], "lft": 1, "authors": [1]}}, {"pk": 28, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [], "creation_date": "2011-12-07 05:47:16", "content": "", "featured": false, "start_publication": "2011-12-07 05:47:16", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 05:48:14", "slug": "population-change-mumbai"}}, {"pk": 25, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [], "creation_date": "2011-12-07 04:36:29", "content": "", "featured": false, "start_publication": "2011-12-07 04:36:29", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 04:38:45", "slug": "geographical-facts-india"}}, {"pk": 17, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [5], "creation_date": "2011-12-07 04:11:03", "content": "", "featured": false, "start_publication": "2011-12-07 04:11:03", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 04:11:34", "slug": "london"}}, {"pk": 13, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [1], "creation_date": "2011-12-07 02:53:25", "content": "", "featured": false, "start_publication": "2011-12-07 02:53:25", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 02:54:08", "slug": "nagarjuna"}}, {"pk": 11, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [5], "creation_date": "2011-12-07 02:51:24", "content": "", "featured": false, "start_publication": "2011-12-07 02:51:24", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 02:51:40", "slug": "new-delhi"}}, {"pk": 10, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [5], "creation_date": "2011-12-07 02:50:55", "content": "", "featured": false, "start_publication": "2011-12-07 02:50:55", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 02:51:11", "slug": "mu"}}, {"pk": 9, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [4], "creation_date": "2011-12-07 02:49:25", "content": "", "featured": false, "start_publication": "2011-12-07 02:49:25", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 02:50:25", "slug": "india"}}, {"pk": 8, "model": "objectapp.gbobject", "fields": {"status": 2, "priornodes": [], "password": "", "end_publication": "2042-03-15 00:00:00", "posteriornodes": [], "template": "objectapp/gbobject_detail.html", "comment_enabled": true, "tags": "", "image": "", "login_required": false, "excerpt": "", "sites": [1], "objecttypes": [1], "creation_date": "2011-12-07 02:47:35", "content": "", "featured": false, "start_publication": "2011-12-07 02:47:35", "pingback_enabled": true, "authors": [1], "last_update": "2011-12-07 02:48:29", "slug": "charles-darwin"}}, {"pk": 28, "model": "objectapp.process", "fields": {"priornodes": [], "poststate_relation_set": [], "posteriornodes": [], "objecttypes": [], "sites": [1], "poststate_attribute_set": [27], "priorstate_relation_set": [], "authors": [1], "processtypes": [26], "priorstate_attribute_set": [20]}}, {"pk": 25, "model": "objectapp.system", "fields": {"priornodes": [], "object_set": [11, 10, 9], "posteriornodes": [], "objecttypes": [], "sites": [1], "systemtypes": [24], "process_set": [], "attribute_set": [19, 20], "authors": [1], "system_set": [], "relation_set": [12, 23]}}, {"pk": 1, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 01:38:16", "manager_slug": "default", "user": 1}}, {"pk": 2, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:06:44", "manager_slug": "default", "user": 1}}, {"pk": 3, "model": "reversion.revision", "fields": {"comment": "Changed altnames, plural and metatypes.", "date_created": "2011-12-07 02:07:53", "manager_slug": "default", "user": 1}}, {"pk": 4, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:08:28", "manager_slug": "default", "user": 1}}, {"pk": 5, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:10:45", "manager_slug": "default", "user": 1}}, {"pk": 6, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:11:24", "manager_slug": "default", "user": 1}}, {"pk": 7, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:19:08", "manager_slug": "default", "user": 1}}, {"pk": 8, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:46:40", "manager_slug": "default", "user": 1}}, {"pk": 9, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:48:30", "manager_slug": "default", "user": 1}}, {"pk": 10, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:50:09", "manager_slug": "default", "user": 1}}, {"pk": 11, "model": "reversion.revision", "fields": {"comment": "Changed altnames.", "date_created": "2011-12-07 02:50:26", "manager_slug": "default", "user": 1}}, {"pk": 12, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:51:11", "manager_slug": "default", "user": 1}}, {"pk": 13, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:51:40", "manager_slug": "default", "user": 1}}, {"pk": 14, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:52:45", "manager_slug": "default", "user": 1}}, {"pk": 15, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:54:09", "manager_slug": "default", "user": 1}}, {"pk": 16, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 02:55:08", "manager_slug": "default", "user": 1}}, {"pk": 17, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:07:31", "manager_slug": "default", "user": 1}}, {"pk": 18, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:09:46", "manager_slug": "default", "user": 1}}, {"pk": 19, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:11:35", "manager_slug": "default", "user": 1}}, {"pk": 20, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:14:41", "manager_slug": "default", "user": 1}}, {"pk": 21, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:20:13", "manager_slug": "default", "user": 1}}, {"pk": 22, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:21:13", "manager_slug": "default", "user": 1}}, {"pk": 23, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:22:01", "manager_slug": "default", "user": 1}}, {"pk": 24, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:27:50", "manager_slug": "default", "user": 1}}, {"pk": 25, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:29:09", "manager_slug": "default", "user": 1}}, {"pk": 26, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:36:18", "manager_slug": "default", "user": 1}}, {"pk": 27, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 04:38:46", "manager_slug": "default", "user": 1}}, {"pk": 28, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 05:45:08", "manager_slug": "default", "user": 1}}, {"pk": 29, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 05:46:49", "manager_slug": "default", "user": 1}}, {"pk": 30, "model": "reversion.revision", "fields": {"comment": "Initial version.", "date_created": "2011-12-07 05:48:14", "manager_slug": "default", "user": 1}}, {"pk": 1, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 18, "object_id_int": 1, "type": 0, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.objecttype\", \"fields\": {\"lft\": 1}}]", "revision": 1}}, {"pk": 2, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 0, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 2}}, {"pk": 3, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 18, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.objecttype\", \"fields\": {\"lft\": 1}}]", "revision": 3}}, {"pk": 4, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 18, "object_id_int": 3, "type": 0, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.objecttype\", \"fields\": {\"lft\": 1}}]", "revision": 4}}, {"pk": 5, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 18, "object_id_int": 4, "type": 0, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.objecttype\", \"fields\": {\"lft\": 2}}]", "revision": 5}}, {"pk": 6, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 18, "object_id_int": 5, "type": 0, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.objecttype\", \"fields\": {\"lft\": 2}}]", "revision": 6}}, {"pk": 7, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 13, "object_id_int": 4, "type": 1, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"country\"}}]", "revision": 7}}, {"pk": 8, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 13, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"city\"}}]", "revision": 7}}, {"pk": 9, "model": "reversion.version", "fields": {"format": "json", "object_repr": "capital of", "object_id": "6", "content_type": 20, "object_id_int": 6, "type": 0, "serialized_data": "[{\"pk\": 6, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"has capital\", \"cardinalityLeft\": 1, \"isTransitive\": false, \"cardinalityRight\": 1, \"level\": 0, \"isSymmetrical\": false, \"lft\": 1, \"subjecttypeLeft\": 5, \"subjecttypeRight\": 4, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 1, \"isReflexive\": false}}]", "revision": 7}}, {"pk": 10, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 13, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"person\"}}]", "revision": 8}}, {"pk": 11, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 8}}, {"pk": 12, "model": "reversion.version", "fields": {"format": "json", "object_repr": "lives in", "object_id": "7", "content_type": 20, "object_id_int": 7, "type": 0, "serialized_data": "[{\"pk\": 7, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"living place of\", \"cardinalityLeft\": null, \"isTransitive\": null, \"cardinalityRight\": null, \"level\": 0, \"isSymmetrical\": null, \"lft\": 1, \"subjecttypeLeft\": 1, \"subjecttypeRight\": 3, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 2, \"isReflexive\": null}}]", "revision": 8}}, {"pk": 13, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Charles Darwin", "object_id": "8", "content_type": 52, "object_id_int": 8, "type": 0, "serialized_data": "[{\"pk\": 8, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [], \"objecttypes\": [], \"creation_date\": \"2011-12-07 02:47:35\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:47:35\", \"pingback_enabled\": true, \"authors\": [], \"last_update\": \"2011-12-07 02:48:29\", \"slug\": \"charles-darwin\"}}]", "revision": 9}}, {"pk": 14, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 17, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 2, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 01:38:11\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:07:53\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 1, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 01:38:11\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"person\", \"level\": 0}}]", "revision": 9}}, {"pk": 15, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 9}}, {"pk": 16, "model": "reversion.version", "fields": {"format": "json", "object_repr": "India", "object_id": "9", "content_type": 52, "object_id_int": 9, "type": 0, "serialized_data": "[{\"pk\": 9, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [], \"objecttypes\": [], \"creation_date\": \"2011-12-07 02:49:25\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:49:25\", \"pingback_enabled\": true, \"authors\": [], \"last_update\": \"2011-12-07 02:50:09\", \"slug\": \"india\"}}]", "revision": 10}}, {"pk": 17, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 10}}, {"pk": 18, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 17, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 6, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:07:58\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:08:28\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:07:58\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"place\", \"level\": 0}}]", "revision": 10}}, {"pk": 19, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 17, "object_id_int": 4, "type": 1, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 5, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:08:37\", \"lft\": 4, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:10:44\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:08:37\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"country\", \"level\": 1}}]", "revision": 10}}, {"pk": 20, "model": "reversion.version", "fields": {"format": "json", "object_repr": "India", "object_id": "9", "content_type": 52, "object_id_int": 9, "type": 1, "serialized_data": "[{\"pk\": 9, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [1], \"objecttypes\": [4], \"creation_date\": \"2011-12-07 02:49:25\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:49:25\", \"pingback_enabled\": true, \"authors\": [1], \"last_update\": \"2011-12-07 02:50:25\", \"slug\": \"india\"}}]", "revision": 11}}, {"pk": 21, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 11}}, {"pk": 22, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 17, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 6, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:07:58\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:08:28\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:07:58\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"place\", \"level\": 0}}]", "revision": 11}}, {"pk": 23, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 17, "object_id_int": 4, "type": 1, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 5, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:08:37\", \"lft\": 4, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:10:44\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:08:37\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"country\", \"level\": 1}}]", "revision": 11}}, {"pk": 24, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 52, "object_id_int": 10, "type": 0, "serialized_data": "[{\"pk\": 10, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [], \"objecttypes\": [], \"creation_date\": \"2011-12-07 02:50:55\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:50:55\", \"pingback_enabled\": true, \"authors\": [], \"last_update\": \"2011-12-07 02:51:11\", \"slug\": \"mu\"}}]", "revision": 12}}, {"pk": 25, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 17, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 6, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:07:58\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:08:28\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:07:58\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"place\", \"level\": 0}}]", "revision": 12}}, {"pk": 26, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 12}}, {"pk": 27, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 17, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 3, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:10:54\", \"lft\": 2, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:11:24\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:10:54\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"city\", \"level\": 1}}]", "revision": 12}}, {"pk": 28, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 17, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 6, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:07:58\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:08:28\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:07:58\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"place\", \"level\": 0}}]", "revision": 13}}, {"pk": 29, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 13}}, {"pk": 30, "model": "reversion.version", "fields": {"format": "json", "object_repr": "New Delhi", "object_id": "11", "content_type": 52, "object_id_int": 11, "type": 0, "serialized_data": "[{\"pk\": 11, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [], \"objecttypes\": [], \"creation_date\": \"2011-12-07 02:51:24\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:51:24\", \"pingback_enabled\": true, \"authors\": [], \"last_update\": \"2011-12-07 02:51:40\", \"slug\": \"new-delhi\"}}]", "revision": 13}}, {"pk": 31, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 17, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 3, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:10:54\", \"lft\": 2, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:11:24\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:10:54\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"city\", \"level\": 1}}]", "revision": 13}}, {"pk": 32, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 13, "object_id_int": 4, "type": 1, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"country\"}}]", "revision": 14}}, {"pk": 33, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 13, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"city\"}}]", "revision": 14}}, {"pk": 34, "model": "reversion.version", "fields": {"format": "json", "object_repr": "capital of", "object_id": "6", "content_type": 20, "object_id_int": 6, "type": 1, "serialized_data": "[{\"pk\": 6, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"has capital\", \"cardinalityLeft\": 1, \"isTransitive\": false, \"cardinalityRight\": 1, \"level\": 0, \"isSymmetrical\": false, \"lft\": 1, \"subjecttypeLeft\": 5, \"subjecttypeRight\": 4, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 1, \"isReflexive\": false}}]", "revision": 14}}, {"pk": 35, "model": "reversion.version", "fields": {"format": "json", "object_repr": "India", "object_id": "9", "content_type": 13, "object_id_int": 9, "type": 1, "serialized_data": "[{\"pk\": 9, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"India\"}}]", "revision": 14}}, {"pk": 36, "model": "reversion.version", "fields": {"format": "json", "object_repr": "New Delhi", "object_id": "11", "content_type": 13, "object_id_int": 11, "type": 1, "serialized_data": "[{\"pk\": 11, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"New Delhi\"}}]", "revision": 14}}, {"pk": 37, "model": "reversion.version", "fields": {"format": "json", "object_repr": " New Delhi capital of India", "object_id": "12", "content_type": 22, "object_id_int": 12, "type": 0, "serialized_data": "[{\"pk\": 12, \"model\": \"gstudio.relation\", \"fields\": {\"subject1Scope\": \"\", \"relationTypeScope\": \"\", \"subject1\": 11, \"subject2\": 9, \"relationtype\": 6, \"objectScope\": \"\"}}]", "revision": 14}}, {"pk": 38, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 17, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 2, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 01:38:11\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:07:53\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 1, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 01:38:11\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"person\", \"level\": 0}}]", "revision": 15}}, {"pk": 39, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 15}}, {"pk": 40, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Nagarjuna", "object_id": "13", "content_type": 52, "object_id_int": 13, "type": 0, "serialized_data": "[{\"pk\": 13, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [], \"objecttypes\": [], \"creation_date\": \"2011-12-07 02:53:25\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:53:25\", \"pingback_enabled\": true, \"authors\": [], \"last_update\": \"2011-12-07 02:54:08\", \"slug\": \"nagarjuna\"}}]", "revision": 15}}, {"pk": 41, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 13, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"person\"}}]", "revision": 16}}, {"pk": 42, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 16}}, {"pk": 43, "model": "reversion.version", "fields": {"format": "json", "object_repr": "lives in", "object_id": "7", "content_type": 20, "object_id_int": 7, "type": 1, "serialized_data": "[{\"pk\": 7, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"living place of\", \"cardinalityLeft\": null, \"isTransitive\": null, \"cardinalityRight\": null, \"level\": 0, \"isSymmetrical\": null, \"lft\": 1, \"subjecttypeLeft\": 1, \"subjecttypeRight\": 3, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 2, \"isReflexive\": null}}]", "revision": 16}}, {"pk": 44, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 13, "object_id_int": 10, "type": 1, "serialized_data": "[{\"pk\": 10, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Mumbai\"}}]", "revision": 16}}, {"pk": 45, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Nagarjuna", "object_id": "13", "content_type": 13, "object_id_int": 13, "type": 1, "serialized_data": "[{\"pk\": 13, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Nagarjuna\"}}]", "revision": 16}}, {"pk": 46, "model": "reversion.version", "fields": {"format": "json", "object_repr": " Nagarjuna mostly lives in Mumbai", "object_id": "14", "content_type": 22, "object_id_int": 14, "type": 0, "serialized_data": "[{\"pk\": 14, \"model\": \"gstudio.relation\", \"fields\": {\"subject1Scope\": \"\", \"relationTypeScope\": \"mostly\", \"subject1\": 13, \"subject2\": 10, \"relationtype\": 7, \"objectScope\": \"\"}}]", "revision": 16}}, {"pk": 47, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 17}}, {"pk": 48, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 0, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 17}}, {"pk": 49, "model": "reversion.version", "fields": {"format": "json", "object_repr": "lived in", "object_id": "16", "content_type": 20, "object_id_int": 16, "type": 0, "serialized_data": "[{\"pk\": 16, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 3, \"inverse\": \"had resident\", \"cardinalityLeft\": null, \"isTransitive\": null, \"cardinalityRight\": null, \"level\": 1, \"isSymmetrical\": null, \"lft\": 2, \"subjecttypeLeft\": 1, \"subjecttypeRight\": 3, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 2, \"isReflexive\": null}}]", "revision": 18}}, {"pk": 50, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 13, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"person\"}}]", "revision": 18}}, {"pk": 51, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 18}}, {"pk": 52, "model": "reversion.version", "fields": {"format": "json", "object_repr": "London", "object_id": "17", "content_type": 52, "object_id_int": 17, "type": 0, "serialized_data": "[{\"pk\": 17, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [], \"objecttypes\": [], \"creation_date\": \"2011-12-07 04:11:03\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 04:11:03\", \"pingback_enabled\": true, \"authors\": [], \"last_update\": \"2011-12-07 04:11:34\", \"slug\": \"london\"}}]", "revision": 19}}, {"pk": 53, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 19}}, {"pk": 54, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 17, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 6, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:07:58\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:08:28\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:07:58\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"place\", \"level\": 0}}]", "revision": 19}}, {"pk": 55, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 17, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 3, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:10:54\", \"lft\": 2, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:11:24\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:10:54\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"city\", \"level\": 1}}]", "revision": 19}}, {"pk": 56, "model": "reversion.version", "fields": {"format": "json", "object_repr": "person", "object_id": "1", "content_type": 13, "object_id_int": 1, "type": 1, "serialized_data": "[{\"pk\": 1, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"person\"}}]", "revision": 20}}, {"pk": 57, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 20}}, {"pk": 58, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Charles Darwin", "object_id": "8", "content_type": 13, "object_id_int": 8, "type": 1, "serialized_data": "[{\"pk\": 8, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Charles Darwin\"}}]", "revision": 20}}, {"pk": 59, "model": "reversion.version", "fields": {"format": "json", "object_repr": "lived in", "object_id": "16", "content_type": 20, "object_id_int": 16, "type": 1, "serialized_data": "[{\"pk\": 16, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 3, \"inverse\": \"had resident\", \"cardinalityLeft\": null, \"isTransitive\": null, \"cardinalityRight\": null, \"level\": 1, \"isSymmetrical\": null, \"lft\": 2, \"subjecttypeLeft\": 1, \"subjecttypeRight\": 3, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 2, \"isReflexive\": null}}]", "revision": 20}}, {"pk": 60, "model": "reversion.version", "fields": {"format": "json", "object_repr": "London", "object_id": "17", "content_type": 13, "object_id_int": 17, "type": 1, "serialized_data": "[{\"pk\": 17, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"London\"}}]", "revision": 20}}, {"pk": 61, "model": "reversion.version", "fields": {"format": "json", "object_repr": " Charles Darwin lived in several locations of London", "object_id": "18", "content_type": 22, "object_id_int": 18, "type": 0, "serialized_data": "[{\"pk\": 18, \"model\": \"gstudio.relation\", \"fields\": {\"subject1Scope\": \"\", \"relationTypeScope\": \"\", \"subject1\": 8, \"subject2\": 17, \"relationtype\": 16, \"objectScope\": \"several locations of\"}}]", "revision": 20}}, {"pk": 62, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 21}}, {"pk": 63, "model": "reversion.version", "fields": {"format": "json", "object_repr": "India", "object_id": "9", "content_type": 13, "object_id_int": 9, "type": 1, "serialized_data": "[{\"pk\": 9, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"India\"}}]", "revision": 21}}, {"pk": 64, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of India is 1210193422", "object_id": "19", "content_type": 23, "object_id_int": 19, "type": 0, "serialized_data": "[{\"pk\": 19, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"1210193422\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 9}}]", "revision": 21}}, {"pk": 65, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 21}}, {"pk": 66, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 13, "object_id_int": 10, "type": 1, "serialized_data": "[{\"pk\": 10, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Mumbai\"}}]", "revision": 22}}, {"pk": 67, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 22}}, {"pk": 68, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 20245000", "object_id": "20", "content_type": 23, "object_id_int": 20, "type": 0, "serialized_data": "[{\"pk\": 20, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"20245000\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 10}}]", "revision": 22}}, {"pk": 69, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 22}}, {"pk": 70, "model": "reversion.version", "fields": {"format": "json", "object_repr": "London", "object_id": "17", "content_type": 13, "object_id_int": 17, "type": 1, "serialized_data": "[{\"pk\": 17, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"London\"}}]", "revision": 23}}, {"pk": 71, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 23}}, {"pk": 72, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of London is 7825200", "object_id": "21", "content_type": 23, "object_id_int": 21, "type": 0, "serialized_data": "[{\"pk\": 21, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"7825200\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 17}}]", "revision": 23}}, {"pk": 73, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 23}}, {"pk": 74, "model": "reversion.version", "fields": {"format": "json", "object_repr": "times", "object_id": "22", "content_type": 20, "object_id_int": 22, "type": 0, "serialized_data": "[{\"pk\": 22, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"portions of\", \"cardinalityLeft\": null, \"isTransitive\": false, \"cardinalityRight\": null, \"level\": 0, \"isSymmetrical\": false, \"lft\": 1, \"subjecttypeLeft\": 15, \"subjecttypeRight\": 15, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 3, \"isReflexive\": false}}]", "revision": 24}}, {"pk": 75, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 13, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"population\"}}]", "revision": 24}}, {"pk": 76, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 13, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"population\"}}]", "revision": 25}}, {"pk": 77, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 20245000", "object_id": "20", "content_type": 13, "object_id_int": 20, "type": 1, "serialized_data": "[{\"pk\": 20, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"the population of Mumbai is 20245000\"}}]", "revision": 25}}, {"pk": 78, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of London is 7825200", "object_id": "21", "content_type": 13, "object_id_int": 21, "type": 1, "serialized_data": "[{\"pk\": 21, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"the population of London is 7825200\"}}]", "revision": 25}}, {"pk": 79, "model": "reversion.version", "fields": {"format": "json", "object_repr": "times", "object_id": "22", "content_type": 20, "object_id_int": 22, "type": 1, "serialized_data": "[{\"pk\": 22, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"portions of\", \"cardinalityLeft\": null, \"isTransitive\": false, \"cardinalityRight\": null, \"level\": 0, \"isSymmetrical\": false, \"lft\": 1, \"subjecttypeLeft\": 15, \"subjecttypeRight\": 15, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 3, \"isReflexive\": false}}]", "revision": 25}}, {"pk": 80, "model": "reversion.version", "fields": {"format": "json", "object_repr": " the population of Mumbai is 20245000 three times more than the population of London is 7825200", "object_id": "23", "content_type": 22, "object_id_int": 23, "type": 0, "serialized_data": "[{\"pk\": 23, \"model\": \"gstudio.relation\", \"fields\": {\"subject1Scope\": \"\", \"relationTypeScope\": \"three\", \"subject1\": 20, \"subject2\": 21, \"relationtype\": 22, \"objectScope\": \"more than\"}}]", "revision": 25}}, {"pk": 81, "model": "reversion.version", "fields": {"format": "json", "object_repr": "geographical collection", "object_id": "24", "content_type": 44, "object_id_int": 24, "type": 0, "serialized_data": "[{\"pk\": 24, \"model\": \"gstudio.systemtype\", \"fields\": {\"lft\": 1}}]", "revision": 26}}, {"pk": 82, "model": "reversion.version", "fields": {"format": "json", "object_repr": "concept class", "object_id": "2", "content_type": 16, "object_id_int": 2, "type": 1, "serialized_data": "[{\"pk\": 2, \"model\": \"gstudio.metatype\", \"fields\": {\"rght\": 2, \"description\": \"the class of all concepts\", \"parent\": null, \"level\": 0, \"lft\": 1, \"tree_id\": 1, \"slug\": \"concept-class\"}}]", "revision": 27}}, {"pk": 83, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 17, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 6, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:07:58\", \"lft\": 1, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:08:28\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:07:58\", \"status\": 2, \"parent\": null, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"place\", \"level\": 0}}]", "revision": 27}}, {"pk": 84, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 17, "object_id_int": 4, "type": 1, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 5, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:08:37\", \"lft\": 4, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:10:44\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:08:37\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"country\", \"level\": 1}}]", "revision": 27}}, {"pk": 85, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 17, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nodetype\", \"fields\": {\"rght\": 3, \"posteriornodes\": [], \"image\": \"\", \"metatypes\": [2], \"excerpt\": \"\", \"creation_date\": \"2011-12-07 02:10:54\", \"lft\": 2, \"featured\": false, \"pingback_enabled\": true, \"priornodes\": [], \"comment_enabled\": true, \"login_required\": false, \"sites\": [1], \"last_update\": \"2011-12-07 02:11:24\", \"content\": \"\", \"template\": \"gstudio/nodetype_detail.html\", \"tree_id\": 2, \"end_publication\": \"2042-03-15 00:00:00\", \"start_publication\": \"2011-12-07 02:10:54\", \"status\": 2, \"parent\": 3, \"tags\": \"\", \"authors\": [1], \"password\": \"\", \"slug\": \"city\", \"level\": 1}}]", "revision": 27}}, {"pk": 86, "model": "reversion.version", "fields": {"format": "json", "object_repr": "capital of", "object_id": "6", "content_type": 20, "object_id_int": 6, "type": 1, "serialized_data": "[{\"pk\": 6, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"has capital\", \"cardinalityLeft\": 1, \"isTransitive\": false, \"cardinalityRight\": 1, \"level\": 0, \"isSymmetrical\": false, \"lft\": 1, \"subjecttypeLeft\": 5, \"subjecttypeRight\": 4, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 1, \"isReflexive\": false}}]", "revision": 27}}, {"pk": 87, "model": "reversion.version", "fields": {"format": "json", "object_repr": "India", "object_id": "9", "content_type": 52, "object_id_int": 9, "type": 1, "serialized_data": "[{\"pk\": 9, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [1], \"objecttypes\": [4], \"creation_date\": \"2011-12-07 02:49:25\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:49:25\", \"pingback_enabled\": true, \"authors\": [1], \"last_update\": \"2011-12-07 02:50:25\", \"slug\": \"india\"}}]", "revision": 27}}, {"pk": 88, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 52, "object_id_int": 10, "type": 1, "serialized_data": "[{\"pk\": 10, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [1], \"objecttypes\": [5], \"creation_date\": \"2011-12-07 02:50:55\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:50:55\", \"pingback_enabled\": true, \"authors\": [1], \"last_update\": \"2011-12-07 02:51:11\", \"slug\": \"mu\"}}]", "revision": 27}}, {"pk": 89, "model": "reversion.version", "fields": {"format": "json", "object_repr": "New Delhi", "object_id": "11", "content_type": 52, "object_id_int": 11, "type": 1, "serialized_data": "[{\"pk\": 11, \"model\": \"objectapp.gbobject\", \"fields\": {\"status\": 2, \"priornodes\": [], \"password\": \"\", \"end_publication\": \"2042-03-15 00:00:00\", \"posteriornodes\": [], \"template\": \"objectapp/gbobject_detail.html\", \"comment_enabled\": true, \"tags\": \"\", \"image\": \"\", \"login_required\": false, \"excerpt\": \"\", \"sites\": [1], \"objecttypes\": [5], \"creation_date\": \"2011-12-07 02:51:24\", \"content\": \"\", \"featured\": false, \"start_publication\": \"2011-12-07 02:51:24\", \"pingback_enabled\": true, \"authors\": [1], \"last_update\": \"2011-12-07 02:51:40\", \"slug\": \"new-delhi\"}}]", "revision": 27}}, {"pk": 90, "model": "reversion.version", "fields": {"format": "json", "object_repr": " New Delhi capital of India", "object_id": "12", "content_type": 22, "object_id_int": 12, "type": 1, "serialized_data": "[{\"pk\": 12, \"model\": \"gstudio.relation\", \"fields\": {\"subject1Scope\": \"\", \"relationTypeScope\": \"\", \"subject1\": 11, \"subject2\": 9, \"relationtype\": 6, \"objectScope\": \"\"}}]", "revision": 27}}, {"pk": 91, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 13, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"population\"}}]", "revision": 27}}, {"pk": 92, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of India is 1210193422", "object_id": "19", "content_type": 23, "object_id_int": 19, "type": 1, "serialized_data": "[{\"pk\": 19, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"1210193422\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 9}}]", "revision": 27}}, {"pk": 93, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 20245000", "object_id": "20", "content_type": 13, "object_id_int": 20, "type": 1, "serialized_data": "[{\"pk\": 20, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"the population of Mumbai is 20245000\"}}]", "revision": 27}}, {"pk": 94, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of London is 7825200", "object_id": "21", "content_type": 13, "object_id_int": 21, "type": 1, "serialized_data": "[{\"pk\": 21, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"the population of London is 7825200\"}}]", "revision": 27}}, {"pk": 95, "model": "reversion.version", "fields": {"format": "json", "object_repr": "times", "object_id": "22", "content_type": 20, "object_id_int": 22, "type": 1, "serialized_data": "[{\"pk\": 22, \"model\": \"gstudio.relationtype\", \"fields\": {\"rght\": 2, \"inverse\": \"portions of\", \"cardinalityLeft\": null, \"isTransitive\": false, \"cardinalityRight\": null, \"level\": 0, \"isSymmetrical\": false, \"lft\": 1, \"subjecttypeLeft\": 15, \"subjecttypeRight\": 15, \"applicablenodetypes1\": \"OT\", \"applicablenodetypes2\": \"OT\", \"tree_id\": 3, \"isReflexive\": false}}]", "revision": 27}}, {"pk": 96, "model": "reversion.version", "fields": {"format": "json", "object_repr": " the population of Mumbai is 20245000 three times more than the population of London is 7825200", "object_id": "23", "content_type": 22, "object_id_int": 23, "type": 1, "serialized_data": "[{\"pk\": 23, \"model\": \"gstudio.relation\", \"fields\": {\"subject1Scope\": \"\", \"relationTypeScope\": \"three\", \"subject1\": 20, \"subject2\": 21, \"relationtype\": 22, \"objectScope\": \"more than\"}}]", "revision": 27}}, {"pk": 97, "model": "reversion.version", "fields": {"format": "json", "object_repr": "geographical collection", "object_id": "24", "content_type": 44, "object_id_int": 24, "type": 1, "serialized_data": "[{\"pk\": 24, \"model\": \"gstudio.systemtype\", \"fields\": {\"lft\": 1}}]", "revision": 27}}, {"pk": 98, "model": "reversion.version", "fields": {"format": "json", "object_repr": "geographical facts of India", "object_id": "25", "content_type": 54, "object_id_int": 25, "type": 0, "serialized_data": "[{\"pk\": 25, \"model\": \"objectapp.system\", \"fields\": {}}]", "revision": 27}}, {"pk": 99, "model": "reversion.version", "fields": {"format": "json", "object_repr": "city", "object_id": "5", "content_type": 13, "object_id_int": 5, "type": 1, "serialized_data": "[{\"pk\": 5, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"city\"}}]", "revision": 27}}, {"pk": 100, "model": "reversion.version", "fields": {"format": "json", "object_repr": "India", "object_id": "9", "content_type": 13, "object_id_int": 9, "type": 1, "serialized_data": "[{\"pk\": 9, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"India\"}}]", "revision": 27}}, {"pk": 101, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 13, "object_id_int": 10, "type": 1, "serialized_data": "[{\"pk\": 10, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Mumbai\"}}]", "revision": 27}}, {"pk": 102, "model": "reversion.version", "fields": {"format": "json", "object_repr": "New Delhi", "object_id": "11", "content_type": 13, "object_id_int": 11, "type": 1, "serialized_data": "[{\"pk\": 11, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"New Delhi\"}}]", "revision": 27}}, {"pk": 103, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 27}}, {"pk": 104, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 27}}, {"pk": 105, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 20245000", "object_id": "20", "content_type": 23, "object_id_int": 20, "type": 1, "serialized_data": "[{\"pk\": 20, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"20245000\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 10}}]", "revision": 27}}, {"pk": 106, "model": "reversion.version", "fields": {"format": "json", "object_repr": "country", "object_id": "4", "content_type": 13, "object_id_int": 4, "type": 1, "serialized_data": "[{\"pk\": 4, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"country\"}}]", "revision": 27}}, {"pk": 107, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population change", "object_id": "26", "content_type": 43, "object_id_int": 26, "type": 0, "serialized_data": "[{\"pk\": 26, \"model\": \"gstudio.processtype\", \"fields\": {\"lft\": 1}}]", "revision": 28}}, {"pk": 108, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 28}}, {"pk": 109, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 28}}, {"pk": 110, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 29}}, {"pk": 111, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 13, "object_id_int": 10, "type": 1, "serialized_data": "[{\"pk\": 10, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Mumbai\"}}]", "revision": 29}}, {"pk": 112, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 21245000", "object_id": "27", "content_type": 23, "object_id_int": 27, "type": 0, "serialized_data": "[{\"pk\": 27, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"21245000\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 10}}]", "revision": 29}}, {"pk": 113, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 29}}, {"pk": 114, "model": "reversion.version", "fields": {"format": "json", "object_repr": "place", "object_id": "3", "content_type": 13, "object_id_int": 3, "type": 1, "serialized_data": "[{\"pk\": 3, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"place\"}}]", "revision": 30}}, {"pk": 115, "model": "reversion.version", "fields": {"format": "json", "object_repr": "Mumbai", "object_id": "10", "content_type": 13, "object_id_int": 10, "type": 1, "serialized_data": "[{\"pk\": 10, \"model\": \"gstudio.nid\", \"fields\": {\"title\": \"Mumbai\"}}]", "revision": 30}}, {"pk": 116, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population", "object_id": "15", "content_type": 21, "object_id_int": 15, "type": 1, "serialized_data": "[{\"pk\": 15, \"model\": \"gstudio.attributetype\", \"fields\": {\"rght\": 2, \"lft\": 1, \"max_digits\": null, \"blank\": null, \"help_text\": \"\", \"null\": null, \"subjecttype\": 3, \"upload_to\": \"\", \"label\": null, \"auto_now\": null, \"tree_id\": 1, \"verbose_name\": \"\", \"verify_exists\": null, \"dataType\": \"6\", \"editable\": null, \"applicablenodetypes\": \"OT\", \"auto_now_add\": null, \"path\": \"\", \"unique\": null, \"min_length\": null, \"decimal_places\": null, \"level\": 0, \"default\": null, \"required\": null}}]", "revision": 30}}, {"pk": 117, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 20245000", "object_id": "20", "content_type": 23, "object_id_int": 20, "type": 1, "serialized_data": "[{\"pk\": 20, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"20245000\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 10}}]", "revision": 30}}, {"pk": 118, "model": "reversion.version", "fields": {"format": "json", "object_repr": "the population of Mumbai is 21245000", "object_id": "27", "content_type": 23, "object_id_int": 27, "type": 1, "serialized_data": "[{\"pk\": 27, \"model\": \"gstudio.attribute\", \"fields\": {\"svalue\": \"21245000\", \"attributeTypeScope\": \"\", \"valueScope\": \"\", \"attributeType\": 15, \"subjectScope\": \"\", \"subject\": 10}}]", "revision": 30}}, {"pk": 119, "model": "reversion.version", "fields": {"format": "json", "object_repr": "population change of mumbai", "object_id": "28", "content_type": 53, "object_id_int": 28, "type": 0, "serialized_data": "[{\"pk\": 28, \"model\": \"objectapp.process\", \"fields\": {}}]", "revision": 30}}]
\ No newline at end of file diff --git a/demo/settings.py b/demo/settings.py index a325258b..96de64f0 100644 --- a/demo/settings.py +++ b/demo/settings.py @@ -78,8 +78,10 @@ DATABASES = {'default': STATIC_URL = '/static/' MEDIA_URL = '/static' -MEDIA_ROOT = '/static' +#MEDIA_ROOT = '/static' +MEDIA_ROOT = os.path.join(os.path.dirname(__file__), '../gstudio/static') +GSTUDIO_UPLOAD_TO = 'img/' ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/" diff --git a/demo/settings.pyc b/demo/settings.pyc Binary files differdeleted file mode 100644 index 5cfa794c..00000000 --- a/demo/settings.pyc +++ /dev/null diff --git a/demo/urls.pyc b/demo/urls.pyc Binary files differdeleted file mode 100644 index a2d9523e..00000000 --- a/demo/urls.pyc +++ /dev/null diff --git a/demo/views.pyc b/demo/views.pyc Binary files differdeleted file mode 100644 index 046700ac..00000000 --- a/demo/views.pyc +++ /dev/null diff --git a/demo/working-demo.db b/demo/working-demo.db Binary files differdeleted file mode 100644 index 78a96183..00000000 --- a/demo/working-demo.db +++ /dev/null diff --git a/dist/django_gstudio-0.3.dev-py2.7.egg b/dist/django_gstudio-0.3.dev-py2.7.egg Binary files differdeleted file mode 100644 index 2d39dff2..00000000 --- a/dist/django_gstudio-0.3.dev-py2.7.egg +++ /dev/null diff --git a/gstudio/TAGS b/gstudio/TAGS deleted file mode 100644 index 0dff201b..00000000 --- a/gstudio/TAGS +++ /dev/null @@ -1,2725 +0,0 @@ - -feeds.py,2015 -class GstudioFeed(28,968 - def __init__(32,1057 -class NodetypeFeed(40,1314 - def item_pubdate(45,1487 - def item_metatypes(49,1601 - def item_author_name(53,1742 - def item_author_email(59,1965 - def item_author_link(63,2090 - def item_enclosure_url(72,2416 - def item_enclosure_length(81,2689 - def item_enclosure_mime_type(85,2798 -class LatestNodetypes(90,2917 - def link(93,2995 - def items(97,3111 - def title(101,3235 - def description(105,3356 -class MetatypeNodetypes(110,3497 - def get_object(113,3575 - def items(117,3706 - def link(121,3856 - def title(125,3954 - def description(129,4075 -class AuthorNodetypes(134,4220 - def get_object(137,4295 - def items(141,4449 - def link(145,4606 - def title(149,4733 - def description(153,4851 -class TagNodetypes(158,4985 - def get_object(161,5053 - def items(165,5187 - def link(170,5382 - def title(174,5499 - def description(178,5614 -class SearchNodetypes(183,5753 - def get_object(186,5835 - def items(193,6065 - def link(197,6211 - def title(201,6352 - def description(205,6468 -class NodetypeDiscussions(210,6608 - def get_object(215,6808 - def items(222,7167 - def item_pubdate(226,7299 - def item_link(230,7413 - def link(234,7520 - def item_author_name(238,7618 - def item_author_email(242,7733 - def item_author_link(246,7858 - def title(250,7978 - def description(254,8087 -class NodetypeComments(259,8234 - def items(264,8430 - def item_link(268,8556 - def title(272,8677 - def description(276,8783 - def item_enclosure_url(280,8926 - def item_enclosure_length(284,9072 - def item_enclosure_mime_type(288,9181 -class NodetypePingbacks(293,9300 - def items(298,9500 - def item_link(302,9628 - def title(306,9751 - def description(310,9858 -class NodetypeTrackbacks(315,10003 - def items(320,10207 - def item_link(324,10337 - def title(328,10462 - def description(332,10570 - -signals.py,173 -def disable_for_loaddata(10,156 - def wrapper(16,359 -def ping_directories_handler(26,594 -def ping_external_urls_handler(38,969 -def disconnect_gstudio_signals(48,1266 - -management/commands/spam_cleanup.py,51 -class Command(9,234 - def handle_noargs(14,389 - -management/commands/gstudio2wp.py,52 -class Command(16,447 - def handle_noargs(21,633 - -management/commands/blogger2gstudio.py,495 -class Command(26,798 - def __init__(44,1649 - def write_out(51,1911 - def handle_noargs(57,2156 - def select_blog_id(108,4159 - def get_metatype(129,4978 - def import_posts(139,5233 - def import_comments(176,7105 -def convert_blogger_timestamp(211,8327 -def is_draft(217,8506 -def get_blog_id(225,8674 -def get_post_id(229,8749 -class BloggerManager(233,8824 - def __init__(235,8855 - def get_blogs(241,9100 - def get_posts(246,9240 - def get_comments(251,9402 - -management/commands/feed2gstudio.py,204 -class Command(23,732 - def __init__(42,1524 - def write_out(50,1823 - def handle_label(56,2068 - def import_nodetypes(80,3027 - def import_metatypes(130,5354 - def import_tags(138,5673 - -management/commands/wp2gstudio.py,417 -class Command(29,903 - def __init__(56,2032 - def write_out(64,2331 - def handle_label(70,2576 - def import_authors(97,3580 - def migrate_author(120,4450 - def import_metatypes(151,5851 - def import_tags(175,6907 - def get_nodetype_tags(188,7535 - def get_nodetype_metatypes(198,7945 - def import_nodetype(208,8343 - def import_nodetypes(261,10784 - def import_comments(283,11815 - -context_processors.py,18 -def version(5,71 - -tests/feeds.py,829 -class GstudioFeedsTestCase(33,1121 - def setUp(37,1243 - def create_published_nodetype(44,1595 - def create_discussions(58,2169 - def test_nodetype_feed(75,3298 - def test_nodetype_feed_enclosure(94,4246 - def test_latest_nodetypes(118,5427 - def test_metatype_nodetypes(129,5871 - def test_author_nodetypes(142,6490 - def test_tag_nodetypes(153,7075 - def test_search_nodetypes(165,7642 - class FakeRequest:FakeRequest166,7679 - def __init__(167,7706 - def test_nodetype_discussions(182,8418 - def test_nodetype_comments(204,9586 - def test_nodetype_pingbacks(223,10565 - def test_nodetype_trackbacks(236,11206 - def test_nodetype_feed_no_authors(249,11852 - def test_nodetype_feed_rss_or_atom(258,12212 - def test_discussion_feed_with_same_slugs(269,12662 - -tests/signals.py,286 -class SignalsTestCase(12,342 - def test_disable_for_loaddata(15,409 - def make_top(19,502 - def call(22,553 - def test_ping_directories_handler(29,698 - def fake_pinger(33,812 - def test_ping_external_urls_handler(61,1894 - def fake_pinger(65,2013 - -tests/quick_nodetype.py,119 -class QuickNodetypeTestCase(10,226 - def setUp(14,343 - def tearDown(18,446 - def test_quick_nodetype(21,520 - -tests/metaweblog.py,487 -class MetaWeblogTestCase(23,717 - def setUp(27,822 - def test_authenticate(63,2525 - def test_get_users_blogs(79,3381 - def test_get_user_info(88,3814 - def test_get_authors(102,4511 - def test_get_metatypes(112,5021 - def test_new_metatype(151,6999 - def test_get_recent_posts(167,7883 - def test_delete_post(173,8171 - def test_get_post(182,8604 - def test_new_post(207,10034 - def test_edit_post(224,10849 - def test_new_media_object(281,13685 - -tests/spam_checker.py,72 -class SpamCheckerTestCase(11,247 - def test_get_spam_checker(14,331 - -tests/url_shortener.py,121 -class URLShortenerTestCase(12,315 - def setUp(15,401 - def tearDown(18,489 - def test_get_url_shortener(21,580 - -tests/metatype.py,136 -class MetatypeTestCase(10,232 - def setUp(12,267 - def test_nodetypes_published(27,943 - def test_nodetypes_tree_path(47,1766 - -tests/__init__.py,19 -def suite(32,1566 - -tests/managers.py,585 -class ManagersTestCase(18,466 - def setUp(20,501 - def test_tags_published(51,1985 - def test_author_published_manager_get_query_set(56,2209 - def test_nodetypes_published(65,2609 - def test_nodetype_published_manager_get_query_set(86,3763 - def test_nodetype_published_manager_on_site(107,4763 - def test_nodetype_published_manager_basic_search(115,5145 - def test_nodetype_published_manager_advanced_search(123,5592 - def test_nodetype_published_manager_advanced_search_with_punctuation(227,11380 - def test_nodetype_published_manager_search(238,11917 - -tests/custom_views_detail_urls.py,73 -def call_with_template_and_extra_context(13,366 - def wrapper(18,521 - -tests/nodetype.py,826 -class NodetypeTestCase(24,732 - def setUp(26,767 - def test_discussions(32,973 - def test_str(85,3818 - def test_word_count(88,3911 - def test_comments_are_open(91,3998 - def test_is_actual(102,4494 - def test_is_visible(111,4906 - def test_short_url(118,5195 - def test_previous_nodetype(128,5737 - def test_next_nodetype(149,6825 - def test_related_published(170,7893 -class NodetypeHtmlContentTestCase(192,8844 - def setUp(194,8890 - def tearDown(203,9223 - def test_html_content_default(207,9359 - def test_html_content_textitle(216,9756 - def test_html_content_markdown(231,10473 - def test_html_content_restructuredtext(246,11170 -class NodetypeGetBaseModelTestCase(262,11980 - def setUp(264,12027 - def tearDown(267,12129 - def test_get_base_model(270,12234 - -tests/views.py,1287 -class ViewsBaseCase(17,482 - def setUp(22,572 - def tearDown(62,2259 - def create_published_nodetype(66,2421 - def check_publishing_context(79,2938 -class GstudioViewsTestCase(92,3485 - def test_gstudio_nodetype_archive_index(100,3737 - def test_gstudio_nodetype_archive_year(103,3838 - def test_gstudio_nodetype_archive_month(106,3943 - def test_gstudio_nodetype_archive_day(109,4052 - def test_gstudio_nodetype_shortlink(112,4162 - def test_gstudio_nodetype_detail(117,4391 - def test_gstudio_nodetype_detail_login(135,5219 - def test_gstudio_nodetype_detail_password(142,5517 - def test_gstudio_nodetype_channel(157,6326 - def test_gstudio_metatype_list(160,6434 - def test_gstudio_metatype_detail(167,6786 - def test_gstudio_metatype_detail_paginated(172,7058 - def test_gstudio_author_list(193,8157 - def test_gstudio_author_detail(200,8498 - def test_gstudio_tag_list(205,8766 - def test_gstudio_tag_detail(212,9012 - def test_gstudio_nodetype_search(217,9264 - def test_gstudio_sitemap(228,9839 - def test_gstudio_trackback(239,10436 -class GstudioCustomDetailViews(275,12121 - def test_custom_metatype_detail(283,12433 - def test_custom_author_detail(289,12759 - def test_custom_tag_detail(295,13083 - -tests/moderator.py,249 -class NodetypeCommentModeratorTestCase(14,420 - def setUp(17,510 - def test_email(31,1115 - def test_do_email_notification(48,1930 - def test_do_email_authors(58,2457 - def test_do_email_reply(72,3190 - def test_moderate(103,4847 - -tests/templates/gstudio/base.html,56 -Gnowledge Studio - {% block title %}{% endblock %}3,16 - -tests/templates/gstudio/_nodetype_detail.html,23 -{{ object.title }}1,0 - -tests/custom_url_shortener.py,19 -def backend(8,182 - -tests/admin.py,234 -class NodetypeAdminTestCase(10,218 - def setUp(14,329 - def tearDown(24,774 - def test_nodetype_add_and_change(27,848 -class MetatypeAdminTestCase(54,2120 - def setUp(58,2232 - def test_metatype_add_and_change(62,2399 - -tests/custom_spam_checker.py,19 -def backend(8,181 - -tests/utils.py,76 -class TestTransport(8,121 - def __init__(12,234 - def request(16,357 - -tests/ping.py,387 -class DirectoryPingerTestCase(13,308 - def setUp(15,390 - def test_ping_nodetype(24,769 -class ExternalUrlsPingerTestCase(31,986 - def setUp(34,1075 - def test_is_external_url(42,1397 - def test_find_external_urls(57,2158 - def test_find_pingback_href(71,2815 - def fake_urlopen(89,3537 - def test_find_pingback_urls(105,4287 - def test_pingback_url(120,4922 - -tests/sitemaps.py,268 -class GstudioSitemapsTestCase(18,515 - def setUp(22,640 - def test_nodetype_sitemap(43,1680 - def test_metatype_sitemap(49,1920 - def test_author_sitemap(58,2338 - def test_tag_sitemap(68,2799 - def test_metatype_sitemap_zero_division_error(77,3220 - -tests/pingback.py,251 -class PingBackTestCase(24,722 - def fake_urlopen(28,824 - def setUp(39,1263 - def tearDown(85,3610 - def test_generate_pingback_content(90,3813 - def test_pingback_ping(113,4867 - def test_pingback_extensions_get_pingbacks(166,7277 - -tests/comparison.py,142 -class ComparisonTestCase(10,250 - def test_pearson_score(13,329 - def test_clustered_model(21,712 - def test_vector_builder(35,1500 - -tests/templatetags.py,948 -class TemplateTagsTestCase(40,1765 - def setUp(43,1843 - def publish_nodetype(51,2149 - def test_get_metatypes(57,2350 - def test_get_authors(67,2808 - def test_get_recent_nodetypes(80,3388 - def test_get_featured_nodetypes(93,3962 - def test_get_random_nodetypes(106,4546 - def test_get_popular_nodetypes(119,5120 - def test_get_similar_nodetypes(152,6735 - def test_get_archives_nodetypes(176,7850 - def test_get_archives_tree(199,8902 - def test_get_calendar_nodetypes(222,9966 - def test_get_recent_comments(268,12209 - def test_get_recent_linkbacks(296,13476 - def test_gstudio_pagination(324,14764 - class FakeRequest(325,14803 - def __init__(326,14838 - def test_gstudio_breadcrumbs(411,18953 - class FakeRequest(412,18993 - def __init__(413,19028 - def test_get_gravatar(486,22531 - def test_get_tags(496,22973 - def test_get_tag_cloud(519,23766 - -managers.py,310 -def tags_published(12,169 -class AuthorPublishedManager(22,551 - def get_query_set(25,646 -def nodetypes_published(36,1041 -class NodetypePublishedManager(46,1363 - def get_query_set(49,1462 - def on_site(54,1636 - def search(59,1840 - def advanced_search(66,2047 - def basic_search(71,2222 - -search.py,70 -def createQ(23,628 -def unionQ(81,2704 -def advanced_search(129,4174 - -views/quick_nodetype.py,64 -class QuickNodetypeForm(18,534 -def view_quick_nodetype(27,829 - -views/metatypes.py,60 -def get_metatype_or_404(10,299 -def metatype_detail(16,481 - -views/authors.py,26 -def author_detail(14,415 - -views/trackback.py,31 -def nodetype_trackback(14,423 - -views/search.py,27 -def nodetype_search(9,228 - -views/nodetypes.py,31 -def nodetype_shortlink(26,887 - -views/tags.py,44 -def tag_list(15,410 -def tag_detail(24,809 - -views/sitemap.py,19 -def sitemap(8,166 - -views/channels.py,28 -def nodetype_channel(7,129 - -views/decorators.py,187 -def update_queryset(15,491 - def wrapper(23,811 -def password(33,1048 -def protect_nodetype(47,1617 - def wrapper(53,1833 -def template_name_for_nodetype_queryset_filtered(72,2630 - -rdf.py,28 -def rdf_description(11,306 - -moderator.py,194 -class NodetypeCommentModerator(22,891 - def email(33,1366 - def do_email_notification(49,2086 - def do_email_authors(66,2971 - def do_email_reply(88,4129 - def moderate(115,5585 - -gnowql.py,68 -def get_slug(11,179 -def get_nodetype(31,849 -def get_node(52,1429 - -admin/processtype.py,802 -class ProcesstypeAdmin(27,773 - def __init__(69,3106 - def get_title(74,3279 - def get_authors(85,3784 - def get_metatypes(98,4367 - def get_tags(111,4949 - def get_sites(123,5470 - def get_comments_are_open(131,5798 - def get_is_actual(137,6064 - def get_is_visible(143,6284 - def get_link(149,6510 - def get_short_url(156,6798 - def save_model(167,7198 - def queryset(181,7838 - def formfield_for_manytomany(188,8129 - def get_actions(199,8630 - def make_mine(213,9161 - def make_published(222,9577 - def make_hidden(230,9979 - def make_tweet(237,10298 - def close_comments(253,11068 - def close_pingbacks(261,11463 - def put_on_top(269,11828 - def ping_directories(278,12283 - def get_urls(301,13352 - def _media(319,14297 - -admin/attributespecification.py,41 -class AttributeSpecificationAdmin(9,226 - -admin/attribute_booleanfield.py,40 -class AttributeBooleanFieldAdmin(8,223 - -admin/attribute.py,55 -class AttributeAdmin(9,243 - def save_model(10,289 - -admin/attribute_charfield.py,37 -class AttributeCharFieldAdmin(8,220 - -admin/attribute_filepathfield.py,41 -class AttributeFilePathFieldAdmin(8,224 - -admin/relationtype.py,805 -class RelationtypeAdmin(26,772 - def __init__(82,3369 - def get_title(87,3599 - def get_authors(98,4105 - def get_metatypes(111,4699 - def get_tags(124,5284 - def get_sites(136,5810 - def get_comments_are_open(144,6140 - def get_is_actual(150,6409 - def get_is_visible(156,6632 - def get_link(162,6861 - def get_short_url(169,7152 - def save_model(180,7554 - def queryset(194,8202 - def formfield_for_manytomany(201,8495 - def get_actions(212,8997 - def make_mine(226,9529 - def make_published(235,9951 - def make_hidden(243,10356 - def make_tweet(250,10678 - def close_comments(266,11453 - def close_pingbacks(274,11851 - def put_on_top(282,12219 - def ping_directories(291,12677 - def get_urls(314,13749 - def _media(332,14703 - -admin/attribute_urlfield.py,36 -class AttributeURLFieldAdmin(8,219 - -admin/nodespecification.py,36 -class NodeSpecificationAdmin(8,219 - -admin/intersection.py,31 -class IntersectionAdmin(8,214 - -admin/attributetype.py,806 -class AttributetypeAdmin(27,775 - def __init__(72,3198 - def get_title(77,3373 - def get_authors(88,3886 - def get_metatypes(101,4475 - def get_tags(114,5063 - def get_sites(126,5594 - def get_comments_are_open(134,5926 - def get_is_actual(140,6198 - def get_is_visible(146,6424 - def get_link(152,6656 - def get_short_url(159,6950 - def save_model(170,7354 - def queryset(184,8010 - def formfield_for_manytomany(191,8305 - def get_actions(202,8808 - def make_mine(216,9341 - def make_published(225,9769 - def make_hidden(233,10177 - def make_tweet(240,10502 - def close_comments(256,11282 - def close_pingbacks(264,11683 - def put_on_top(272,12054 - def ping_directories(281,12515 - def get_urls(304,13590 - def _media(322,14553 - -admin/attribute_decimalfield.py,40 -class AttributeDecimalFieldAdmin(8,223 - -admin/attribute_emailfield.py,38 -class AttributeEmailFieldAdmin(8,221 - -admin/metatype.py,82 -class MetatypeAdmin(9,242 - def __init__(18,611 - def get_tree_path(22,760 - -admin/attribute_datetimefield.py,41 -class AttributeDateTimeFieldAdmin(8,224 - -admin/attribute_filefield.py,37 -class AttributeFileFieldAdmin(8,220 - -admin/attribute_bigintegerfield.py,43 -class AttributeBigIntegerFieldAdmin(8,226 - -admin/union.py,24 -class UnionAdmin(8,207 - -admin/attribute_imagefield.py,38 -class AttributeImageFieldAdmin(8,221 - -admin/attribute_datefield.py,37 -class AttributeDateFieldAdmin(8,220 - -admin/attribute_integerfield.py,40 -class AttributeIntegerFieldAdmin(8,223 - -admin/objecttype.py,801 -class ObjecttypeAdmin(26,768 - def __init__(65,3026 - def get_title(70,3198 - def get_authors(81,3691 - def get_metatypes(94,4265 - def get_tags(107,4838 - def get_sites(119,5348 - def get_comments_are_open(127,5670 - def get_is_actual(133,5927 - def get_is_visible(139,6138 - def get_link(145,6355 - def get_short_url(152,6634 - def save_model(163,7028 - def queryset(177,7644 - def formfield_for_manytomany(184,7931 - def get_actions(195,8431 - def make_mine(209,8961 - def make_published(218,9359 - def make_hidden(226,9752 - def make_tweet(233,10062 - def close_comments(249,10817 - def close_pingbacks(257,11203 - def put_on_top(265,11559 - def ping_directories(274,12005 - def get_urls(297,13065 - def _media(315,13985 - -admin/complement.py,29 -class ComplementAdmin(8,212 - -admin/forms.py,2806 -class MetatypeAdminForm(56,2107 - def __init__(63,2368 - def clean_parent(69,2648 - class Meta:Meta77,2932 -class ObjecttypeAdminForm(82,3014 - def __init__(110,4086 - def clean_parent(126,4824 - class Meta:Meta134,5122 -class RelationtypeAdminForm(139,5206 - def __init__(152,5804 - class Meta:Meta167,6306 -class RelationAdminForm(172,6392 - def ApplicableNodeTypes_filter(175,6436 - class Meta:Meta223,7479 -class ProcesstypeAdminForm(228,7561 - def __init__(252,8736 - class Meta:Meta272,9643 -class AttributetypeAdminForm(276,9725 - def __init__(287,10317 - class Meta:Meta300,10818 -class AttributeAdminForm(305,10905 - def subject_filter(307,10949 - def __init__(315,11205 - class Meta:Meta320,11385 -class SystemtypeAdminForm(326,11469 - def __init__(364,13456 - class Meta:Meta392,14896 -class AttributeSpecificationAdminForm(397,14978 - class Meta:Meta398,15034 -class RelationSpecificationAdminForm(401,15090 - class Meta:Meta402,15145 -class NodeSpecificationAdminForm(405,15200 - class Meta:Meta406,15251 -class UnionAdminForm(409,15302 - class Meta:Meta410,15341 -class ComplementAdminForm(413,15380 - class Meta:Meta414,15424 -class IntersectionAdminForm(419,15470 - class Meta:Meta420,15516 -class AttributeCharFieldAdminForm(425,15586 - class Meta:Meta426,15638 -class AttributeTextFieldAdminForm(429,15690 - class Meta:Meta430,15742 -class AttributeIntegerFieldAdminForm(433,15794 - class Meta:Meta434,15849 -class AttributeCommaSeparatedIntegerFieldAdminForm(437,15904 - class Meta:Meta438,15973 -class AttributeBigIntegerFieldAdminForm(440,16041 - class Meta:Meta441,16099 -class AttributePositiveIntegerFieldAdminForm(443,16156 - class Meta:Meta444,16219 -class AttributeDecimalFieldAdminForm(447,16282 - class Meta:Meta448,16337 -class AttributeFloatFieldAdminForm(450,16391 - class Meta:Meta451,16444 -class AttributeBooleanFieldAdminForm(453,16496 - class Meta:Meta454,16551 -class AttributeNullBooleanFieldAdminForm(457,16606 - class Meta:Meta458,16665 -class AttributeDateFieldAdminForm(460,16723 - class Meta:Meta461,16775 -class AttributeDateTimeFieldAdminForm(463,16826 - class Meta:Meta464,16882 -class AttributeTimeFieldAdminForm(467,16934 - class Meta:Meta468,16986 -class AttributeEmailFieldAdminForm(471,17038 - class Meta:Meta472,17091 -class AttributeFileFieldAdminForm(474,17143 - class Meta:Meta475,17195 -class AttributeFilePathFieldAdminForm(477,17246 - class Meta:Meta478,17302 -class AttributeImageFieldAdminForm(480,17357 - class Meta:Meta481,17410 -class AttributeURLFieldAdminForm(484,17463 - class Meta:Meta485,17514 -class AttributeIPAddressFieldAdminForm(487,17564 - class Meta:Meta488,17621 - -admin/attribute_positiveintegerfield.py,48 -class AttributePositiveIntegerFieldAdmin(8,231 - -admin/attribute_nullbooleanfield.py,44 -class AttributeNullBooleanFieldAdmin(8,227 - -admin/relationspecification.py,40 -class RelationSpecificationAdmin(8,223 - -admin/attribute_timefield.py,37 -class AttributeTimeFieldAdmin(8,220 - -admin/systemtype.py,803 -class SystemtypeAdmin(27,772 - def __init__(72,3312 - def get_title(77,3484 - def get_authors(88,3985 - def get_metatypes(101,4565 - def get_tags(114,5144 - def get_sites(126,5660 - def get_comments_are_open(134,5986 - def get_is_actual(140,6249 - def get_is_visible(146,6466 - def get_link(152,6689 - def get_short_url(159,6974 - def save_model(170,7372 - def queryset(184,8004 - def formfield_for_manytomany(191,8293 - def get_actions(202,8793 - def make_mine(216,9323 - def make_published(225,9733 - def make_hidden(233,10132 - def make_tweet(240,10448 - def close_comments(256,11213 - def close_pingbacks(264,11605 - def put_on_top(272,11967 - def ping_directories(281,12419 - def get_urls(304,13485 - def _media(322,14421 - -admin/attribute_textfield.py,37 -class AttributeTextFieldAdmin(8,220 - -admin/attribute_commaseparatedintegerfield.py,54 -class AttributeCommaSeparatedIntegerFieldAdmin(8,237 - -admin/widgets.py,462 -class TreeNodeChoiceField(13,344 - def __init__(16,540 - def label_from_instance(22,834 -class MPTTModelChoiceIterator(29,1112 - def choice(31,1223 -class MPTTModelMultipleChoiceField(39,1549 - def __init__(41,1668 - def label_from_instance(45,1857 - def _get_choices(51,2134 -class MPTTFilteredSelectMultiple(60,2388 - def __init__(62,2503 - def render_options(66,2690 - def render_option(74,3074 - class Media:Media103,4435 - -admin/attribute_floatfield.py,38 -class AttributeFloatFieldAdmin(8,221 - -admin/attribute_ipaddressfield.py,42 -class AttributeIPAddressFieldAdmin(8,225 - -admin/relation.py,54 -class RelationAdmin(9,242 - def save_model(10,287 - -url_shortener/__init__.py,30 -def get_url_shortener(11,286 - -url_shortener/backends/bitly.py,20 -def backend(17,511 - -url_shortener/backends/default.py,19 -def backend(8,179 - -templatetags/gstudio_admin_tags.py,62 -def get_draft_nodetypes(16,444 -def get_content_stats(24,744 - -templatetags/zbreadcrumbs.py,147 -class Crumb(9,188 - def __init__(11,243 -def year_crumb(16,333 -def month_crumb(23,542 -def day_crumb(32,873 -def retrieve_breadcrumbs(62,2254 - -templatetags/zcalendar.py,174 -class GstudioCalendar(15,375 - def __init__(18,448 - def formatday(24,677 - def formatmonth(39,1457 - def formatweekday(52,2055 - def formatmonthname(58,2300 - -templatetags/gstudio_tags.py,699 -def get_metatypes(41,1302 -def get_authors(54,1749 -def get_recent_nodetypes(61,1977 -def get_featured_nodetypes(68,2250 -def get_random_nodetypes(76,2565 -def get_popular_nodetypes(86,2926 -def get_similar_nodetypes(111,3884 - def compute_related(122,4236 -def get_archives_nodetypes(154,5372 -def get_archives_nodetypes_tree(162,5708 -def get_calendar_nodetypes(171,6086 -def get_recent_comments(200,7166 -def get_recent_linkbacks(217,7919 -def gstudio_pagination(236,8656 -def gstudio_breadcrumbs(275,10403 -def get_gravatar(288,10960 -def get_type(300,11351 -class TagsNode(306,11434 - def __init__(307,11456 - def render(310,11533 -def get_tags(316,11651 -def get_tag_cloud(330,12061 - -migrations/0001_initial.py,76 -class Migration(7,125 - def forwards(9,160 - def backwards(502,33303 - -templates/gstudio/nodetype_archive_year.html,78 -{% trans "Archives" %} {{ year }}9,223 -{% trans "Monthly archives" %}13,286 - -templates/gstudio/nodetype_detail.html,495 -{% trans "Comments" %}comments228,10243 -{% for comment in comment_list %}comment-list232,10398 -{% if comment.url %}comment_{{ comment.pk }}239,10834 -{% trans "Pingbacks" %}pingbacks269,11585 -{% for pingback in pingback_list %}pingback-list273,11745 -{{ pingback.user_name }}pingback_{{ pingback.pk }}277,11969 -{% trans "Trackbacks" %}trackbacks303,12635 -{% for trackback in trackback_list %}trackback-list306,12751 -{{ trackback.user_name }}trackback_{{ trackback.pk }}310,12982 - -templates/gstudio/password.html,72 -{% trans "Password required" %}7,135 -{% endblock %}id_password34,818 - -templates/gstudio/opensearch.xml,97 -<?xml version=1,0 -<OpenSearchDescription xmlns=4,95 - <Url type=11,500 - <Query role=15,1037 - -templates/gstudio/tags/slider_nodetypes.html,170 -{% for nodetype in nodetypes %}slider4,64 -{{ nodetype.title }}nav-slider-{{ forloop.counter }}9,394 -{{ nodetype.title }}nodetype-slider-{{ forloop.counter }}20,734 - -templates/gstudio/skeleton.html,309 -Gnowledge Studio - {% block title %}{% endblock %}76,4581 -{% include "gstudio/_header.html" %}gstudio81,4712 -/ {% block breadcrumbs %}{% endblock %}breadcrumbs84,4801 -{% block content %}content89,4945 -The content block need to be overrided!90,4968 -Welcome!sidebar97,5113 -Powered by footer110,5486 - -templates/gstudio/attributetype_detail.html,486 -{% trans "Comments" %}comments157,7201 -{% for comment in comment_list %}comment-list161,7356 -{% if comment.url %}comment_{{ comment.pk }}168,7792 -{% trans "Pingbacks" %}pingbacks198,8548 -{% for pingback in pingback_list %}pingback-list202,8708 -{{ pingback.user_name }}pingback_{{ pingback.pk }}206,8932 -{% trans "Trackbacks" %}trackbacks232,9603 -{% for trackback in trackback_list %}trackback-list235,9719 -{{ trackback.user_name }}trackback_{{ trackback.pk }}239,9950 - -templates/gstudio/sitemap.html,183 -{% trans "Sitemap" %}7,148 -{% trans "Nodetypes per metatypes" %}10,215 -{% trans "All the nodetypes" %}31,831 -{% trans "Metatypes" %}50,1402 -{% trans "Monthly archives" %}67,2053 - -templates/gstudio/nodetype_archive_day.html,58 -{% trans "Archives" %} {{ day|date:"DATE_FORMAT" }}9,259 - -templates/gstudio/tag_list.html,29 -{% trans "Tag list" %}9,188 - -templates/gstudio/nodetype_list.html,169 -{{ metatype.title }}23,1561 -{% trans "Tag" %} : {{ tag }}100,4059 -{% blocktrans with author.username as author %}Nodetypes by {{ author }}{% endblocktrans %}104,4127 - -templates/gstudio/rsd.xml,42 -<?xml version=1,0 - <api name=8,321 - -templates/gstudio/wlwmanifest.xml,34 -{% load i18n %}<?xml version=1,0 - -templates/gstudio/wxr.xml,138 -<?xml version=1,0 -<!-- generator=8,417 - <metatype domain=44,2143 - <metatype domain=46,2338 - <guid isPermaLink=48,2440 - -templates/gstudio/nodetype_archive_month.html,102 -{% trans "Archives" %} {{ month|date:"YEAR_MONTH_FORMAT" }}9,275 -{% trans "Daily archives" %}13,364 - -templates/gstudio/login.html,36 -{% trans "Login required" %} 7,132 - -templates/gstudio/base.html,415 -{% trans "Search" %}28,978 -{% trans "Metatypes" %}searchbox40,1627 -{% trans "Authors" %}45,1714 -{% trans "Calendar" %}49,1797 -{% trans "Tags" %}53,1888 -{% trans "Recent node types" %}57,1969 -{% trans "Recent comments" %}61,2073 -{% trans "Recent linkbacks" %}65,2175 -{% trans "Random node types" %}69,2277 -{% trans "Popular node types" %}73,2381 -{% trans "Archives" %}77,2487 -{% trans "Tools" %}82,2615 - -templates/gstudio/nodetype_trackback.xml,19 -<?xml version=1,0 - -templates/gstudio/_header.html,100 - Gnowledge Studio header5,45 -{% firstof user.first_name user.username %}user-tools17,549 - -templates/gstudio/metatype_list.html,34 -{% trans "Metatype list" %}9,208 - -templates/gstudio/author_list.html,32 -{% trans "Author list" %}9,194 - -templates/gstudio/_nodetype_detail.html,50 -{{ object.title }}nodetype-{{ object.pk }}6,316 - -templates/gstudio/nodetype_search.html,128 -{% trans "Search results for" %} {% if pattern %}'{{ pattern }}'{% endif %}14,808 -{% if is_paginated %}main_searchbox46,2016 - -templates/comments/gstudio/nodetype/posted.html,44 -{% trans "Thanks for your comment" %}7,141 - -templates/comments/gstudio_nodetype_preview.html,250 -{% blocktrans count form.errors|length as errors %}Please correct following error.{% plural %}Please correct following errors.{% endblocktrans %}9,185 -{% trans "Preview of the comment" %}12,356 -{% if form.cleaned_data.url %}comment_preview20,783 - -templates/skeleton.html,335 -Gnowledge Studio - {% block title %}{% endblock %}26,1536 -A workspace for constructing and publishing knowledge networks.gstudio32,1681 -/ {% block breadcrumbs %}{% endblock %}breadcrumbs35,1817 -{% block content %}content40,1973 -The content block need to be overrided!41,1996 -Welcome!sidebar46,2139 -Powered by footer67,2850 - -templates/admin/gstudio/app_index.html,78 -{% include "admin/gstudio/widgets/content_stats.html" %}content-main28,1046 - -templates/admin/gstudio/widgets/quickpost.html,110 -{% csrf_token %}quickpost4,122 -{% trans "Content" %}:id_title17,525 -{% trans "Tags" %}:id_content25,780 - -templates/admin/gstudio/widgets/ATquickpost.html,189 -{% csrf_token %}AT_quickpost4,125 -{% trans "Slug" %}:id_title19,525 -{% trans "Status" %}:id_slug27,766 -{% trans "Content" %}:id_status35,1019 -{% trans "Tags" %}:id_content43,1274 - -templates/admin/gstudio/widgets/OTquickpost.html,188 -{% csrf_token %}OTquickpost4,123 -{% trans "Slug" %}:id_title18,526 -{% trans "Status" %}:id_slug26,767 -{% trans "Content" %}:id_status34,1020 -{% trans "Tags" %}:id_content42,1275 - -templates/admin/gstudio/widgets/base.html,74 -{% block title %}{% endblock %}{% block module_id %}{% endblock %}3,116 - -templates/admin/gstudio/base.html~,780 -<html xmlns=2,136 -<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE|default:"en-us" }}" xml:lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir=dir2,136 -<link rel=5,367 -<!--[if lte IE 7]><link rel=7,547 -{% if LANGUAGE_BIDI %}<link rel=8,721 -<script type=9,879 -{% block blockbots %}<meta name=11,1051 - <div id=22,1332 - <div id=27,1490 - <a href=33,1802 - <a href=37,2027 - <a href=39,2111 - <a href=44,2345 - <a href=46,2420 - {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans 'Home' %}</a>{% if title %} ›rsaquo55,2686 - <div id=65,3097 - </div>div74,3493 - {% block footer %}<div id=77,3530 - -templates/500.html,168 -{% trans "Server error" %}11,213 -{% trans "Useful links" %}15,407 -{% trans "Recent node types" %}31,773 -{% trans "Search" %}36,875 -{% endblock %}searchbox46,1219 - -templates/404.html,170 -{% trans "Page not found" %}11,215 -{% trans "Useful links" %}15,326 -{% trans "Recent node types" %}31,692 -{% trans "Search" %}36,794 -{% endblock %}searchbox46,1138 - -templates/base.html,415 -{% trans "Search" %}23,934 -{% trans "Metatypes" %}searchbox35,1583 -{% trans "Authors" %}40,1670 -{% trans "Calendar" %}44,1753 -{% trans "Tags" %}48,1844 -{% trans "Recent node types" %}52,1925 -{% trans "Recent comments" %}56,2029 -{% trans "Recent linkbacks" %}60,2131 -{% trans "Random node types" %}64,2233 -{% trans "Popular node types" %}68,2337 -{% trans "Archives" %}72,2443 -{% trans "Tools" %}77,2571 - -TAGS,17 -feeds.py,py2,2 - -spam_checker/__init__.py,55 -def get_spam_checker(10,207 -def check_is_spam(26,709 - -spam_checker/backends/mollom.py,20 -def backend(22,705 - -spam_checker/backends/all_is_spam.py,18 -def backend(4,54 - -spam_checker/backends/automattic.py,20 -def backend(21,607 - -spam_checker/backends/typepad.py,42 -class TypePad(21,607 -def backend(26,727 - -static/gstudio/img/sitemap.png,41 -d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸U7,703 - -static/gstudio/img/objecttype.png,94 -(Ë’öû=m6ò}_ÙàB¦Ó©Çø`fÀëÉܲê`·ÛÑd2¡0͇¸®BaøªRÇgÁMÓPQÊbE‘Ò‡T iÛÖ$iÛÖ5,253 - -static/gstudio/img/wlw/watermark.png,608 -jTÐÄÙ¢0EP^HÁS´§©/Iýåih‘¾Á.‘èAs¨!:JŠ¤»?Êpñ!Êñ{X,X4,899 -‚ä†<VÜV5,995 -3Y¨V·,¶é±ëDN5%FÒPÐnÄÆ‘<6d_¡ê+¬™PcM7S¯,ÿøtüÖ¿šú+ÿKÀ>jhª dCi÷”T(–i(Ó÷:j"
÷¾~›ËožP.Zê½#9EŽ
ZidhÈA!2/ÒgÊÜ OöˆQ0}¦Œ-Q„ª$L5’¬Q„ª$L5’10,1712 -®Û7GLç7 èƒpR49×è"˜vƒkö„’º8t0Z“ç†8u¤aIž–”©E¡°ÍSïH®&wï§1ßÏêèýØæú(Üî
⯕ïÌF~î¿,¼ö⣨õ)^¯È»cÆÍ !,!ytQå( D?¡t&ïÖäÝ ’ía“Ê
VY\PF@ìñº“
qènS…ÂÆš’<q¿B©¹CJ²Û]!}‡žÇO}…ööOúÕ®» æÍuƒ®gtÎhèD c€:¡-ȸ$Ï)4”¹£‹ 0nÂ6‡YYš£‘k×w¬×
Å^§ï+VjæîÿþÆwè—þRÏþ»HyðUYS
r Bc‡r Bc15,3313 -·š1«‘Ø/‰ç5 ÍŠì)+L6H†’-)5Ž,-JÕ83â‡.j¼F% ¿èÑÑ"C‹‰ÍA5ªÚÓ#ä«¡\@fÃðfÃ21,4864 - -static/gstudio/img/wlw/comments.png,84 -ÔV”VV”5,151 -ÔV”V”" Rh£òpš´MC";ib;5,151 -ÔV”V”" Rh£òpš´MC";ib;~Åkï®wg~Åkï®w5,151 - -static/gstudio/img/plugin.png,992 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´StqtQ´Stq12,1526 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûgYû12,1526 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸j¶rvg¬jlRlcì›12,1526 - -static/gstudio/css/src/_base.sass,40 -$blueprint_font_family: unquote(13,424 - -static/gstudio/css/src/dashboard_gstudio.sass,41 - th,11,117 - background: url(15,163 - -static/gstudio/css/src/screen.sass,106 -ul,13,265 - h1,49,907 - h1, h2,49,907 - ul,62,1087 - li ul,65,1165 - +tag-cloud(cloud84,1495 - -static/gstudio/css/src/print.sass,179 - a,10,125 - a, a:link,link10,125 - a, a:link, a:visited,visited10,125 - a, a:link, a:visited, a:focus,focus10,125 - a, a:link, a:visited, a:focus, a:active,active10,125 - -static/gstudio/css/src/dashboard_objectapp.sass,41 - th,11,117 - background: url(15,163 - -static/gstudio/css/print.css,354 -h1,8,330 -h1, h2,8,330 -h1, h2, h3,8,330 -h1, h2, h3, h4,8,330 -h1, h2, h3, h4, h5,8,330 -a:link,link13,528 -body a,28,874 -body a, body a:link,link28,874 -body a, body a:link, body a:visited,visited28,874 -body a, body a:link, body a:visited, body a:focus,focus28,874 -body a, body a:link, body a:visited, body a:focus, body a:active,active28,874 - -static/gstudio/css/config.rb,19 -project_type 2,47 - -static/gstudio/css/ie.css,32 -fieldset,19,419 -legend,21,464 - -static/gstudio/css/screen.css,14875 -h1,3,103 -h1, h2,3,103 -h1, h2, h3,3,103 -h1, h2, h3, h4,3,103 -h1, h2, h3, h4, h5,3,103 -h1 img,4,167 -h1 img, h2 img,4,167 -h1 img, h2 img, h3 img,4,167 -h1 img, h2 img, h3 img, h4 img,4,167 -h1 img, h2 img, h3 img, h4 img, h5 img,4,167 -strong,30,1009 -em,32,1045 -sup,34,1078 -abbr,36,1108 -pre,44,1283 -pre, code,44,1283 -li ul,46,1374 -ul,48,1403 -th,65,1720 -th, td,65,1720 -table.striped tr:nth-child(child67,1768 -.column,column97,2475 -.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { display: inline;97,2475 -.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { display: inline; float: left;97,2475 -.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { display: inline; float: left; margin-right: 10px;px97,2475 -* html .column,column98,2768 -* html .column, * html .span-1, * html .span-2, * html .span-3, * html .span-4, * html .span-5, * html .span-6, * html .span-7, * html .span-8, * html .span-9, * html .span-10, * html .span-11, * html .span-12, * html .span-13, * html .span-14, * html .span-15, * html .span-16, * html .span-17, * html .span-18, * html .span-19, * html .span-20, * html .span-21, * html .span-22, * html .span-23, * html .span-24 { overflow-x: hidden;98,2768 -.span-1 { width: 30px;px102,3235 -.span-2 { width: 70px;px104,3261 -.span-3 { width: 110px;px106,3287 -.span-4 { width: 150px;px108,3314 -.span-5 { width: 190px;px110,3341 -.span-6 { width: 230px;px112,3368 -.span-7 { width: 270px;px114,3395 -.span-8 { width: 310px;px116,3422 -.span-9 { width: 350px;px118,3449 -.span-10 { width: 390px;px120,3476 -.span-11 { width: 430px;px122,3504 -.span-12 { width: 470px;px124,3532 -.span-13 { width: 510px;px126,3560 -.span-14 { width: 550px;px128,3588 -.span-15 { width: 590px;px130,3616 -.span-16 { width: 630px;px132,3644 -.span-17 { width: 670px;px134,3672 -.span-18 { width: 710px;px136,3700 -.span-19 { width: 750px;px138,3728 -.span-20 { width: 790px;px140,3756 -.span-21 { width: 830px;px142,3784 -.span-22 { width: 870px;px144,3812 -.span-23 { width: 910px;px146,3840 -.span-24 { width: 950px;px148,3868 -.span-24 { width: 950px; margin:margin148,3868 -input.span-1, textarea.span-1, select.span-1 { width: 30px;px150,3907 -input.span-2, textarea.span-2, select.span-2 { width: 70px;px151,3969 -input.span-3, textarea.span-3, select.span-3 { width: 110px;px152,4031 -input.span-4, textarea.span-4, select.span-4 { width: 150px;px153,4094 -input.span-5, textarea.span-5, select.span-5 { width: 190px;px154,4157 -input.span-6, textarea.span-6, select.span-6 { width: 230px;px155,4220 -input.span-7, textarea.span-7, select.span-7 { width: 270px;px156,4283 -input.span-8, textarea.span-8, select.span-8 { width: 310px;px157,4346 -input.span-9, textarea.span-9, select.span-9 { width: 350px;px158,4409 -input.span-10, textarea.span-10, select.span-10 { width: 390px;px159,4472 -input.span-11, textarea.span-11, select.span-11 { width: 430px;px160,4538 -input.span-12, textarea.span-12, select.span-12 { width: 470px;px161,4604 -input.span-13, textarea.span-13, select.span-13 { width: 510px;px162,4670 -input.span-14, textarea.span-14, select.span-14 { width: 550px;px163,4736 -input.span-15, textarea.span-15, select.span-15 { width: 590px;px164,4802 -input.span-16, textarea.span-16, select.span-16 { width: 630px;px165,4868 -input.span-17, textarea.span-17, select.span-17 { width: 670px;px166,4934 -input.span-18, textarea.span-18, select.span-18 { width: 710px;px167,5000 -input.span-19, textarea.span-19, select.span-19 { width: 750px;px168,5066 -input.span-20, textarea.span-20, select.span-20 { width: 790px;px169,5132 -input.span-21, textarea.span-21, select.span-21 { width: 830px;px170,5198 -input.span-22, textarea.span-22, select.span-22 { width: 870px;px171,5264 -input.span-23, textarea.span-23, select.span-23 { width: 910px;px172,5330 -input.span-24, textarea.span-24, select.span-24 { width: 950px;px173,5396 -.append-1 { padding-right: 40px;px175,5463 -.append-2 { padding-right: 80px;px177,5499 -.append-3 { padding-right: 120px;px179,5535 -.append-4 { padding-right: 160px;px181,5572 -.append-5 { padding-right: 200px;px183,5609 -.append-6 { padding-right: 240px;px185,5646 -.append-7 { padding-right: 280px;px187,5683 -.append-8 { padding-right: 320px;px189,5720 -.append-9 { padding-right: 360px;px191,5757 -.append-10 { padding-right: 400px;px193,5794 -.append-11 { padding-right: 440px;px195,5832 -.append-12 { padding-right: 480px;px197,5870 -.append-13 { padding-right: 520px;px199,5908 -.append-14 { padding-right: 560px;px201,5946 -.append-15 { padding-right: 600px;px203,5984 -.append-16 { padding-right: 640px;px205,6022 -.append-17 { padding-right: 680px;px207,6060 -.append-18 { padding-right: 720px;px209,6098 -.append-19 { padding-right: 760px;px211,6136 -.append-20 { padding-right: 800px;px213,6174 -.append-21 { padding-right: 840px;px215,6212 -.append-22 { padding-right: 880px;px217,6250 -.append-23 { padding-right: 920px;px219,6288 -.prepend-1 { padding-left: 40px;px221,6326 -.prepend-2 { padding-left: 80px;px223,6362 -.prepend-3 { padding-left: 120px;px225,6398 -.prepend-4 { padding-left: 160px;px227,6435 -.prepend-5 { padding-left: 200px;px229,6472 -.prepend-6 { padding-left: 240px;px231,6509 -.prepend-7 { padding-left: 280px;px233,6546 -.prepend-8 { padding-left: 320px;px235,6583 -.prepend-9 { padding-left: 360px;px237,6620 -.prepend-10 { padding-left: 400px;px239,6657 -.prepend-11 { padding-left: 440px;px241,6695 -.prepend-12 { padding-left: 480px;px243,6733 -.prepend-13 { padding-left: 520px;px245,6771 -.prepend-14 { padding-left: 560px;px247,6809 -.prepend-15 { padding-left: 600px;px249,6847 -.prepend-16 { padding-left: 640px;px251,6885 -.prepend-17 { padding-left: 680px;px253,6923 -.prepend-18 { padding-left: 720px;px255,6961 -.prepend-19 { padding-left: 760px;px257,6999 -.prepend-20 { padding-left: 800px;px259,7037 -.prepend-21 { padding-left: 840px;px261,7075 -.prepend-22 { padding-left: 880px;px263,7113 -.prepend-23 { padding-left: 920px;px265,7151 -.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline;267,7189 -.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline; float: left;267,7189 -.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline; float: left; position: relative;267,7189 -.pull-1 { margin-left: -40px;px269,7474 -.pull-2 { margin-left: -80px;px271,7507 -.pull-3 { margin-left: -120px;px273,7540 -.pull-4 { margin-left: -160px;px275,7574 -.pull-5 { margin-left: -200px;px277,7608 -.pull-6 { margin-left: -240px;px279,7642 -.pull-7 { margin-left: -280px;px281,7676 -.pull-8 { margin-left: -320px;px283,7710 -.pull-9 { margin-left: -360px;px285,7744 -.pull-10 { margin-left: -400px;px287,7778 -.pull-11 { margin-left: -440px;px289,7813 -.pull-12 { margin-left: -480px;px291,7848 -.pull-13 { margin-left: -520px;px293,7883 -.pull-14 { margin-left: -560px;px295,7918 -.pull-15 { margin-left: -600px;px297,7953 -.pull-16 { margin-left: -640px;px299,7988 -.pull-17 { margin-left: -680px;px301,8023 -.pull-18 { margin-left: -720px;px303,8058 -.pull-19 { margin-left: -760px;px305,8093 -.pull-20 { margin-left: -800px;px307,8128 -.pull-21 { margin-left: -840px;px309,8163 -.pull-22 { margin-left: -880px;px311,8198 -.pull-23 { margin-left: -920px;px313,8233 -.pull-24 { margin-left: -960px;px315,8268 -.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 { display: inline;317,8303 -.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 { display: inline; float: left;317,8303 -.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 { display: inline; float: left; position: relative;317,8303 -.push-1 { margin: 0 -40px 1.5em 40px;px319,8588 -.push-2 { margin: 0 -80px 1.5em 80px;px321,8629 -.push-3 { margin: 0 -120px 1.5em 120px;px323,8670 -.push-4 { margin: 0 -160px 1.5em 160px;px325,8713 -.push-5 { margin: 0 -200px 1.5em 200px;px327,8756 -.push-6 { margin: 0 -240px 1.5em 240px;px329,8799 -.push-7 { margin: 0 -280px 1.5em 280px;px331,8842 -.push-8 { margin: 0 -320px 1.5em 320px;px333,8885 -.push-9 { margin: 0 -360px 1.5em 360px;px335,8928 -.push-10 { margin: 0 -400px 1.5em 400px;px337,8971 -.push-11 { margin: 0 -440px 1.5em 440px;px339,9015 -.push-12 { margin: 0 -480px 1.5em 480px;px341,9059 -.push-13 { margin: 0 -520px 1.5em 520px;px343,9103 -.push-14 { margin: 0 -560px 1.5em 560px;px345,9147 -.push-15 { margin: 0 -600px 1.5em 600px;px347,9191 -.push-16 { margin: 0 -640px 1.5em 640px;px349,9235 -.push-17 { margin: 0 -680px 1.5em 680px;px351,9279 -.push-18 { margin: 0 -720px 1.5em 720px;px353,9323 -.push-19 { margin: 0 -760px 1.5em 760px;px355,9367 -.push-20 { margin: 0 -800px 1.5em 800px;px357,9411 -.push-21 { margin: 0 -840px 1.5em 840px;px359,9455 -.push-22 { margin: 0 -880px 1.5em 880px;px361,9499 -.push-23 { margin: 0 -920px 1.5em 920px;px363,9543 -.push-24 { margin: 0 -960px 1.5em 960px;px365,9587 -.feedback,feedback373,9773 -.feedback, .error,error373,9773 -.feedback, .error, .alert,alert373,9773 -.feedback, .error, .alert, .notice,notice373,9773 -.feedback, .error, .alert, .notice, .success,success373,9773 -.error,error375,9893 -.error a,376,9972 -input.text,text401,10607 -input.text, input.title,title401,10607 -input.text, input.title, input[input401,10607 -input.text, input.title, input[type=email], input[input401,10607 -input.text,text410,10900 -input.text, input.title,title410,10900 -input.text, input.title, input[input410,10900 -input.text, input.title, input[type=email], input[input410,10900 -input.text, input.title, input[type=email], input[type=text], input[input410,10900 -input.text:focus,focus411,11048 -input.text:focus, input.title:focus,focus411,11048 -input.text:focus, input.title:focus, input[type=email]:focus,focus411,11048 -input.text:focus, input.title:focus, input[type=email]:focus, input[type=text]:focus,focus411,11048 -input.text:focus, input.title:focus, input[type=email]:focus, input[type=text]:focus, input[type=password]:focus,focus411,11048 -input.text,text415,11285 -input.text, input.title,title415,11285 -input.text, input.title, input[input415,11285 -input.text, input.title, input[type=email], input[input415,11285 -ul,421,11517 -div.paginator span.page:hover,hover470,14146 -div.paginator span.page:hover, div.paginator span.next:hover,hover470,14146 -div.paginator span.page:hover a,471,14273 -div.paginator span.page:hover a, div.paginator span.next:hover a,471,14273 -.hgbobject .gbobject-content pre,488,15666 -.gbobject-widgets ul,494,16239 -ol#comment-list,list498,16409 -ol#comment-list, ol#pingback-list,list498,16409 -ol#comment-list li,499,16516 -ol#comment-list li, ol#pingback-list li,499,16516 -ol#comment-list li.box2,box2500,16629 -ol#comment-list li.box2, ol#pingback-list li.box2,box2500,16629 -ol#comment-list li.post-author,author501,16760 -ol#comment-list li.post-author, ol#pingback-list li.post-author,author501,16760 -ol#comment-list li p,502,16878 -ol#comment-list li p, ol#pingback-list li p,502,16878 -ol#comment-list li img,503,16972 -ol#comment-list li img, ol#pingback-list li img,503,16972 -ol#comment-list li .pingback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body, ol#pingback-list li .pingback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body, ol#pingback-list li .pingback-body, ol#pingback-list li .trackback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body, ol#pingback-list li .pingback-body, ol#pingback-list li .trackback-body, ol#trackback-list li .pingback-body,body504,17064 -ol#comment-list li .comment-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author, ol#pingback-list li .trackback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author, ol#pingback-list li .trackback-author, ol#trackback-list li .comment-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author, ol#pingback-list li .trackback-author, ol#trackback-list li .comment-author, ol#trackback-list li .pingback-author,author505,17300 - -static/gstudio/css/dashboard_gstudio.css,147 -.module table th,5,117 -.managelink managelink7,174 -input,11,400 -input, textarea,11,400 -.vTextField,vTextField13,456 -.required label,15,504 - -static/gstudio/css/dashboard_objectapp.css,147 -.module table th,5,117 -.managelink managelink7,174 -input,11,400 -input, textarea,11,400 -.vTextField,vTextField13,456 -.required label,15,504 - -static/gstudio/css/grappelli-skin-default.css,15333 -.module p.help,help12,513 -p.preview a:link,link23,719 -p.preview a:hover,hover26,792 -a:link,link35,982 -a:hover,hover38,1024 -a:hover, a:active,active38,1024 -.dashboard h2 a:link,link42,1076 -.dashboard h2 a:link, .dashboard h2 a:visited,visited42,1076 -.dashboard h3 a:link,link43,1124 -.dashboard h2 a:hover,hover46,1191 -.dashboard h2 a:hover, .dashboard h2 a:active,active46,1191 -.dashboard h3 a:hover,hover47,1239 -.dashboard h4 a:link,link51,1310 -.dashboard h4 a:hover,hover54,1377 - color: #59AFCC;AFCC59,1484 - color:color62,1542 -code,75,1763 -.rte h3:last-child,child106,2226 - color: #eee;eee164,3819 - background:background165,3836 - color: #ddd;ddd171,4091 - border-left: 1px solid 192,4515 - border-left: 1px solid 195,4570 - border-right: 1px solid 196,4606 -ul.navigation-menu li.collapse.open>a.collapse-handler,handler277,7079 -ul.navigation-menu li.bookmark.disabled>a,a278,7136 -ul.messagelist li.error,error339,8820 -.module .module,module390,10302 -.group,group412,10942 -.group h2,425,11245 - border-top: 1px solid #fff;fff441,11916 -.module h2+.module,module443,11950 -.module h2+.tools,tools444,11971 - border-top:top459,12317 -.group h3,462,12339 - border-top: 1px solid #fff;fff476,12902 -.module h3+.module,module478,12936 -.module h3+.tools,tools479,12957 -.group .module .module,module487,13125 -.group .module .module>*:first-child,child491,13213 -.group h4,496,13330 - border-top: 1px solid #fff;fff506,13670 -.module .row.description,description514,13819 -.group .module.collapse.closed h3.collapse-handler,handler534,14437 -.group .module.collapse.closed h4.collapse-handler,handler535,14490 -.collapse.closed h2.collapse-handler,handler536,14543 -.module .module.collapse.closed.last .collapse-handler,handler537,14582 -.module.collapse.closed h2.collapse-handler,handler542,14931 -.module.collapse.closed h3.collapse-handler,handler543,14977 -.collapse h2.collapse-handler:hover,hover557,15447 -.group .collapse h3.collapse-handler,handler568,15844 -.group .collapse h3.collapse-handler:hover,hover575,16163 -.module .collapse h3.collapse-handler:hover,hover576,16208 -.group .collapse.open h3.collapse-handler,handler577,16254 -.group .module .collapse > h4.collapse-handler,handler591,16742 -.group .collapse > h4.collapse-handler:hover,hover599,17116 -.module .collapse > h4.collapse-handler:hover,hover600,17163 -.group .collapse.open > h4.collapse-handler,handler601,17211 -.row.first,first621,17797 -.row:first-child,child622,17810 -.row.last,last628,18106 -.row:last-child,child629,18118 -.row:last-of-type,type630,18136 -fieldset.module > .row.last,last631,18156 -fieldset.module .cell:last-child,child656,18880 -.module.thead,thead675,19314 -.module.table .tr,tr680,19394 -.module.table .th,th684,19461 -.module.thead .th:last-of-type,type689,19573 -.module.thead .td:last-of-type,type690,19606 -.module.table .module.thead .th,th694,19695 -.module.tbody .th,th700,19828 -.module.tbody .th:first-of-type,type706,19965 -.module.tbody .th:last-of-type,type713,20383 -.predelete h2,735,21104 -.predelete h2, .collapse.predelete > h2.collapse-handler,handler735,21104 -.predelete h3,736,21163 -.predelete h3, .collapse.predelete > h3.collapse-handler,handler736,21163 -.predelete h4,737,21222 -.collapse.predelete > h2.collapse-handler:hover,hover743,21531 -.collapse.predelete > h3.collapse-handler:hover,hover744,21581 -.predelete .collapse > h4.collapse-handler:hover,hover745,21631 -.collapse.open.predelete > h2.collapse-handler,handler746,21682 -.collapse.open.predelete > h3.collapse-handler,handler747,21731 -.predelete,predelete754,22114 -.predelete .module,module755,22127 -.predelete .th,th756,22147 -.selector-available,available766,22343 -.selector h2,771,22512 -.selector h2, .inline-group .selector h2,771,22512 -.inline-related fieldset .selector-available h2,772,22555 -a.selector-chooseall,chooseall795,23500 -a.selector-chooseall,chooseall803,23628 -.module.link-list,list812,23867 -.module.link-list .module,module813,23887 -.module.actions,actions814,23915 -.module.actions .module,module815,23933 -.module.feed,feed816,23959 -.link-list ul li,820,24021 -.feed ul li,821,24040 -.actions ul li,822,24054 -.actions ul li:first-child,child830,24206 -.link-list ul li:first-child,child831,24235 -.feed ul li:first-child,child832,24266 -.actions ul li:last-child,child836,24352 -.link-list ul li:last-child,child837,24380 -.feed ul li:last-child,child838,24410 -.link-list ul li.selected a,842,24497 -a.internal:link,link846,24584 -a.internal:hover,hover847,24623 -a.internal:hover, a.internal:active,active847,24623 -a.external:link,link851,24706 -a.external:hover,hover854,24766 -.module.changelist-filters:last-of-type,type869,25257 -.module.search,search880,25718 -.open a.button.toggle-filters,filters894,26186 -a.button.toggle-filters:link,link900,26540 -.selected a.button.toggle-filters:link,link904,26650 -.open a.button.toggle-filters,filters912,27268 -.open a.button.toggle-filters, .selected a.button.toggle-filters,filters912,27268 -.selected a.button.toggle-filters:hover,hover913,27335 -.selected a.button.toggle-filters:hover, .selected a.button.toggle-filters:active,active913,27335 -a.button.toggle-filters:hover,hover914,27419 -.selected a.button.toggle-filters:link,link923,28050 -.open a.button.toggle-filters,filters932,28701 -.open.selected a.button.toggle-filters,filters933,28733 -.selected a.button.toggle-filters:hover,hover934,28774 -.selected a.button.toggle-filters:hover, .selected a.button.toggle-filters:active,active934,28774 -a.button.toggle-filters:hover,hover935,28858 -.date-hierarchy a:link,link979,31024 -.date-hierarchy a:hover,hover982,31098 -.date-hierarchy a.date-hierarchy-back:hover,hover985,31169 -ul.pagination span,1009,31792 -ul.pagination a:link,link1015,32022 -ul.pagination a:hover,hover1019,32117 -.changelist-actions.all-selected,selected1058,33330 -.changelist-actions ul a,1066,33595 -.changelist-actions ul a:link,link1071,33754 -.changelist-actions ul a:hover,hover1079,34083 -h1 + .tools a:link,link1151,36317 -h1 + .tools a:hover,hover1157,36580 -h1 + .tools a.add-handler:link,link1173,37239 -h1 + .tools a.add-handler:hover,hover1180,37760 -.group h2+.tools,tools1191,38378 -.group h2+.tools,tools1199,38657 -.group .module.collapse.closed h3+.tools,tools1207,38902 -.group .module.collapse.closed h3+.tools li,1208,38945 -.module.collapse.closed:last-child h3+.tools,tools1209,38991 -.group h3+.tools,tools1213,39205 -.module.collapse.closed:last-child h4+.tools,tools1221,39427 -.login .errornote,errornote1242,40343 -.error input,1251,40576 -.error input, .error select,1251,40576 -.error input, .error select, .errors input,1251,40576 -input,1272,41038 -input, textarea,1272,41038 -input, textarea, select,1272,41038 -input,1279,41255 -input, textarea,1279,41255 -*:focus,focus1289,41565 -*:focus, input:focus,focus1289,41565 -*:focus, input:focus, textarea:focus,focus1289,41565 -option,1311,42092 -.vAutocompleteSearchField,vAutocompleteSearchField1322,42311 -input[input1330,42469 -textarea[textarea1331,42486 -input[input1341,42938 -input[type=submit], input[input1341,42938 -input[type=submit], input[type=reset], input[input1341,42938 - border-radius: 6px;px1352,43259 - border-radius: 6px; -moz-border-radius: 6px;px1352,43259 - border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;px1352,43259 - box-shadow: 0 0 5px px1353,43336 - box-shadow: 0 0 5px #666; -moz-box-shadow: 0 0 5px px1353,43336 - box-shadow: 0 0 5px #666; -moz-box-shadow: 0 0 5px #666; -webkit-box-shadow: 0 0 5px px1353,43336 - background: #d6d6d6;d6d6d61354,43431 - box-shadow: 0 0 5px #aaa;aaa1361,43673 - box-shadow: 0 0 5px #aaa; -moz-box-shadow: 0 0 5px #aaa;aaa1361,43673 - box-shadow: 0 0 5px #aaa; -moz-box-shadow: 0 0 5px #aaa; -webkit-box-shadow: 0 0 5px #aaa;aaa1361,43673 - border: 1px solid 1365,43873 - box-shadow: 0 0 5px px1366,43901 - box-shadow: 0 0 5px #666; -moz-box-shadow: 0 0 5px px1366,43901 - box-shadow: 0 0 5px #666; -moz-box-shadow: 0 0 5px #666; -webkit-box-shadow: 0 0 5px px1366,43901 - background:background1367,43996 - box-shadow: 0 0 5px #aaa;aaa1370,44070 - box-shadow: 0 0 5px #aaa; -moz-box-shadow: 0 0 5px #aaa;aaa1370,44070 - box-shadow: 0 0 5px #aaa; -moz-box-shadow: 0 0 5px #aaa; -webkit-box-shadow: 0 0 5px #aaa;aaa1370,44070 -.footer .submit-row>*[class*="-container"]:hover,hover1372,44167 -.submit-row a.submit-link,link1383,44569 -.submit-row a.delete-link,link1384,44597 -.submit-row a.submit-link,link1388,44732 -input[input1393,44827 -.submit-row a.delete-link:link,link1395,44871 -.submit-row a.delete-link:link, .submit-row a.delete-link:visited,visited1395,44871 -.submit-row a.cancel-link:link,link1396,44939 -.submit-row a.cancel-link:link, .submit-row a.cancel-link:visited,visited1396,44939 -.submit-row a.delete-link:link,link1401,45147 -.submit-row a.cancel-link:link,link1410,45526 -.submit-row a.cancel-link:link, .submit-row a.cancel-link:visited,visited1410,45526 -input[input1420,45892 -.submit-row a.submit-link:link,link1421,45913 -input[type=submit]:hover,hover1428,46238 -.submit-row a.submit-link:hover,hover1430,46294 -.submit-row a.submit-link:hover, .submit-row a.submit-link:active,active1430,46294 -.submit-row a.delete-link:hover,hover1431,46362 -.submit-row a.delete-link:hover, .submit-row a.delete-link:active,active1431,46362 -.submit-row a.cancel-link:hover,hover1432,46430 -.submit-row a.cancel-link:hover, .submit-row a.cancel-link:active,active1432,46430 -.footer input[type=submit]:hover,hover1441,46810 -.footer #bookmark-add-cancel:hover,hover1442,46845 -.footer .submit-row a.delete-link:hover,hover1443,46882 -.footer .submit-row a.delete-link:hover, .footer .submit-row a.delete-link:active,active1443,46882 -.footer .submit-row a.cancel-link:hover,hover1444,46966 -button.fb_show,fb_show1448,47081 -button.ui-datepicker-trigger,trigger1449,47098 -button.ui-timepicker-trigger,trigger1450,47129 -button.ui-gAutocomplete-browse,browse1451,47160 -button.ui-gAutoSlugField-toggle,toggle1452,47193 -button.ui-gFacelist-browse,browse1453,47227 -a.button,button1454,47256 -.vDateField + span a,1455,47267 -.vTimeField + span a,1456,47290 -a.fb_show,fb_show1457,47313 -a.related-lookup,lookup1458,47325 -a.add-another,another1459,47344 -button.fb_show,fb_show1480,48331 -button.ui-gAutocomplete-browse,browse1481,48348 -button.ui-gFacelist-browse,browse1482,48381 -button.ui-gAutoSlugField-toggle,toggle1483,48410 -button.ui-datepicker-trigger,trigger1484,48444 -button.ui-timepicker-trigger,trigger1485,48475 -button.fb_show:hover,hover1490,48591 -button.ui-gAutocomplete-browse:hover,hover1491,48614 -button.ui-gFacelist-browse:hover,hover1492,48653 -button.ui-gAutoSlugField-toggle:hover,hover1493,48688 -button.ui-datepicker-trigger:hover,hover1494,48728 -button.ui-timepicker-trigger:hover,hover1495,48765 -button.fb_show[fb_show1499,48865 -button.ui-gAutocomplete-browse[browse1500,48892 -button.ui-gFacelist-browse[browse1501,48935 -button.ui-gAutoSlugField-toggle[toggle1502,48974 -button.ui-datepicker-trigger[trigger1503,49018 -button.ui-timepicker-trigger[trigger1504,49059 -button.ui-gAutocomplete-browse,browse1514,49289 -button.ui-gAutocomplete-browse:hover,hover1520,49719 -.errors button.ui-gAutocomplete-browse,browse1527,50171 -a.button,button1592,53327 -.datecrumbs a,1593,53338 -a.button.drop-down:link,link1612,54154 -a.button.drop-down[down1616,54258 -a.button.drop-down:hover,hover1617,54298 -a.fb_show,fb_show1629,54994 -a.fb_show:link,link1633,55055 -a.fb_show:link, a.fb_show:visited,visited1633,55055 -a.related-lookup:link,link1634,55091 -a.fb_show:hover,hover1637,55174 -a.fb_show:hover, a.fb_show:active,active1637,55174 -a.related-lookup:hover,hover1638,55210 -a.fb_show:link,link1642,55294 -a.fb_show:link, a.fb_show:visited,visited1642,55294 -a.fb_show:hover,hover1648,55701 -a.fb_show:hover, a.fb_show:active,active1648,55701 -a.related-lookup:link,link1654,56123 -a.related-lookup:hover,hover1659,56541 -a.related-lookup.m2m:link,link1668,57039 -a.related-lookup.m2m:link, a.related-lookup.m2m:visited,visited1668,57039 -div.autocomplete-wrapper-m2m a.related-lookup:link,link1669,57097 -a.related-lookup.m2m:hover,hover1674,57585 -a.related-lookup.m2m:hover, a.related-lookup.m2m:active,active1674,57585 -div.autocomplete-wrapper-m2m a.related-lookup:hover,hover1675,57643 -.error input + button,1695,58432 -.error .vDateField + button,1696,58456 -.error .vTimeField + button,1697,58486 -.error input + a.fb_show,fb_show1698,58516 -.error input + a.related-lookup,lookup1699,58543 -.error input + a.add-another,another1700,58577 -.errors input + button,1701,58608 -.errors .vDateField + button,1702,58633 -.errors .vTimeField + button,1703,58664 -.errors input + a.fb_show,fb_show1704,58695 -.errors input + a.related-lookup,lookup1705,58723 -.errors input + a.add-another,another1706,58758 -input:focus + button,1714,58938 -.vDateField:focus + span a,1715,58961 -.vTimeField:focus + span a,1716,58990 -input:focus + a.fb_show,fb_show1717,59019 -input:focus + a.related-lookup,lookup1718,59045 -div.autocomplete-wrapper-fk input:focus + a.related-lookup,lookup1725,59350 -tr.alt th,1734,59894 -.row1 th,1737,59944 -.row2 th,1740,59992 -.selected th,1743,60037 -thead th,1750,60158 -thead th a:link,link1774,61045 -thead th a:hover,hover1778,61137 -thead th a:hover, thead th a:active,active1778,61137 -tbody th,1789,61339 -thead th:first-child,child1799,61504 - border: 1px solid #bdbdbd;bdbdbd1819,61836 - border:border1822,61914 - border-top: 1px solid #e8e8e8;e8e8e81823,61929 - border-left: 1px solid #e0e0e0;e0e0e01824,61964 - border-top: 1px solid #fff;fff1827,62077 - border-left:left1830,62186 - border-radius: 5px;px1835,62263 - border-radius: 5px; -moz-border-radius: 5px;px1835,62263 - border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;px1835,62263 - border-top-left-radius: 5px;px1842,62545 - border-top-left-radius: 5px; -moz-border-radius-topleft: 5px;px1842,62545 - border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px;px1842,62545 - border-top-right-radius: 5px;px1846,62723 - border-top-right-radius: 5px; -moz-border-radius-topright: 5px;px1846,62723 - border-top-right-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px;px1846,62723 - border-bottom-left-radius: 5px;px1850,62959 - border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;px1850,62959 - border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px;px1850,62959 - border-bottom-right-radius: 5px;px1854,63191 - border-bottom-right-radius: 5px; -moz-border-radius-bottomright: 5px;px1854,63191 - border-bottom-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px;px1854,63191 - border-left:left1859,63412 -tbody th:first-child,child1879,63987 -tbody tr:last-child td,1882,64054 - -static/gstudio/js/wymeditor/iframe/default/wymiframe.html,24 -WYMeditor iframe21,646 - -static/gstudio/js/wymeditor/iframe/default/lbl-p.png,992 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´StqtQ´Stq12,1547 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûgYû12,1547 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸j¶rvg¬jlRlcì›12,1547 - -static/gstudio/js/wymeditor/iframe/default/wymiframe.css,3744 - p,26,671 - h1,27,676 - h2,28,682 - h3,29,688 - h4,30,694 - h5,31,700 - h6,32,706 - ul,33,712 - ol,34,718 - table,35,724 - blockquote,36,733 - ul,42,958 - h1 h1,77,2463 - h1 h1, h1 h2,77,2463 - h1 h1, h1 h2, h1 h3,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre, h1 address,77,2463 - h2 h1,78,2533 - h2 h1, h2 h2,78,2533 - h2 h1, h2 h2, h2 h3,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre, h2 address,78,2533 - h3 h1,79,2603 - h3 h1, h3 h2,79,2603 - h3 h1, h3 h2, h3 h3,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre, h3 address,79,2603 - h4 h1,80,2673 - h4 h1, h4 h2,80,2673 - h4 h1, h4 h2, h4 h3,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre, h4 address,80,2673 - h5 h1,81,2743 - h5 h1, h5 h2,81,2743 - h5 h1, h5 h2, h5 h3,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre, h5 address,81,2743 - h6 h1,82,2813 - h6 h1, h6 h2,82,2813 - h6 h1, h6 h2, h6 h3,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre, h6 address,82,2813 - p h1,83,2883 - p h1, p h2,83,2883 - p h1, p h2, p h3,83,2883 - p h1, p h2, p h3, p h4,83,2883 - p h1, p h2, p h3, p h4, p h5,83,2883 - p h1, p h2, p h3, p h4, p h5, p h6,83,2883 - p h1, p h2, p h3, p h4, p h5, p h6, p pre,83,2883 - p h1, p h2, p h3, p h4, p h5, p h6, p pre, p address,83,2883 - pre h1,84,2939 - pre h1, pre h2,84,2939 - pre h1, pre h2, pre h3,84,2939 - pre h1, pre h2, pre h3, pre h4,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre, pre address,84,2939 - address h1,85,3018 - address h1, address h2,85,3018 - address h1, address h2, address h3,85,3018 - address h1, address h2, address h3, address h4,85,3018 - address h1, address h2, address h3, address h4, address h5,85,3018 - address h1, address h2, address h3, address h4, address h5, address h6,85,3018 - address p,86,3092 - address p, address pre,86,3092 - -static/gstudio/js/wymeditor/skins/twopanels/icons.png,45 -]11,2788 -]ÉBXóhžhò‰Üõ.Õ3ϲ±›RR12,3024 - -static/gstudio/js/wymeditor/skins/twopanels/skin.css,393 - .wym_skin_twopanels p,21,599 - .wym_skin_twopanels p, .wym_skin_twopanels h2,21,599 - .wym_skin_twopanels p, .wym_skin_twopanels h2, .wym_skin_twopanels h3,21,599 - .wym_skin_twopanels ul,22,678 - .wym_skin_twopanels .wym_section h2,67,2688 - .wym_skin_twopanels .wym_dropdown:hover ul,86,3967 - .wym_skin_twopanels .wym_buttons li a 93,4443 - -static/gstudio/js/wymeditor/skins/silver/README,21 -<script type=17,564 - -static/gstudio/js/wymeditor/skins/silver/skin.css,446 - .wym_skin_silver p,21,603 - .wym_skin_silver p, .wym_skin_silver h2,21,603 - .wym_skin_silver p, .wym_skin_silver h2, .wym_skin_silver h3,21,603 - .wym_skin_silver ul,22,673 - .wym_skin_silver .wym_section h2,67,2630 - .wym_skin_silver .wym_dropdown:hover ul,87,4007 - .wym_skin_silver .wym_buttons li a 96,4728 -.wym_skin_silver .wym_panel a,277,12569 -div.wym_dropdown a:hover,hover292,12903 - -static/gstudio/js/wymeditor/skins/silver/COPYING,1403 - Version 2,47 - Copyright 4,95 -your programs,20,926 - When we speak of free software,22,947 - When we speak of free software, we are referring to freedom,22,947 -11 of the WIPO copyright treaty adopted on 20 December 183,9244 - When you convey a covered work,187,9381 -the covered work,190,9592 -modification of the work as a means of enforcing,191,9663 -users, your or third parties' legal rights to forbid circumvention oftion of192,9732 -receive it,198,9929 -receive it, in any medium,198,9929 -appropriately publish on each copy an appropriate copyright notice;199,9992 -non-permissive terms added in accord with section 7 apply to the code;201,10118 -keep intact all notices of the absence of any warranty;202,10189 - Appropriate Legal Notices; however,231,11578 - Notices displayed by works containing it;370,19236 - c) Prohibiting misrepresentation of the origin of that material,372,19286 - reasonable ways as different from the original version;374,19425 - material by anyone who conveys the material 383,19780 -modify it is void,411,21191 - However,415,21356 - the Free Software Foundation,639,33294 - the Free Software Foundation, either version 3 of the License,639,33294 - the Free Software Foundation, either version 3 of the License, or639,33294 -parts of the General Public License. Of course,661,34332 -might be different;662,34405 - -static/gstudio/js/wymeditor/skins/silver/images/bg.selector.silver.gif,72 -J´¨Ñ£H“*zcÔ‰>iö”JÀ…iö”JÀ…2,620 -Œ HÁVP‚¬ Ž2hÁF*$! @(6,1500 - -static/gstudio/js/wymeditor/skins/minimal/skin.css,270 -.wym_skin_minimal div.wym_tools h2,32,718 -.wym_skin_minimal div.wym_containers h2,33,754 -.wym_skin_minimal div.wym_area_top,wym_area_top48,1026 -.wym_skin_minimal div.wym_area_right,wym_area_right49,1062 -.wym_skin_minimal div.wym_containers,wym_containers50,1100 - -static/gstudio/js/wymeditor/skins/minimal/images/bg.selector.silver.gif,72 -J´¨Ñ£H“*zcÔ‰>iö”JÀ…iö”JÀ…2,620 -Œ HÁVP‚¬ Ž2hÁF*$! @(6,1500 - -static/gstudio/js/wymeditor/skins/default/icons.png,45 -]11,2788 -]ÉBXóhžhò‰Üõ.Õ3ϲ±›RR12,3024 - -static/gstudio/js/wymeditor/skins/default/skin.css,373 - .wym_skin_default p,20,575 - .wym_skin_default p, .wym_skin_default h2,20,575 - .wym_skin_default p, .wym_skin_default h2, .wym_skin_default h3,20,575 - .wym_skin_default ul,21,648 - .wym_skin_default .wym_section h2,66,2613 - .wym_skin_default .wym_dropdown:hover ul,85,3868 - .wym_skin_default .wym_buttons li a 92,4336 - -static/gstudio/js/wymeditor/skins/wymeditor_icon.png,13 -DËD5,704 - -static/gstudio/js/wymeditor/skins/django/icons.png,855 -B„5lB„5l5,564 -g ˜ig ˜8,1412 -¦4T•s•ž÷=2#·—ù|ÝZ{«õ¤&ªä.ò{‰À'K
Üøµ#G³æTã\¥†#9;ôx¦´ÉE& V ¿Ùàõ~ðÊšxP‹í‚´ë·Ei¹ÏE¤üƒKvfûFQµ¸Ìm¤sþ—ŠªRP¸ì< Ý •-q†F8R‚–:C#ÓlÚ’ghR‚–<C#ÓlÚ’ghR‚–<C“´ä˜:¹%ÏФ¡ž¡9½fjAŸ.1¬ûq„g"ŠÄŽê?9‚1G¿‡èÚ¬}®;%iÿ1iÿ111,2665 -v@vu¤ë¼ËJndŒ:*¯<pz ”k[?Ѹ֚‹œ ›ÌœtB"p“Õ+™W‚ʚ墖޶°AÔxžãu1SSl[îÿ;#a¼þ|ºÅßñ9Šm H ½‘„²´Êñîœ]_‘^]+Ü‚cH¨9Á×oýÝþ}È»!v$`é~4‹r±edK @Ò
}%ò¢6Á’@(§À–(r¢¼9qÐ…æȲnœä\_H5‡¢çdƒªWPh®l¯ÈÙ³gk&ŽŽì×yŸ73gÜn«oR4ÐÏ_Ž5Š¦-2*J£¿fÿÃxžÊüi£ZhùùóçsÀ«¯¾:0ùÓš¿Î°I³éÁƒ¾¿¼ž;w®-8U½µl'í
´‚õû¦Ç>pÝæâ'@Ϭé·ãÕW_…ÞmVƹ&Ðüâ׿âYá*}1íHpîÜ9£~ûô3¼Œ,S]S15,4078 -Ýûö¶t§tYJ³Št§tYJ³16,4628 -î ¸Y„Do†P8uê_Í&`}Ã1ËÊÊŒØ<ïŠ ººZê_B !KÞ‡—KÞ‡18,5109 -ÑU]U20,5704 -ÑU]PPÀPP20,5704 -‹«0€ýÀÆvB~Q/ÓI[P[YÁ]ÃÁk|àˆö© /ká@ldQ}-†v‹`O ÍöJ ´Ú*nµV[ÏnµV[22,6043 - -static/gstudio/js/wymeditor/skins/django/skin.css,363 - .wym_skin_django p,21,610 - .wym_skin_django p, .wym_skin_django h2,21,610 - .wym_skin_django p, .wym_skin_django h2, .wym_skin_django h3,21,610 - .wym_skin_django ul,22,680 - .wym_skin_django .wym_section h2,67,2667 - .wym_skin_django .wym_dropdown:hover ul,86,3923 - .wym_skin_django .wym_buttons li a 95,4488 - -static/gstudio/js/wymeditor/skins/compact/icons.png,45 -]11,2788 -]ÉBXóhžhò‰Üõ.Õ3ϲ±›RR12,3024 - -static/gstudio/js/wymeditor/skins/compact/skin.css,373 - .wym_skin_compact p,21,633 - .wym_skin_compact p, .wym_skin_compact h2,21,633 - .wym_skin_compact p, .wym_skin_compact h2, .wym_skin_compact h3,21,633 - .wym_skin_compact ul,22,706 - .wym_skin_compact .wym_section h2,67,2657 - .wym_skin_compact .wym_dropdown:hover ul,86,3912 - .wym_skin_compact .wym_buttons li a 93,4380 - -static/gstudio/js/wymeditor/plugins/resizable/readme.txt,145 -The ``resizable`` plugin takes exactly one parameter,61,1916 - minHeight:minHeight67,2204 - var jQueryPlugins 89,3049 -Changelog110,3941 - -static/gstudio/js/wymeditor/plugins/tidy/README,89 -Copyright (c) 2005 - 2009 Jean-Francois Hovinne,2,62 -Dual licensed under the MIT 3,137 - -static/gstudio/js/markitup/templates/preview.html,33 -markItUp! preview template5,243 - -static/gstudio/js/markitup/skins/django/style.css,408 -.markItUp a:link,link9,302 - font:12px 'Courier New', Courier,28,652 - font:12px 'Courier New', Courier, monospace;28,652 - padding:5px;px29,698 - width:790px;px30,712 - height:220px;px31,726 - clear:both;both32,741 - line-height:18px;px33,754 - overflow:auto;auto34,773 -.markItUpHeader ul .markItUpDropMenu markItUpDropMenu68,1428 -.markItUpHeader ul ul .markItUpDropMenu markItUpDropMenu87,1841 - -static/gstudio/js/markitup/skins/django/images/menu.png,270 -wAÁ©÷~¸á“ÐkQ)?Âö•r• ár• 6,1115 -pOšxfØpOšxf9,1905 -chg€Ð’ê¡*ƒ…òäKxZÎ×¹RiPÉz¯Å»ozÐ+ÁœdcnÈ:0ÕªJ±RÓÛâÛ(V}svàÍ·äBà
–ðbÛ`Ö”ÌúàFÛðë9F#Ù ¦ÞÜb
¼Ñ¾r=r10,2288 -¹1Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏžzBGÏ53,17284 - -static/gstudio/js/markitup/sets/textile/images/quotes.png,50 -µDMs6gRÎLDMs6gRÎ4,156 -µDMs6gRÎL:,Óp÷p4,156 - -static/gstudio/js/markitup/sets/textile/images/h2.png,11 -${$4,125 - -static/gstudio/js/markitup/sets/html/images/h2.png,11 -${$4,125 - -static/gstudio/js/markitup/sets/html/images/image.png,101 -‰PNGPNG1,0 -º]ñ»Hà Bv„åÌ“µÚˆ_Sÿ%Ò;ô6×9Host
wöEwöE4,391 -ó]*f"Å"ô½.\00CLâCL5,439 - -static/gstudio/js/markitup/sets/markdown/images/quotes.png,50 -µDMs6gRÎLDMs6gRÎ4,156 -µDMs6gRÎL:,Óp÷p4,156 - -static/gstudio/js/markitup/sets/markdown/images/h2.png,11 -${$4,125 - -static/gstudio/js/markitup/sets/restructuredtext/images/quotes.png,50 -µDMs6gRÎLDMs6gRÎ4,156 -µDMs6gRÎL:,Óp÷p4,156 - -static/gstudio/js/markitup/sets/restructuredtext/images/h2.png,11 -${$4,125 - -ping.py,417 -class URLRessources(17,343 - def __init__(20,429 -class DirectoryPinger(29,835 - def __init__(32,913 - def run(44,1313 - def ping_nodetype(54,1730 -class ExternalUrlsPinger(78,2694 - def __init__(81,2778 - def run(93,3194 - def is_external_url(108,3749 - def find_external_urls(115,4008 - def find_pingback_href(123,4360 - def find_pingback_urls(132,4746 - def pingback_url(160,5790 - -plugins/cms_app.py,29 -class GstudioApphook(10,226 - -plugins/cms_plugins.py,318 -class CMSLatestNodetypesPlugin(19,535 - def formfield_for_manytomany(52,1375 - def render(61,1787 - def icon_src(85,2754 -class CMSSelectedNodetypesPlugin(90,2893 - def render(100,3265 - def icon_src(107,3555 -class CMSRandomNodetypesPlugin(112,3694 - def render(121,4028 - def icon_src(129,4371 - -plugins/migrations/0002_auto__add_field_latestnodetypesplugin_template_to_render__add_field_sele.py,71 -class Migration(5,63 - def forwards(7,98 - def backwards(15,696 - -plugins/migrations/0003_auto__del_field_latestnodetypesplugin_metatype__del_field_latestnodetypesp.py,73 -class Migration(6,92 - def forwards(8,127 - def backwards(40,2023 - -plugins/migrations/0001_initial.py,73 -class Migration(6,92 - def forwards(8,127 - def backwards(33,1744 - -plugins/migrations/0005_auto__add_randomnodetypesplugin.py,71 -class Migration(5,63 - def forwards(7,98 - def backwards(17,668 - -plugins/migrations/0004_auto__add_field_latestnodetypesplugin_submetatypes.py,71 -class Migration(5,63 - def forwards(7,98 - def backwards(12,345 - -plugins/admin.py,67 -class NodetypePlaceholderAdmin(14,413 - def save_model(33,1627 - -plugins/models.py,364 -class LatestNodetypesPlugin(21,684 - def render_template(42,1484 - def copy_relations(47,1642 - def __unicode__(53,1895 -class SelectedNodetypesPlugin(57,1984 - def render_template(68,2363 - def copy_relations(73,2521 - def __unicode__(77,2680 -class RandomNodetypesPlugin(81,2767 - def __unicode__(91,3135 -def invalidate_menu_cache(95,3224 - -plugins/placeholder.py,61 -class NodetypePlaceholder(7,122 - class Meta:Meta12,269 - -plugins/menu.py,270 -class NodetypeMenu(17,492 - def get_nodes(21,627 -class MetatypeMenu(63,2442 - def get_nodes(67,2549 -class AuthorMenu(80,3084 - def get_nodes(84,3185 -class TagMenu(98,3784 - def get_nodes(102,3876 -class NodetypeModifier(115,4395 - def modify(119,4529 - -sitemaps.py,457 -class NodetypeSitemap(13,308 - def items(18,418 - def lastmod(22,521 -class MetatypeSitemap(27,635 - def cache(31,727 - def items(42,1168 - def lastmod(48,1334 - def priority(55,1554 -class AuthorSitemap(63,1776 - def items(68,1883 - def lastmod(72,1982 - def location(79,2201 -class TagSitemap(84,2339 - def cache(88,2421 - def items(97,2813 - def lastmod(103,2953 - def priority(108,3119 - def location(115,3338 - -models.py,5116 -class Author(102,3247 - def nodetypes_published(108,3379 - def get_absolute_url(113,3538 - class Meta:Meta118,3713 -class NID(122,3779 - def get_serialized_dict(137,4453 - def get_absolute_url(144,4662 - def ref(154,5000 - def get_edit_url(170,5871 - def get_serialized_data(175,6005 - def __unicode__(184,6353 - class Meta:Meta188,6408 -class Node(193,6452 - def __unicode__(202,6860 - class Meta:Meta205,6914 -class Edge(208,6954 - def __unicode__(211,6973 - class Meta:Meta214,7027 -class Metatype(218,7068 - def nodetypes_published(228,7345 - def get_nbh(235,7518 - def get_rendered_nbh(256,8292 - def tree_path(281,9261 - def __unicode__(287,9460 - def composed_sentence(291,9528 - def get_absolute_url(299,9805 - class Meta:Meta304,9937 -class Nodetype(314,10099 - def tree_path(390,13317 - def tree_path_sentence(397,13530 - def html_content(404,13798 - def get_relations(416,14297 - def get_rendered_nbh(438,15044 - def previous_nodetype(516,17957 - def next_nodetype(524,18203 - def word_count(532,18467 - def is_actual(537,18610 - def is_visible(543,18818 - def related_published(548,18971 - def discussions(553,19122 - def comments(559,19303 - def pingbacks(565,19497 - def trackbacks(570,19641 - def comments_are_open(575,19788 - def short_url(583,20091 - def __unicode__(587,20204 - def memberof_sentence(591,20272 - def subtypeof_sentence(601,20675 - def subtypeof(608,20982 - def get_absolute_url(615,21163 - def get_serialized_data(623,21478 - class Meta:Meta632,21835 -class Objecttype(641,22131 - def __unicode__(646,22193 - def get_attributetypes(650,22261 - def get_relationtypes(654,22359 - def get_left_subjecttypes(665,22680 - def get_rightroles(676,23020 - def get_subjecttypes(687,23356 - def member_of_metatypes(699,23697 - def get_members(711,24014 - def get_nbh(722,24280 - def get_rendered_nbh(752,25180 - class Meta:Meta797,26922 -class Relationtype(809,27213 - def get_serialized_data(825,28563 - def __unicode__(835,28921 - class Meta:Meta838,28975 -class Attributetype(848,29270 - def __unicode__(878,32472 - class Meta:Meta881,32526 -class Relation(892,32829 - def ApplicableNodeTypes_filter(904,33583 - class Meta:Meta934,34527 - def __unicode__(942,34896 - def composed_sentence(946,34976 - def inversed_sentence(951,35262 - def key_value(956,35529 - def inverse_key_value(960,35639 - def relation_sentence(965,35765 - def partial_composition(973,36050 -class Attribute(980,36290 - class Meta:Meta995,37066 - def subject_filter(1003,37417 - def __unicode__(1015,37732 - def edge_node_dict(1019,37815 - def composed_sentence(1026,38088 - def composed_attribution(1033,38380 - def partial_composition(1040,38586 - def subject_filter(1047,38807 -class AttributeCharField(1057,39110 - def __unicode__(1061,39223 -class AttributeTextField(1064,39277 - def __unicode__(1068,39372 -class AttributeIntegerField(1071,39430 - def __unicode__(1074,39545 -class AttributeCommaSeparatedIntegerField(1077,39601 - def __unicode__(1081,39769 -class AttributeBigIntegerField(1084,39823 - def __unicode__(1088,39953 -class AttributePositiveIntegerField(1091,40007 - def __unicode__(1095,40152 -class AttributeDecimalField(1098,40206 - def __unicode__(1102,40342 -class AttributeFloatField(1105,40396 - def __unicode__(1109,40520 -class AttributeBooleanField(1112,40574 - def __unicode__(1116,40678 -class AttributeNullBooleanField(1119,40732 - def __unicode__(1123,40858 -class AttributeDateField(1126,40912 - def __unicode__(1130,41023 -class AttributeDateTimeField(1133,41077 - def __unicode__(1137,41205 -class AttributeTimeField(1140,41263 - def __unicode__(1144,41374 -class AttributeEmailField(1147,41428 - def __unicode__(1151,41540 -class AttributeFileField(1154,41594 - def __unicode__(1158,41709 -class AttributeFilePathField(1161,41763 - def __unicode__(1165,41874 -class AttributeImageField(1168,41928 - def __unicode__(1172,42046 -class AttributeURLField(1175,42100 - def __unicode__(1179,42204 -class AttributeIPAddressField(1182,42258 - def __unicode__(1186,42381 -class Processtype(1190,42436 - def __unicode__(1204,43103 - class Meta:Meta1207,43157 -class Systemtype(1216,43393 - class to 1219,43434 - def __unicode__(1235,44526 - class Meta:Meta1238,44580 -class AttributeSpecification(1245,44816 - def composed_subject(1257,45294 - def __unicode__(1267,45571 - class Meta:Meta1271,45637 -class RelationSpecification(1277,45833 - def composed_subject(1286,46127 - def __unicode__(1295,46424 - class Meta:Meta1299,46490 -class NodeSpecification(1305,46685 - def composed_subject(1314,47206 - def __unicode__(1326,47675 - class Meta:Meta1330,47741 -class Union(1336,47932 - def __unicode__(1342,48114 -class Complement(1345,48168 - def __unicode__(1351,48361 -class Intersection(1354,48415 - def __unicode__(1360,48617 - -xmlrpc/metaweblog.py,469 -def authenticate(30,941 -def blog_structure(46,1583 -def user_structure(54,1823 -def author_structure(66,2217 -def metatype_structure(74,2431 -def post_structure(90,3077 -def get_users_blogs(119,4431 -def get_user_info(128,4744 -def get_authors(137,5064 -def delete_post(147,5453 -def get_post(157,5850 -def get_recent_posts(167,6231 -def get_metatypes(177,6662 -def new_metatype(187,7057 -def new_post(204,7793 -def edit_post(248,9782 -def new_media_object(291,11649 - -xmlrpc/pingback.py,113 -def generate_pingback_content(28,829 -def pingback_ping(54,1551 -def pingback_extensions_get_pingbacks(114,3736 - -comparison.py,268 -def pearson_score(9,160 -class ClusteredModel(26,685 - def __init__(30,789 - def dataset(34,901 -class VectorBuilder(44,1227 - def __init__(47,1309 - def build_dataset(54,1519 - def generate_key(82,2515 - def flush(86,2649 - def __call__(91,2780 - -xmlrpc/__init__.py,0 - -plugins/migrations/__init__.py,0 - -plugins/__init__.py,0 - -plugins/settings.py,0 - -etags,0 - -files,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/h4.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/list-numeric.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/code.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/list-bullet.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/h5.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/picture.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/h3.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/link.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/preview.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/h1.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/italic.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/images/bold.png,0 - -static/gstudio/js/markitup/sets/restructuredtext/style.css,0 - -static/gstudio/js/markitup/sets/markdown/images/h4.png,0 - -static/gstudio/js/markitup/sets/markdown/images/list-numeric.png,0 - -static/gstudio/js/markitup/sets/markdown/images/code.png,0 - -static/gstudio/js/markitup/sets/markdown/images/list-bullet.png,0 - -static/gstudio/js/markitup/sets/markdown/images/h5.png,0 - -static/gstudio/js/markitup/sets/markdown/images/picture.png,0 - -static/gstudio/js/markitup/sets/markdown/images/h3.png,0 - -static/gstudio/js/markitup/sets/markdown/images/link.png,0 - -static/gstudio/js/markitup/sets/markdown/images/preview.png,0 - -static/gstudio/js/markitup/sets/markdown/images/h1.png,0 - -static/gstudio/js/markitup/sets/markdown/images/italic.png,0 - -static/gstudio/js/markitup/sets/markdown/images/h6.png,0 - -static/gstudio/js/markitup/sets/markdown/images/bold.png,0 - -static/gstudio/js/markitup/sets/markdown/style.css,0 - -static/gstudio/js/markitup/sets/html/images/h4.png,0 - -static/gstudio/js/markitup/sets/html/images/list-numeric.png,0 - -static/gstudio/js/markitup/sets/html/images/clean.png,0 - -static/gstudio/js/markitup/sets/html/images/list-item.png,0 - -static/gstudio/js/markitup/sets/html/images/list-bullet.png,0 - -static/gstudio/js/markitup/sets/html/images/h5.png,0 - -static/gstudio/js/markitup/sets/html/images/picture.png,0 - -static/gstudio/js/markitup/sets/html/images/h3.png,0 - -static/gstudio/js/markitup/sets/html/images/link.png,0 - -static/gstudio/js/markitup/sets/html/images/preview.png,0 - -static/gstudio/js/markitup/sets/html/images/h1.png,0 - -static/gstudio/js/markitup/sets/html/images/italic.png,0 - -static/gstudio/js/markitup/sets/html/images/stroke.png,0 - -static/gstudio/js/markitup/sets/html/images/paragraph.png,0 - -static/gstudio/js/markitup/sets/html/images/h6.png,0 - -static/gstudio/js/markitup/sets/html/images/bold.png,0 - -static/gstudio/js/markitup/sets/html/style.css,0 - -static/gstudio/js/markitup/sets/textile/images/h4.png,0 - -static/gstudio/js/markitup/sets/textile/images/list-numeric.png,0 - -static/gstudio/js/markitup/sets/textile/images/code.png,0 - -static/gstudio/js/markitup/sets/textile/images/list-bullet.png,0 - -static/gstudio/js/markitup/sets/textile/images/h5.png,0 - -static/gstudio/js/markitup/sets/textile/images/picture.png,0 - -static/gstudio/js/markitup/sets/textile/images/h3.png,0 - -static/gstudio/js/markitup/sets/textile/images/link.png,0 - -static/gstudio/js/markitup/sets/textile/images/preview.png,0 - -static/gstudio/js/markitup/sets/textile/images/h1.png,0 - -static/gstudio/js/markitup/sets/textile/images/italic.png,0 - -static/gstudio/js/markitup/sets/textile/images/stroke.png,0 - -static/gstudio/js/markitup/sets/textile/images/paragraph.png,0 - -static/gstudio/js/markitup/sets/textile/images/h6.png,0 - -static/gstudio/js/markitup/sets/textile/images/bold.png,0 - -static/gstudio/js/markitup/sets/textile/style.css,0 - -static/gstudio/js/markitup/skins/django/images/submenu.png,0 - -static/gstudio/js/markitup/skins/django/images/handle.png,0 - -static/gstudio/js/markitup/templates/preview.css,0 - -static/gstudio/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif,0 - -static/gstudio/js/wymeditor/plugins/tidy/wand.png,0 - -static/gstudio/js/wymeditor/plugins/tidy/tidy.php,0 - -static/gstudio/js/wymeditor/skins/minimal/images/bg.wymeditor.png,0 - -static/gstudio/js/wymeditor/skins/minimal/images/icons.silver.gif,0 - -static/gstudio/js/wymeditor/skins/minimal/images/bg.header.gif,0 - -static/gstudio/js/wymeditor/skins/silver/images/bg.wymeditor.png,0 - -static/gstudio/js/wymeditor/skins/silver/images/icons.silver.gif,0 - -static/gstudio/js/wymeditor/skins/silver/images/bg.header.gif,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-h5.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-h3.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-pre.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-h6.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-blockquote.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-h1.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-h4.png,0 - -static/gstudio/js/wymeditor/iframe/default/lbl-h2.png,0 - -static/gstudio/css/slider.css,0 - -static/gstudio/css/jquery.autocomplete.css,0 - -static/gstudio/css/wymeditor_styles.css,0 - -static/gstudio/css/src/slider.sass,0 - -static/gstudio/css/src/_gbobject.sass,0 - -static/gstudio/css/src/ie.sass,0 - -static/gstudio/css/src/_paginator.sass,0 - -static/gstudio/css/src/_calendar.sass,0 - -static/gstudio/css/src/_gstudio.sass,0 - -static/gstudio/css/src/_tag-cloud.sass,0 - -static/gstudio/img/background.gif,0 - -static/gstudio/img/tags.png,0 - -static/gstudio/img/rss.png,0 - -static/gstudio/img/bullet.png,0 - -static/gstudio/img/wlw/objectapp.png,0 - -static/gstudio/img/favicon.ico,0 - -static/gstudio/img/grid.png,0 - -static/gstudio/img/preview.png,0 - -static/gstudio/img/comments.png,0 - -static/gstudio/img/trans.png,0 - -static/gstudio/img/shorturl.png,0 - -static/gstudio/img/manage.png,0 - -static/gstudio/img/help.png,0 - -spam_checker/backends/__init__.py,0 - -templates/registration/password_reset_email.html,0 - -templates/registration/activation_email.txt,0 - -templates/registration/password_reset_confirm.html,0 - -templates/registration/registration_complete.html,0 - -templates/registration/login.html,0 - -templates/registration/password_change_done.html,0 - -templates/registration/password_reset_form.html,0 - -templates/registration/password_reset_done.html,0 - -templates/registration/password_change_form.html,0 - -templates/registration/password_reset_complete.html,0 - -templates/registration/activation_email_subject.txt,0 - -templates/registration/activate.html,0 - -templates/registration/logout.html,0 - -templates/registration/registration_form.html,0 - -templates/feeds/comment_title.html,0 - -templates/feeds/trackback_description.html,0 - -templates/feeds/comment_description.html,0 - -templates/feeds/pingback_description.html,0 - -templates/feeds/discussion_description.html,0 - -templates/feeds/trackback_title.html,0 - -templates/feeds/nodetype_title.html,0 - -templates/feeds/nodetype_description.html,0 - -templates/feeds/pingback_title.html,0 - -templates/feeds/discussion_title.html,0 - -templates/index.html,0 - -templates/admin/gstudio/widgets/draft_nodetypes.html,0 - -templates/admin/gstudio/widgets/_content_stats.html,0 - -templates/admin/gstudio/widgets/recent_comments.html,0 - -templates/admin/gstudio/widgets/_recent_linkbacks.html,0 - -templates/admin/gstudio/widgets/recent_linkbacks.html,0 - -templates/admin/gstudio/widgets/_recent_comments.html,0 - -templates/admin/gstudio/widgets/_draft_nodetypes.html,0 - -templates/admin/gstudio/widgets/content_stats.html,0 - -templates/comments/comment_reply_email.txt,0 - -templates/comments/comment_notification_email.txt,0 - -templates/comments/gstudio/nodetype/form.html,0 - -templates/comments/comment_authors_email.txt,0 - -templates/gstudio/_nodetype_neighbourhood.html,0 - -templates/gstudio/author/nodetype_list.html,0 - -templates/gstudio/tag/nodetype_list.html,0 - -templates/gstudio/cms/random_nodetypes.html,0 - -templates/gstudio/cms/nodetype_list.html,0 - -templates/gstudio/cms/nodetype_detail.html,0 - -templates/gstudio/metatype/nodetype_list.html,0 - -templates/gstudio/_subtype_detail.html,0 - -templates/gstudio/tags/featured_nodetypes.html,0 - -templates/gstudio/tags/breadcrumbs.html,0 - -templates/gstudio/tags/similar_nodetypes.html,0 - -templates/gstudio/tags/random_nodetypes.html,0 - -templates/gstudio/tags/tag_cloud.html,0 - -templates/gstudio/tags/recent_comments.html,0 - -templates/gstudio/tags/archives_nodetypes_tree.html,0 - -templates/gstudio/tags/recent_nodetypes.html,0 - -templates/gstudio/tags/archives_nodetypes.html,0 - -templates/gstudio/tags/popular_nodetypes.html,0 - -templates/gstudio/tags/recent_linkbacks.html,0 - -templates/gstudio/tags/calendar.html,0 - -templates/gstudio/tags/dummy.html,0 - -templates/gstudio/tags/archives_nodetypes_link.html,0 - -templates/gstudio/tags/pagination.html,0 - -templates/gstudio/tags/authors.html,0 - -templates/gstudio/tags/nodetypes.html,0 - -templates/gstudio/tags/metatypes.html,0 - -templates/gstudio/nodetype_archive.html,0 - -migrations/0001_initial.pyc,0 - -migrations/__init__.pyc,0 - -migrations/__init__.py,0 - -locale/de/LC_MESSAGES/django.po,0 - -locale/pt_BR/LC_MESSAGES/django.po,0 - -locale/ml/LC_MESSAGES/django.po,0 - -locale/zh_CN/LC_MESSAGES/django.po,0 - -locale/ru/LC_MESSAGES/django.po,0 - -locale/es/LC_MESSAGES/django.po,0 - -locale/hu/LC_MESSAGES/django.po,0 - -locale/it/LC_MESSAGES/django.po,0 - -locale/te/LC_MESSAGES/django.po,0 - -locale/fr/LC_MESSAGES/django.po,0 - -locale/mr/LC_MESSAGES/django.po,0 - -locale/bl/LC_MESSAGES/django.po,0 - -locale/pu/LC_MESSAGES/django.po,0 - -locale/nl/LC_MESSAGES/django.po,0 - -locale/hi/LC_MESSAGES/django.po,0 - -locale/pl/LC_MESSAGES/django.po,0 - -templatetags/__init__.py,0 - -url_shortener/backends/__init__.py,0 - -admin/__init__.py,0 - -views/__init__.py,0 - -__init__.pyc,0 - -__init__.py,0 - -tests/templates/gstudio/nodetype_search.html,0 - -tests/templates/gstudio/nodetype_list.html,0 - -tests/templates/gstudio/nodetype_detail.html,0 - -tests/urls.py,0 - -urls/capabilities.py,0 - -urls/discussions.py,0 - -urls/sitemap.py,0 - -urls/tags.py,0 - -urls/nodetypes.py,0 - -urls/search.py,0 - -urls/trackback.py,0 - -urls/__init__.py,0 - -urls/authors.py,0 - -urls/metatypes.py,0 - -urls/quick_nodetype.py,0 - -urls/feeds.py,0 - -management/commands/__init__.py,0 - -management/__init__.py,0 - -settings.py,0 - -testsettings.py,0 diff --git a/gstudio/__init__.pyc b/gstudio/__init__.pyc Binary files differdeleted file mode 100644 index 9f1566a8..00000000 --- a/gstudio/__init__.pyc +++ /dev/null diff --git a/gstudio/admin/__init__.py b/gstudio/admin/__init__.py index 030e0568..159fcf29 100644 --- a/gstudio/admin/__init__.py +++ b/gstudio/admin/__init__.py @@ -36,6 +36,8 @@ from gstudio.models import AttributeFilePathField from gstudio.models import AttributeImageField from gstudio.models import AttributeURLField from gstudio.models import AttributeIPAddressField +from gstudio.models import Peer + #Admin imports @@ -79,6 +81,7 @@ from gstudio.admin.attribute_ipaddressfield import AttributeIPAddressFieldAdmin + admin.site.register(Objecttype, ObjecttypeAdmin) admin.site.register(Metatype, MetatypeAdmin) admin.site.register(Relationtype, RelationtypeAdmin) @@ -95,6 +98,8 @@ admin.site.register(Union, UnionAdmin) admin.site.register(Complement, ComplementAdmin) admin.site.register(Intersection, IntersectionAdmin) admin.site.register(Expression, ExpressionAdmin) +admin.site.register(Peer) + admin.site.register(AttributeCharField, AttributeCharFieldAdmin) admin.site.register(AttributeTextField, AttributeTextFieldAdmin) diff --git a/gstudio/admin/attribute.py b/gstudio/admin/attribute.py index 336509e8..20dcfd98 100644 --- a/gstudio/admin/attribute.py +++ b/gstudio/admin/attribute.py @@ -1,4 +1,4 @@ -"""MetatypeAdmin for Gstudio""" +"""AttributeAdmin for Gstudio""" from django.contrib import admin from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ @@ -6,15 +6,30 @@ from django.utils.html import escape from gstudio.admin.forms import AttributeAdminForm from gstudio.models import * import reversion +from django.template.defaultfilters import slugify +from gstudio.settings import GSTUDIO_VERSIONING + +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin + +class AttributeAdmin(parent_class): + fieldsets=((_('Attribute'),{'fields': ('attributetype','attributetype_scope','subject','subject_scope','svalue','value_scope')}), + +) + + -class AttributeAdmin(reversion.VersionAdmin): class Media: - js = ("gstudio/js/gstudiojs.js",) + js = ("gstudio/js/gstudio.js",) def save_model(self, request, attribute, form, change): - attribute.title = attribute.composed_attribution + attribute.title = attribute.composed_sentence + attribute.slug = slugify(attribute.title) attribute.save() + diff --git a/gstudio/admin/attribute_bigintegerfield.py b/gstudio/admin/attribute_bigintegerfield.py index 53085fb1..277623f8 100644 --- a/gstudio/admin/attribute_bigintegerfield.py +++ b/gstudio/admin/attribute_bigintegerfield.py @@ -1,9 +1,13 @@ from django.contrib import admin from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ +from gstudio.settings import GSTUDIO_VERSIONING from gstudio.admin.forms import AttributeBigIntegerFieldAdminForm import reversion - -class AttributeBigIntegerFieldAdmin(reversion.VersionAdmin): +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin +class AttributeBigIntegerFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_booleanfield.py b/gstudio/admin/attribute_booleanfield.py index e6ce41fb..17c3efe7 100644 --- a/gstudio/admin/attribute_booleanfield.py +++ b/gstudio/admin/attribute_booleanfield.py @@ -3,7 +3,11 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeBooleanFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion - -class AttributeBooleanFieldAdmin(reversion.VersionAdmin): +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin +class AttributeBooleanFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_charfield.py b/gstudio/admin/attribute_charfield.py index 138d89dd..6f41aa4e 100644 --- a/gstudio/admin/attribute_charfield.py +++ b/gstudio/admin/attribute_charfield.py @@ -1,10 +1,14 @@ from django.contrib import admin from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ - +from gstudio.settings import GSTUDIO_VERSIONING from gstudio.admin.forms import AttributeCharFieldAdminForm import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeCharFieldAdmin(reversion.VersionAdmin): +class AttributeCharFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_commaseparatedintegerfield.py b/gstudio/admin/attribute_commaseparatedintegerfield.py index 4202f618..c3701d94 100644 --- a/gstudio/admin/attribute_commaseparatedintegerfield.py +++ b/gstudio/admin/attribute_commaseparatedintegerfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeCommaSeparatedIntegerFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeCommaSeparatedIntegerFieldAdmin(reversion.VersionAdmin): +class AttributeCommaSeparatedIntegerFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_datefield.py b/gstudio/admin/attribute_datefield.py index 96195471..b62d2ca7 100644 --- a/gstudio/admin/attribute_datefield.py +++ b/gstudio/admin/attribute_datefield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeDateFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeDateFieldAdmin(reversion.VersionAdmin): +class AttributeDateFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_datetimefield.py b/gstudio/admin/attribute_datetimefield.py index bdbdfa55..74bc7cae 100644 --- a/gstudio/admin/attribute_datetimefield.py +++ b/gstudio/admin/attribute_datetimefield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeDateTimeFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeDateTimeFieldAdmin(reversion.VersionAdmin): +class AttributeDateTimeFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_decimalfield.py b/gstudio/admin/attribute_decimalfield.py index 168ad067..9c9dd961 100644 --- a/gstudio/admin/attribute_decimalfield.py +++ b/gstudio/admin/attribute_decimalfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeDecimalFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeDecimalFieldAdmin(reversion.VersionAdmin): +class AttributeDecimalFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_emailfield.py b/gstudio/admin/attribute_emailfield.py index 8173f2c1..a69196a5 100644 --- a/gstudio/admin/attribute_emailfield.py +++ b/gstudio/admin/attribute_emailfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeEmailFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeEmailFieldAdmin(reversion.VersionAdmin): +class AttributeEmailFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_filefield.py b/gstudio/admin/attribute_filefield.py index a2553c63..11b90e40 100644 --- a/gstudio/admin/attribute_filefield.py +++ b/gstudio/admin/attribute_filefield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeFileFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeFileFieldAdmin(reversion.VersionAdmin): +class AttributeFileFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_filepathfield.py b/gstudio/admin/attribute_filepathfield.py index 76d483d8..c65346d2 100644 --- a/gstudio/admin/attribute_filepathfield.py +++ b/gstudio/admin/attribute_filepathfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeFilePathFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeFilePathFieldAdmin(reversion.VersionAdmin): +class AttributeFilePathFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_floatfield.py b/gstudio/admin/attribute_floatfield.py index 0f97b7cb..1563f92d 100644 --- a/gstudio/admin/attribute_floatfield.py +++ b/gstudio/admin/attribute_floatfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeFloatFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeFloatFieldAdmin(reversion.VersionAdmin): +class AttributeFloatFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_imagefield.py b/gstudio/admin/attribute_imagefield.py index 80515a6c..c203e83a 100644 --- a/gstudio/admin/attribute_imagefield.py +++ b/gstudio/admin/attribute_imagefield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeImageFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeImageFieldAdmin(reversion.VersionAdmin): +class AttributeImageFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_integerfield.py b/gstudio/admin/attribute_integerfield.py index a170c959..b98251f0 100644 --- a/gstudio/admin/attribute_integerfield.py +++ b/gstudio/admin/attribute_integerfield.py @@ -3,7 +3,13 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeIntegerFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeIntegerFieldAdmin(reversion.VersionAdmin): + +class AttributeIntegerFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_ipaddressfield.py b/gstudio/admin/attribute_ipaddressfield.py index 1fa9a1b8..05570fc2 100644 --- a/gstudio/admin/attribute_ipaddressfield.py +++ b/gstudio/admin/attribute_ipaddressfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeIPAddressFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeIPAddressFieldAdmin(reversion.VersionAdmin): +class AttributeIPAddressFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_nullbooleanfield.py b/gstudio/admin/attribute_nullbooleanfield.py index fba5208a..6a4d7f1c 100644 --- a/gstudio/admin/attribute_nullbooleanfield.py +++ b/gstudio/admin/attribute_nullbooleanfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeNullBooleanFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeNullBooleanFieldAdmin(reversion.VersionAdmin): +class AttributeNullBooleanFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_positiveintegerfield.py b/gstudio/admin/attribute_positiveintegerfield.py index 1404449c..54fd939c 100644 --- a/gstudio/admin/attribute_positiveintegerfield.py +++ b/gstudio/admin/attribute_positiveintegerfield.py @@ -3,7 +3,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributePositiveIntegerFieldAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributePositiveIntegerFieldAdmin(reversion.VersionAdmin): +class AttributePositiveIntegerFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_textfield.py b/gstudio/admin/attribute_textfield.py index 7786af19..5ba20f32 100644 --- a/gstudio/admin/attribute_textfield.py +++ b/gstudio/admin/attribute_textfield.py @@ -4,6 +4,11 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeTextFieldAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeTextFieldAdmin(reversion.VersionAdmin): +class AttributeTextFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_timefield.py b/gstudio/admin/attribute_timefield.py index 929b028e..c719082c 100644 --- a/gstudio/admin/attribute_timefield.py +++ b/gstudio/admin/attribute_timefield.py @@ -4,6 +4,11 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeTimeFieldAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeTimeFieldAdmin(reversion.VersionAdmin): +class AttributeTimeFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attribute_urlfield.py b/gstudio/admin/attribute_urlfield.py index 952beec6..75f9f80a 100644 --- a/gstudio/admin/attribute_urlfield.py +++ b/gstudio/admin/attribute_urlfield.py @@ -4,6 +4,11 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeURLFieldAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeURLFieldAdmin(reversion.VersionAdmin): +class AttributeURLFieldAdmin(parent_class): pass diff --git a/gstudio/admin/attributespecification.py b/gstudio/admin/attributespecification.py index 3e7f6e12..781343b4 100644 --- a/gstudio/admin/attributespecification.py +++ b/gstudio/admin/attributespecification.py @@ -4,7 +4,12 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import AttributeSpecificationAdminForm +from gstudio.settings import GSTUDIO_VERSIONING import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class AttributeSpecificationAdmin(reversion.VersionAdmin): +class AttributeSpecificationAdmin(parent_class): pass diff --git a/gstudio/admin/attributetype.py b/gstudio/admin/attributetype.py index c1f03d9f..c44db82b 100644 --- a/gstudio/admin/attributetype.py +++ b/gstudio/admin/attributetype.py @@ -20,11 +20,15 @@ from gstudio.managers import HIDDEN from gstudio.managers import PUBLISHED from gstudio.ping import DirectoryPinger from gstudio.admin.forms import AttributetypeAdminForm +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin - -class AttributetypeAdmin(reversion.VersionAdmin): +class AttributetypeAdmin(parent_class): """Admin for Attributetype model""" form = AttributetypeAdminForm date_hierarchy = 'creation_date' diff --git a/gstudio/admin/complement.py b/gstudio/admin/complement.py index b35ad6c0..305bb46e 100644 --- a/gstudio/admin/complement.py +++ b/gstudio/admin/complement.py @@ -4,6 +4,11 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import ComplementAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class ComplementAdmin(reversion.VersionAdmin): +class ComplementAdmin(parent_class): pass diff --git a/gstudio/admin/expression.py b/gstudio/admin/expression.py index a6a8fd2c..cebd6969 100644 --- a/gstudio/admin/expression.py +++ b/gstudio/admin/expression.py @@ -5,8 +5,13 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import ExpressionAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class ExpressionAdmin(reversion.VersionAdmin): +class ExpressionAdmin(parent_class): def save_model(self, request, expression, form, change): expression.title = expression.composed_sentence expression.save() diff --git a/gstudio/admin/forms.py b/gstudio/admin/forms.py index 37b578c8..a2415c10 100644 --- a/gstudio/admin/forms.py +++ b/gstudio/admin/forms.py @@ -154,7 +154,7 @@ class RelationtypeAdminForm(forms.ModelForm): super(RelationtypeAdminForm, self).__init__(*args, **kwargs) prior = ManyToManyRel(Nodetype, 'id') post = ManyToManyRel(Nodetype, 'id') - + self.fields['priornodes'].widget = RelatedFieldWidgetWrapper( @@ -207,18 +207,6 @@ class RelationAdminForm(forms.ModelForm): AppNodeList = AppNode.objects.all() return AppNodeList - - - - - - - - - - - - class Meta: @@ -289,7 +277,7 @@ class AttributetypeAdminForm(forms.ModelForm): super(AttributetypeAdminForm, self).__init__(*args, **kwargs) prior = ManyToManyRel(Nodetype, 'id') post = ManyToManyRel(Nodetype, 'id') - + self.fields['sites'].initial = [Site.objects.get_current()] self.fields['priornodes'].widget = RelatedFieldWidgetWrapper( self.fields['priornodes'].widget, prior, self.admin_site) diff --git a/gstudio/admin/intersection.py b/gstudio/admin/intersection.py index 6e9dd3e4..49f2c5d0 100644 --- a/gstudio/admin/intersection.py +++ b/gstudio/admin/intersection.py @@ -4,6 +4,11 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import IntersectionAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class IntersectionAdmin(reversion.VersionAdmin): +class IntersectionAdmin(parent_class): pass diff --git a/gstudio/admin/metatype.py b/gstudio/admin/metatype.py index bb24fc75..f110bac1 100644 --- a/gstudio/admin/metatype.py +++ b/gstudio/admin/metatype.py @@ -5,8 +5,13 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import MetatypeAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class MetatypeAdmin(reversion.VersionAdmin): +class MetatypeAdmin(parent_class): """Admin for Metatype model""" form = MetatypeAdminForm fields = ('title','altnames', 'parent', 'description', 'slug') diff --git a/gstudio/admin/nodespecification.py b/gstudio/admin/nodespecification.py index aaf784e5..f55bd05b 100644 --- a/gstudio/admin/nodespecification.py +++ b/gstudio/admin/nodespecification.py @@ -4,6 +4,11 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import NodeSpecificationAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class NodeSpecificationAdmin(reversion.VersionAdmin): +class NodeSpecificationAdmin(parent_class): pass diff --git a/gstudio/admin/objecttype.py b/gstudio/admin/objecttype.py index c98a0d78..5072fe9a 100644 --- a/gstudio/admin/objecttype.py +++ b/gstudio/admin/objecttype.py @@ -14,16 +14,22 @@ from django.core.urlresolvers import reverse, NoReverseMatch from tagging.models import Tag import reversion + from gstudio import settings from gstudio.managers import HIDDEN from gstudio.managers import PUBLISHED from gstudio.ping import DirectoryPinger from gstudio.admin.forms import ObjecttypeAdminForm +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class ObjecttypeAdmin(reversion.VersionAdmin): +class ObjecttypeAdmin(parent_class): """Admin for Objecttype model""" form = ObjecttypeAdminForm date_hierarchy = 'creation_date' @@ -172,8 +178,10 @@ class ObjecttypeAdmin(reversion.VersionAdmin): if not form.cleaned_data.get('authors'): form.cleaned_data['authors'].append(request.user) - nodetype.last_update = datetime.now() nodetype.save() + # nodetype.nbhood = nodetype.get_nbh + # nodetype.last_update = datetime.now() + # nodetype.save() def queryset(self, request): """Make special filtering by user permissions""" diff --git a/gstudio/admin/processtype.py b/gstudio/admin/processtype.py index 72a795b1..1862de31 100644 --- a/gstudio/admin/processtype.py +++ b/gstudio/admin/processtype.py @@ -20,11 +20,14 @@ from gstudio.managers import HIDDEN from gstudio.managers import PUBLISHED from gstudio.ping import DirectoryPinger from gstudio.admin.forms import ProcesstypeAdminForm +from gstudio.settings import GSTUDIO_VERSIONING - - -class ProcesstypeAdmin(reversion.VersionAdmin): +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin +class ProcesstypeAdmin(parent_class): """Admin for Processtype model""" form = ProcesstypeAdminForm date_hierarchy = 'creation_date' diff --git a/gstudio/admin/relation.py b/gstudio/admin/relation.py index 688ad6ef..7009afb6 100644 --- a/gstudio/admin/relation.py +++ b/gstudio/admin/relation.py @@ -5,12 +5,31 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import RelationAdminForm import reversion +from django.template.defaultfilters import slugify +from gstudio.settings import GSTUDIO_VERSIONING -class RelationAdmin(reversion.VersionAdmin): - fieldsets=((_('Relation'),{'fields': ('title','last_update','creation_date','relationtype_scope','relationtype','left_subject_scope','left_subject' ,'right_subject_scope','right_subject')}), +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin + +class RelationAdmin(parent_class): + fieldsets=((_('Relation'),{'fields': ('relationtype','relationtype_scope','left_subject' ,'left_subject_scope','right_subject','right_subject_scope')}), ) + + def get_title(self, edge): + """Return the title with word count and number of comments""" + title = _('%(title)s (%(word_count)i words)') % \ + {'title': nodetype.title, 'word_count': nodetype.word_count} + comments = nodetype.comments.count() + if comments: + return _('%(title)s (%(comments)i comments)') % \ + {'title': title, 'comments': comments} + return title + get_title.short_description = _('title') def save_model(self, request, relation, form, change): relation.title = relation.composed_sentence + relation.slug = slugify(relation.title) relation.save() diff --git a/gstudio/admin/relationspecification.py b/gstudio/admin/relationspecification.py index 5da162b5..6018236d 100644 --- a/gstudio/admin/relationspecification.py +++ b/gstudio/admin/relationspecification.py @@ -4,6 +4,12 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import RelationSpecificationAdminForm import reversion +from gstudio.settings import GSTUDIO_VERSIONING -class RelationSpecificationAdmin(reversion.VersionAdmin): +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin + +class RelationSpecificationAdmin(parent_class): pass diff --git a/gstudio/admin/relationtype.py b/gstudio/admin/relationtype.py index 374f9a8c..37e1a33e 100644 --- a/gstudio/admin/relationtype.py +++ b/gstudio/admin/relationtype.py @@ -19,11 +19,15 @@ from gstudio.managers import HIDDEN from gstudio.managers import PUBLISHED from gstudio.ping import DirectoryPinger from gstudio.admin.forms import RelationtypeAdminForm +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin - -class RelationtypeAdmin(reversion.VersionAdmin): +class RelationtypeAdmin(parent_class): """Admin for Relationtype model""" form = RelationtypeAdminForm date_hierarchy = 'creation_date' diff --git a/gstudio/admin/systemtype.py b/gstudio/admin/systemtype.py index 8a128563..7041db0f 100644 --- a/gstudio/admin/systemtype.py +++ b/gstudio/admin/systemtype.py @@ -20,11 +20,15 @@ from gstudio.managers import HIDDEN from gstudio.managers import PUBLISHED from gstudio.ping import DirectoryPinger from gstudio.admin.forms import SystemtypeAdminForm +from gstudio.settings import GSTUDIO_VERSIONING +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin - -class SystemtypeAdmin(reversion.VersionAdmin): +class SystemtypeAdmin(parent_class): """Admin for Systemtype model""" form = SystemtypeAdminForm date_hierarchy = 'creation_date' diff --git a/gstudio/admin/union.py b/gstudio/admin/union.py index 08369363..d9bc092c 100644 --- a/gstudio/admin/union.py +++ b/gstudio/admin/union.py @@ -3,7 +3,13 @@ from django.core.urlresolvers import NoReverseMatch from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import UnionAdminForm +from gstudio.settings import GSTUDIO_VERSIONING + import reversion +if GSTUDIO_VERSIONING == True: + parent_class = reversion.VersionAdmin +else: + parent_class = admin.ModelAdmin -class UnionAdmin(reversion.VersionAdmin): +class UnionAdmin(parent_class): pass diff --git a/gstudio/management/commands/peers.py b/gstudio/management/commands/peers.py new file mode 100644 index 00000000..cb79991b --- /dev/null +++ b/gstudio/management/commands/peers.py @@ -0,0 +1,23 @@ +# Copyright (c) 2012 Free Software Foundation + +# 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 the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from django.core.management.base import NoArgsCommand +import sys +from gstudio.models import Peer + +class Command(NoArgsCommand): + """Custom manage.py command to show all peers""" + def handle_noargs(self, **options): + sys.stdout.write("{0}\n".format(Peer.objects.all())) diff --git a/gstudio/management/commands/register-peer.py b/gstudio/management/commands/register-peer.py new file mode 100644 index 00000000..afe2b50b --- /dev/null +++ b/gstudio/management/commands/register-peer.py @@ -0,0 +1,52 @@ +# Copyright (c) 2012 Free Software Foundation + +# 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 the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# from django.core.management.base import BaseCommand +# from optparse import make_option +# import sys +# from gstudio.models import Peer + +# class Command(BaseCommand): +# """Custom manage.py command to register a peer""" +# option_list = BaseCommand.option_list + ( +# make_option("--ip", action="store", type="string", +# dest="ip", help="Specify an IP"), +# make_option("--pkey", action="store", type="string", +# dest="pkey", help="Specify a public-key")) + +# def handle(self, *args, **options): +# try: +# ip = options["ip"] +# pkey = options["pkey"] + +# if not ip: +# sys.stderr.write("Please specify an IP\n") +# sys.exit(2) + +# if not pkey: +# sys.stderr.write("Please specify a public-key\n") +# sys.exit(2) + +# pkey = open(options["pkey"]).readline().rstrip() + +# except (IOError, TypeError): +# sys.stderr.write("Please specify a correct public-key\n") +# sys.exit(2) + +# ip = Peer(ip="{0}".format(ip)) +# ip.save() + +# pkey = Peer(pkey="{0}".format(pkey)) +# pkey.save() diff --git a/gstudio/models.py b/gstudio/models.py index d793db0a..f6c5efeb 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -65,7 +65,9 @@ + """Super models of Gstudio """ + import warnings from datetime import datetime from django.db import models @@ -93,6 +95,7 @@ from gstudio.settings import NODETYPE_TEMPLATES from gstudio.settings import NODETYPE_BASE_MODEL from gstudio.settings import MARKDOWN_EXTENSIONS from gstudio.settings import AUTO_CLOSE_COMMENTS_AFTER +from gstudio.settings import GSTUDIO_VERSIONING from gstudio.managers import nodetypes_published from gstudio.managers import NodetypePublishedManager from gstudio.managers import NodePublishedManager @@ -102,10 +105,16 @@ from gstudio.moderator import NodetypeCommentModerator from gstudio.url_shortener import get_url_shortener from gstudio.signals import ping_directories_handler from gstudio.signals import ping_external_urls_handler + import json -import reversion +if GSTUDIO_VERSIONING: + import reversion from reversion.models import Version from django.core import serializers +from reversion.models import * +from reversion.helpers import * +import ast + NODETYPE_CHOICES = ( ('ND', 'Nodes'), @@ -168,6 +177,10 @@ STATUS_CHOICES = ((DRAFT, _('draft')), (HIDDEN, _('hidden')), (PUBLISHED, _('published'))) + +counter = 1 +attr_counter = -1 + class Author(User): """Proxy Model around User""" @@ -205,53 +218,96 @@ class NID(models.Model): slug = models.SlugField(help_text=_('used for publication'), unique_for_date='creation_date', max_length=255) + nodemodel = models.CharField(_('nodemodel'),max_length=255) + + @property + def get_revisioncount(self): + """ + Returns Number of Version + """ + i=0 + ver=Version.objects.get_for_object(self) + for each in ver: + i=i+1 + return i + @property + def get_version_list(self): + """ + Returns Version list + """ + ver=Version.objects.get_for_object(self) + return ver + @property + def get_ssid(self): + """ + return snapshot ids (revision id). + returns a list. + """ + slist=[] + vlist=self.get_version_list + for each in vlist: + slist.append(each.id) + return slist + + def version_info(self,ssid): + version_object=Version.objects.get(id=ssid) + return version_object.field_dict + + + def get_version_nbh(self,ssid): + """ + Returns Version nbh + """ + ver_dict=self.version_info(ssid) + ver_nbh_list=[] + ver_nbh_dict={} + for item in self.get_nbh.keys(): + if item in ver_dict.keys(): + ver_nbh_list.append(item) + for each in ver_nbh_list: + ver_nbh_dict[each]=ver_dict[each] + return ver_nbh_dict + def get_serialized_dict(self): """ return the fields in a serialized form of the current object using the __dict__ function. """ return self.__dict__ - @property - def get_app_name(self): - if self.ref.__class__.__name__=='Gbobject' or self.ref.__class__.__name__=='Process' or self.ref.__class__.__name__=='System' : - return 'type' - @models.permalink def get_absolute_url(self): """Return nodetype's URL""" - if self.get_app_name=='type': - return ('objectapp_gbobject_detail', (), { - 'year': self.creation_date.strftime('%Y'), - 'month': self.creation_date.strftime('%m'), - 'day': self.creation_date.strftime('%d'), - 'slug': self.slug}) - else: - return ('gstudio_nodetype_detail', (), { - 'year': self.creation_date.strftime('%Y'), - 'month': self.creation_date.strftime('%m'), - 'day': self.creation_date.strftime('%d'), - 'slug': self.slug}) + + return ('gstudio_nodetype_detail', (), { + 'year': self.creation_date.strftime('%Y'), + 'month': self.creation_date.strftime('%m'), + 'day': self.creation_date.strftime('%d'), + 'slug': self.slug}) @property def ref(self): - """ - Returns the object reference the id belongs to. - """ - try: - """ - ALGO: get object id, go to version model, return for the given id. - """ - - # Retrieving only the relevant tupleset for the versioned objects - vrs = Version.objects.filter(type=0 , object_id=self.id) - # Returned value is a list, so splice it. - vrs = vrs[0] - except: - return None + from objectapp.models import * + return eval(self.nodemodel).objects.get(id=self.id) + + # """ + # Returns the object reference the id belongs to. + # """ + # try: + # """ + # ALGO: get object id, go to version model, return for the given id. + # """ + + # # Retrieving only the relevant tupleset for the versioned objects + # # vrs = Version.objects.filter(type=0 , object_id=self.id) + # # Returned value is a list, so splice it. + # vrs = vrs[0] + # except: + # return None - return vrs.object + # return vrs.object + @property def reftype(self): @@ -261,13 +317,89 @@ class NID(models.Model): try: """ ALGO: simple wrapper for the __class__.__name__ so that it can be used in templates + """ + # return self.__class__.__name__ obj = self.ref return obj.__class__.__name__ except: return None + @property + def getat(self): + + """This is will give the possible attributetypes """ + try: + pt = [] + attributetype = [] + returndict = {} + + pt.append(self.ref) + obj = self.ref + while obj.parent: + pt.append((obj.parent).ref) + obj=obj.parent + + for each in pt: + attributetype.append(each.subjecttype_of.all()) + + attributetype = [num for elem in attributetype for num in elem] + + for i in attributetype: + if str(i.applicable_nodetypes) == 'OT': + returndict.update({str(i.title):i.id}) + + return returndict.keys() + except: + return None + + @property + def getrt(self): + """pt =[] contains parenttype + reltype =[] contains relationtype + titledict = {} contains relationtype's title + inverselist = [] contains relationtype's inverse + finaldict = {} contains either title of relationtype or inverse of relationtype + listval=[] contains keys of titledict to check whether parenttype id is equals to listval's left or right subjecttypeid""" + + pt =[] + reltype =[] + titledict = {} + inverselist = [] + finaldict = {} + listval=[] + + pt.append(self.ref) + obj = self.ref + while obj.parent: + pt.append((obj.parent).ref) + obj=obj.parent + + for i in range(len(pt)): + if Relationtype.objects.filter(left_subjecttype = pt[i].id): + reltype.append(Relationtype.objects.filter(left_subjecttype = pt[i].id)) + if Relationtype.objects.filter(right_subjecttype = pt[i].id): + reltype.append(Relationtype.objects.filter(right_subjecttype = pt[i].id)) + reltype = [num for elem in reltype for num in elem] #this rqud for filtering + + for i in reltype: + titledict.update({i:i.id}) + + + for i in range(len(titledict)): + listval.append(Relationtype.objects.get(title = titledict.keys()[i])) + inverselist.append(str(titledict.keys()[i].inverse)) + + for j in range(len(pt)): + for i in range(len(listval)): + if pt[j].id == listval[i].left_subjecttype_id and str(listval[i].left_applicable_nodetypes) == 'OT' : + finaldict.update({titledict.keys()[i]:titledict.values()[i]}) + if pt[j].id == listval[i].right_subjecttype_id and str(listval[i].right_applicable_nodetypes)=='OT': + finaldict.update({inverselist[i]:titledict.values()[i]}) + + + return finaldict.keys() @property @@ -285,6 +417,61 @@ class NID(models.Model): version = Version.objects.get(id=self.id) return version.serialized_data + + + def get_Version_graph_json(self,ssid): + + + # # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"} + # slist=self.get_ssid + ver_dict=self.version_info(ssid) + # ver_dict=str(ver['nbhood']) + # ver_dict=ast.literal_eval(ver_dict) + + g_json = {} + g_json["node_metadata"]= [] + predicate_id = {} + counter = 1 + for key in ver_dict.keys(): + val = "a" + str(counter) + predicate_id[key] = val + counter = counter + 1 + #print predicate_id + + attr_counter = -1 + + this_node = {"_id":str(ver_dict['id']),"title":ver_dict['title'],"screen_name":ver_dict['title'], "url":self.get_absolute_url()} + g_json["node_metadata"].append(this_node) + + for key in predicate_id.keys(): + if ver_dict[key]: + try: + g_json[str(key)]=[] + g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) + g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 }) + if not isinstance(ver_dict[key],basestring): + for item in ver_dict[key]: + # user + g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title, "title":item.title, "url":item.get_absolute_url()}) + g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + + else: + #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"} + #this_node[str(key)]=nbh[key] key, nbh[key] + #for item in value.keys(): + g_json["node_metadata"].append({"_id":attr_counter,"screen_name":ver_dict[key]}) + g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 }) + attr_counter-=1 + + except: + pass + # print g_json + + + + return json.dumps(g_json) + + def __unicode__(self): return self.title @@ -293,7 +480,6 @@ class NID(models.Model): """NID's Meta""" - class Node(NID): """ Super class @@ -312,6 +498,8 @@ class Node(NID): sites = models.ManyToManyField(Site, verbose_name=_('sites publication'), related_name='nodetypes') + nbhood = models.TextField(help_text="The neighbourhood of the model.") + published = NodePublishedManager() def __unicode__(self): return self.title @@ -319,6 +507,18 @@ class Node(NID): class Meta: abstract=False + + def save(self, *args, **kwargs): + + # self.nbhood=self.get_nbh + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Node, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Node, self).save(*args, **kwargs) # Call the "real" save() method. + + + class Edge(NID): @@ -327,6 +527,13 @@ class Edge(NID): class Meta: abstract=False + def save(self, *args, **kwargs): + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Edge, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Edge, self).save(*args, **kwargs) # Call the "real" save() method. + class Metatype(Node): @@ -359,7 +566,7 @@ class Metatype(Node): nbh['typeof'] = self.parent # generate ids and names of children/members nbh['contains_subtypes'] = self.children.get_query_set() - nbh['contains_members'] = self.nodetypes.all() + nbh['contains_members'] = self.nodetypes_published() nbh['left_subjecttype_of'] = Relationtype.objects.filter(left_subjecttype=self.id) nbh['right_subjecttype_of'] = Relationtype.objects.filter(right_subjecttype=self.id) nbh['attributetypes'] = Attributetype.objects.filter(subjecttype=self.id) @@ -467,7 +674,7 @@ class Metatype(Node): # generate ids and names of children nbh['contains_subtypes'] = self.children.get_query_set() contains_members_list = [] - for each in self.nodetypes.all(): + for each in self.nodetypes_published(): contains_members_list.append('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title)) nbh['contains_members'] = contains_members_list nbh['left_subjecttype_of'] = Relationtype.objects.filter(left_subjecttype=self.id) @@ -482,7 +689,7 @@ class Metatype(Node): def tree_path(self): """Return metatype's tree path, by its ancestors""" if self.parent: - return '%s/%s' % (self.parent.tree_path, self.slug) + return u'%s/%s' % (self.parent.tree_path, self.slug) return self.slug def __unicode__(self): @@ -492,8 +699,8 @@ class Metatype(Node): def composed_sentence(self): "composes the relation as a sentence in triple format." if self.parent: - return '%s is a kind of %s' % (self.title, self.parent.tree_path) - return '%s is a root node' % (self.slug) + return u'%s is a kind of %s' % (self.title, self.parent.tree_path) + return u'%s is a root node' % (self.slug) @models.permalink @@ -508,6 +715,18 @@ class Metatype(Node): verbose_name = _('metatype') verbose_name_plural = _('metatypes') + # Save for metatype + + def save(self, *args, **kwargs): + super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_nbh + + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. + + + @@ -604,8 +823,8 @@ class Nodetype(Node): reltypes['possible_rightroles'] = right_subset return reltypes - - + + @property def get_possible_attributetypes(self): """ @@ -665,32 +884,6 @@ class Nodetype(Node): return rels - - @property - def get_possible_attributes(self): - """ - Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the RT's linked to each ancestor - """ - #Step 1. - ancestor_list = [] - this_parent = self.parent - - # recursive thru parent field and append - while this_parent: - ancestor_list.append(this_parent) - this_parent = this_parent.parent - - #Step 2. - attrs = [] - - for each in ancestor_list: - # retrieve all the AT's from each ancestor - attrs.extend(Attribute.objects.filter(subject=each.id)) - - return attrs - def get_graph_json(self): @@ -698,21 +891,24 @@ class Nodetype(Node): g_json = {} g_json["node_metadata"]= [] g_json["relations"]=[] + g_json["relset"]=[] - + global counter + global attr_counter nbh = self.get_nbh predicate_id = {} - counter = 1 + for key in nbh.keys(): - val = "a" + str(counter) + val = str(counter) + "a" predicate_id[key] = val counter = counter + 1 #print predicate_id - attr_counter = -1 + - this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url()} - g_json["node_metadata"].append(this_node) + this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"expanded":"true"} + g_json["node_metadata"].append(this_node) + g_json["relset"].append(self.id) for key in predicate_id.keys(): if nbh[key]: @@ -725,42 +921,88 @@ class Nodetype(Node): #g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 }) g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] }) + if not isinstance(nbh[key],basestring): for item in nbh[key]: - #create nodes - g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url()}) + if item.reftype!="Relation": + # create nodes + + g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"expanded":"false"}) + g_json["relset"].append(item.id) + - # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) - #create links - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id }) + # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + #create links + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id }) + + else: + + if item.left_subject.id==self.id: + item1=item.right_subject + elif item.right_subject.id==self.id: + item1=item.left_subject + + g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"expanded":"false"}) + + # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + #create links + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item1.id }) else: #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"} #this_node[str(key)]=nbh[key] key, nbh[key] #for item in value.keys(): - g_json["node_metadata"].append({"_id":attr_counter,"screen_name":nbh[key]}) + g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":nbh[key]}) #g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 }) - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":attr_counter }) + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")}) attr_counter-=1 except: pass #print g_json + return json.dumps(g_json) + @property + def get_possible_attributes(self): + """ + Gets the relations possible for this metatype + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the RT's linked to each ancestor + """ + #Step 1. + ancestor_list = [] + this_parent = self.parent + + # recursive thru parent field and append + while this_parent: + ancestor_list.append(this_parent) + this_parent = this_parent.parent + + #Step 2. + attrs = [] + + for each in ancestor_list: + # retrieve all the AT's from each ancestor + attrs.extend(Attribute.objects.filter(subject=each.id)) + + return attrs + + + @property def tree_path(self): """Return nodetype's tree path, by its ancestors""" if self.parent: - return '%s/%s' % (self.parent.tree_path, self.slug) + return u'%s/%s' % (self.parent.tree_path, self.slug) return self.slug @property def tree_path_sentence(self): """ Return the parent of the nodetype in a triple form """ if self.parent: - return '%s is a kind of %s' % (self.title, self.parent.tree_path) - return '%s is a root node' % (self.title) + return u'%s is a kind of %s' % (self.title, self.parent.tree_path) + return u'%s is a root node' % (self.title) @property @@ -898,8 +1140,12 @@ class Nodetype(Node): nbh['count_title'] = len(nbh['title']) nbh['altnames'] = self.altnames nbh['count_altnames'] = len(nbh['altnames']) - nbh['plural'] = self.plural - nbh['count_plural'] = len(nbh['plural']) + nbh['plural'] = self.plural + try: + nbh['count_plural'] = len(nbh['plural']) + except: + pass + #get all MTs member_of_dict = {} for each in self.metatypes.all(): @@ -1088,22 +1334,22 @@ class Nodetype(Node): if self.metatypes.count: for each in self.metatypes.all(): - return '%s is a member of metatype %s' % (self.title, each) - return '%s is not a fully defined name, consider making it a member of a suitable metatype' % (self.title) + return u'%s is a member of metatype %s' % (self.title, each) + return u'%s is not a fully defined name, consider making it a member of a suitable metatype' % (self.title) @property def subtypeof_sentence(self): "composes the relation as a sentence in triple format." if self.parent: - return '%s is a subtype of %s' % (self.title, self.parent.tree_path) - return '%s is a root node' % (self.title) + return u'%s is a subtype of %s' % (self.title, self.parent.tree_path) + return u'%s is a root node' % (self.title) composed_sentence = property(subtypeof_sentence) def subtypeof(self): "retuns the parent nodetype." if self.parent: - return '%s' % (self.parent.tree_path) + return u'%s' % (self.parent.tree_path) return None @models.permalink @@ -1114,6 +1360,9 @@ class Nodetype(Node): 'month': self.creation_date.strftime('%m'), 'day': self.creation_date.strftime('%d'), 'slug': self.slug}) + def get_version_url(self): + """Return nodetype's URL""" + return "/nodetypes/display/viewhistory/" def get_serialized_data(self): """ @@ -1131,6 +1380,14 @@ class Nodetype(Node): verbose_name_plural = _('node types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + + # Save for nodetype + def save(self, *args, **kwargs): + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Nodetype, self).save(*args, **kwargs) # Call the "real" save() method. + super(Nodetype, self).save(*args, **kwargs) # Call the "real" save() method. + class Objecttype(Nodetype): @@ -1140,11 +1397,7 @@ class Objecttype(Nodetype): def __unicode__(self): return self.title - - #def get_graph_json(self): - - - + @property def get_attributetypes(self): @@ -1243,7 +1496,7 @@ class Objecttype(Nodetype): nbh['posterior_nodes'] = self.posterior_nodes.all() - nbh['authors'] = self.authors.all() + #nbh['authors'] = self.authors.all() return nbh @@ -1310,6 +1563,18 @@ class Objecttype(Nodetype): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # Save for Objecttype + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_nbh + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. + + + @@ -1319,10 +1584,10 @@ class Relationtype(Nodetype): ''' inverse = models.CharField(_('inverse name'), help_text=_('when subjecttypes are interchanged, what should be the name of the relation type? This is mandatory field. If the relation is symmetric, same name will do.'), max_length=255,db_index=True ) left_subjecttype = models.ForeignKey(NID,related_name="left_subjecttype_of", verbose_name='left role') - left_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Node types for left role') + left_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Applicable node types for left role') left_cardinality = models.IntegerField(null=True, blank=True, verbose_name='cardinality for the left role') right_subjecttype = models.ForeignKey(NID,related_name="right_subjecttype_of", verbose_name='right role') - right_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Node types for right role') + right_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Applicable node types for right role') right_cardinality = models.IntegerField(null=True, blank=True, verbose_name='cardinality for the right role') is_symmetrical = models.NullBooleanField(verbose_name='Is symmetrical?') is_reflexive = models.NullBooleanField(verbose_name='Is reflexive?') @@ -1342,6 +1607,37 @@ class Relationtype(Nodetype): def __unicode__(self): return self.title + @property + def get_nbh(self): + """ + Returns the neighbourhood of the nodetype + """ + nbh = {} + nbh['title'] = self.title + nbh['altnames'] = self.altnames + nbh['plural'] = self.plural + + nbh['contains_subtypes'] = Nodetype.objects.filter(parent=self.id) + # get all the objects inheriting this OT + nbh['contains_members'] = self.member_objects.all() + nbh['prior_nodes'] = self.prior_nodes.all() + nbh['posterior_nodes'] = self.posterior_nodes.all() + nbh['inverse']=self.inverse + nbh['left_subjecttype']=self.left_subjecttype + nbh['left_applicable_nodetypes']=self.left_applicable_nodetypes + nbh['left_cardinality']=self.left_cardinality + nbh['right_subjecttype']=self.right_subjecttype + nbh['right_applicable_nodetypes']=self.right_applicable_nodetypes + nbh['right_cardinality']=self.right_cardinality + nbh['is_symmetrical']=self.is_symmetrical + nbh['is_reflexive']=self.is_reflexive + nbh['is_transitive']=self.is_transitive + + + + return nbh + + class Meta: """ relation type's meta class @@ -1351,6 +1647,18 @@ class Relationtype(Nodetype): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # Save for Relationtype + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + self.nodemodel = self.__class__.__name__ + + + super(Relationtype, self).save(*args, **kwargs) # Call the "real" save() method. + + class Attributetype(Nodetype): ''' @@ -1385,6 +1693,13 @@ class Attributetype(Nodetype): def __unicode__(self): return self.title + + @property + def getdataType(self): + at = 'attribute'+str(self.get_dataType_display()) + at = at.lower() + return at + class Meta: """ attribute type's meta class @@ -1394,6 +1709,17 @@ class Attributetype(Nodetype): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # Save for Attributetype + + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + +# self.nbhood=self.get_nbh + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. class Relation(Edge): @@ -1454,12 +1780,12 @@ class Relation(Edge): @property def composed_sentence(self): "composes the relation as a sentence in a triple format." - return '%s %s %s %s %s %s' % (self.left_subject_scope, self.left_subject, self.relationtype_scope, self.relationtype, self.right_subject_scope, self.right_subject) + return u'%s %s %s %s %s %s' % (self.left_subject_scope, self.left_subject, self.relationtype_scope, self.relationtype, self.right_subject_scope, self.right_subject) @property def inversed_sentence(self): "composes the inverse relation as a sentence in a triple format." - return '%s %s %s %s %s' % (self.objectScope, self.right_subject, self.relationtype.inverse, self.left_subject_scope, self.left_subject ) + return u'%s %s %s %s %s' % (self.objectScope, self.right_subject, self.relationtype.inverse, self.left_subject_scope, self.left_subject ) @property def key_value(self): @@ -1476,14 +1802,25 @@ class Relation(Edge): if self.relationtype: # for relation in self.relationtype(): - return '%s %s %s' % (self.left_subject,self.relationtype,self.right_subject ) + return u'%s %s %s' % (self.left_subject,self.relationtype,self.right_subject ) @property def partial_composition(self): ''' function that composes the right_subject and relation name, as in "x as a friend", "y as a sibling" ''' - return '%s as a %s' % (self.right_subject, self.relationtype) + return u'%s as a %s' % (self.right_subject, self.relationtype) + + + # Save for Relation + + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Relation, self).save(*args, **kwargs) # Call the "real" save() method. + super(Relation, self).save(*args, **kwargs) # Call the "real" save() method. + class Attribute(Edge): @@ -1536,21 +1873,21 @@ class Attribute(Edge): ''' composes the attribution as a sentence in a triple format. ''' - return '%s %s has %s %s %s %s' % (self.subject_scope, self.subject, self.attributetype_scope, self.attributetype, self.value_scope, self.svalue) + return u'%s %s has %s %s %s %s' % (self.subject_scope, self.subject, self.attributetype_scope, self.attributetype, self.value_scope, self.svalue) @property def composed_attribution(self): ''' composes a name to the attribute ''' - return 'the %s of %s is %s' % (self.attributetype, self.subject, self.svalue) + return u'the %s of %s is %s' % (self.attributetype, self.subject, self.svalue) @property def partial_composition(self): ''' function that composes the value and attribute name, as in "red as color", "4 as length" ''' - return '%s as %s' % (self.svalue, self.attributetype) + return u'%s as %s' % (self.svalue, self.attributetype) def subject_filter(self,attr): @@ -1560,6 +1897,17 @@ class Attribute(Edge): for each in Objecttype.objects.all(): if attr.subjecttype.id == each.id: return each.get_members + + # Save for Attribute + + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Attribute, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Attribute, self).save(*args, **kwargs) # Call the "real" save() method. + @@ -1570,12 +1918,32 @@ class AttributeCharField(Attribute): def __unicode__(self): return self.title + + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeCharField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeCharField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeTextField(Attribute): value = models.TextField(verbose_name='text') def __unicode__(self): return self.title + + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeTextField, self).save(*args, **kwargs) # Call the "real" save() method. + super(AttributeTextField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeIntegerField(Attribute): value = models.IntegerField(max_length=100, verbose_name='Integer') @@ -1583,6 +1951,17 @@ class AttributeIntegerField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + + + class AttributeCommaSeparatedIntegerField(Attribute): value = models.CommaSeparatedIntegerField(max_length=100, verbose_name='integers separated by comma') @@ -1590,6 +1969,14 @@ class AttributeCommaSeparatedIntegerField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeCommaSeparatedIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + super(AttributeCommaSeparatedIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeBigIntegerField(Attribute): value = models.BigIntegerField(max_length=100, verbose_name='big integer') @@ -1604,12 +1991,29 @@ class AttributePositiveIntegerField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributePositiveIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + super(AttributePositiveIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeDecimalField(Attribute): value = models.DecimalField(max_digits=3, decimal_places=2, verbose_name='decimal') def __unicode__(self): return self.title + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeDecimalField, self).save(*args, **kwargs) # Call the "real" save() method. + + + super(AttributeDecimalField, self).save(*args, **kwargs) # Call the "real" save() method. class AttributeFloatField(Attribute): @@ -1618,12 +2022,30 @@ class AttributeFloatField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeFloatField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeFloatField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeBooleanField(Attribute): value = models.BooleanField(verbose_name='boolean') def __unicode__(self): return self.title + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeNullBooleanField(Attribute): @@ -1632,6 +2054,15 @@ class AttributeNullBooleanField(Attribute): def __unicode__(self): return self.title + + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeNullBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + super(AttributeNullBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeDateField(Attribute): value = models.DateField(max_length=100, verbose_name='date') @@ -1639,12 +2070,31 @@ class AttributeDateField(Attribute): def __unicode__(self): return self.title + + def save(self, *args, **kwargs): + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeDateField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeDateField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeDateTimeField(Attribute): value = models.DateTimeField(max_length=100, verbose_name='date time') def __unicode__(self): return self.title + + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeDateTimeField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeDateTimeField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeTimeField(Attribute): @@ -1653,20 +2103,49 @@ class AttributeTimeField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeTimeField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeTimeField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeEmailField(Attribute): - value = models.CharField(max_length=100,verbose_name='value') + value = models.EmailField(max_length=100,verbose_name='value') def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeEmailField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeEmailField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeFileField(Attribute): - value = models.FileField(upload_to='/media', verbose_name='file') + value = models.FileField(upload_to='media/'+UPLOAD_TO, verbose_name='file') def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeFileField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeFileField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeFilePathField(Attribute): value = models.FilePathField(verbose_name='path of file') @@ -1674,13 +2153,29 @@ class AttributeFilePathField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeFilePathField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeFilePathField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeImageField(Attribute): - value = models.ImageField(upload_to='/media', verbose_name='image') + value = models.ImageField(upload_to='media/'+UPLOAD_TO, verbose_name='image') def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + super(AttributeImageField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeURLField(Attribute): value = models.URLField(max_length=100, verbose_name='url') @@ -1688,6 +2183,16 @@ class AttributeURLField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeURLField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeURLField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeIPAddressField(Attribute): value = models.IPAddressField(max_length=100, verbose_name='ip address') @@ -1695,6 +2200,16 @@ class AttributeIPAddressField(Attribute): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeIPAddressField, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeIPAddressField, self).save(*args, **kwargs) # Call the "real" save() method. + + class Processtype(Nodetype): @@ -1718,6 +2233,15 @@ class Processtype(Nodetype): verbose_name_plural = _('process types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Processtype, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Processtype, self).save(*args, **kwargs) # Call the "real" save() method. + @@ -1749,6 +2273,16 @@ class Systemtype(Nodetype): verbose_name_plural = _('system types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Systemtype, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Systemtype, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeSpecification(Node): @@ -1770,10 +2304,11 @@ class AttributeSpecification(Node): subjects = u'' for each in self.subjects.all(): subjects = subjects + each.title + ' ' - return 'the %s of %s' % (self.attributetype, subjects) + return u'the %s of %s' % (self.attributetype, subjects) def __unicode__(self): + self.nodemodel = self.__class__.__name__ return self.composed_subject @@ -1782,6 +2317,17 @@ class AttributeSpecification(Node): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + super(AttributeSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + + class RelationSpecification(Node): """ @@ -1799,17 +2345,28 @@ class RelationSpecification(Node): subjects = u'' for each in self.subjects.all(): subjects = subjects + each.title + ' ' - return 'the %s of %s' % (self.relationtype, subjects) + return u'the %s of %s' % (self.relationtype, subjects) def __unicode__(self): return self.composed_subject + class Meta: verbose_name = _('relation specification') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(RelationSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + super(RelationSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + class NodeSpecification(Node): """ @@ -1830,7 +2387,7 @@ class NodeSpecification(Node): attributes = u'' for each in self.attributes.all(): attributes = attributes + each.partial_composition + ', ' - return 'the %s with %s, %s' % (self.subject, self.relations, self.attributes) + return u'the %s with %s, %s' % (self.subject, self.relations, self.attributes) def __unicode__(self): return self.composed_subject @@ -1841,6 +2398,17 @@ class NodeSpecification(Node): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(NodeSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + super(NodeSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + + class Expression(Node): """ @@ -1858,7 +2426,7 @@ class Expression(Node): @property def composed_sentence(self): "composes the relation as a sentence in a triple format." - return '%s %s %s' % (self.left_term, self.relationtype, self.right_term) + return u'%s %s %s' % (self.left_term, self.relationtype, self.right_term) class Meta: @@ -1868,6 +2436,16 @@ class Expression(Node): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Expression, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Expression, self).save(*args, **kwargs) # Call the "real" save() method. + + class Union(Node): @@ -1879,6 +2457,16 @@ class Union(Node): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Union, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Union, self).save(*args, **kwargs) # Call the "real" save() method. + + class Complement(Node): @@ -1890,6 +2478,16 @@ class Complement(Node): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Complement, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Complement, self).save(*args, **kwargs) # Call the "real" save() method. + + class Intersection(Node): """ Intersection of classes @@ -1898,44 +2496,54 @@ class Intersection(Node): def __unicode__(self): return self.title - -reversion.register(NID) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Intersection, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Intersection, self).save(*args, **kwargs) # Call the "real" save() method. -if not reversion.is_registered(Systemtype): - reversion.register(Systemtype) + +if GSTUDIO_VERSIONING == True: + reversion.register(NID) + + if not reversion.is_registered(Systemtype): + reversion.register(Systemtype) -if not reversion.is_registered(Objecttype): - reversion.register(Objecttype , follow=["nodetype_ptr"]) + if not reversion.is_registered(Objecttype): + reversion.register(Objecttype , follow=["nodetype_ptr"]) -if not reversion.is_registered(Node): - reversion.register(Node , follow=["nid_ptr"]) + if not reversion.is_registered(Node): + reversion.register(Node , follow=["nid_ptr"]) -if not reversion.is_registered(Edge): - reversion.register(Edge , follow=["nid_ptr"]) + if not reversion.is_registered(Edge): + reversion.register(Edge , follow=["nid_ptr"]) -if not reversion.is_registered(Processtype): - reversion.register(Processtype, follow=["changing_attributetype_set", "changing_relationtype_set"]) + if not reversion.is_registered(Processtype): + reversion.register(Processtype, follow=["changing_attributetype_set", "changing_relationtype_set"]) -if not reversion.is_registered(Nodetype): - reversion.register(Nodetype, follow=["node_ptr","parent", "metatypes","prior_nodes", "posterior_nodes"]) + if not reversion.is_registered(Nodetype): + reversion.register(Nodetype, follow=["node_ptr","parent", "metatypes","prior_nodes", "posterior_nodes"]) -if not reversion.is_registered(Metatype): - reversion.register(Metatype, follow=["node_ptr","parent"]) + if not reversion.is_registered(Metatype): + reversion.register(Metatype, follow=["node_ptr","parent"]) -if not reversion.is_registered(Relationtype): - reversion.register(Relationtype, follow=["left_subjecttype", "right_subjecttype"]) + if not reversion.is_registered(Relationtype): + reversion.register(Relationtype, follow=["left_subjecttype", "right_subjecttype"]) -if not reversion.is_registered(Attributetype): - reversion.register(Attributetype, follow=["subjecttype"]) + if not reversion.is_registered(Attributetype): + reversion.register(Attributetype, follow=["subjecttype"]) -if not reversion.is_registered(Attribute): - reversion.register(Attribute, follow=["subject", "attributetype"]) + if not reversion.is_registered(Attribute): + reversion.register(Attribute, follow=["subject", "attributetype"]) -if not reversion.is_registered(Relation): - reversion.register(Relation, follow=["left_subject", "right_subject", "relationtype"]) + if not reversion.is_registered(Relation): + reversion.register(Relation, follow=["left_subject", "right_subject", "relationtype"]) moderator.register(Nodetype, NodetypeCommentModerator) mptt.register(Metatype, order_insertion_by=['title']) @@ -1950,5 +2558,10 @@ post_save.connect(ping_directories_handler, sender=Nodetype, post_save.connect(ping_external_urls_handler, sender=Nodetype, dispatch_uid='gstudio.nodetype.post_save.ping_external_urls') +class Peer(User): + """Subclass for non-human users""" + def __unicode__(self): + return self.ip - + ip = models.IPAddressField("Peer's IP address") + pkey = models.CharField(("Peer's public-key"), max_length=255) diff --git a/gstudio/settings.py b/gstudio/settings.py index dceb80fb..75606676 100644 --- a/gstudio/settings.py +++ b/gstudio/settings.py @@ -152,3 +152,5 @@ TWITTER_ACCESS_SECRET = getattr(settings, 'TWITTER_ACCESS_SECRET', '') USE_TWITTER = getattr(settings, 'GSTUDIO_USE_TWITTER', bool(TWITTER_ACCESS_KEY and TWITTER_ACCESS_SECRET and \ TWITTER_CONSUMER_KEY and TWITTER_CONSUMER_SECRET)) + +GSTUDIO_VERSIONING = False diff --git a/gstudio/static/gstudio/css/screen.css b/gstudio/static/gstudio/css/screen.css index f786de60..c1077768 100644 --- a/gstudio/static/gstudio/css/screen.css +++ b/gstudio/static/gstudio/css/screen.css @@ -1,4 +1,4 @@ -body { line-height: 1.5; font-family: Arial, Helvetica, sans-serif; color: #333333; font-size: 75%; height:1500px;width:1500px} +body { line-height: 1.5; font-family: Arial, Helvetica, sans-serif; color: #333333; font-size: 75%; height:1500px; width: 90%; } h1, h2, h3, h4, h5, h6 { font-weight: normal; color: #176691; border-radius:15px; } h1 img, h2 img, h3 img, h4 img, h5 img, h6 img { margin: 0; } @@ -130,7 +130,7 @@ caption { background: #eeeeee; } .span-15 { width: 590px; } -.span-16 { width: 150px; } +.span-16 { width: 500px; } .span-17 { width: 670px; } @@ -406,7 +406,7 @@ textarea { margin: 0.5em 0; padding: 5px; } select { margin: 0.5em 0; } -fieldset { border: 1px solid #cccccc; } +fieldset { border: 1px solid #cccccc; width:150px;} input.text, input.title, input[type=email], input[type=text], input[type=password], textarea { background-color: #fff; border: 1px solid #bbbbbb; } input.text:focus, input.title:focus, input[type=email]:focus, input[type=text]:focus, input[type=password]:focus, textarea:focus { border: 1px solid #666666; } @@ -424,7 +424,7 @@ ul, ol { margin: 0 1.5em 1.5em 0; padding-left: 3.333em; } a { text-decoration: none; } a:hover { text-decoration: underline; } -#header { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; } +#header { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; background: #2b3959; color: white;} #header h1 { font-size: 2em; font-weight: bold; margin-bottom: 0; } #header .top-navigation { float: right; } #header .top-navigation img { border: 0; } @@ -436,7 +436,7 @@ a:hover { text-decoration: underline; } #b1 {position:relative; center:5%; background-color:#43AEE7; color: white; border: 1px solid #000000; font-size:1em;} #b2 {position:relative; center:6%; background-color:#43AEE7; color: white; border: 1px solid #000000; font-size:1em;} -#body { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; } +#body { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; width: 100%; } #content h1, #content h2, #content h3 { margin-top: 10px; } @@ -446,13 +446,12 @@ a:hover { text-decoration: underline; } float: left; clear: both; margin-bottom: 10px; - margin-left: 0; - margin-right: 60px; + margin-left: 0%; + margin-right: 0%; margin-top: 10px; - padding-right: 30px; + padding-right: 0px; width:250px; } - #graph { position: absolute; float: left; @@ -475,14 +474,14 @@ a:hover { text-decoration: underline; } font-weight: bold; } #graphcss { - margin-left: 224px; - margin-right: 150px; + margin-left: 231px; + margin-right: 0%; margin-top: 1px; position: absolute; - width: 300px; + width: 54%; height: 900px } -#sidebar{position:absolute; margin-left:1000px; margin-right:150px; margin-top:10px; width:300px;} +#sidebar{position:relative; margin-left:85%; margin-right:0%; margin-top:10px; width:24%;} #sidebar div:first-child h3 { margin-top:0px; } #sidebar h3 { background-color: #C4EBF4; padding: 0.5em; } #sidebar p { padding-left: 1em; } @@ -504,7 +503,7 @@ a:hover { text-decoration: underline; } #sidebar .tags div ul .tag_4 { font-size: 2em; color: #0070a8; } #sidebar .tags div ul .tag_5 { font-size: 2.25em; color: #0099e5; } #sidebar .tags div ul .tag_6 { font-size: 3em; color: #00adff; } - +#footer{position: static; top: 4px; left: -1px; margin-top: 18px;} th.month{padding:0cm 2.5cm;} table.month { margin-bottom: 0; } table.month th.month { text-transform: uppercase; color: #006699; background: none; } diff --git a/gstudio/static/gstudio/js/gstudio.js b/gstudio/static/gstudio/js/gstudio.js index d8d9d608..7ed67e24 100644 --- a/gstudio/static/gstudio/js/gstudio.js +++ b/gstudio/static/gstudio/js/gstudio.js @@ -47,23 +47,24 @@ $ = django.jQuery $("#id_attributetype").change(function() { test = $("#id_attributetype").val() - url = "/nodetypes/ajax/?id=" + test + url = "/nodetypes/ajax/ajaxattribute/?id=" + test + $.get(url, - function(data){ + function(data){ - $("#id_subject").empty() + $("#id_subject").empty() - for (var key in data) { - $('#id_subject').append( - $('<option></option>').val(key).html(data[key]) - ); - } + for (var key in data) { + $('#id_subject').append( + $('<option></option>').val(key).html(data[key]) + ); + } - }); + }); }); diff --git a/gstudio/templates/gstudio/_header.html b/gstudio/templates/gstudio/_header.html index 23d4d435..2e05c8c2 100644 --- a/gstudio/templates/gstudio/_header.html +++ b/gstudio/templates/gstudio/_header.html @@ -12,7 +12,7 @@ | <a href="{{ get_absolute_url }}/objects">objects</a> {% if user.is_authenticated %} - | <a href="{{ get_absolute_url }}/nodetypes/userdashboard">My Dashboard</a> + {% if user.is_staff %} | <a href="{{ get_absolute_url }}/admin">Admin Dashboard</a> diff --git a/gstudio/templates/gstudio/base.html b/gstudio/templates/gstudio/base.html index 94a72eb8..f1c4aa17 100644 --- a/gstudio/templates/gstudio/base.html +++ b/gstudio/templates/gstudio/base.html @@ -20,8 +20,8 @@ {% endblock %} {% block sidebar %} - <img src="{{ STATIC_URL }}objectapp/img/rss.png" alt="?" width="20" height="" /> - <a href="{% url objectapp_gbobject_latest_feed %}" class="feeds"><h4>Rssfeed</h4></a> + + <a href="{% url gstudio_nodetype_latest_feed %}" class="feeds" title="Rssfeed"><img src="{{ STATIC_URL }}gstudio/img/rss.png" alt="?" width="20" height="" /></a> <div class="search"> <h3>{% trans "Search" %}</h3> @@ -41,6 +41,22 @@ {% get_objecttypes %} </div> --> +<div class="History"> + + <h3>{% trans "Versions" %}</h3> + <table border="1" cellspacing="0"> + + {% for sid in object.ref.get_ssid %} + + + <a href="{{ object.get_version_url }}{{ sid }}/{{ forloop.counter }}">{{ object.title }} {{ object.id }}.{{ forloop.counter }}</a><br> + + {% endfor %} + </table> + +</div> +<br> + <div class="authors"> <h3>{% trans "Authors" %}</h3> {% get_authors %} diff --git a/gstudio/templates/gstudio/display.html b/gstudio/templates/gstudio/display.html new file mode 100644 index 00000000..184b58de --- /dev/null +++ b/gstudio/templates/gstudio/display.html @@ -0,0 +1,595 @@ + +{% load i18n comments gstudio_tags %} +{% load gstudio_tags i18n %} +{% get_tags as nodetype_tags %} +{% load adminmedia grp_tags %} + + + + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="{{ LANGUAGE_CODE }}" lang="{{ LANGUAGE_CODE }}" version="-//W3C//DTD XHTML 1.1//EN" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <style type="text/css"> + .link { + stroke: #ccc; + } + .nodetext { + #pointer-events: none; + font: 10px Serif; + font-style:italic; + } + .mainnode{ + + font: 15px sans-serif; + fill:"red"; + border-width: 1px; + font-weight:bold; + border-color: gray; + + } + .relnode { + font: 10px sans-serif; + font-weight:bold; + fill:#000; + } + + + .node { + border-width: 1px; + border-color: gray; + fill:"green"; + font: 10px sans-serif; + } + body { + background-color: white; + display:block; + } + #chart { + height: 90%; + margin: 0 auto; + width: 90%; + display: block; + } + svg { + margin-left: 10%; + margin-right: 10%; + display: block; + position: absolute; + } + + </style> + <!-- the header lines from grappelli --> + {% block blockbots %} + <meta name="robots" content="NONE,NOARCHIVE" /> + {% endblock %} <!-- STYLESHEETS --> + {% block stylesheets %} + <link href="{% admin_media_prefix %}css/base.css" rel="stylesheet" type="text/css" /> + {% if LANGUAGE_BIDI %} + <link href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" rel="stylesheet" type="text/css" /> + {% endif %} + <link href="{% admin_media_prefix %}jquery/ui/css/custom-theme/jquery-ui-1.8.custom.css" rel="stylesheet" type="text/css" media="screen" title="no title" charset="utf-8" /> + <link href="{% admin_media_prefix %}css/jquery-ui-grappelli-extensions.css" rel="stylesheet" type="text/css" /> + {% endblock %} <!-- EXTRASTYLES --> + {% block extrastyle %}{% endblock %} <!-- JAVASCRIPTS --> + {% block javascripts %} + <script type="text/javascript"> + // GLOBALS + var grappelli = {}, + // TODO: klemens: drop ADMIN_URL + ADMIN_URL = "{% url admin:index %}", + MODEL_URL_ARRAY = {% get_content_types %}, DATE_FORMAT = "{% get_date_format %}", TIME_FORMAT = "{% get_time_format %}", DATETIME_FORMAT = "{% get_datetime_format %}"; + </script> + <!-- jQuery, jQuery-UI --> + <script src="{% admin_media_prefix %}jquery/jquery-1.6.2.min.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}jquery/ui/js/jquery-ui-1.8.15.custom.min.js" type="text/javascript"></script> + <!-- Grappelli Main JS --> + <script src="{% admin_media_prefix %}js/grappelli/grappelli.js" type="text/javascript"></script> + <!-- Grappelli jQuery Plugins, Widgets --> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_collapsible.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_collapsible_group.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_timepicker.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_fk.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_m2m.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_generic.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_fk.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_m2m.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_generic.js" type="text/javascript"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery-1.5.1.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.core.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.widget.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.tabs.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.position.min.js"></script> + + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery.ui.timepicker.js"></script> + + <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> + <script src="{{STATIC_URL}}gstudio/js/gstudio.js" type="text/javascript"></script> + <!-- EXTRAHEAD --> + {% block extrahead %}{% endblock %} + + {% endblock %} <!-- the header lines from gstudio --> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <meta http-equiv="cache-control" content="public" /> + <meta name="robots" content="follow, all" /> + <meta name="language" content="{{ LANGUAGE_CODE }}" /> + <meta name="description" content="{% block meta-description %}Demonstration of the Gstudio Blog application.{% endblock %}" /> + <meta name="keywords" content="{% block meta-keywords %}django, blog, gstudio, {{ nodetype_tags|join:", "}}{% endblock %}" /> + <meta name="author" content="gnowgi" /> + {% block meta %}{% endblock %} + <link rel="pingback" href="/xmlrpc/" /> + <link rel="shortcut icon" href="{{ STATIC_URL }}gstudio/img/favicon.ico" /> + <link rel="home" href="{% url gstudio_nodetype_archive_index %}" /> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/grappelli_skin_default.css" /> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/screen.css" /> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/screen_gstudio.css" /> + <link rel="stylesheet" type="text/css" media="print" href="{{ STATIC_URL }}gstudio/css/print.css" /> + <!--[if lt IE 8]> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/ie.css" /> + <![endif]--> + {% block link %}{% endblock %} + {% block script %}{% endblock %} <title>Gnowledge Studio - {% block title %}{% endblock %}</title> + </head> + <body id="gstudio"> + <div class="body" > + <div class="content"> + <!-- + <div id="relation_type" class="ui-buttonset"> + <span>Relation type:</span> + <input checked="checked" value="follows" type="radio" id="follows" name="radio" class="ui-helper-hidden-accessible"><label for="follows" class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-left" aria-pressed="false" role="button" aria-disabled="false"><span class="ui-button-text">Followers</span></label> + <input value="mentions" type="radio" id="mentions" name="radio" class="ui-helper-hidden-accessible"><label for="mentions" aria-pressed="true" class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-right ui-state-active" role="button" aria-disabled="false"><span class="ui-button-text">Mentions</span></label> + <input value="hashtags" type="radio" id="hashtags" name="radio"/><label for="hashtags">Shared interests</label> + </div> + --> + <div id="chart"> + <svg width="960" height="700" style="opacity: 1; "> + </div> + <script type="text/javascript" src="/static/gstudio/js/jquery.min.js" ></script> + <script type="text/javascript" src="/static/gstudio/js/jquery-ui.js" ></script> + <script type="text/javascript" src="/static/gstudio/js/underscore.js" ></script> + <script type="text/javascript" src="/static/gstudio/js/d3.js"></script> + <script type="text/javascript" src="/static/gstudio/js/d3.layout.js"></script> + <script type="text/javascript" src="/static/gstudio/js/d3.geom.js"></script> + <!-- <script type="text/javascript" src="/static/gstudio/js/force.js"></script> + + Javascript for Object type force graph + --> + <script type="text/javascript" > + + var w = 700, + h = 300, + fill = d3.scale.category20(); + + var vis = d3.select("#chart") + .append("svg:svg") + .attr("width", w) + .attr("height", h); + + vis.append("svg:g").attr("class", "edges"); + vis.append("svg:g").attr("class", "nodes"); + +$(function() { + $.ajax({ + url: '/nodetypes/graphs/version_graph_json/{{ ssid }}', + //crossDomain: true, + dataType: 'json', + success : function(json) { + + //var node = NID.objects.get(slug='{{ slug }}'); + var force; + + // this contains all the nodes as a dict with _id as the key + + var nodes_by_id = _.reduce(json.node_metadata, function(acc, n) { + acc[n._id] = n; + return acc; + }, {}); + + var member_of = _(json.member_of).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'member_of'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var contains_subtypes = _(json.contains_subtypes).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'contains_subtypes'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + var contains_members = _(json.contains_members).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'contains_members'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var left_subjecttype_of = _(json.left_subjecttype_of).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'left_subjecttype_of'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var subjecttype_of = _(json.subjecttype_of).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'subjecttype_of'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + var plural = _(json.plural).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'plural'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var altnames = _(json.altnames).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'altnames'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + var content = _(json.content).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'content'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + var contains_members = _(json.contains_members).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'contains_members'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + + var type_of = _(json.type_of).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'type_of'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var right_subjecttype_of = _(json.right_subjecttype_of).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'right_subjecttype_of'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var follows_edges = _(json.is_followed_by).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'follows_edges'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + + var prior_nodes = _(json.prior_nodes).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'prior_node'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + var posterior_nodes = _(json.posterior_nodes).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'posterior_node'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + var mentions_edges = _(json.is_mentioned_by).chain().map(function(e) { + e.source = nodes_by_id[e.from]; + e.target = nodes_by_id[e.to]; + e.type = 'mentions_edges'; + return e; + }).filter(function(e){ + return nodes_by_id[e.from] && nodes_by_id[e.to] + }).value(); + + + nodes_by_id[{{ nt.id }}].x = w/2.0; + nodes_by_id[{{ nt.id }}].y = h/2.0; + + all_edges = new Array(); + all_edges = all_edges.concat(follows_edges, member_of, contains_members, contains_subtypes, mentions_edges, right_subjecttype_of, left_subjecttype_of, subjecttype_of, type_of,plural,altnames,contains_members,content, prior_nodes, posterior_nodes); + /* all_edges.concat(follows_edges); + all_edges.concat(member_of_metatype); + all_edges.concat(contains_members); + all_edges.concat(contains_subtypes); + all_edges.concat(mentions_edges); + + + document.getElementById('debugbox1').value= follows_edges; //member_of_metatype + document.getElementById('debugbox2').value= mentions_edges; + //document.getElementById('debugbox2').value= member_of_metatype; + document.getElementById('debugbox3').value= all_edges; + */ + var force = d3.layout.force() + .linkStrength(0.5) + .charge(-2000) + .friction(0.7) + .gravity(0.7) + .linkDistance(13) + .nodes([]) + .links([]) + .size([w, h]) + .start(); + + function update(edges){ + // for each func + _.each(nodes_by_id, function(n){n.added = false}); + // reduce the nodes list to have only those nodes for a given rel. + nodes = _.reduce(edges, function(acc, e) { + if(nodes_by_id[e.from] && !nodes_by_id[e.from].added){ + nodes_by_id[e.from].added = true; + acc.push(nodes_by_id[e.from]); + } + if(nodes_by_id[e.to] && !nodes_by_id[e.to].added){ + nodes_by_id[e.to].added = true; + acc.push(nodes_by_id[e.to]); + } + return acc; + }, []); + + force.nodes(nodes); + force.links(edges); + force.start(); + + link = d3.select("#chart g.edges").selectAll("line.link") + .data(edges, function(e){return e.from + "-" + e.to + "-" + e.type}); + + link.enter().append("svg:line") + .attr("class", "link") + .style("stroke-width", 2 /* function(d) { + return Math.sqrt(d.value); + } */ ) + .attr("x1", function(d) { + return d.source.x; + }) + .attr("y1", function(d) { + return d.source.y; + }) + .attr("x2", function(d) { + return d.target.x; + }) + .attr("y2", function(d) { + return d.target.y; + }) + .attr("text", function(d) { + return d.type; + }) + + .append("a") + .text(function(d) { return d.type; }); + + + var node = d3.select("#chart g.nodes").selectAll("g.node").data(nodes); + + var new_g = node.enter().append("svg:a") + .attr("class", function(d) { if (d._id=={{ nt.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) + .attr("xlink:href",function(d){return d.url;}) + .call(force.drag); + + + + + new_g.append("svg:circle") + .attr("cx", function(d) { return d.x - w/2.0 + 15; }) + .attr("cy", function(d) { return d.y - h/2.0 + 15; }) + .attr("r", function(d) { if (d._id=={{ nt.id }}) return 8; else if (isNaN(d._id) || (d._id)<0) return 1; else return 7 }) + .style("fill", function color(d) { if (d._id=={{ nt.id }}) return "red"; else if (isNaN(d._id) || (d._id)<0) return "white" ; else return "green"}); + + + new_g.append("svg:text") + .attr("class",function(d) { if (d._id=={{ nt.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) + .attr("dy", 20) + .attr("dx", 25) + .attr("text-anchor",function text(d) { if (isNaN(d._id) || (d._id)<0) return "middle" ; else return "left"}) + +// .attr("style",function text(d) { if (isNaN(d._id)) return "font-size:9.00pt;fill:#333;" ; else return "font-size:9.00pt;fill:black;"}) + + .text(function(d) { + return d.screen_name; + }); + + node.exit().remove(); + + + + force.on("tick", function() { + + var x_center = $("#chart").width() / 2; + var y_center = $("#chart").height() / 2; + + link.attr("x1", function(d) { return d.source.x; }) + .attr("y1", function(d) { return d.source.y; }) + .attr("x2", function(d) { return d.target.x; }) + .attr("y2", function(d) { return d.target.y; }); + + node.attr("transform", function(d) { return "translate(" + (d.x-16) + "," + (d.y-16) + ")"; }); + + }); + } + + update(all_edges); + vis.style("opacity", 1e-6) + .transition() + .duration(1000) + .style("opacity", 1); + + /* $('input#follows').change(function(){ + update(all_edges); + }); + */ + + /* $('input#mentions').change(function(){ + update(all_edges); + }); */ + } + }); + +// $("#relation_type").buttonset(); + +// $('input#mentions').change(function(){console.log(this)}); +// $('input#follows').change(function(){console.log(this)}); +}); + + +</script> + </div> +</div> +<div> + {% include "gstudio/_header.html" %} + <div id="breadcrumbs" class="span-24 last"> + / {% block breadcrumbs %}{% endblock %} + </div> + <div id="body" class="span-24 last" > + <div id="content" class="hfeed span-16 border"> + <h3>{% block content %} + {% block nodetype-content %} + <h2 class="nodetype-title"> + <a href="{{ nt.get_absolute_url }}" title="{{ nt.title }}" rel="bookmark">{{ ver_dict.title }} {{ nt.id }}.{{ cnt }} + </a> + </h2> + {% with nt.html_content|safe as object_content %} + <b>Name:<nbsp></b>{{ ver_dict.title }}<br/> + {% if ver_dict.altnames %} + <b> Alternate names:<nbsp></b>{{ ver_dict.altnames}} + <br/> + {% endif %} + {% if ver_dict.plural %} + <b> Plural Name:<nbsp></b>{{ ver_dict.plural }} <br/> + {% endif %} + {% if nt.get_rendered_nbh.authors %}<b>Authors: <nbsp> </b> + {% endif %} + {% for author in nt.authors.all %} + <span class="vcard author"> + <a href="{% url gstudio_author_detail author %}" class="fn nickname url" rel="author" + title="{% blocktrans with author as author %}Show {{ author }} nodetypes{% endblocktrans %}">{{ author }}</a> + </span>{% if not forloop.last %}, {% endif %} + {% endfor %} <br/> + {% endwith %} + {% endblock %} + {% endblock %} +</div> + + <div id="sidebar"> + {% block sidebar %} + + <div class="History"> + + <h3>{% trans "Versions" %}</h3> + <script type="text/javascript"> + function go_to_loc(sid) + { + + <!-- var len=document.history.group2.length --> + <!-- for(var i=0;i<len;i++) --> + <!-- { --> + <!-- var r=window.document.history.group2[i] --> + <!-- if(sid==r.) --> + <!-- { --> + <!-- r.disabled="false" --> + <!-- } --> + <!-- else --> + <!-- { --> + <!-- r.enabled="true" --> + <!-- } --> + <!-- } --> + + + } + </script> + + <form name="history" action="/nodetypes/display/showhistory/{{ ssid }}" > + <table cellspacing="0" border="2"> + <tr> + <td> <input type="radio" name="group1" value="{{ ssid }}" checked >{{ nt.id }}.{{ cnt }}</input></td> + <td></td></tr> + {% for sid in nt.get_ssid %} + {% ifnotequal forloop.counter cnt %} + <tr> + <td> + </td> + <td> + + <input type="radio" id="{{ sid }}"name="group2" value="{{ sid }}" >{{ nt.id }}.{{ forloop.counter }}</input> + </td>{% endifnotequal %} + {% endfor %}</tr></table> + <input type="submit" value="Compare" /> + </form> + + + </div> + + + {% endblock %} + </div> + + + <div id="footer" class="span-24 last" style="height: 5px; display:none; top: 51px; left: 88px; width: 1364px;"> + <p> + <a rel="license" + href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative + Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png"/></a> All material is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a> unless mentioned otherwise. + <br/> + Powered by <a href="http://www.djangoproject.com">Django</a> + and <a href="http://github.com/gnowgi/django-gstudio">Gstudio + {{ GSTUDIO_VERSION }}</a>. + </p> + </div> + </div> + </div> + </body> +</html> + + + + + + diff --git a/gstudio/templates/gstudio/graph1.html b/gstudio/templates/gstudio/graph1.html index 587b703b..ab66e51f 100644 --- a/gstudio/templates/gstudio/graph1.html +++ b/gstudio/templates/gstudio/graph1.html @@ -94,7 +94,7 @@ $(function() { success : function(json) { var force; - + // this contains all the nodes as a dict with _id as the key var nodes_by_id = _.reduce(json.node_metadata, function(acc, n) { diff --git a/gstudio/templates/gstudio/nodetype_detail.html b/gstudio/templates/gstudio/nodetype_detail.html index 404adb98..1a012799 100644 --- a/gstudio/templates/gstudio/nodetype_detail.html +++ b/gstudio/templates/gstudio/nodetype_detail.html @@ -243,18 +243,31 @@ s = parseInt(s) //alert(s) } - </script> - + </script> {% endwith %} {% endblock %} -{% if object.reftype == 'Objecttype'%} -<a href="{{ get_absolute_url }}/objects/dynamicAttribute/save/{{ object.title }}">Add Attribute</a> -<br/> -<a href="{{ get_absolute_url }}/objects/dynamicRelation/displayRT/{{ object.title }}">Add Relation</a> -{% endif %} +<!-- Dynamic form begins --> +{% if user.is_authenticated %} +<p> +{% if object.reftype == 'Objecttype' %} +<b>Add Attributes:</b> +{% for i in object.getat %} +<a href="{{ get_absolute_url }}/objects/dynamicAttribute/save/{{ i }}/{{ object.title }}">{{ i }}</a><nbsp>; +{% endfor %} +</p> + +<p> +<b>Add Relations: </b> +{% for i in object.getrt %} +<a href="{{ get_absolute_url }}/objects/dynamicRelation/displaymem/{{ i }}/{{ object.title }}">{{ i }}</a><nbsp>; +{% endfor %} +{% endif %} +{% endif %} +</p> +<!-- Dyanic form ends --> <div class="nodetype-content"> </div> diff --git a/gstudio/templates/gstudio/nodetype_list.html b/gstudio/templates/gstudio/nodetype_list.html index f4f75bd3..ebaae5c9 100644 --- a/gstudio/templates/gstudio/nodetype_list.html +++ b/gstudio/templates/gstudio/nodetype_list.html @@ -1,5 +1,7 @@ -{% extends "gstudio/base.html" %} +{% extends "gstudio/version_base.html" %} {% load i18n gstudio_tags %} +{% load i18n objectapp_tags %} + {% block meta-description %}{% trans "Latest nodetypes for" %} {% if metatype %}{% trans "the metatype" %} {{ metatype }}{% if metatype.description %}: {{ metatype.description|striptags|safe }}{% endif %}{% endif %}{% if tag %}{% trans "the tag" %} {{ tag }}{% endif %}{% if author %}{% trans "the author" %} {{ author }}{% endif %}{% if page_obj %}{% ifnotequal page_obj.number 1 %} {% trans "page" %} {{ page_obj.number }}{% endifnotequal %}{% endif %}{% endblock %} diff --git a/gstudio/templates/gstudio/skeleton.html b/gstudio/templates/gstudio/skeleton.html index 1fcf9ccf..eba5e283 100644 --- a/gstudio/templates/gstudio/skeleton.html +++ b/gstudio/templates/gstudio/skeleton.html @@ -10,20 +10,20 @@ } .nodetext { #pointer-events: none; - font: 10px Serif; + font: 12px Serif; font-style:italic; } .mainnode{ font: 15px sans-serif; - fill:"red"; + fill:"black"; border-width: 1px; font-weight:bold; border-color: gray; } .relnode { - font: 10px sans-serif; + font: 12px sans-serif; font-weight:bold; fill:#000; } @@ -32,8 +32,9 @@ .node { border-width: 1px; border-color: gray; - fill:"green"; - font: 10px sans-serif; + font: 12px sans-serif; + fill:#25587E; + font-weight:bold; } body { background-color: white; @@ -45,7 +46,7 @@ display: block; } svg { - margin-left: 10%; + margin-left: 0%; margin-right: 10%; display: block; position: absolute; @@ -168,52 +169,18 @@ <script type="text/javascript" > //alert(s) //if ( parseInt(s) > 0 ){ - var a = 25 * s; - - if ( a > 700 ) - { - var w = 700; - } - else - { - var w = a; - } - var h = 24 * s, // } // else{ // var w = 700, // h = 300, // } - fill = d3.scale.category20(); - - var vis = d3.select("#chart") - .append("svg:svg") - .attr("width", w) - .attr("height", h); - - vis.append("svg:g").attr("class", "edges"); - vis.append("svg:g").attr("class", "nodes"); - - - - -var gid={{object.id}}; -$(function fgraph(gid) { +function init(a,b) +{ + - $.ajax({ - url: '/nodetypes/graphs/graph_json/{{object.id}}', - //crossDomain: true, - dataType: 'json', - success : function (json) { - - - var force; - - // this contains all the nodes as a dict with _id as the key - - var nodes_by_id = _.reduce(json.node_metadata, function(acc, n) { + nodes_by_id = _.reduce(a, function(acc, n) { acc[n._id] = n; return acc; }, {}); @@ -222,184 +189,71 @@ $(function fgraph(gid) { all_edges=new Array(); //this contains all the links between the nodes - all_edges =_(json.relations).chain().map(function(e) { + all_edges =_(b).chain().map(function(e) { e.source = nodes_by_id[e.from]; e.target = nodes_by_id[e.to]; - + //`e.type = nodes_by_id[e.type] return e; }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to]&& e.type!="title" + return nodes_by_id[e.from] && nodes_by_id[e.to]&& e.type!="title" && e.type!="content" }).value(); - nodes_by_id[{{object.id}}].x = w/2.0; - nodes_by_id[{{object.id}}].y = h/2.0; - - - - - /* var member_of = _(json.member_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'member_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); +} - - var contains_subtypes = _(json.contains_subtypes).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'contains_subtypes'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - var contains_members = _(json.contains_members).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'contains_members'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - +$(function fgraph() { + - var left_subjecttype_of = _(json.left_subjecttype_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'left_subjecttype_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - +$.getJSON('/nodetypes/graphs/graph_json/' + {{object.id}}, function (json1) { + metadata=json1.node_metadata; + relations=json1.relations; + relnset=json1.relset + init(metadata,relations); + load({{object.id}}) }); - var subjecttype_of = _(json.subjecttype_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'subjecttype_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - var plural = _(json.plural).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'plural'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); +function load(key) +{ + + if (s > 0 ){ + var a = 50 * s; + var w = 700; + var p = 100 + "%"; + var h = 620; + var q = 3 * s + 75 + "%"; + }else{ + var w = 700; + var p = 100 + "%"; + var h = 620; + var q = 110 + "%"; + } + fill = d3.scale.category20(); + + var vis = d3.select("#chart") + .append("svg:svg") + .attr("id", "amazingViz") + .attr("width", p) + .attr("height", q); + vis.append("svg:g").attr("class", "edges"); + vis.append("svg:g").attr("class", "nodes"); + - var altnames = _(json.altnames).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'altnames'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); + - var contains_members = _(json.contains_members).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'contains_members'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - - var type_of = _(json.type_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'type_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - var right_subjecttype_of = _(json.right_subjecttype_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'right_subjecttype_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); + nodes_by_id[key].x = w/2.0; + nodes_by_id[key].y = h/2.0; + - var follows_edges = _(json.is_followed_by).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'follows_edges'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - - var prior_nodes = _(json.prior_nodes).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'prior_node'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - var posterior_nodes = _(json.posterior_nodes).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'posterior_node'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - var mentions_edges = _(json.is_mentioned_by).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'mentions_edges'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - */ - - - - //all_edges = new Array(); - - //all_edges = all_edges.concat(follows_edges, member_of, contains_members, contains_subtypes, mentions_edges, right_subjecttype_of, left_subjecttype_of, subjecttype_of, type_of,plural,altnames,contains_members, prior_nodes, posterior_nodes); - /* all_edges.concat(follows_edges); - all_edges.concat(member_of_metatype); - all_edges.concat(contains_members); - all_edges.concat(contains_subtypes); - all_edges.concat(mentions_edges); - - - document.getElementById('debugbox1').value= follows_edges; //member_of_metatype - document.getElementById('debugbox2').value= mentions_edges; - //document.getElementById('debugbox2').value= member_of_metatype; - document.getElementById('debugbox3').value= all_edges; - */ - var force = d3.layout.force() + + var force = d3.layout.force() .linkStrength(0.5) - .charge(-2000) + .charge(-5000) .friction(0.7) .gravity(0.7) - .linkDistance(13) + .linkDistance(50) .nodes([]) .links([]) .size([w, h]) @@ -425,7 +279,10 @@ $(function fgraph(gid) { force.links(edges); force.start(); - link = d3.select("#chart g.edges").selectAll("line.link") + + + + link = d3.select("#chart g.edges").selectAll("line.link").select(this.arrowhead) .data(edges, function(e){return e.from + "-" + e.to + "-" + e.type}); link.enter().append("svg:line") @@ -448,41 +305,131 @@ $(function fgraph(gid) { .attr("text", function(d) { return d.type; }) + .attr("marker-end", "url(#arrowhead)"); + + + - .append("a") - .text(function(d) { return d.type; }); var node = d3.select("#chart g.nodes").selectAll("g.node").data(nodes); - + + + + var new_g = node.enter().append("svg:a") - .attr("class", function(d) { if (d._id=={{ object.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) - - .attr("xlink:href",function(d){return d.url;}) + .attr("class", function(d) { var e=(d._id).charAt(0); if (d._id==key) return "mainnode"; else if (e=="-") return "nodetext"; else if (isNaN(d._id)) return "relnode" ; else return "node"; }) + .call(force.drag); - - new_g.append("svg:circle") - .attr("cx", function(d) { return d.x - w/2.0 + 15; }) - .attr("cy", function(d) { return d.y - h/2.0 + 15; }) - .attr("r", function(d) { if (d._id=={{ object.id }}) return 8; else if (isNaN(d._id) || (d._id)<0) return 1; else return 7 }) - .style("fill", function color(d) { if (d._id=={{ object.id }}) return "red"; else if (isNaN(d._id) || (d._id)<0) return "white" ; else return "green"}); + + new_g.append("svg:marker") + .attr("id", "arrowhead") + .attr("viewBox","0 0 10 10") + .attr("refX","20") + .attr("refY","5") + .attr("markerUnits","strokeWidth") + .attr("markerWidth","9") + .attr("markerHeight","5") + .attr("orient","auto") + .append("svg:path") + .attr("d","M 0 0 L 10 5 L 0 10 z") + .attr("fill", "#6D6666"); + + + +$(window).bind('keydown',function(event){ + if(17==event.keyCode){ + new_g.on("click",function(d){ + if(d._id>0 && d.expanded=="false") + { + d3.select("#amazingViz").remove(); + d.expanded="true"; + $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) { + new_metadata=json2.node_metadata; + new_relations=json2.relations; + new_relnset=json2.relset + metadata=_.union(new_metadata,metadata); + relations=_.union(new_relations,relations); + init(metadata,relations); + load(d._id) + }) + } - new_g.append("svg:text") - .attr("class",function(d) { if (d._id=={{ object.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) - .attr("dy", 20) - .attr("dx", 25) - .attr("text-anchor",function text(d) { if (isNaN(d._id) || (d._id)<0) return "middle" ; else return "left"}) + }); + +} +}); + + -// .attr("style",function text(d) { if (isNaN(d._id)) return "font-size:9.00pt;fill:#333;" ; else return "font-size:9.00pt;fill:black;"}) + new_g.on("click", function(d) { + + new_g.attr("xlink:href",function(d){return d.url;}); + }); + + + /*new_g.append("svg:ellipse") + .attr("cx", function(d) { return d.x - w/2.0 +15; }) + .attr("cy", function(d) { return d.y - h/2.0 +15 ; }) + .call(force.drag) + .attr("rx", function(d) { return ((d.screen_name).length) +10 }) + .attr("ry", function(d) { if (d._id==key) return 8; else if (isNaN(d._id) || (d._id)<0) return 1; else return 7 }); + //.style("fill", function color(d) { if (d._id==key) return "red"; else if (isNaN(d._id) || (d._id)<0) return "white" ; else return "green"});*/ + + + + + + var text1 = new_g.append("svg:text") + .attr("class",function(d) {var e=(d._id).charAt(0); if (d._id==key) return "mainnode";else if (e=="-") return "nodetext"; else if (isNaN(d._id)) return "relnode"; else return "node"; }) + .attr("y", 20) + .attr("x", 25) + .attr("dy", ".35em") + .attr("text-anchor","middle") + + // .attr("style",function text(d) { if ((d._id)>0) return "font-size:9.00pt;fill:blue;" ; else return "font-size:9.00pt;fill:black;"}) .text(function(d) { return d.screen_name; }); - node.exit().remove(); - + var bbox = text1.node().getBBox(); + + + new_g.filter(function(d) { return (d._id).charAt(0)=="-"; }).append("svg:rect") + .attr("x",bbox.x-22 + ) + .attr("y", bbox.y) + .attr("width", function(d) {var ttx=d.screen_name ; return (ttx.length+bbox.width+40)}) + .attr("height", bbox.height) + .call(force.drag) + .style("fill-opacity", ".1") + .style("stroke", "#000") + .style("stroke-width","1px" ); + + + + + + + new_g.filter(function(d) { return (d._id)>0;}).append("svg:ellipse") + .attr("cx", bbox.x+25) + .attr("cy", bbox.y+13) + .call(force.drag) + .attr("rx",function(d) {var ttx=d.screen_name ; return (ttx.length + 40)}) + .attr("ry",13) + .style("fill-opacity", ".2") + .style("stroke", "#666") + .style("stroke-width", "1.5px") + .style("fill", function color(d) {var e=(d._id).charAt(0); if (d.expanded=="true") return "red"; else return "none"}); + + + + + + node.exit().remove(); force.on("tick", function() { @@ -509,27 +456,18 @@ $(function fgraph(gid) { .duration(1000) .style("opacity", 1); - /* $('input#follows').change(function(){ - update(all_edges); - }); - */ - - /* $('input#mentions').change(function(){ - update(all_edges); - }); */ - } - }); - -// $("#relation_type").buttonset(); -// $('input#mentions').change(function(){console.log(this)}); -// $('input#follows').change(function(){console.log(this)}); -}); -</script> + +} +}); +//fgraph({{object.id}}); + +</script> + </div> <div id="sidebar"> {% block sidebar %} @@ -537,7 +475,7 @@ $(function fgraph(gid) { </div> - <div id="footer" class="span-24 last"> + <div id="footer"> <p> <a rel="license" @@ -550,6 +488,6 @@ $(function fgraph(gid) { </p> </div> - + </div> </body> </html> diff --git a/gstudio/templates/gstudio/version_base.html b/gstudio/templates/gstudio/version_base.html new file mode 100644 index 00000000..15ee3a8a --- /dev/null +++ b/gstudio/templates/gstudio/version_base.html @@ -0,0 +1,129 @@ +{% extends "gstudio/skeleton.html" %} +{% load gstudio_tags i18n %} +{% load objectapp_tags i18n %} + + {% block meta %} + <meta name="generator" content="Objectapp {{ OBJECTAPP_VERSION }}" /> +{% endblock %} + +{% block link %} + <link rel="index" href="{% url objectapp_gbobject_archive_index %}" /> + <link rel="EditURI" type="application/rsd+xml" href="{% url objectapp_rsd %}" /> + <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="{% url objectapp_wlwmanifest %}" /> + <link rel="search" type="application/opensearchdescription+xml" title="Objectapp's Blog" href="{% url objectapp_opensearch %}" /> + <link rel="alternate" type="application/rss+xml" title="{% trans "RSS Feed of latest gbobjects" %}" href="{% url objectapp_gbobject_latest_feed %}" /> + <!-- {% get_archives_gbobjects "objectapp/tags/archives_gbobjects_link.html" %} --> +{% endblock %} + +{% block breadcrumbs %} + {% gstudio_breadcrumbs %} +{% endblock %} + +{% block sidebar %} + <img src="{{ STATIC_URL }}objectapp/img/rss.png" alt="?" width="20" height="" /> + <a href="{% url objectapp_gbobject_latest_feed %}" class="feeds"><h4>Rssfeed</h4></a> + +<div class="search"> + <h3>{% trans "Search" %}</h3> + <form method="get" id="searchform" action="{% url nodes_search %}"> + <p> + <input type="text" value="{% trans "Keywords..." %}" name="pattern" id="searchbox" onfocus="this.value=''" /> + <input type="submit" class="submitbutton" value="OK" /> + <a title="{% trans 'You can use - to exclude words or phrases, "double quotes" for exact phrases and the AND/OR boolean operators combined with parenthesis for complex searchs.' %}"> + <img src="{{ STATIC_URL }}objectapp/img/help.png" alt="?" width="14" height="14" /> + </a> + </p> + </form> +</div> +<!-- +<div class="objecttypes"> + <h3>{% trans "Objecttypes" %}</h3> + {% get_objecttypes %} +</div> +--> +<div class="History"> + <!-- <script type="text/javascript"> --> + <!-- function go_to_loc(sid) --> + <!-- { --> + <!-- window.location.href = "{{ object.get_version_url }}"+sid --> + <!-- } --> + + <!-- </script> --> +<!-- <h3>{% trans "Versions" %}</h3> --> +<!-- {% for sid in object.get_ssid reversed %} --> +<!-- <input type="radio" name="group1" value="{{ sid }}"><a href="{{ object.get_version_url }}{{ sid }}">{{ sid }}</a></input> --> +<!-- <input type="radio" name="group2" value="{{ sid }}">{{ sid }}</input> --> +<!-- <br> --> +<!-- {% endfor %} --> +<!-- <br> --> +<!-- <input type="submit" value="Compare" /> --> +</div> +<br> + +<div class="authors"> + <h3>{% trans "Authors" %}</h3> + {% get_authors %} +</div> +<div class="calendar"> + <h3>{% trans "Calendar" %}</h3> + {% get_calendar_gbobjects %} +</div> +<div class="tags"> + <h3>{% trans "Tags" %}</h3> + {% get_tag_cloud %} +</div> +<div class="recents"> + <h3>{% trans "Recent gbobjects" %}</h3> + {% get_recent_gbobjects 5 %} +</div> +<div class="comments"> + <h3>{% trans "Recent comments" %}</h3> + {% get_recent_comments 5 %} +</div> +<div class="linkbacks"> + <h3>{% trans "Recent linkbacks" %}</h3> + {% get_recent_linkbacks 5 %} +</div> +<div class="randoms"> + <h3>{% trans "Random gbobjects" %}</h3> + {% get_random_gbobjects 5 %} +</div> +<div class="populars"> + <h3>{% trans "Popular gbobjects" %}</h3> + {% get_popular_gbobjects 5 %} +</div> +<div class="archives"> + <h3>{% trans "Archives" %}</h3> + {% get_archives_gbobjects_tree %} +</div> +{% if user.is_authenticated %} +<div class="tools"> + <h3>{% trans "Tools" %}</h3> + <ul> + {% if perms.objectapp %} + <li> + <a href="{% url admin:app_list "objectapp" %}" title="{% trans "Dashboard" %}"> + {% trans "Dashboard" %} + </a> + </li> + {% endif %} + {% if perms.objectapp.add_gbobject %} + <li> + <a href="{% url admin:objectapp_gbobject_add %}" title="{% trans "Post an gbobject" %}"> + {% trans "Post an gbobject" %} + </a> + </li> + {% endif %} + {% block admin_tools %} + {% endblock %} + <li> + <a href="{% url admin:logout %}" title="{% trans "Log out" %}"> + {% trans "Log out" %} + </a> + </li> + </ul> +</div> +{% endif %} +{% endblock %} + + diff --git a/gstudio/templates/gstudio/version_diff.html b/gstudio/templates/gstudio/version_diff.html new file mode 100644 index 00000000..a640f071 --- /dev/null +++ b/gstudio/templates/gstudio/version_diff.html @@ -0,0 +1,219 @@ + +{% load i18n comments gstudio_tags %} +{% load gstudio_tags i18n %} +{% get_tags as nodetype_tags %} +{% load adminmedia grp_tags %} + + +{% load gstudio_tags i18n %} +{% get_tags as nodetype_tags %} +{% load adminmedia grp_tags %} +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="{{ LANGUAGE_CODE }}" lang="{{ LANGUAGE_CODE }}" version="-//W3C//DTD XHTML 1.1//EN" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <style type="text/css"> + body { + background-color: white; + display:block; + } + .content + { + } + .content1 + { + } + </style> + {% block blockbots %} + <meta name="robots" content="NONE,NOARCHIVE" /> + {% endblock %} <!-- STYLESHEETS --> + {% block stylesheets %} + <link href="{% admin_media_prefix %}css/base.css" rel="stylesheet" type="text/css" /> + {% if LANGUAGE_BIDI %} + <link href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" rel="stylesheet" type="text/css" /> + {% endif %} + <link href="{% admin_media_prefix %}jquery/ui/css/custom-theme/jquery-ui-1.8.custom.css" rel="stylesheet" type="text/css" media="screen" title="no title" charset="utf-8" /> + <link href="{% admin_media_prefix %}css/jquery-ui-grappelli-extensions.css" rel="stylesheet" type="text/css" /> + {% endblock %} <!-- EXTRASTYLES --> + {% block extrastyle %}{% endblock %} <!-- JAVASCRIPTS --> + {% block javascripts %} + <script type="text/javascript"> + // GLOBALS + var grappelli = {}, + // TODO: klemens: drop ADMIN_URL + ADMIN_URL = "{% url admin:index %}", + MODEL_URL_ARRAY = {% get_content_types %}, DATE_FORMAT = "{% get_date_format %}", TIME_FORMAT = "{% get_time_format %}", DATETIME_FORMAT = "{% get_datetime_format %}"; + </script> + <!-- jQuery, jQuery-UI --> + <script src="{% admin_media_prefix %}jquery/jquery-1.6.2.min.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}jquery/ui/js/jquery-ui-1.8.15.custom.min.js" type="text/javascript"></script> + <!-- Grappelli Main JS --> + <script src="{% admin_media_prefix %}js/grappelli/grappelli.js" type="text/javascript"></script> + <!-- Grappelli jQuery Plugins, Widgets --> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_collapsible.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_collapsible_group.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_timepicker.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_fk.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_m2m.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_generic.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_fk.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_m2m.js" type="text/javascript"></script> + <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_generic.js" type="text/javascript"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery-1.5.1.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.core.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.widget.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.tabs.min.js"></script> + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery-ui-timepicker-0.2.9/include/jquery.ui.position.min.js"></script> + + <script type="text/javascript" src="{{STATIC_URL}}gstudio/js/jquery.ui.timepicker.js"></script> + + <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> + <script src="{{STATIC_URL}}gstudio/js/gstudio.js" type="text/javascript"></script> + <!-- EXTRAHEAD --> + {% block extrahead %}{% endblock %} + + {% endblock %} + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <meta http-equiv="cache-control" content="public" /> + <meta name="robots" content="follow, all" /> + <meta name="language" content="{{ LANGUAGE_CODE }}" /> + <meta name="description" content="{% block meta-description %}Demonstration of the Gstudio Blog application.{% endblock %}" /> + <meta name="keywords" content="{% block meta-keywords %}django, blog, gstudio, {{ nodetype_tags|join:", "}}{% endblock %}" /> + <meta name="author" content="gnowgi" /> + {% block meta %}{% endblock %} + <link rel="pingback" href="/xmlrpc/" /> + <link rel="shortcut icon" href="{{ STATIC_URL }}gstudio/img/favicon.ico" /> + <link rel="home" href="{% url gstudio_nodetype_archive_index %}" /> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/grappelli_skin_default.css" /> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/screen.css" /> + <link rel="stylesheet" type="text/css" media="screen, projection" href="{{ STATIC_URL }}gstudio/css/screen_gstudio.css" /> + <link rel="stylesheet" type="text/css" media="print" href="{{ STATIC_URL }}gstudio/css/print.css" /> + {% block link %}{% endblock %} + {% block script %}{% endblock %} <title>Gnowledge Studio - {% block title %}{% endblock %}</title> + </head> + <body id="gstudio"> + + + + + + + {% include "gstudio/_header.html" %} + <div id="breadcrumbs" class="span-24 last"> + / {% block breadcrumbs %}{% endblock %} + </div> + <!-- <div id="body" class="span-24 last" > --> + <table border="0" > + <tr><td> + + <h3>{% block content %} + {% block nodetype-content %} + <h2 class="nodetype-title"> + <a href="{{ nt1.get_absolute_url }}" title="{{ nt1.title }}" rel="bookmark">{{ ver_new.title }} + </a> + </h2> + <!-- {% block content56 %}{% for each in diffs1 %} --> + <!-- {% autoescape off %} --> + <!-- {{ each }}<br> --> + <!-- {% endautoescape %}{% endfor %} {% endblock %} --> + <!-- <br> --> + {% with nt1.html_content|safe as object_content %}<br> + <b>Name:<nbsp></b>{{ ver_new.title }}<br/> + {% if ver_new.altnames %} + <b> Alternate names:<nbsp></b>{{ ver_new.altnames }} + <br/> + {% endif %} + {% if ver_new.plural %} + <b> Plural Name:<nbsp></b>{{ ver_new.plural }} <br/> + {% endif %} + + <b> Content:<nbsp></b>{{ ver_new.content }} <br/> + + + {% if nt1.get_rendered_nbh.authors %}<b>Authors: <nbsp> </b> + {% endif %} + {% for author in nt1.authors.all %} + <span class="vcard author"> + <a href="{% url gstudio_author_detail author %}" class="fn nickname url" rel="author" + title="{% blocktrans with author as author %}Show {{ author }} nodetypes{% endblocktrans %}">{{ author }}</a> + </span>{% if not forloop.last %}, {% endif %} + {% endfor %} <br/> + {% endwith %} + {% endblock %} + {% endblock %} + + </td> + <td> + + <h3>{% block content1 %} + {% block nodetype-content1 %} + <h2 class="nodetype-title"> + <a href="{{ nt1.get_absolute_url }}" title="{{ nt1.title }}" rel="bookmark">{{ ver_old.title }} + </a> + </h2><!-- <b> --> + <!-- {% block content85 %}{% for each in diffs %} --> + <!-- {% autoescape off %} --> + <!-- {{ each }}<br> --> + <!-- {% endautoescape %}{% endfor %} {% endblock %}</b> --> + <br> + {% with nt1.html_content|safe as object_content %} + <b>Name:<nbsp></b>{% autoescape off %} + {{ diffs.0 }} + {% endautoescape %}<br> + {% if ver_old.altnames %} + <b> Alternate names:<nbsp></b> {% autoescape off %} + {{ diffs.1 }} + {% endautoescape %} + <br/> + {% endif %} + {% if ver_old.plural %} + <b> Plural Name:<nbsp></b> {% autoescape off %} + {{ diffs.2 }} + {% endautoescape %} <br/> + {% endif %} + + <b> Content:<nbsp></b> {% autoescape off %} + {{ diffs.3 }} + {% endautoescape %} <br/> + + + {% if nt1.get_rendered_nbh.authors %}<b>Authors: <nbsp> </b> + {% endif %} + {% for author in nt1.authors.all %} + <span class="vcard author"> + <a href="{% url gstudio_author_detail author %}" class="fn nickname url" rel="author" + title="{% blocktrans with author as author %}Show {{ author }} nodetypes{% endblocktrans %}">{{ author }}</a> + </span>{% if not forloop.last %}, {% endif %} + {% endfor %} <br/> + {% endwith %} + {% endblock %} + {% endblock %} + + </td> + +<!-- <th><b><i><br><u>Difference between Selected Versions</u></b></i><br><br> --> +<!-- {% block content6 %}{% for each in diffs %} --> +<!-- {% autoescape off %} --> +<!-- {{ each }}<br> --> +<!-- {% endautoescape %}{% endfor %} {% endblock %} --> +<!-- </th> --> + + </tr> +<tr><td><input type="button" value="Merge"></input><input type="button" value="RollBack"></input></td> +<td><input type="button" value="Merge"></input><input type="button" value="RollBack"></input></td> </tr> +<!-- <tr><th><b><i>Difference between Selected Versions<b><i><th><tr> --> +<!-- <tr><td><b>{% block content5 %}{% for each in diffs %} --> +<!-- {% autoescape off %} --> +<!-- {{ each }}<br> --> +<!-- {% endautoescape %}{% endfor %} {% endblock %} </b> </td></tr> --> +<!-- </table> --> + + + + + + </body> +</html> + + + + diff --git a/gstudio/testloop.py b/gstudio/testloop.py new file mode 100644 index 00000000..84553875 --- /dev/null +++ b/gstudio/testloop.py @@ -0,0 +1,59 @@ +import rdflib +from rdflib.graph import ConjunctiveGraph as Graph +from rdflib import plugin +from rdflib.store import Store, NO_STORE, VALID_STORE +from rdflib.namespace import Namespace +from rdflib.term import Literal +from rdflib.term import URIRef +from tempfile import mkdtemp +from gstudio.models import * + +def rdf_description(name, notation='xml' ): + """ + Funtion takes title of node, and rdf notation. + """ + valid_formats = ["xml", "n3", "ntriples", "trix"] + default_graph_uri = "http://gstudio.gnowledge.org/rdfstore" + configString = "/var/tmp/rdfstore" + + # Get the Sleepycat plugin. + store = plugin.get('IOMemory', Store)('rdfstore') + + # Open previously created store, or create it if it doesn't exist yet + graph = Graph(store="IOMemory", + identifier = URIRef(default_graph_uri)) + path = mkdtemp() + rt = graph.open(path, create=False) + if rt == NO_STORE: + #There is no underlying Sleepycat infrastructure, create it + graph.open(path, create=True) + else: + assert rt == VALID_STORE, "The underlying store is corrupt" + + + # Now we'll add some triples to the graph & commit the changes + rdflib = Namespace('http://sbox.gnowledge.org/gstudio/') + graph.bind("gstudio", "http://gnowledge.org/") + exclusion_fields = ["id", "rght", "node_ptr_id", "image", "lft", "_state", "_altnames_cache", "_tags_cache", "nid_ptr_id", "_mptt_cached_fields"] + node=NID.objects.get(title=name) + node_dict=node.__dict__ + + subject=str(node_dict['id']) + for key in node_dict: + if key not in exclusion_fields: + predicate=str(key) + pobject=str(node_dict[predicate]) + graph.add((rdflib[subject], rdflib[predicate], Literal(pobject))) + + + graph.commit() + + print graph.serialize(format=notation) + + graph.close() +i=0 +p=NID.objects.all() +for each in p: + rdf_description(p[i]) + i=i+1 + diff --git a/gstudio/urls/__init__.py b/gstudio/urls/__init__.py index b04f1485..20ac0658 100644 --- a/gstudio/urls/__init__.py +++ b/gstudio/urls/__init__.py @@ -32,6 +32,7 @@ urlpatterns = patterns( url(r'^discussions/', include('gstudio.urls.discussions')), url(r'^add/', include('gstudio.urls.add')), url(r'^ajax/', include('gstudio.urls.ajaxurls')), + url(r'^display/',include('gstudio.urls.history')), url(r'^graphs/', include('gstudio.urls.graphs')), url(r'^userdashboard/', include('gstudio.urls.dashboard')), url(r'^', include('gstudio.urls.quick_nodetype')), diff --git a/gstudio/urls/ajaxurls.py b/gstudio/urls/ajaxurls.py index 778b0dea..facc6036 100644 --- a/gstudio/urls/ajaxurls.py +++ b/gstudio/urls/ajaxurls.py @@ -20,7 +20,7 @@ from django.conf.urls.defaults import url from django.conf.urls.defaults import patterns urlpatterns = patterns('gstudio.views.ajaxviews', - url(r'^$', 'AjaxAttribute',name='ajax_views'), + url(r'^ajaxattribute/$', 'AjaxAttribute',name='ajax_views'), url(r'^relation/add/ajaxleft/$', 'AjaxRelationleft',name='ajax_relnleft_views'), url(r'^relation/add/ajaxright/$', 'AjaxRelationright',name='ajax_relnright_views'), url(r'^relation/ajaxleft/$', 'AjaxRelationleft',name='ajax_relnleft_views'), diff --git a/gstudio/urls/graphs.py b/gstudio/urls/graphs.py index 952f0214..4aa8c4b5 100644 --- a/gstudio/urls/graphs.py +++ b/gstudio/urls/graphs.py @@ -27,5 +27,6 @@ from gstudio.settings import ALLOW_FUTURE urlpatterns = patterns( 'gstudio.views.graphs', url(r'^graph_json/(?P<node_id>\d+)$','graph_json', name='graph_json_d3'), + url(r'^version_graph_json/(?P<ssid>\d+)$','version_graph_json', name='version_graph_d3'), url(r'^graph/(?P<node_id>\d+)$','force_graph', name='force_graph_d3'), ) diff --git a/gstudio/urls/history.py b/gstudio/urls/history.py new file mode 100644 index 00000000..3932cd62 --- /dev/null +++ b/gstudio/urls/history.py @@ -0,0 +1,8 @@ +"""Urls for Gstudio forms""" +from django.conf.urls.defaults import url +from django.conf.urls.defaults import patterns + +urlpatterns = patterns('gstudio.views.history', + url(r'^viewhistory/(?P<ssid>\d+)/(?P<cnt>\d+)/$', 'history', + name='gstudio_history'), + url(r'^showhistory/(?P<ssid>\d+)/$','showHistory'),) diff --git a/gstudio/views/add.py b/gstudio/views/add.py index 1ed2791f..f6baf6c1 100644 --- a/gstudio/views/add.py +++ b/gstudio/views/add.py @@ -20,10 +20,9 @@ from django.http import HttpResponseRedirect from django.template import RequestContext from django.shortcuts import render_to_response from datetime import datetime -from reversion.models import * from gstudio.forms import * -@reversion.create_revision() + def addmetatype(request): if request.method == 'POST': formset = MetatypeForm(request.POST) @@ -43,7 +42,7 @@ def addmetatype(request): return render_to_response(template, variables) -@reversion.create_revision() + def addobjecttype(request): if request.method == 'POST': formset = ObjecttypeForm(request.POST) @@ -62,7 +61,7 @@ def addobjecttype(request): return render_to_response(template, variables) -@reversion.create_revision() + def addrelationtype(request): if request.method == 'POST': formset = RelationtypeForm(request.POST) @@ -80,7 +79,7 @@ def addrelationtype(request): return render_to_response(template, variables) -@reversion.create_revision() + def addattributetype(request): if request.method == 'POST': formset = AttributetypeForm(request.POST) @@ -97,7 +96,7 @@ def addattributetype(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addsystemtype(request): if request.method == 'POST': formset = SystemtypeForm(request.POST) @@ -114,7 +113,7 @@ def addsystemtype(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addprocesstype(request): if request.method == 'POST': formset = ProcesstypeForm(request.POST) @@ -131,7 +130,7 @@ def addprocesstype(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addattribute(request): if request.method == 'POST': formset = AttributeForm(request.POST) @@ -148,7 +147,7 @@ def addattribute(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addrelation(request): if request.method == 'POST': formset = RelationForm(request.POST) @@ -165,7 +164,7 @@ def addrelation(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addcomplement(request): if request.method == 'POST': formset = ComplementForm(request.POST) @@ -182,7 +181,7 @@ def addcomplement(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addunion(request): if request.method == 'POST': formset = UnionForm(request.POST) @@ -199,7 +198,7 @@ def addunion(request): variables = RequestContext(request,{'formset':formset}) return render_to_response(template, variables) -@reversion.create_revision() + def addintersection(request): if request.method == 'POST': formset = IntersectionForm(request.POST) diff --git a/gstudio/views/ajaxviews.py b/gstudio/views/ajaxviews.py index a909db26..23c06e54 100644 --- a/gstudio/views/ajaxviews.py +++ b/gstudio/views/ajaxviews.py @@ -27,10 +27,19 @@ def AjaxAttribute(request): subjecttype = attr.subjecttype returndict = {} - for each in Objecttype.objects.all(): - if attr.subjecttype.id == each.id: - for member in each.get_members: + for ots in Objecttype.objects.all(): + if attr.subjecttype.id ==ots.id: + for member in ots.get_members: returndict[member.id] = member.title + childrenots = ots.get_children() + + if childrenots: + for eachchild in childrenots: + returndict[eachchild.id] = eachchild.title + membs=eachchild.ref.get_members + for each in membs: + returndict[each.id] = each.title + jsonobject = json.dumps(returndict) return HttpResponse(jsonobject, "application/json") @@ -76,22 +85,37 @@ def additemdict(sdict,itemtoadd): sdict[itemtoadd.id]=itemtoadd.title return sdict def selectionlist_OT(obj): + # Basically the filter must filter out the OT, their members, the children and members of the children + global rlist # Return all OTs and members of subtypes of OT obs=Objecttype.objects.filter(title=obj) # Get all members of subtypes of each OT if obs: + # Add the items first + for each in obs: + rlist=additemdict(rlist,each) obs=Objecttype.objects.get(title=obj) + # Add the objects first + # for each in obs: + # rlist = additemdict(rlist,each) memobs=obs.get_members if memobs: for each in memobs: rlist=additemdict(rlist,each) childrenots=obs.get_children() + # Add children first + for each in childrenots: + rlist=additemdict(rlist,each) + # Add memebers of each child if childrenots: for eachchild in childrenots: membs=eachchild.ref.get_members for each in membs: rlist=additemdict(rlist,each) + + + return rlist def selectionlist_MT(obj): @@ -308,12 +332,10 @@ def selectionlist_UP(obj): membs=eachchild.objecttypes.all() def selectionlist_OB(obj): global rlist - - obs=Gbobject.objects.filter(title=obj) + obs=Objecttype.objects.get(title=obj) #Get all members of OB - if obs: - obs=Gbobject.objects.get(title=obj) - rlist=additemdict(rlist,obs) + for each in obs.member_objects.all(): + rlist=additemdict(rlist,each) return rlist diff --git a/gstudio/views/graphs.py b/gstudio/views/graphs.py index 1adffeca..ff2fa401 100644 --- a/gstudio/views/graphs.py +++ b/gstudio/views/graphs.py @@ -73,30 +73,53 @@ from gstudio.gnowql import * #import d3 import json import os - from gstudio.views.decorators import protect_nodetype from gstudio.views.decorators import update_queryset -def graph_json(request, node_id): + + +def graph_json(request, node_id): + if(node_id=='189087228'): jsonFile = open( os.path.join(os.path.dirname(__file__), '../static/gstudio/js/egonet.json'), "r") - #testjson = json.loads(jsonFile) + testjson = json.loads(jsonFile) return HttpResponse(str(jsonFile.read()), "application/json") try: node = NID.objects.get(id=node_id) - node = node.ref + node = node.ref except: - return HttpResponse("Node not found.", "text/html") + + return HttpResponse("node not found", "text/html") return HttpResponse(node.get_graph_json(), "application/json") - + + + + + def force_graph(request, node_id): return render_to_response('gstudio/graph1.html',{'node_id': node_id }) - +def version_graph_json(request,ssid): + + if(ssid=='189087228'): + jsonFile = open( os.path.join(os.path.dirname(__file__), '../static/gstudio/js/egonet.json'), "r") + #testjson = json.loads(jsonFile) + + return HttpResponse(str(jsonFile.read()), "application/json") + + try: + node = Version.objects.get(id=ssid) + + node = node.object.ref + except: + return HttpResponse("Node not found.", "text/html") + + return HttpResponse(node.get_Version_graph_json(ssid), "application/json") + #node = get_node(str(object_id)) #ot = Objecttype.objects.get(title='place') #G = ot.get_radial_graph_json() diff --git a/gstudio/views/history.py b/gstudio/views/history.py new file mode 100644 index 00000000..d4adac9e --- /dev/null +++ b/gstudio/views/history.py @@ -0,0 +1,105 @@ +from django.http import * +from reversion.models import * +from gstudio.models import * +from django.template import RequestContext +from django.shortcuts import render_to_response +from django.views.generic.date_based import object_detail +from reversion.helpers import * +import pprint +from gstudio.models import * +from reversion.models import * +from gstudio.views.decorators import protect_nodetype +from gstudio.views.decorators import update_queryset +import ast + +def history(request,ssid,cnt): + # iden=request.GET["id"] + nt1=Version.objects.get(id=ssid) + nt=nt1.object.ref + ver_dict=nt.version_info(ssid) + variables = RequestContext(request,{'ver_dict':ver_dict ,'nt':nt,'ssid':ssid,'cnt':cnt }) + template="gstudio/display.html" + return render_to_response(template,variables) + +def showHistory(request,ssid): + # vid1=request.GET["group1"] + vid1=ssid + vid2=request.GET["group2"] + nt=Version.objects.get(id=vid1) + nt1=nt.object.ref + pp=pprint.PrettyPrinter(indent=4) + ver_new1=Version.objects.get(id=vid1) + ver_old1=Version.objects.get(id=vid2) + + ver_new_dict=nt1.version_info(request.GET["group1"]) + content=str(ver_new_dict['content']) + content=content[3:-4] + ver_new_dict['content']=content + ver_old_dict=nt1.version_info(request.GET["group2"]) + content=str(ver_old_dict['content']) + content=content[3:-4] + ver_old_dict['content']=content + + ver_new_nbh=ver_new_dict['nbhood'] + ver_new_dict1=ast.literal_eval(ver_new_nbh) + + ver_old_nbh=ver_old_dict['nbhood'] + ver_old_dict1=ast.literal_eval(ver_old_nbh) + + # ver_new_nbh=ver_new_nbh.replace(",","\n") + # ver_old_nbh=ver_old_nbh.replace(",","\n") + d=[] + d1=[] + field=['Name','Plural Name','Alternate Name','Authors','Content'] + for each in ver_new_dict1: + ver_new="" + ver_old="" + if each =='altnames': + ver_new+=ver_new_dict['altnames'] + ver_old+=ver_old_dict['altnames'] + + diffs = dmp.diff_main(ver_new, ver_old) + d.append(dmp.diff_prettyHtml(diffs)) + # diffs = dmp.diff_main(ver_old, ver_new) + # d1.append(dmp.diff_prettyHtml(diffs)) + + if each =='title': + ver_new+=ver_new_dict['title'] + ver_old+=ver_old_dict['title'] + diffs = dmp.diff_main(ver_new, ver_old) + d.append(dmp.diff_prettyHtml(diffs)) + # diffs = dmp.diff_main(ver_old, ver_new) + # d1.append(dmp.diff_prettyHtml(diffs)) + if each =='plural': + ver_new+=ver_new_dict['plural'] + ver_old+=ver_old_dict['plural'] + diffs = dmp.diff_main(ver_new, ver_old) + d.append(dmp.diff_prettyHtml(diffs)) + # diffs = dmp.diff_main(ver_old, ver_new) + # d1.append(dmp.diff_prettyHtml(diffs)) + # if each =='content': + ver_new="" + ver_old="" + ver_new+=ver_new_dict['content'] + ver_old+=ver_old_dict['content'] + diffs = dmp.diff_main(ver_new, ver_old) + d.append(dmp.diff_prettyHtml(diffs)) + # diffs = dmp.diff_main(ver_old, ver_new) + # d1.append(dmp.diff_prettyHtml(diffs)) + + # for each in ver_new_dict1: +# ver_new="" + # ver_old="" + # ver_new+=each + ":" + str(ver_new_dict1[each]) +# ver_old+=each + ":" + str(ver_old_dict1[each]) + # diffs = dmp.diff_main(ver_new, ver_old) + # d.append(dmp.diff_prettyHtml(diffs)) + + # return HttpResponse(d) + ver_new=nt1.version_info(request.GET["group1"]) + ver_old=nt1.version_info(request.GET["group2"]) + + variables=RequestContext(request,{'nt':nt1,'ver_old':ver_old_dict,'ver_new':ver_new_dict,'diffs':d ,'vid1':vid1,'vid2':vid2 }) + template="gstudio/version_diff.html" + return render_to_response(template,variables) + diff --git a/gstudio/xmlrpc/__init__.py b/gstudio/xmlrpc/__init__.py index 9bec5952..afb41e6f 100644 --- a/gstudio/xmlrpc/__init__.py +++ b/gstudio/xmlrpc/__init__.py @@ -80,6 +80,38 @@ GSTUDIO_XMLRPC_METAWEBLOG = [ ('gstudio.xmlrpc.metaweblog.get_nbh', 'metaWeblog.get_nbh'), ('gstudio.xmlrpc.metaweblog.new_media_object', - 'metaWeblog.newMediaObject')] + 'metaWeblog.newMediaObject'), + ('gstudio.xmlrpc.metaweblog.getNodetype', + 'metaweblog.getNodetype'), + ('gstudio.xmlrpc.metaweblog.nidExists', + 'metaweblog.nidExists'), + ('gstudio.xmlrpc.metaweblog.getinfoFromSSID', + 'metaweblog.getinfoFromSSID'), + #('gstudio.xmlrpc.metaweblog.getNeighbourhood', + #'metaweblog.getNeighbourhood'), + # ('gstudio.xmlrpc.metaweblog.getallNodes', + # 'metaweblog.getallNodes'), + ('gstudio.xmlrpc.metaweblog.getDatatype', + 'metaweblog.getDatatype'), + ('gstudio.xmlrpc.metaweblog.getAttributevalues', + 'metaweblog.getAttributevalues'), + ('gstudio.xmlrpc.metaweblog.getSubjecttypes', + 'metaweblog.getSubjecttypes'), + #('gstudio.xmlrpc.metaweblog.getAttributeType', + #'metaweblog.getAttributeType'), + ('gstudio.xmlrpc.metaweblog.getRoles', + 'metaweblog.getRoles'), + ('gstudio.xmlrpc.metaweblog.getSubtypes', + 'metaweblog.getSubtypes'), + #('gstudio.xmlrpc.metaweblog.Suballtypes', + #'metaweblog.Suballtypes'), + ('gstudio.xmlrpc.metaweblog.getRestrictions', + 'metaweblog.getRestrictions'), + ('gstudio.xmlrpc.metaweblog.getlatestSSID', + 'metaweblog.getlatestSSID'), + ('gstudio.xmlrpc.metaweblog.getAllSnapshots', + 'metaweblog.getAllSnapshots') +] + GSTUDIO_XMLRPC_METHODS = GSTUDIO_XMLRPC_PINGBACK + GSTUDIO_XMLRPC_METAWEBLOG diff --git a/gstudio/xmlrpc/metaweblog.py b/gstudio/xmlrpc/metaweblog.py index 6c89c21c..5b273ea3 100644 --- a/gstudio/xmlrpc/metaweblog.py +++ b/gstudio/xmlrpc/metaweblog.py @@ -1,4 +1,4 @@ -# Copyright (c) 2011, 2012 Free Software Foundation + # Copyright (c) 2011, 2012 Free Software Foundation # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -70,6 +70,8 @@ from gstudio.settings import PROTOCOL from gstudio.settings import UPLOAD_TO from gstudio.managers import DRAFT, PUBLISHED from django_xmlrpc.decorators import xmlrpc_func +from django.utils.datastructures import SortedDict +from gstudio.models import * # http://docs.nucleuscms.org/blog/12#errorcodes LOGIN_ERROR = 801 @@ -373,4 +375,191 @@ def new_media_object(blog_id, username, password, media): authenticate(username, password) path = default_storage.save(os.path.join(UPLOAD_TO, media['name']), ContentFile(media['bits'].data)) - return {'url': default_storage.url(path)} + return {'url': default_storage.url(path)} + + +@xmlrpc_func(returns='string', args='int') +def getNodetype(ssid): + """Returns the nodetype of given ssid """ + try : + g = Nodetype.objects.get(id=ssid) + return (g.ref._meta.module_name) + except Nodetype.DoesNotExist : + return "Node with the given ssid does not exist" + +@xmlrpc_func(returns='int', args='string') +def nidExists(nid): + """Returns 1 if a node with given id exists, else returns a 0 """ + try: + p = Nodetype.objects.get(title = nid) + return 1 + except Nodetype.DoesNotExist: + return 0 + + +@xmlrpc_func(returns=['struct'],args=['string']) +def getinfoFromSSID(ssid_list) : + """Given a list of ssids, it returns entire information of each ssid inside a dictionary with all the dictionaries contained within a list """ + lst = [] + for ssid in ssid_list : + try : + p = Objecttype.objects.get(id = ssid) + nbh = p.ref.get_nbh + lst.append(str(nbh)) + except Objecttype.DoesNotExist : + return "ssid",ssid,"Does not exist" + + + return lst + + + +@xmlrpc_func(returns=['struct'], args=['string']) + +def getDatatype(attrtype_ssid_list) : + """Given a list of attributessids, it returns its datatypes """ + + d = {} + g = {} + for l in attrtype_ssid_list : + p = NID.objects.get(id = l) + n = p.ref._meta.module_name + if n == 'attributetype' : + ft = FIELD_TYPE_CHOICES[int(p.ref.dataType) - 1] + d[str(p.id)] = ft[1] + else : + return " Node does not exist " + + return d + + +@xmlrpc_func(returns=['struct'], args=['string']) + +def getAttributevalues(Attrssidlist) : + """Given a list of attributessid, it returns their values """ + + d = {} + for l in Attrssidlist : + try : + p = Attribute.objects.get(id = l) + d[str(p.id)] = p.svalue + except Attribute.DoesNotExist : + return " Node does not exist" + + return d + + +@xmlrpc_func(returns=['struct'], args=['string']) + + +def getSubjecttypes( AttributeTypeNid ) : + """Given an attributetypenid, it returns the subjecttype participating in the attributetype """ + d ={} + for l in AttributeTypeNid : + try : + p = Attributetype.objects.get(id = l) + n = p.ref.subjecttype_id + s = NID.objects.get(id = n) + d[str(s.title)]= n + d['applicable_nodetypes'] = p.applicable_nodetypes + except Attribute.DoesNotExist: + return " Node does not exist " + return d + + + + + + +@xmlrpc_func(returns=['struct'], args=['string']) + +def getRoles(relationtypenid) : + """given a relationtype nid this method returns the roles participating in the relationtype """ + + d = {} + p = Relationtype.objects.get(nodetype_ptr_id = relationtypenid) + + d['cardinality1 '] = p.left_cardinality + d['cardinality2'] = p.right_cardinality + d['rtid'] = p.nodetype_ptr_id + d['applicablenodetype1'] = p.left_applicable_nodetypes + d['applicablenodetype2'] = p.right_applicable_nodetypes + d['subjecttype1'] = p.left_subjecttype_id + d['subjecttype2'] = p.right_subjecttype_id + return d + + +@xmlrpc_func(returns=['struct'], args=['string']) + + +def getSubtypes(nodeid) : + """Returns only the immediate subtype of the node specified""" + i = 0 + l = [] + p = Objecttype.objects.get(id = nodeid) + n = p.get_children() + u = len(n) + while u>0 : + t = n[i].id + l.append(str(t)) + i = i+1 + u = u-1 + return l + + + + +@xmlrpc_func(returns=['struct'], args=['string']) + +def getRestrictions(ATlist) : + """Given a list of attributetype ssids, this method returns all the restrictions that the attributetypes have """ + u = {} + d = {} + ft = [] + for a in ATlist : + p = Attributetype.objects.get(id = a) + ft = FIELD_TYPE_CHOICES[int(p.dataType)-1] + u['datatype'] = ft[1] + u['length'] = p.max_digits + u['precision'] = p.decimal_places + d[str(p.id)] = u + + return d + +@xmlrpc_func(returns='int', args='int') + +def getlatestSSID(nid) : + """Given the id, this method will return the latest ssid of the given id """ + + p = NID.objects.get(id = nid) + n = p.get_ssid + u = len(n) + r = n[u-1] + return r + + +@xmlrpc_func(returns=['struct'], args='int') + +def getAllSnapshots(nid) : + """Given the id, this method will return all the ssids of the given id """ + + p = NID.objects.get(id = nid) + n = p.get_ssid + return n + + + + + + + + + + + + + + + + + diff --git a/gstudio/xmlrpc/rpc/views.py b/gstudio/xmlrpc/rpc/views.py new file mode 100644 index 00000000..8c66b384 --- /dev/null +++ b/gstudio/xmlrpc/rpc/views.py @@ -0,0 +1,186 @@ +"""Uses SimpleXMLRPCServer's SimpleXMLRPCDispatcher to serve XML-RPC requests + +Authors:: + Graham Binns + Reza Mohammadi + Julien Fache + +Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who +posted the original SimpleXMLRPCDispatcher to the Django wiki: +http://code.djangoproject.com/wiki/XML-RPC + +New BSD License +=============== +Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the <ORGANIZATION> nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +import sys + +import django +from django.conf import settings +from django.template import RequestContext +from django.shortcuts import render_to_response +from django.core.exceptions import ImproperlyConfigured +from django.http import HttpResponse, HttpResponseServerError +from gstudio.xmlrpc.metaweblog import * +from django.utils.datastructures import SortedDict +try: + from django.views.decorators.csrf import csrf_exempt +except ImportError: + from django.contrib.csrf.middleware import csrf_exempt + +from dispatcher import DjangoXMLRPCDispatcher +from decorators import xmlrpc_func + + +# We create a local DEBUG variable from the data in settings. +DEBUG = hasattr(settings, 'XMLRPC_DEBUG') and settings.XMLRPC_DEBUG + +# Declare xmlrpcdispatcher correctly depending on our python version +if sys.version_info[:3] >= (2, 5,): + xmlrpcdispatcher = DjangoXMLRPCDispatcher(allow_none=True, encoding=None) +else: + xmlrpcdispatcher = DjangoXMLRPCDispatcher() + + +def request_datas(request): + if django.VERSION[1] > 3: + return request.body + return request.raw_post_data + + +@xmlrpc_func(returns='string', args=['string']) +def test_xmlrpc(text): + """Simply returns the args passed to it as a string""" + return "Here's a response! %s" % str(text) + + +@csrf_exempt +def handle_xmlrpc(request): + """Handles XML-RPC requests. All XML-RPC calls should be forwarded here + + request + The HttpRequest object that carries the XML-RPC call. If this is a + GET request, nothing will happen (we only accept POST requests) + """ + if request.method == "POST": + if DEBUG: + print request_datas(request) + try: + response = HttpResponse(content_type='text/xml') + response.write( + xmlrpcdispatcher._marshaled_dispatch(request_datas(request))) + if DEBUG: + print response + return response + except: + return HttpResponseServerError() + else: + methods = xmlrpcdispatcher.system_listMethods() + method_list = [] + + for method in methods: + sig_ = xmlrpcdispatcher.system_methodSignature(method) + sig = { + 'returns': sig_[0], + 'args': ", ".join(sig_[1:]), + } + + # this just reads your docblock, so fill it in! + method_help = xmlrpcdispatcher.system_methodHelp(method) + + method_list.append((method, sig, method_help)) + + if hasattr(settings, 'XMLRPC_GET_TEMPLATE'): + # This behaviour is deprecated + if settings.DEBUG: + print "Use of settings.XMLRPC_GET_TEMPLATE is deprecated " \ + + "Please update your code to use django_xmlrpc/templates" + template = settings.XMLRPC_GET_TEMPLATE + else: + template = 'xmlrpc_get.html' + return render_to_response(template, {'methods': method_list}, + context_instance=RequestContext(request)) + + +# Load up any methods that have been registered with the server in settings +if hasattr(settings, 'XMLRPC_METHODS'): + for path, name in settings.XMLRPC_METHODS: + # if "path" is actually a function, just add it without fuss + if callable(path): + xmlrpcdispatcher.register_function(path, name) + continue + + # Otherwise we try and find something that we can call + i = path.rfind('.') + module, attr = path[:i], path[i + 1:] + + try: + mod = __import__(module, globals(), locals(), [attr]) + except ImportError, ex: + raise ImproperlyConfigured("Error registering XML-RPC method: " \ + + "module %s can't be imported" % module) + + try: + func = getattr(mod, attr) + except AttributeError: + raise ImproperlyConfigured('Error registering XML-RPC method: ' \ + + 'module %s doesn\'t define a method "%s"' % (module, attr)) + + if not callable(func): + raise ImproperlyConfigured('Error registering XML-RPC method: ' \ + + '"%s" is not callable in module %s' % (attr, module)) + + xmlrpcdispatcher.register_function(func, name) + xmlrpcdispatcher.register_function(getNodetype,'getNodetype') + xmlrpcdispatcher.register_function(nidExists,'nidExists') + xmlrpcdispatcher.register_function(getinfoFromSSID,'getinfoFromSSID') + #xmlrpcdispatcher.register_function(getNeighbourhood,'getNeighbourhood') + xmlrpcdispatcher.register_function(get_nbh,'get_nbh') + #xmlrpcdispatcher.register_function(getallNodes,'getallNodes') + xmlrpcdispatcher.register_function(getDatatype,'getDatatype') + xmlrpcdispatcher.register_function(getAttributevalues,'getAttributevalues') + xmlrpcdispatcher.register_function(getSubjecttypes,'getSubjecttypes') + #xmlrpcdispatcher.register_function(getAttributeType,'getAttributeType') + xmlrpcdispatcher.register_function(getRoles,'getRoles') + xmlrpcdispatcher.register_function(getSubtypes,'getSubtypes') + #xmlrpcdispatcher.register_function(Suballtypes,'Suballtypes') + xmlrpcdispatcher.register_function(getRestrictions,'getRestrictions') + xmlrpcdispatcher.register_function(getlatestSSID,'getlatestSSID') + xmlrpcdispatcher.register_function(getAllSnapshots,'getAllSnapshots') + + + + + + + +# Finally, register the introspection and multicall methods with the XML-RPC +# namespace +xmlrpcdispatcher.register_introspection_functions() +xmlrpcdispatcher.register_multicall_functions() diff --git a/objectapp/TAGS b/objectapp/TAGS deleted file mode 100644 index 82ecaf2f..00000000 --- a/objectapp/TAGS +++ /dev/null @@ -1,1945 +0,0 @@ - -fixtures/helloworld.json,158 - "login_required": false,67,1886 - "comment_enabled": true,70,1990 - "login_required": false,101,5063 - "comment_enabled": true,104,5167 - -feeds.py,2021 -class ObjectappFeed(28,992 - def __init__(32,1085 -class GbobjectFeed(40,1342 - def item_pubdate(45,1517 - def item_objecttypes(49,1632 - def item_author_name(53,1783 - def item_author_email(59,2007 - def item_author_link(63,2132 - def item_enclosure_url(72,2460 - def item_enclosure_length(81,2733 - def item_enclosure_mime_type(85,2842 -class LatestGbobjects(90,2961 - def link(93,3039 - def items(97,3157 - def title(101,3281 - def description(105,3402 -class ObjecttypeGbobjects(110,3543 - def get_object(113,3625 - def items(117,3760 - def link(121,3912 - def title(125,4012 - def description(129,4135 -class AuthorGbobjects(134,4282 - def get_object(137,4357 - def items(141,4511 - def link(145,4668 - def title(149,4797 - def description(153,4915 -class TagGbobjects(158,5049 - def get_object(161,5117 - def items(165,5251 - def link(170,5446 - def title(174,5565 - def description(178,5680 -class SearchGbobjects(183,5819 - def get_object(186,5901 - def items(193,6131 - def link(197,6277 - def title(201,6420 - def description(205,6536 -class GbobjectDiscussions(210,6676 - def get_object(215,6879 - def items(222,7238 - def item_pubdate(226,7370 - def item_link(230,7484 - def link(234,7591 - def item_author_name(238,7689 - def item_author_email(242,7804 - def item_author_link(246,7929 - def title(250,8049 - def description(254,8158 -class GbobjectComments(259,8305 - def items(264,8502 - def item_link(268,8628 - def title(272,8749 - def description(276,8855 - def item_enclosure_url(280,8998 - def item_enclosure_length(284,9144 - def item_enclosure_mime_type(288,9253 -class GbobjectPingbacks(293,9372 - def items(298,9573 - def item_link(302,9701 - def title(306,9824 - def description(310,9931 -class GbobjectTrackbacks(315,10076 - def items(320,10281 - def item_link(324,10411 - def title(328,10536 - def description(332,10644 - -signals.py,175 -def disable_for_loaddata(10,160 - def wrapper(16,363 -def ping_directories_handler(26,598 -def ping_external_urls_handler(38,976 -def disconnect_objectapp_signals(48,1276 - -management/commands/feed2objectapp.py,206 -class Command(23,748 - def __init__(42,1550 - def write_out(50,1851 - def handle_label(56,2096 - def import_gbobjects(80,3061 - def import_objecttypes(130,5400 - def import_tags(138,5733 - -management/commands/spam_cleanup.py,51 -class Command(9,238 - def handle_noargs(14,393 - -management/commands/wp2objectapp.py,421 -class Command(29,919 - def __init__(56,2052 - def write_out(64,2353 - def handle_label(70,2598 - def import_authors(97,3610 - def migrate_author(120,4480 - def import_objecttypes(151,5881 - def import_tags(175,6979 - def get_gbobject_tags(188,7607 - def get_gbobject_objecttypes(198,8031 - def import_gbobject(208,8455 - def import_gbobjects(261,10905 - def import_comments(283,11937 - -management/commands/blogger2objectapp.py,497 -class Command(26,810 - def __init__(44,1673 - def write_out(51,1935 - def handle_noargs(57,2180 - def select_blog_id(108,4201 - def get_Objecttype(129,5020 - def import_posts(139,5289 - def import_comments(176,7171 -def convert_blogger_timestamp(211,8393 -def is_draft(217,8572 -def get_blog_id(225,8740 -def get_post_id(229,8815 -class BloggerManager(233,8890 - def __init__(235,8921 - def get_blogs(241,9166 - def get_posts(246,9306 - def get_comments(251,9468 - -management/commands/objectapp2wp.py,52 -class Command(16,459 - def handle_noargs(21,649 - -context_processors.py,18 -def version(5,75 - -tests/feeds.py,833 -class ObjectappFeedsTestCase(33,1155 - def setUp(37,1281 - def create_published_gbobject(44,1637 - def create_discussions(58,2215 - def test_gbobject_feed(75,3344 - def test_gbobject_feed_enclosure(94,4296 - def test_latest_gbobjects(118,5477 - def test_Objecttype_gbobjects(129,5921 - def test_author_gbobjects(142,6564 - def test_tag_gbobjects(153,7149 - def test_search_gbobjects(165,7716 - class FakeRequest:FakeRequest166,7753 - def __init__(167,7780 - def test_gbobject_discussions(182,8492 - def test_gbobject_comments(204,9660 - def test_gbobject_pingbacks(223,10639 - def test_gbobject_trackbacks(236,11280 - def test_gbobject_feed_no_authors(249,11926 - def test_gbobject_feed_rss_or_atom(258,12286 - def test_discussion_feed_with_same_slugs(269,12736 - -tests/signals.py,286 -class SignalsTestCase(12,356 - def test_disable_for_loaddata(15,423 - def make_top(19,516 - def call(22,567 - def test_ping_directories_handler(29,712 - def fake_pinger(33,826 - def test_ping_external_urls_handler(61,1918 - def fake_pinger(65,2037 - -tests/metaweblog.py,491 -class MetaWeblogTestCase(23,737 - def setUp(27,844 - def test_authenticate(63,2573 - def test_get_users_blogs(79,3433 - def test_get_user_info(88,3866 - def test_get_authors(102,4563 - def test_get_objecttypes(112,5073 - def test_new_Objecttype(151,7147 - def test_get_recent_posts(167,8077 - def test_delete_post(173,8365 - def test_get_post(182,8798 - def test_new_post(207,10234 - def test_edit_post(224,11049 - def test_new_media_object(281,13891 - -tests/spam_checker.py,72 -class SpamCheckerTestCase(11,253 - def test_get_spam_checker(14,339 - -tests/quick_gbobject.py,119 -class QuickGbobjectTestCase(10,234 - def setUp(14,353 - def tearDown(18,456 - def test_quick_gbobject(21,530 - -tests/url_shortener.py,121 -class URLShortenerTestCase(12,323 - def setUp(15,411 - def tearDown(18,499 - def test_get_url_shortener(21,590 - -tests/__init__.py,19 -def suite(32,1630 - -tests/managers.py,585 -class ManagersTestCase(18,482 - def setUp(20,517 - def test_tags_published(51,2027 - def test_author_published_manager_get_query_set(56,2251 - def test_gbobjects_published(65,2651 - def test_gbobject_published_manager_get_query_set(86,3805 - def test_gbobject_published_manager_on_site(107,4805 - def test_gbobject_published_manager_basic_search(115,5187 - def test_gbobject_published_manager_advanced_search(123,5634 - def test_gbobject_published_manager_advanced_search_with_punctuation(227,11470 - def test_gbobject_published_manager_search(238,12007 - -tests/custom_views_detail_urls.py,73 -def call_with_template_and_extra_context(13,380 - def wrapper(18,537 - -tests/views.py,1337 -class ViewsBaseCase(17,494 - def setUp(22,584 - def tearDown(62,2283 - def create_published_gbobject(66,2445 - def check_publishing_context(79,2966 -class ObjectappViewsTestCase(92,3513 - def test_objectapp_gbobject_archive_index(100,3780 - def test_objectapp_gbobject_archive_year(103,3883 - def test_objectapp_gbobject_archive_month(106,3990 - def test_objectapp_gbobject_archive_day(109,4101 - def test_objectapp_gbobject_shortlink(112,4213 - def test_objectapp_gbobject_detail(117,4444 - def test_objectapp_gbobject_detail_login(135,5278 - def test_objectapp_gbobject_detail_password(142,5580 - def test_objectapp_gbobject_channel(157,6395 - def test_objectapp_Objecttype_list(160,6505 - def test_objectapp_Objecttype_detail(167,6873 - def test_objectapp_Objecttype_detail_paginated(172,7157 - def test_objectapp_author_list(193,8274 - def test_objectapp_author_detail(200,8617 - def test_objectapp_tag_list(205,8889 - def test_objectapp_tag_detail(212,9137 - def test_objectapp_gbobject_search(217,9393 - def test_objectapp_sitemap(228,9970 - def test_objectapp_trackback(239,10581 -class ObjectappCustomDetailViews(275,12268 - def test_custom_Objecttype_detail(283,12586 - def test_custom_author_detail(289,12920 - def test_custom_tag_detail(295,13246 - -tests/moderator.py,249 -class GbobjectCommentModeratorTestCase(14,428 - def setUp(17,518 - def test_email(31,1123 - def test_do_email_notification(48,1938 - def test_do_email_authors(58,2465 - def test_do_email_reply(72,3198 - def test_moderate(103,4855 - -tests/objecttype.py,138 -class ObjecttypeTestCase(10,244 - def setUp(12,281 - def test_gbobjects_published(27,977 - def test_gbobjects_tree_path(47,1818 - -tests/templates/objectapp/_gbobject_detail.html,23 -{{ object.title }}1,0 - -tests/templates/objectapp/base.html,56 -Objectapp's Blog - {% block title %}{% endblock %}3,16 - -tests/custom_url_shortener.py,19 -def backend(8,184 - -tests/admin.py,238 -class GbobjectAdminTestCase(10,228 - def setUp(14,341 - def tearDown(24,798 - def test_gbobject_add_and_change(27,872 -class ObjecttypeAdminTestCase(54,2153 - def setUp(58,2271 - def test_Objecttype_add_and_change(62,2438 - -tests/custom_spam_checker.py,19 -def backend(8,183 - -tests/utils.py,76 -class TestTransport(8,123 - def __init__(12,236 - def request(16,359 - -tests/gbobject.py,827 -class GbobjectTestCase(24,761 - def setUp(26,796 - def test_discussions(32,1002 - def test_str(85,3847 - def test_word_count(88,3940 - def test_comments_are_open(91,4027 - def test_is_actual(102,4523 - def test_is_visible(111,4935 - def test_short_url(118,5224 - def test_previous_gbobject(128,5770 - def test_next_gbobject(149,6858 - def test_related_published(170,7926 -class GbobjectHtmlContentTestCase(192,8877 - def setUp(194,8923 - def tearDown(203,9256 - def test_html_content_default(207,9392 - def test_html_content_textitle(216,9789 - def test_html_content_markdown(231,10506 - def test_html_content_restructuredtext(246,11203 -class GbobjectGetBaseModelTestCase(262,11934 - def setUp(264,11981 - def tearDown(267,12083 - def test_get_base_model(270,12188 - -tests/ping.py,387 -class DirectoryPingerTestCase(13,318 - def setUp(15,400 - def test_ping_gbobject(24,781 -class ExternalUrlsPingerTestCase(31,998 - def setUp(34,1087 - def test_is_external_url(42,1411 - def test_find_external_urls(57,2172 - def test_find_pingback_href(71,2829 - def fake_urlopen(89,3551 - def test_find_pingback_urls(105,4301 - def test_pingback_url(120,4944 - -tests/sitemaps.py,274 -class ObjectappSitemapsTestCase(18,537 - def setUp(22,666 - def test_gbobject_sitemap(43,1722 - def test_Objecttype_sitemap(49,1962 - def test_author_sitemap(58,2390 - def test_tag_sitemap(68,2851 - def test_Objecttype_sitemap_zero_division_error(77,3284 - -tests/pingback.py,251 -class PingBackTestCase(24,738 - def fake_urlopen(28,842 - def setUp(39,1281 - def tearDown(85,3648 - def test_generate_pingback_content(90,3855 - def test_pingback_ping(113,4909 - def test_pingback_extensions_get_pingbacks(166,7319 - -tests/comparison.py,142 -class ComparisonTestCase(10,260 - def test_pearson_score(13,339 - def test_clustered_model(21,722 - def test_vector_builder(35,1514 - -tests/templatetags.py,955 -class TemplateTagsTestCase(40,1849 - def setUp(43,1927 - def publish_gbobject(51,2235 - def test_get_objecttypes(57,2436 - def test_get_authors(67,2914 - def test_get_recent_gbobjects(80,3496 - def test_get_featured_gbobjects(93,4072 - def test_get_random_gbobjects(106,4658 - def test_get_popular_gbobjects(119,5234 - def test_get_similar_gbobjects(152,6853 - def test_get_archives_gbobjects(176,7972 - def test_get_archives_tree(199,9028 - def test_get_calendar_gbobjects(222,10096 - def test_get_recent_comments(268,12343 - def test_get_recent_linkbacks(296,13612 - def test_objectapp_pagination(324,14902 - class FakeRequest(325,14943 - def __init__(326,14978 - def test_objectapp_breadcrumbs(411,19121 - class FakeRequest(412,19163 - def __init__(413,19198 - def test_get_gravatar(486,22745 - def test_get_tags(496,23187 - def test_get_tag_cloud(519,23988 - -managers.py,310 -def tags_published(12,171 -class AuthorPublishedManager(22,555 - def get_query_set(25,650 -def gbobjects_published(36,1045 -class GbobjectPublishedManager(45,1366 - def get_query_set(48,1465 - def on_site(53,1639 - def search(58,1843 - def advanced_search(65,2050 - def basic_search(70,2227 - -search.py,70 -def createQ(23,634 -def unionQ(81,2728 -def advanced_search(129,4198 - -views/quick_gbobject.py,64 -class QuickGbobjectForm(18,542 -def view_quick_gbobject(27,839 - -views/authors.py,26 -def author_detail(14,425 - -views/trackback.py,31 -def gbobject_trackback(14,427 - -views/search.py,27 -def gbobject_search(9,234 - -views/gbobjects.py,31 -def gbobject_shortlink(26,895 - -views/tags.py,44 -def tag_list(15,418 -def tag_detail(24,819 - -views/objecttypes.py,64 -def get_Objecttype_or_404(10,311 -def Objecttype_detail(16,499 - -views/sitemap.py,19 -def sitemap(8,174 - -views/channels.py,28 -def gbobject_channel(7,133 - -views/decorators.py,187 -def update_queryset(15,493 - def wrapper(23,813 -def password(33,1050 -def protect_gbobject(47,1623 - def wrapper(53,1839 -def template_name_for_gbobject_queryset_filtered(72,2640 - -moderator.py,194 -class GbobjectCommentModerator(23,910 - def email(34,1388 - def do_email_notification(50,2108 - def do_email_authors(67,2993 - def do_email_reply(89,4151 - def moderate(116,5607 - -admin/process.py,802 -class ProcessAdmin(24,773 - def __init__(76,3621 - def get_title(81,3790 - def get_authors(92,4279 - def get_objecttypes(105,4852 - def get_tags(118,5452 - def get_sites(130,5961 - def get_comments_are_open(138,6281 - def get_is_actual(144,6535 - def get_is_visible(150,6743 - def get_link(156,6957 - def get_short_url(163,7233 - def save_model(174,7625 - def queryset(188,8235 - def formfield_for_manytomany(195,8519 - def get_actions(206,9018 - def make_mine(220,9549 - def make_published(229,9944 - def make_hidden(237,10337 - def make_tweet(244,10641 - def close_comments(260,11391 - def close_pingbacks(268,11778 - def put_on_top(276,12136 - def ping_directories(285,12582 - def get_urls(308,13643 - def _media(326,14564 - -admin/system.py,801 -class SystemAdmin(24,772 - def __init__(76,3646 - def get_title(81,3814 - def get_authors(92,4299 - def get_objecttypes(105,4869 - def get_tags(118,5466 - def get_sites(130,5972 - def get_comments_are_open(138,6290 - def get_is_actual(144,6541 - def get_is_visible(150,6746 - def get_link(156,6957 - def get_short_url(163,7230 - def save_model(174,7620 - def queryset(188,8222 - def formfield_for_manytomany(195,8505 - def get_actions(206,9003 - def make_mine(220,9533 - def make_published(229,9919 - def make_hidden(237,10306 - def make_tweet(244,10610 - def close_comments(260,11355 - def close_pingbacks(268,11735 - def put_on_top(276,12085 - def ping_directories(285,12525 - def get_urls(308,13579 - def _media(326,14491 - -admin/forms.py,327 -class ProcessAdminForm(28,954 - class Meta:Meta30,996 -class SystemAdminForm(34,1074 - class Meta:Meta36,1115 -class ObjecttypeAdminForm(42,1194 - def __init__(49,1465 - def clean_parent(55,1749 - class Meta:Meta63,2035 -class GbobjectAdminForm(68,2121 - def __init__(77,2472 - class Meta:Meta87,2836 - -admin/widgets.py,462 -class TreeNodeChoiceField(13,346 - def __init__(16,542 - def label_from_instance(22,836 -class MPTTModelChoiceIterator(29,1114 - def choice(31,1225 -class MPTTModelMultipleChoiceField(39,1551 - def __init__(41,1670 - def label_from_instance(45,1859 - def _get_choices(51,2136 -class MPTTFilteredSelectMultiple(60,2390 - def __init__(62,2505 - def render_options(66,2692 - def render_option(74,3076 - class Media:Media103,4437 - -admin/gbobject.py,801 -class GbobjectAdmin(24,774 - def __init__(64,3043 - def get_title(69,3213 - def get_authors(80,3706 - def get_objecttypes(93,4282 - def get_tags(106,4885 - def get_sites(118,5397 - def get_comments_are_open(126,5719 - def get_is_actual(132,5976 - def get_is_visible(138,6187 - def get_link(144,6404 - def get_short_url(151,6683 - def save_model(162,7077 - def queryset(176,7695 - def formfield_for_manytomany(183,7982 - def get_actions(194,8482 - def make_mine(208,9014 - def make_published(217,9412 - def make_hidden(225,9805 - def make_tweet(232,10115 - def close_comments(248,10870 - def close_pingbacks(256,11256 - def put_on_top(264,11612 - def ping_directories(273,12058 - def get_urls(296,13118 - def _media(314,14048 - -url_shortener/__init__.py,30 -def get_url_shortener(11,292 - -url_shortener/backends/bitly.py,20 -def backend(17,513 - -url_shortener/backends/default.py,19 -def backend(8,183 - -templatetags/objectapp_tags.py,713 -def get_objecttypes(40,1325 -def get_this_nodes_uri(46,1529 -def get_authors(52,1674 -def get_recent_gbobjects(59,1906 -def get_featured_gbobjects(66,2183 -def get_random_gbobjects(74,2502 -def get_popular_gbobjects(84,2867 -def get_similar_gbobjects(109,3829 - def compute_related(120,4183 -def get_archives_gbobjects(152,5322 -def get_archives_gbobjects_tree(160,5662 -def get_calendar_gbobjects(169,6044 -def get_recent_comments(198,7130 -def get_recent_linkbacks(215,7887 -def objectapp_pagination(234,8628 -def objectapp_breadcrumbs(273,10381 -def get_gravatar(287,10945 -class TagsNode(299,11316 - def __init__(300,11338 - def render(303,11415 -def get_tags(309,11533 -def get_tag_cloud(323,11945 - -templatetags/objectapp_admin_tags.py,62 -def get_draft_gbobjects(16,460 -def get_content_stats(24,764 - -templatetags/zbreadcrumbs.py,147 -class Crumb(9,190 - def __init__(11,245 -def year_crumb(16,335 -def month_crumb(23,546 -def day_crumb(32,879 -def retrieve_breadcrumbs(62,2278 - -templatetags/zcalendar.py,176 -class ObjectappCalendar(15,379 - def __init__(18,454 - def formatday(24,683 - def formatmonth(39,1467 - def formatweekday(52,2067 - def formatmonthname(58,2312 - -migrations/0001_initial.py,76 -class Migration(7,125 - def forwards(9,160 - def backwards(174,10519 - -templates/objectapp/password.html,72 -{% trans "Password required" %}7,137 -{% endblock %}id_password34,820 - -templates/objectapp/opensearch.xml,97 -<?xml version=1,0 -<OpenSearchDescription xmlns=4,97 - <Url type=11,502 - <Query role=15,1047 - -templates/objectapp/tags/slider_gbobjects.html,170 -{% for gbobject in gbobjects %}slider4,64 -{{ gbobject.title }}nav-slider-{{ forloop.counter }}9,394 -{{ gbobject.title }}gbobject-slider-{{ forloop.counter }}20,734 - -templates/objectapp/_gbobject_detail.html,50 -{{ object.title }}gbobject-{{ object.pk }}6,315 - -templates/objectapp/gbobject_trackback.xml,19 -<?xml version=1,0 - -templates/objectapp/skeleton.html,319 -Gnowledge Studio - {% block title %}{% endblock %}75,4675 -{% include "gstudio/_header.html" %}gstudio80,4806 -/ {% block breadcrumbs %}{% endblock %}breadcrumbs84,4896 -{% block content %}content89,5052 -The content block need to be overrided!90,5075 -{% block sidebar %}sidebar94,5193 -Powered by footer99,5300 - -templates/objectapp/sitemap.html,187 -{% trans "Sitemap" %}7,152 -{% trans "Gbobjects per objecttypes" %}10,221 -{% trans "All the gbobjects" %}31,847 -{% trans "Objecttypes" %}50,1420 -{% trans "Monthly archives" %}67,2087 - -templates/objectapp/objecttype_list.html,36 -{% trans "Objecttype list" %}9,214 - -templates/objectapp/gbobject_list.html,169 -{{ Objecttype.title }}23,1597 -{% trans "Tag" %} : {{ tag }}30,1750 -{% blocktrans with author.username as author %}Gbobjects by {{ author }}{% endblocktrans %}34,1818 - -templates/objectapp/gbobject_archive_year.html,78 -{% trans "Archives" %} {{ year }}9,225 -{% trans "Monthly archives" %}13,288 - -templates/objectapp/tag_list.html,29 -{% trans "Tag list" %}9,190 - -templates/objectapp/rsd.xml,42 -<?xml version=1,0 - <api name=8,336 - -templates/objectapp/wlwmanifest.xml,34 -{% load i18n %}<?xml version=1,0 - -templates/objectapp/wxr.xml,142 -<?xml version=1,0 -<!-- generator=8,421 - <Objecttype domain=44,2185 - <Objecttype domain=46,2390 - <guid isPermaLink=48,2496 - -templates/objectapp/login.html,35 -{% trans "Login required" %}7,134 - -templates/objectapp/base.html,414 -{% trans "Search" %}23,956 -{% trans "Objecttypes" %}searchbox35,1611 -{% trans "Authors" %}39,1701 -{% trans "Calendar" %}43,1784 -{% trans "Tags" %}47,1875 -{% trans "Recent gbobjects" %}51,1956 -{% trans "Recent comments" %}55,2059 -{% trans "Recent linkbacks" %}59,2161 -{% trans "Random gbobjects" %}63,2263 -{% trans "Popular gbobjects" %}67,2366 -{% trans "Archives" %}71,2471 -{% trans "Tools" %}76,2599 - -templates/objectapp/gbobject_search.html,128 -{% trans "Search results for" %} {% if pattern %}'{{ pattern }}'{% endif %}14,814 -{% if is_paginated %}main_searchbox46,2028 - -templates/objectapp/gbobject_archive_day.html,58 -{% trans "Archives" %} {{ day|date:"DATE_FORMAT" }}9,261 - -templates/objectapp/_header.html,81 - header4,44 -{% firstof user.first_name user.username %}user-tools11,413 - -templates/objectapp/author_list.html,32 -{% trans "Author list" %}9,196 - -templates/objectapp/gbobject_detail.html,640 -{% trans "Next gbobject" %}45,2337 -{% trans "Previous gbobject" %}59,2710 -{% trans "Related gbobjects" %}72,3046 -{% trans "Similar gbobjects" %}83,3373 -{% trans "Comments" %}comments91,3555 -{% for comment in comment_list %}comment-list95,3710 -{% if comment.url %}comment_{{ comment.pk }}102,4146 -{% trans "Pingbacks" %}pingbacks132,4897 -{% for pingback in pingback_list %}pingback-list136,5057 -{{ pingback.user_name }}pingback_{{ pingback.pk }}140,5281 -{% trans "Trackbacks" %}trackbacks166,5947 -{% for trackback in trackback_list %}trackback-list169,6063 -{{ trackback.user_name }}trackback_{{ trackback.pk }}173,6294 - -templates/objectapp/gbobject_archive_month.html,102 -{% trans "Archives" %} {{ month|date:"YEAR_MONTH_FORMAT" }}9,277 -{% trans "Daily archives" %}13,366 - -templates/comments/objectapp/gbobject/posted.html,44 -{% trans "Thanks for your comment" %}7,143 - -templates/comments/objectapp_gbobject_preview.html,250 -{% blocktrans count form.errors|length as errors %}Please correct following error.{% plural %}Please correct following errors.{% endblocktrans %}9,189 -{% trans "Preview of the comment" %}12,360 -{% if form.cleaned_data.url %}comment_preview20,787 - -templates/admin/objectapp/app_index.html,80 -{% include "admin/objectapp/widgets/content_stats.html" %}content-main28,1062 - -templates/admin/objectapp/widgets/quickpost.html,110 -{% csrf_token %}quickpost4,124 -{% trans "Content" %}:id_title17,527 -{% trans "Tags" %}:id_content25,782 - -templates/admin/objectapp/widgets/base.html,74 -{% block title %}{% endblock %}{% block module_id %}{% endblock %}3,116 - -templates/500.html,167 -{% trans "Server error" %}11,217 -{% trans "Useful links" %}15,411 -{% trans "Recent gbobjects" %}31,781 -{% trans "Search" %}36,882 -{% endblock %}searchbox46,1228 - -templates/404.html,169 -{% trans "Page not found" %}11,219 -{% trans "Useful links" %}15,330 -{% trans "Recent gbobjects" %}31,700 -{% trans "Search" %}36,801 -{% endblock %}searchbox46,1147 - -TAGS,200 -fixtures/helloworld.json,json2,2 - "login_required": false,3,31 - "comment_enabled": true,4,70 - "login_required": false,5,109 - "comment_enabled": true,6,149 -feeds.py,py8,191 - -spam_checker/__init__.py,55 -def get_spam_checker(10,211 -def check_is_spam(26,713 - -spam_checker/backends/mollom.py,20 -def backend(22,707 - -spam_checker/backends/all_is_spam.py,18 -def backend(4,56 - -spam_checker/backends/automattic.py,20 -def backend(21,611 - -spam_checker/backends/typepad.py,42 -class TypePad(21,611 -def backend(26,731 - -static/objectapp/img/sitemap.png,41 -d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸U7,703 - -static/objectapp/img/objecttype.png,94 -(Ë’öû=m6ò}_ÙàB¦Ó©Çø`fÀëÉܲê`·ÛÑd2¡0͇¸®BaøªRÇgÁMÓPQÊbE‘Ò‡T iÛÖ$iÛÖ5,253 - -static/objectapp/img/wlw/watermark.png,608 -jTÐÄÙ¢0EP^HÁS´§©/Iýåih‘¾Á.‘èAs¨!:JŠ¤»?Êpñ!Êñ{X,X4,899 -‚ä†<VÜV5,995 -3Y¨V·,¶é±ëDN5%FÒPÐnÄÆ‘<6d_¡ê+¬™PcM7S¯,ÿøtüÖ¿šú+ÿKÀ>jhª dCi÷”T(–i(Ó÷:j"
÷¾~›ËožP.Zê½#9EŽ
ZidhÈA!2/ÒgÊÜ OöˆQ0}¦Œ-Q„ª$L5’¬Q„ª$L5’10,1712 -®Û7GLç7 èƒpR49×è"˜vƒkö„’º8t0Z“ç†8u¤aIž–”©E¡°ÍSïH®&wï§1ßÏêèýØæú(Üî
⯕ïÌF~î¿,¼ö⣨õ)^¯È»cÆÍ !,!ytQå( D?¡t&ïÖäÝ ’ía“Ê
VY\PF@ìñº“
qènS…ÂÆš’<q¿B©¹CJ²Û]!}‡žÇO}…ööOúÕ®» æÍuƒ®gtÎhèD c€:¡-ȸ$Ï)4”¹£‹ 0nÂ6‡YYš£‘k×w¬×
Å^§ï+VjæîÿþÆwè—þRÏþ»HyðUYS
r Bc‡r Bc15,3313 -·š1«‘Ø/‰ç5 ÍŠì)+L6H†’-)5Ž,-JÕ83â‡.j¼F% ¿èÑÑ"C‹‰ÍA5ªÚÓ#ä«¡\@fÃðfÃ21,4864 - -static/objectapp/img/wlw/comments.png,84 -ÔV”VV”5,151 -ÔV”V”" Rh£òpš´MC";ib;5,151 -ÔV”V”" Rh£òpš´MC";ib;~Åkï®wg~Åkï®w5,151 - -static/objectapp/img/plugin.png,992 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´StqtQ´Stq12,1526 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûgYû12,1526 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸j¶rvg¬jlRlcì›12,1526 - -static/objectapp/css/src/_base.sass,40 -$blueprint_font_family: unquote(13,424 - -static/objectapp/css/src/screen.sass,106 -ul,13,265 - h1,49,907 - h1, h2,49,907 - ul,62,1087 - li ul,65,1165 - +tag-cloud(cloud84,1495 - -static/objectapp/css/src/print.sass,179 - a,10,125 - a, a:link,link10,125 - a, a:link, a:visited,visited10,125 - a, a:link, a:visited, a:focus,focus10,125 - a, a:link, a:visited, a:focus, a:active,active10,125 - -static/objectapp/css/src/dashboard_objectapp.sass,41 - th,11,117 - background: url(15,163 - -static/objectapp/css/print.css,354 -h1,8,330 -h1, h2,8,330 -h1, h2, h3,8,330 -h1, h2, h3, h4,8,330 -h1, h2, h3, h4, h5,8,330 -a:link,link13,528 -body a,28,874 -body a, body a:link,link28,874 -body a, body a:link, body a:visited,visited28,874 -body a, body a:link, body a:visited, body a:focus,focus28,874 -body a, body a:link, body a:visited, body a:focus, body a:active,active28,874 - -static/objectapp/css/config.rb,19 -project_type 2,47 - -static/objectapp/css/ie.css,32 -fieldset,19,419 -legend,21,464 - -static/objectapp/css/screen.css,14875 -h1,3,103 -h1, h2,3,103 -h1, h2, h3,3,103 -h1, h2, h3, h4,3,103 -h1, h2, h3, h4, h5,3,103 -h1 img,4,167 -h1 img, h2 img,4,167 -h1 img, h2 img, h3 img,4,167 -h1 img, h2 img, h3 img, h4 img,4,167 -h1 img, h2 img, h3 img, h4 img, h5 img,4,167 -strong,30,1009 -em,32,1045 -sup,34,1078 -abbr,36,1108 -pre,44,1283 -pre, code,44,1283 -li ul,46,1374 -ul,48,1403 -th,65,1720 -th, td,65,1720 -table.striped tr:nth-child(child67,1768 -.column,column97,2475 -.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { display: inline;97,2475 -.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { display: inline; float: left;97,2475 -.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { display: inline; float: left; margin-right: 10px;px97,2475 -* html .column,column98,2768 -* html .column, * html .span-1, * html .span-2, * html .span-3, * html .span-4, * html .span-5, * html .span-6, * html .span-7, * html .span-8, * html .span-9, * html .span-10, * html .span-11, * html .span-12, * html .span-13, * html .span-14, * html .span-15, * html .span-16, * html .span-17, * html .span-18, * html .span-19, * html .span-20, * html .span-21, * html .span-22, * html .span-23, * html .span-24 { overflow-x: hidden;98,2768 -.span-1 { width: 30px;px102,3235 -.span-2 { width: 70px;px104,3261 -.span-3 { width: 110px;px106,3287 -.span-4 { width: 150px;px108,3314 -.span-5 { width: 190px;px110,3341 -.span-6 { width: 230px;px112,3368 -.span-7 { width: 270px;px114,3395 -.span-8 { width: 310px;px116,3422 -.span-9 { width: 350px;px118,3449 -.span-10 { width: 390px;px120,3476 -.span-11 { width: 430px;px122,3504 -.span-12 { width: 470px;px124,3532 -.span-13 { width: 510px;px126,3560 -.span-14 { width: 550px;px128,3588 -.span-15 { width: 590px;px130,3616 -.span-16 { width: 630px;px132,3644 -.span-17 { width: 670px;px134,3672 -.span-18 { width: 710px;px136,3700 -.span-19 { width: 750px;px138,3728 -.span-20 { width: 790px;px140,3756 -.span-21 { width: 830px;px142,3784 -.span-22 { width: 870px;px144,3812 -.span-23 { width: 910px;px146,3840 -.span-24 { width: 950px;px148,3868 -.span-24 { width: 950px; margin:margin148,3868 -input.span-1, textarea.span-1, select.span-1 { width: 30px;px150,3907 -input.span-2, textarea.span-2, select.span-2 { width: 70px;px151,3969 -input.span-3, textarea.span-3, select.span-3 { width: 110px;px152,4031 -input.span-4, textarea.span-4, select.span-4 { width: 150px;px153,4094 -input.span-5, textarea.span-5, select.span-5 { width: 190px;px154,4157 -input.span-6, textarea.span-6, select.span-6 { width: 230px;px155,4220 -input.span-7, textarea.span-7, select.span-7 { width: 270px;px156,4283 -input.span-8, textarea.span-8, select.span-8 { width: 310px;px157,4346 -input.span-9, textarea.span-9, select.span-9 { width: 350px;px158,4409 -input.span-10, textarea.span-10, select.span-10 { width: 390px;px159,4472 -input.span-11, textarea.span-11, select.span-11 { width: 430px;px160,4538 -input.span-12, textarea.span-12, select.span-12 { width: 470px;px161,4604 -input.span-13, textarea.span-13, select.span-13 { width: 510px;px162,4670 -input.span-14, textarea.span-14, select.span-14 { width: 550px;px163,4736 -input.span-15, textarea.span-15, select.span-15 { width: 590px;px164,4802 -input.span-16, textarea.span-16, select.span-16 { width: 630px;px165,4868 -input.span-17, textarea.span-17, select.span-17 { width: 670px;px166,4934 -input.span-18, textarea.span-18, select.span-18 { width: 710px;px167,5000 -input.span-19, textarea.span-19, select.span-19 { width: 750px;px168,5066 -input.span-20, textarea.span-20, select.span-20 { width: 790px;px169,5132 -input.span-21, textarea.span-21, select.span-21 { width: 830px;px170,5198 -input.span-22, textarea.span-22, select.span-22 { width: 870px;px171,5264 -input.span-23, textarea.span-23, select.span-23 { width: 910px;px172,5330 -input.span-24, textarea.span-24, select.span-24 { width: 950px;px173,5396 -.append-1 { padding-right: 40px;px175,5463 -.append-2 { padding-right: 80px;px177,5499 -.append-3 { padding-right: 120px;px179,5535 -.append-4 { padding-right: 160px;px181,5572 -.append-5 { padding-right: 200px;px183,5609 -.append-6 { padding-right: 240px;px185,5646 -.append-7 { padding-right: 280px;px187,5683 -.append-8 { padding-right: 320px;px189,5720 -.append-9 { padding-right: 360px;px191,5757 -.append-10 { padding-right: 400px;px193,5794 -.append-11 { padding-right: 440px;px195,5832 -.append-12 { padding-right: 480px;px197,5870 -.append-13 { padding-right: 520px;px199,5908 -.append-14 { padding-right: 560px;px201,5946 -.append-15 { padding-right: 600px;px203,5984 -.append-16 { padding-right: 640px;px205,6022 -.append-17 { padding-right: 680px;px207,6060 -.append-18 { padding-right: 720px;px209,6098 -.append-19 { padding-right: 760px;px211,6136 -.append-20 { padding-right: 800px;px213,6174 -.append-21 { padding-right: 840px;px215,6212 -.append-22 { padding-right: 880px;px217,6250 -.append-23 { padding-right: 920px;px219,6288 -.prepend-1 { padding-left: 40px;px221,6326 -.prepend-2 { padding-left: 80px;px223,6362 -.prepend-3 { padding-left: 120px;px225,6398 -.prepend-4 { padding-left: 160px;px227,6435 -.prepend-5 { padding-left: 200px;px229,6472 -.prepend-6 { padding-left: 240px;px231,6509 -.prepend-7 { padding-left: 280px;px233,6546 -.prepend-8 { padding-left: 320px;px235,6583 -.prepend-9 { padding-left: 360px;px237,6620 -.prepend-10 { padding-left: 400px;px239,6657 -.prepend-11 { padding-left: 440px;px241,6695 -.prepend-12 { padding-left: 480px;px243,6733 -.prepend-13 { padding-left: 520px;px245,6771 -.prepend-14 { padding-left: 560px;px247,6809 -.prepend-15 { padding-left: 600px;px249,6847 -.prepend-16 { padding-left: 640px;px251,6885 -.prepend-17 { padding-left: 680px;px253,6923 -.prepend-18 { padding-left: 720px;px255,6961 -.prepend-19 { padding-left: 760px;px257,6999 -.prepend-20 { padding-left: 800px;px259,7037 -.prepend-21 { padding-left: 840px;px261,7075 -.prepend-22 { padding-left: 880px;px263,7113 -.prepend-23 { padding-left: 920px;px265,7151 -.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline;267,7189 -.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline; float: left;267,7189 -.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline; float: left; position: relative;267,7189 -.pull-1 { margin-left: -40px;px269,7474 -.pull-2 { margin-left: -80px;px271,7507 -.pull-3 { margin-left: -120px;px273,7540 -.pull-4 { margin-left: -160px;px275,7574 -.pull-5 { margin-left: -200px;px277,7608 -.pull-6 { margin-left: -240px;px279,7642 -.pull-7 { margin-left: -280px;px281,7676 -.pull-8 { margin-left: -320px;px283,7710 -.pull-9 { margin-left: -360px;px285,7744 -.pull-10 { margin-left: -400px;px287,7778 -.pull-11 { margin-left: -440px;px289,7813 -.pull-12 { margin-left: -480px;px291,7848 -.pull-13 { margin-left: -520px;px293,7883 -.pull-14 { margin-left: -560px;px295,7918 -.pull-15 { margin-left: -600px;px297,7953 -.pull-16 { margin-left: -640px;px299,7988 -.pull-17 { margin-left: -680px;px301,8023 -.pull-18 { margin-left: -720px;px303,8058 -.pull-19 { margin-left: -760px;px305,8093 -.pull-20 { margin-left: -800px;px307,8128 -.pull-21 { margin-left: -840px;px309,8163 -.pull-22 { margin-left: -880px;px311,8198 -.pull-23 { margin-left: -920px;px313,8233 -.pull-24 { margin-left: -960px;px315,8268 -.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 { display: inline;317,8303 -.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 { display: inline; float: left;317,8303 -.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 { display: inline; float: left; position: relative;317,8303 -.push-1 { margin: 0 -40px 1.5em 40px;px319,8588 -.push-2 { margin: 0 -80px 1.5em 80px;px321,8629 -.push-3 { margin: 0 -120px 1.5em 120px;px323,8670 -.push-4 { margin: 0 -160px 1.5em 160px;px325,8713 -.push-5 { margin: 0 -200px 1.5em 200px;px327,8756 -.push-6 { margin: 0 -240px 1.5em 240px;px329,8799 -.push-7 { margin: 0 -280px 1.5em 280px;px331,8842 -.push-8 { margin: 0 -320px 1.5em 320px;px333,8885 -.push-9 { margin: 0 -360px 1.5em 360px;px335,8928 -.push-10 { margin: 0 -400px 1.5em 400px;px337,8971 -.push-11 { margin: 0 -440px 1.5em 440px;px339,9015 -.push-12 { margin: 0 -480px 1.5em 480px;px341,9059 -.push-13 { margin: 0 -520px 1.5em 520px;px343,9103 -.push-14 { margin: 0 -560px 1.5em 560px;px345,9147 -.push-15 { margin: 0 -600px 1.5em 600px;px347,9191 -.push-16 { margin: 0 -640px 1.5em 640px;px349,9235 -.push-17 { margin: 0 -680px 1.5em 680px;px351,9279 -.push-18 { margin: 0 -720px 1.5em 720px;px353,9323 -.push-19 { margin: 0 -760px 1.5em 760px;px355,9367 -.push-20 { margin: 0 -800px 1.5em 800px;px357,9411 -.push-21 { margin: 0 -840px 1.5em 840px;px359,9455 -.push-22 { margin: 0 -880px 1.5em 880px;px361,9499 -.push-23 { margin: 0 -920px 1.5em 920px;px363,9543 -.push-24 { margin: 0 -960px 1.5em 960px;px365,9587 -.feedback,feedback373,9773 -.feedback, .error,error373,9773 -.feedback, .error, .alert,alert373,9773 -.feedback, .error, .alert, .notice,notice373,9773 -.feedback, .error, .alert, .notice, .success,success373,9773 -.error,error375,9893 -.error a,376,9972 -input.text,text401,10607 -input.text, input.title,title401,10607 -input.text, input.title, input[input401,10607 -input.text, input.title, input[type=email], input[input401,10607 -input.text,text410,10900 -input.text, input.title,title410,10900 -input.text, input.title, input[input410,10900 -input.text, input.title, input[type=email], input[input410,10900 -input.text, input.title, input[type=email], input[type=text], input[input410,10900 -input.text:focus,focus411,11048 -input.text:focus, input.title:focus,focus411,11048 -input.text:focus, input.title:focus, input[type=email]:focus,focus411,11048 -input.text:focus, input.title:focus, input[type=email]:focus, input[type=text]:focus,focus411,11048 -input.text:focus, input.title:focus, input[type=email]:focus, input[type=text]:focus, input[type=password]:focus,focus411,11048 -input.text,text415,11285 -input.text, input.title,title415,11285 -input.text, input.title, input[input415,11285 -input.text, input.title, input[type=email], input[input415,11285 -ul,421,11517 -div.paginator span.page:hover,hover470,14146 -div.paginator span.page:hover, div.paginator span.next:hover,hover470,14146 -div.paginator span.page:hover a,471,14273 -div.paginator span.page:hover a, div.paginator span.next:hover a,471,14273 -.hgbobject .gbobject-content pre,488,15666 -.gbobject-widgets ul,494,16239 -ol#comment-list,list498,16409 -ol#comment-list, ol#pingback-list,list498,16409 -ol#comment-list li,499,16516 -ol#comment-list li, ol#pingback-list li,499,16516 -ol#comment-list li.box2,box2500,16629 -ol#comment-list li.box2, ol#pingback-list li.box2,box2500,16629 -ol#comment-list li.post-author,author501,16760 -ol#comment-list li.post-author, ol#pingback-list li.post-author,author501,16760 -ol#comment-list li p,502,16878 -ol#comment-list li p, ol#pingback-list li p,502,16878 -ol#comment-list li img,503,16972 -ol#comment-list li img, ol#pingback-list li img,503,16972 -ol#comment-list li .pingback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body, ol#pingback-list li .pingback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body, ol#pingback-list li .pingback-body, ol#pingback-list li .trackback-body,body504,17064 -ol#comment-list li .pingback-body, ol#comment-list li .trackback-body, ol#pingback-list li .pingback-body, ol#pingback-list li .trackback-body, ol#trackback-list li .pingback-body,body504,17064 -ol#comment-list li .comment-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author, ol#pingback-list li .trackback-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author, ol#pingback-list li .trackback-author, ol#trackback-list li .comment-author,author505,17300 -ol#comment-list li .comment-author, ol#comment-list li .pingback-author, ol#comment-list li .trackback-author, ol#pingback-list li .comment-author, ol#pingback-list li .pingback-author, ol#pingback-list li .trackback-author, ol#trackback-list li .comment-author, ol#trackback-list li .pingback-author,author505,17300 - -static/objectapp/css/dashboard_objectapp.css,147 -.module table th,5,117 -.managelink managelink7,174 -input,11,400 -input, textarea,11,400 -.vTextField,vTextField13,456 -.required label,15,504 - -static/objectapp/js/wymeditor/iframe/default/wymiframe.html,24 -WYMeditor iframe21,646 - -static/objectapp/js/wymeditor/iframe/default/lbl-p.png,992 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´StqtQ´Stq12,1547 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûgYû12,1547 -ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›ÜÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌ㧛§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/>B
Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖŽ†Ïß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸j¶rvg¬jlRlcì›12,1547 - -static/objectapp/js/wymeditor/iframe/default/wymiframe.css,3744 - p,26,671 - h1,27,676 - h2,28,682 - h3,29,688 - h4,30,694 - h5,31,700 - h6,32,706 - ul,33,712 - ol,34,718 - table,35,724 - blockquote,36,733 - ul,42,958 - h1 h1,77,2463 - h1 h1, h1 h2,77,2463 - h1 h1, h1 h2, h1 h3,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre,77,2463 - h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre, h1 address,77,2463 - h2 h1,78,2533 - h2 h1, h2 h2,78,2533 - h2 h1, h2 h2, h2 h3,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre,78,2533 - h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre, h2 address,78,2533 - h3 h1,79,2603 - h3 h1, h3 h2,79,2603 - h3 h1, h3 h2, h3 h3,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre,79,2603 - h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre, h3 address,79,2603 - h4 h1,80,2673 - h4 h1, h4 h2,80,2673 - h4 h1, h4 h2, h4 h3,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre,80,2673 - h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre, h4 address,80,2673 - h5 h1,81,2743 - h5 h1, h5 h2,81,2743 - h5 h1, h5 h2, h5 h3,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre,81,2743 - h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre, h5 address,81,2743 - h6 h1,82,2813 - h6 h1, h6 h2,82,2813 - h6 h1, h6 h2, h6 h3,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre,82,2813 - h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre, h6 address,82,2813 - p h1,83,2883 - p h1, p h2,83,2883 - p h1, p h2, p h3,83,2883 - p h1, p h2, p h3, p h4,83,2883 - p h1, p h2, p h3, p h4, p h5,83,2883 - p h1, p h2, p h3, p h4, p h5, p h6,83,2883 - p h1, p h2, p h3, p h4, p h5, p h6, p pre,83,2883 - p h1, p h2, p h3, p h4, p h5, p h6, p pre, p address,83,2883 - pre h1,84,2939 - pre h1, pre h2,84,2939 - pre h1, pre h2, pre h3,84,2939 - pre h1, pre h2, pre h3, pre h4,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre,84,2939 - pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre, pre address,84,2939 - address h1,85,3018 - address h1, address h2,85,3018 - address h1, address h2, address h3,85,3018 - address h1, address h2, address h3, address h4,85,3018 - address h1, address h2, address h3, address h4, address h5,85,3018 - address h1, address h2, address h3, address h4, address h5, address h6,85,3018 - address p,86,3092 - address p, address pre,86,3092 - -static/objectapp/js/wymeditor/skins/twopanels/icons.png,45 -]11,2788 -]ÉBXóhžhò‰Üõ.Õ3ϲ±›RR12,3024 - -static/objectapp/js/wymeditor/skins/twopanels/skin.css,393 - .wym_skin_twopanels p,21,599 - .wym_skin_twopanels p, .wym_skin_twopanels h2,21,599 - .wym_skin_twopanels p, .wym_skin_twopanels h2, .wym_skin_twopanels h3,21,599 - .wym_skin_twopanels ul,22,678 - .wym_skin_twopanels .wym_section h2,67,2688 - .wym_skin_twopanels .wym_dropdown:hover ul,86,3967 - .wym_skin_twopanels .wym_buttons li a 93,4443 - -static/objectapp/js/wymeditor/skins/silver/README,21 -<script type=17,564 - -static/objectapp/js/wymeditor/skins/silver/skin.css,446 - .wym_skin_silver p,21,603 - .wym_skin_silver p, .wym_skin_silver h2,21,603 - .wym_skin_silver p, .wym_skin_silver h2, .wym_skin_silver h3,21,603 - .wym_skin_silver ul,22,673 - .wym_skin_silver .wym_section h2,67,2630 - .wym_skin_silver .wym_dropdown:hover ul,87,4007 - .wym_skin_silver .wym_buttons li a 96,4728 -.wym_skin_silver .wym_panel a,277,12569 -div.wym_dropdown a:hover,hover292,12903 - -static/objectapp/js/wymeditor/skins/silver/COPYING,1403 - Version 2,47 - Copyright 4,95 -your programs,20,926 - When we speak of free software,22,947 - When we speak of free software, we are referring to freedom,22,947 -11 of the WIPO copyright treaty adopted on 20 December 183,9244 - When you convey a covered work,187,9381 -the covered work,190,9592 -modification of the work as a means of enforcing,191,9663 -users, your or third parties' legal rights to forbid circumvention oftion of192,9732 -receive it,198,9929 -receive it, in any medium,198,9929 -appropriately publish on each copy an appropriate copyright notice;199,9992 -non-permissive terms added in accord with section 7 apply to the code;201,10118 -keep intact all notices of the absence of any warranty;202,10189 - Appropriate Legal Notices; however,231,11578 - Notices displayed by works containing it;370,19236 - c) Prohibiting misrepresentation of the origin of that material,372,19286 - reasonable ways as different from the original version;374,19425 - material by anyone who conveys the material 383,19780 -modify it is void,411,21191 - However,415,21356 - the Free Software Foundation,639,33294 - the Free Software Foundation, either version 3 of the License,639,33294 - the Free Software Foundation, either version 3 of the License, or639,33294 -parts of the General Public License. Of course,661,34332 -might be different;662,34405 - -static/objectapp/js/wymeditor/skins/silver/images/bg.selector.silver.gif,72 -J´¨Ñ£H“*zcÔ‰>iö”JÀ…iö”JÀ…2,620 -Œ HÁVP‚¬ Ž2hÁF*$! @(6,1500 - -static/objectapp/js/wymeditor/skins/minimal/skin.css,270 -.wym_skin_minimal div.wym_tools h2,32,718 -.wym_skin_minimal div.wym_containers h2,33,754 -.wym_skin_minimal div.wym_area_top,wym_area_top48,1026 -.wym_skin_minimal div.wym_area_right,wym_area_right49,1062 -.wym_skin_minimal div.wym_containers,wym_containers50,1100 - -static/objectapp/js/wymeditor/skins/minimal/images/bg.selector.silver.gif,72 -J´¨Ñ£H“*zcÔ‰>iö”JÀ…iö”JÀ…2,620 -Œ HÁVP‚¬ Ž2hÁF*$! @(6,1500 - -static/objectapp/js/wymeditor/skins/default/icons.png,45 -]11,2788 -]ÉBXóhžhò‰Üõ.Õ3ϲ±›RR12,3024 - -static/objectapp/js/wymeditor/skins/default/skin.css,373 - .wym_skin_default p,20,575 - .wym_skin_default p, .wym_skin_default h2,20,575 - .wym_skin_default p, .wym_skin_default h2, .wym_skin_default h3,20,575 - .wym_skin_default ul,21,648 - .wym_skin_default .wym_section h2,66,2613 - .wym_skin_default .wym_dropdown:hover ul,85,3868 - .wym_skin_default .wym_buttons li a 92,4336 - -static/objectapp/js/wymeditor/skins/wymeditor_icon.png,13 -DËD5,704 - -static/objectapp/js/wymeditor/skins/django/icons.png,855 -B„5lB„5l5,564 -g ˜ig ˜8,1412 -¦4T•s•ž÷=2#·—ù|ÝZ{«õ¤&ªä.ò{‰À'K
Üøµ#G³æTã\¥†#9;ôx¦´ÉE& V ¿Ùàõ~ðÊšxP‹í‚´ë·Ei¹ÏE¤üƒKvfûFQµ¸Ìm¤sþ—ŠªRP¸ì< Ý •-q†F8R‚–:C#ÓlÚ’ghR‚–<C#ÓlÚ’ghR‚–<C“´ä˜:¹%ÏФ¡ž¡9½fjAŸ.1¬ûq„g"ŠÄŽê?9‚1G¿‡èÚ¬}®;%iÿ1iÿ111,2665 -v@vu¤ë¼ËJndŒ:*¯<pz ”k[?Ѹ֚‹œ ›ÌœtB"p“Õ+™W‚ʚ墖޶°AÔxžãu1SSl[îÿ;#a¼þ|ºÅßñ9Šm H ½‘„²´Êñîœ]_‘^]+Ü‚cH¨9Á×oýÝþ}È»!v$`é~4‹r±edK @Ò
}%ò¢6Á’@(§À–(r¢¼9qÐ…æȲnœä\_H5‡¢çdƒªWPh®l¯ÈÙ³gk&ŽŽì×yŸ73gÜn«oR4ÐÏ_Ž5Š¦-2*J£¿fÿÃxžÊüi£ZhùùóçsÀ«¯¾:0ùÓš¿Î°I³éÁƒ¾¿¼ž;w®-8U½µl'í
´‚õû¦Ç>pÝæâ'@Ϭé·ãÕW_…ÞmVƹ&Ðüâ׿âYá*}1íHpîÜ9£~ûô3¼Œ,S]S15,4078 -Ýûö¶t§tYJ³Št§tYJ³16,4628 -î ¸Y„Do†P8uê_Í&`}Ã1ËÊÊŒØ<ïŠ ººZê_B !KÞ‡—KÞ‡18,5109 -ÑU]U20,5704 -ÑU]PPÀPP20,5704 -‹«0€ýÀÆvB~Q/ÓI[P[YÁ]ÃÁk|àˆö© /ká@ldQ}-†v‹`O ÍöJ ´Ú*nµV[ÏnµV[22,6043 - -static/objectapp/js/wymeditor/skins/django/skin.css,363 - .wym_skin_django p,21,610 - .wym_skin_django p, .wym_skin_django h2,21,610 - .wym_skin_django p, .wym_skin_django h2, .wym_skin_django h3,21,610 - .wym_skin_django ul,22,680 - .wym_skin_django .wym_section h2,67,2667 - .wym_skin_django .wym_dropdown:hover ul,86,3923 - .wym_skin_django .wym_buttons li a 95,4488 - -static/objectapp/js/wymeditor/skins/compact/icons.png,45 -]11,2788 -]ÉBXóhžhò‰Üõ.Õ3ϲ±›RR12,3024 - -static/objectapp/js/wymeditor/skins/compact/skin.css,373 - .wym_skin_compact p,21,633 - .wym_skin_compact p, .wym_skin_compact h2,21,633 - .wym_skin_compact p, .wym_skin_compact h2, .wym_skin_compact h3,21,633 - .wym_skin_compact ul,22,706 - .wym_skin_compact .wym_section h2,67,2657 - .wym_skin_compact .wym_dropdown:hover ul,86,3912 - .wym_skin_compact .wym_buttons li a 93,4380 - -static/objectapp/js/wymeditor/plugins/resizable/readme.txt,145 -The ``resizable`` plugin takes exactly one parameter,61,1916 - minHeight:minHeight67,2204 - var jQueryPlugins 89,3049 -Changelog110,3941 - -static/objectapp/js/wymeditor/plugins/tidy/README,89 -Copyright (c) 2005 - 2009 Jean-Francois Hovinne,2,62 -Dual licensed under the MIT 3,137 - -static/objectapp/js/markitup/templates/preview.html,33 -markItUp! preview template5,243 - -static/objectapp/js/markitup/skins/django/style.css,408 -.markItUp a:link,link9,302 - font:12px 'Courier New', Courier,28,652 - font:12px 'Courier New', Courier, monospace;28,652 - padding:5px;px29,698 - width:790px;px30,712 - height:220px;px31,726 - clear:both;both32,741 - line-height:18px;px33,754 - overflow:auto;auto34,773 -.markItUpHeader ul .markItUpDropMenu markItUpDropMenu68,1428 -.markItUpHeader ul ul .markItUpDropMenu markItUpDropMenu87,1841 - -static/objectapp/js/markitup/skins/django/images/menu.png,270 -wAÁ©÷~¸á“ÐkQ)?Âö•r• ár• 6,1115 -pOšxfØpOšxf9,1905 -chg€Ð’ê¡*ƒ…òäKxZÎ×¹RiPÉz¯Å»ozÐ+ÁœdcnÈ:0ÕªJ±RÓÛâÛ(V}svàÍ·äBà
–ðbÛ`Ö”ÌúàFÛðë9F#Ù ¦ÞÜb
¼Ñ¾r=r10,2288 -¹1Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏžzBGÏ53,17284 - -static/objectapp/js/markitup/sets/textile/images/quotes.png,50 -µDMs6gRÎLDMs6gRÎ4,156 -µDMs6gRÎL:,Óp÷p4,156 - -static/objectapp/js/markitup/sets/textile/images/h2.png,11 -${$4,125 - -static/objectapp/js/markitup/sets/html/images/h2.png,11 -${$4,125 - -static/objectapp/js/markitup/sets/html/images/image.png,101 -‰PNGPNG1,0 -º]ñ»Hà Bv„åÌ“µÚˆ_Sÿ%Ò;ô6×9Host
wöEwöE4,391 -ó]*f"Å"ô½.\00CLâCL5,439 - -static/objectapp/js/markitup/sets/markdown/images/quotes.png,50 -µDMs6gRÎLDMs6gRÎ4,156 -µDMs6gRÎL:,Óp÷p4,156 - -static/objectapp/js/markitup/sets/markdown/images/h2.png,11 -${$4,125 - -static/objectapp/js/markitup/sets/restructuredtext/images/quotes.png,50 -µDMs6gRÎLDMs6gRÎ4,156 -µDMs6gRÎL:,Óp÷p4,156 - -static/objectapp/js/markitup/sets/restructuredtext/images/h2.png,11 -${$4,125 - -ping.py,417 -class URLRessources(17,347 - def __init__(20,433 -class DirectoryPinger(29,843 - def __init__(32,921 - def run(44,1321 - def ping_gbobject(54,1740 -class ExternalUrlsPinger(78,2713 - def __init__(81,2797 - def run(93,3213 - def is_external_url(108,3770 - def find_external_urls(115,4029 - def find_pingback_href(123,4382 - def find_pingback_urls(132,4768 - def pingback_url(160,5812 - -plugins/cms_app.py,31 -class ObjectappApphook(10,230 - -plugins/cms_plugins.py,318 -class CMSLatestGbobjectsPlugin(19,547 - def formfield_for_manytomany(52,1395 - def render(61,1807 - def icon_src(85,2782 -class CMSSelectedGbobjectsPlugin(90,2923 - def render(100,3297 - def icon_src(107,3587 -class CMSRandomGbobjectsPlugin(112,3728 - def render(121,4063 - def icon_src(129,4408 - -plugins/migrations/0004_auto__add_field_latestgbobjectsplugin_subobjecttypes.py,71 -class Migration(5,63 - def forwards(7,98 - def backwards(12,349 - -plugins/migrations/0005_auto__add_randomgbobjectsplugin.py,71 -class Migration(5,63 - def forwards(7,98 - def backwards(17,668 - -plugins/migrations/0002_auto__add_field_latestgbobjectsplugin_template_to_render__add_field_sele.py,71 -class Migration(5,63 - def forwards(7,98 - def backwards(15,700 - -plugins/migrations/0001_initial.py,73 -class Migration(6,92 - def forwards(8,127 - def backwards(33,1752 - -plugins/migrations/0003_auto__del_field_latestgbobjectsplugin_objecttype__del_field_latestgbobjectsp.py,73 -class Migration(6,92 - def forwards(8,127 - def backwards(40,2041 - -plugins/admin.py,67 -class GbobjectPlaceholderAdmin(14,421 - def save_model(33,1637 - -plugins/models.py,364 -class LatestGbobjectsPlugin(21,698 - def render_template(42,1508 - def copy_relations(47,1666 - def __unicode__(53,1923 -class SelectedGbobjectsPlugin(57,2012 - def render_template(68,2391 - def copy_relations(73,2549 - def __unicode__(77,2708 -class RandomGbobjectsPlugin(81,2795 - def __unicode__(91,3163 -def invalidate_menu_cache(95,3252 - -plugins/placeholder.py,61 -class GbobjectPlaceholder(7,139 - class Meta:Meta12,299 - -plugins/menu.py,272 -class GbobjectMenu(17,506 - def get_nodes(21,643 -class ObjecttypeMenu(63,2464 - def get_nodes(67,2579 -class AuthorMenu(80,3136 - def get_nodes(84,3239 -class TagMenu(98,3842 - def get_nodes(102,3936 -class GbobjectModifier(115,4459 - def modify(119,4593 - -sitemaps.py,459 -class GbobjectSitemap(13,320 - def items(18,430 - def lastmod(22,533 -class ObjecttypeSitemap(27,648 - def cache(31,744 - def items(42,1195 - def lastmod(48,1371 - def priority(55,1593 -class AuthorSitemap(63,1817 - def items(68,1924 - def lastmod(72,2023 - def location(79,2242 -class TagSitemap(84,2382 - def cache(88,2464 - def items(97,2856 - def lastmod(103,2996 - def priority(108,3162 - def location(115,3381 - -models.py,994 -class Author(52,1966 - def gbobjects_published(58,2094 - def get_absolute_url(63,2254 - class Meta:Meta68,2430 -class Gbobject(74,2501 - def get_relations(147,5681 - def get_attributes(188,7648 - def get_nbh(198,7976 - def get_relations1(218,8649 - def get_rendered_nbh(239,9396 - def html_content(273,10506 - def previous_gbobject(287,11007 - def next_gbobject(295,11253 - def word_count(303,11517 - def is_actual(308,11661 - def is_visible(314,11870 - def related_published(319,12024 - def discussions(324,12175 - def comments(330,12356 - def pingbacks(336,12550 - def trackbacks(341,12694 - def comments_are_open(346,12841 - def short_url(354,13144 - def __unicode__(358,13257 - def memberof_sentence(362,13325 - def get_absolute_url(372,13742 - class Meta:Meta380,14059 -class Process(390,14350 - def __unicode__(416,15811 - class Meta:Meta419,15865 -class System(426,16090 - def __unicode__(457,17561 - -xmlrpc/metaweblog.py,475 -def authenticate(30,955 -def blog_structure(46,1597 -def user_structure(54,1839 -def author_structure(66,2235 -def Objecttype_structure(74,2449 -def post_structure(90,3127 -def get_users_blogs(119,4485 -def get_user_info(128,4798 -def get_authors(137,5118 -def delete_post(147,5507 -def get_post(157,5906 -def get_recent_posts(167,6287 -def get_objecttypes(177,6718 -def new_Objecttype(187,7127 -def new_post(204,7901 -def edit_post(248,9902 -def new_media_object(291,11783 - -xmlrpc/pingback.py,113 -def generate_pingback_content(28,835 -def pingback_ping(54,1557 -def pingback_extensions_get_pingbacks(114,3742 - -comparison.py,268 -def pearson_score(9,166 -class ClusteredModel(26,691 - def __init__(30,795 - def dataset(34,907 -class VectorBuilder(44,1233 - def __init__(47,1315 - def build_dataset(54,1525 - def generate_key(82,2521 - def flush(86,2655 - def __call__(91,2786 - -xmlrpc/__init__.py,0 - -plugins/migrations/__init__.py,0 - -plugins/__init__.py,0 - -plugins/settings.py,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/h4.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/list-numeric.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/code.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/list-bullet.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/h5.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/picture.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/h3.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/link.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/preview.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/h1.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/italic.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/images/bold.png,0 - -static/objectapp/js/markitup/sets/restructuredtext/style.css,0 - -static/objectapp/js/markitup/sets/markdown/images/h4.png,0 - -static/objectapp/js/markitup/sets/markdown/images/list-numeric.png,0 - -static/objectapp/js/markitup/sets/markdown/images/code.png,0 - -static/objectapp/js/markitup/sets/markdown/images/list-bullet.png,0 - -static/objectapp/js/markitup/sets/markdown/images/h5.png,0 - -static/objectapp/js/markitup/sets/markdown/images/picture.png,0 - -static/objectapp/js/markitup/sets/markdown/images/h3.png,0 - -static/objectapp/js/markitup/sets/markdown/images/link.png,0 - -static/objectapp/js/markitup/sets/markdown/images/preview.png,0 - -static/objectapp/js/markitup/sets/markdown/images/h1.png,0 - -static/objectapp/js/markitup/sets/markdown/images/italic.png,0 - -static/objectapp/js/markitup/sets/markdown/images/h6.png,0 - -static/objectapp/js/markitup/sets/markdown/images/bold.png,0 - -static/objectapp/js/markitup/sets/markdown/style.css,0 - -static/objectapp/js/markitup/sets/html/images/h4.png,0 - -static/objectapp/js/markitup/sets/html/images/list-numeric.png,0 - -static/objectapp/js/markitup/sets/html/images/clean.png,0 - -static/objectapp/js/markitup/sets/html/images/list-item.png,0 - -static/objectapp/js/markitup/sets/html/images/list-bullet.png,0 - -static/objectapp/js/markitup/sets/html/images/h5.png,0 - -static/objectapp/js/markitup/sets/html/images/picture.png,0 - -static/objectapp/js/markitup/sets/html/images/h3.png,0 - -static/objectapp/js/markitup/sets/html/images/link.png,0 - -static/objectapp/js/markitup/sets/html/images/preview.png,0 - -static/objectapp/js/markitup/sets/html/images/h1.png,0 - -static/objectapp/js/markitup/sets/html/images/italic.png,0 - -static/objectapp/js/markitup/sets/html/images/stroke.png,0 - -static/objectapp/js/markitup/sets/html/images/paragraph.png,0 - -static/objectapp/js/markitup/sets/html/images/h6.png,0 - -static/objectapp/js/markitup/sets/html/images/bold.png,0 - -static/objectapp/js/markitup/sets/html/style.css,0 - -static/objectapp/js/markitup/sets/textile/images/h4.png,0 - -static/objectapp/js/markitup/sets/textile/images/list-numeric.png,0 - -static/objectapp/js/markitup/sets/textile/images/code.png,0 - -static/objectapp/js/markitup/sets/textile/images/list-bullet.png,0 - -static/objectapp/js/markitup/sets/textile/images/h5.png,0 - -static/objectapp/js/markitup/sets/textile/images/picture.png,0 - -static/objectapp/js/markitup/sets/textile/images/h3.png,0 - -static/objectapp/js/markitup/sets/textile/images/link.png,0 - -static/objectapp/js/markitup/sets/textile/images/preview.png,0 - -static/objectapp/js/markitup/sets/textile/images/h1.png,0 - -static/objectapp/js/markitup/sets/textile/images/italic.png,0 - -static/objectapp/js/markitup/sets/textile/images/stroke.png,0 - -static/objectapp/js/markitup/sets/textile/images/paragraph.png,0 - -static/objectapp/js/markitup/sets/textile/images/h6.png,0 - -static/objectapp/js/markitup/sets/textile/images/bold.png,0 - -static/objectapp/js/markitup/sets/textile/style.css,0 - -static/objectapp/js/markitup/skins/django/images/submenu.png,0 - -static/objectapp/js/markitup/skins/django/images/handle.png,0 - -static/objectapp/js/markitup/templates/preview.css,0 - -static/objectapp/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif,0 - -static/objectapp/js/wymeditor/plugins/tidy/wand.png,0 - -static/objectapp/js/wymeditor/plugins/tidy/tidy.php,0 - -static/objectapp/js/wymeditor/skins/minimal/images/bg.wymeditor.png,0 - -static/objectapp/js/wymeditor/skins/minimal/images/icons.silver.gif,0 - -static/objectapp/js/wymeditor/skins/minimal/images/bg.header.gif,0 - -static/objectapp/js/wymeditor/skins/silver/images/bg.wymeditor.png,0 - -static/objectapp/js/wymeditor/skins/silver/images/icons.silver.gif,0 - -static/objectapp/js/wymeditor/skins/silver/images/bg.header.gif,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-h5.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-h3.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-pre.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-h6.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-blockquote.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-h1.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-h4.png,0 - -static/objectapp/js/wymeditor/iframe/default/lbl-h2.png,0 - -static/objectapp/css/slider.css,0 - -static/objectapp/css/jquery.autocomplete.css,0 - -static/objectapp/css/wymeditor_styles.css,0 - -static/objectapp/css/src/slider.sass,0 - -static/objectapp/css/src/_gbobject.sass,0 - -static/objectapp/css/src/ie.sass,0 - -static/objectapp/css/src/_paginator.sass,0 - -static/objectapp/css/src/_calendar.sass,0 - -static/objectapp/css/src/_tag-cloud.sass,0 - -static/objectapp/img/background.gif,0 - -static/objectapp/img/tags.png,0 - -static/objectapp/img/rss.png,0 - -static/objectapp/img/bullet.png,0 - -static/objectapp/img/wlw/objectapp.png,0 - -static/objectapp/img/favicon.ico,0 - -static/objectapp/img/grid.png,0 - -static/objectapp/img/preview.png,0 - -static/objectapp/img/comments.png,0 - -static/objectapp/img/trans.png,0 - -static/objectapp/img/shorturl.png,0 - -static/objectapp/img/manage.png,0 - -static/objectapp/img/help.png,0 - -spam_checker/backends/__init__.py,0 - -templates/feeds/comment_title.html,0 - -templates/feeds/gbobject_title.html,0 - -templates/feeds/trackback_description.html,0 - -templates/feeds/gbobject_description.html,0 - -templates/feeds/comment_description.html,0 - -templates/feeds/pingback_description.html,0 - -templates/feeds/discussion_description.html,0 - -templates/feeds/trackback_title.html,0 - -templates/feeds/pingback_title.html,0 - -templates/feeds/discussion_title.html,0 - -templates/admin/objectapp/widgets/_content_stats.html,0 - -templates/admin/objectapp/widgets/recent_comments.html,0 - -templates/admin/objectapp/widgets/draft_gbobjects.html,0 - -templates/admin/objectapp/widgets/_recent_linkbacks.html,0 - -templates/admin/objectapp/widgets/_draft_gbobjects.html,0 - -templates/admin/objectapp/widgets/recent_linkbacks.html,0 - -templates/admin/objectapp/widgets/_recent_comments.html,0 - -templates/admin/objectapp/widgets/content_stats.html,0 - -templates/comments/comment_reply_email.txt,0 - -templates/comments/comment_notification_email.txt,0 - -templates/comments/objectapp/gbobject/form.html,0 - -templates/comments/comment_authors_email.txt,0 - -templates/objectapp/author/gbobject_list.html,0 - -templates/objectapp/gbobject_archive.html,0 - -templates/objectapp/tag/gbobject_list.html,0 - -templates/objectapp/cms/gbobject_detail.html,0 - -templates/objectapp/cms/random_gbobjects.html,0 - -templates/objectapp/cms/gbobject_list.html,0 - -templates/objectapp/objecttype/gbobject_list.html,0 - -templates/objectapp/_subtype_detail.html,0 - -templates/objectapp/tags/breadcrumbs.html,0 - -templates/objectapp/tags/recent_gbobjects.html,0 - -templates/objectapp/tags/tag_cloud.html,0 - -templates/objectapp/tags/random_gbobjects.html,0 - -templates/objectapp/tags/recent_comments.html,0 - -templates/objectapp/tags/recent_linkbacks.html,0 - -templates/objectapp/tags/popular_gbobjects.html,0 - -templates/objectapp/tags/similar_gbobjects.html,0 - -templates/objectapp/tags/archives_gbobjects.html,0 - -templates/objectapp/tags/objecttypes.html,0 - -templates/objectapp/tags/archives_gbobjects_tree.html,0 - -templates/objectapp/tags/calendar.html,0 - -templates/objectapp/tags/gbobjects.html,0 - -templates/objectapp/tags/featured_gbobjects.html,0 - -templates/objectapp/tags/dummy.html,0 - -templates/objectapp/tags/archives_gbobjects_link.html,0 - -templates/objectapp/tags/pagination.html,0 - -templates/objectapp/tags/authors.html,0 - -migrations/0001_initial.pyc,0 - -migrations/__init__.pyc,0 - -migrations/__init__.py,0 - -locale/de/LC_MESSAGES/django.po,0 - -locale/pt_BR/LC_MESSAGES/django.po,0 - -locale/zh_CN/LC_MESSAGES/django.po,0 - -locale/ru/LC_MESSAGES/django.po,0 - -locale/es/LC_MESSAGES/django.po,0 - -locale/hu/LC_MESSAGES/django.po,0 - -locale/it/LC_MESSAGES/django.po,0 - -locale/fr/LC_MESSAGES/django.po,0 - -locale/nl/LC_MESSAGES/django.po,0 - -locale/pl/LC_MESSAGES/django.po,0 - -templatetags/__init__.py,0 - -url_shortener/backends/__init__.py,0 - -admin/__init__.py,0 - -views/__init__.py,0 - -__init__.py,0 - -tests/templates/objectapp/gbobject_detail.html,0 - -tests/templates/objectapp/gbobject_search.html,0 - -tests/templates/objectapp/gbobject_list.html,0 - -tests/urls.py,0 - -urls/capabilities.py,0 - -urls/discussions.py,0 - -urls/sitemap.py,0 - -urls/objecttypes.py,0 - -urls/tags.py,0 - -urls/gbobjects.py,0 - -urls/search.py,0 - -urls/trackback.py,0 - -urls/__init__.py,0 - -urls/authors.py,0 - -urls/quick_gbobject.py,0 - -urls/feeds.py,0 - -management/commands/__init__.py,0 - -management/__init__.py,0 - -settings.py,0 - -testsettings.py,0 diff --git a/objectapp/forms.py b/objectapp/forms.py index 1d123156..a117b333 100644 --- a/objectapp/forms.py +++ b/objectapp/forms.py @@ -15,12 +15,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. -from django import forms -from django.forms import ModelForm -from django.forms.fields import DateField -from django.contrib.admin import widgets -from django.contrib.admin.widgets import AdminDateWidget +from django.forms import ModelForm from gstudio.models import * from objectapp.models import * @@ -38,15 +34,3 @@ class SystemForm(ModelForm): class Meta: model = System - - -class ContextForm(forms.Form): - - def __init__(self,rdict, *args, **kwargs): - super(ContextForm, self).__init__(*args, **kwargs) - for key, val in rdict.iteritems(): - print key, val - self.fields[str(key)+"_"+str(val)] = getattr(forms,rdict.get(key))(required = False) - - - diff --git a/objectapp/models.py b/objectapp/models.py index c4a612d3..6242b151 100644 --- a/objectapp/models.py +++ b/objectapp/models.py @@ -98,7 +98,6 @@ from gstudio.models import Node from gstudio.models import Edge from gstudio.models import Author -import reversion from objectapp.settings import UPLOAD_TO from objectapp.settings import MARKUP_LANGUAGE from objectapp.settings import GBOBJECT_TEMPLATES @@ -113,6 +112,16 @@ from objectapp.moderator import GbobjectCommentModerator from objectapp.url_shortener import get_url_shortener from objectapp.signals import ping_directories_handler from objectapp.signals import ping_external_urls_handler +from objectapp.settings import OBJECTAPP_VERSIONING + +if OBJECTAPP_VERSIONING: + import reversion + from reversion.models import * + + + +counter = 1 +attr_counter = -1 ''' class Author(User): @@ -200,7 +209,92 @@ class Gbobject(Node): objects = models.Manager() published = GbobjectPublishedManager() + + @property + def getattributetypes(self): + """ + Returns the attributetypes of self as well as its parent's attributetype. + """ + try: + originalnt = [] + pt = [] + attributetype = [] + returndict = {} + obj = self + originalnt = obj.objecttypes.all() + + for i in range(len(originalnt)): + obj = originalnt[i].ref + pt.append(obj) + while obj.parent: + pt.append((obj.parent).ref) + obj = obj.parent + + attributetype.append(obj.subjecttype_of.all()) + for each in pt: + attributetype.append(each.subjecttype_of.all()) + + attributetype = [num for elem in attributetype for num in elem] + + for i in attributetype: + returndict.update({str(i.title):i.id}) + + return returndict.keys() + + except: + return None + + + + @property + def getrelationtypes(self): + originalnt= [] + originalpt = [] + pt =[] #contains parenttype + reltype =[] #contains relationtype + titledict = {} #contains relationtype's title + inverselist = [] #contains relationtype's inverse + finaldict = {} #contains either title of relationtype or inverse of relationtype + listval=[] #contains keys of titledict to check whether parenttype id is equals to listval's left or right subjecttypeid + + gb=self.ref + originalnt = gb.objecttypes.all() + for i in originalnt: + pt.append(i.ref) + + for i in range(len(originalnt)): + obj = originalnt[i].ref + while obj.parent: + pt.append((obj.parent).ref) + obj = obj.parent + pt.append(gb) + for i in range(len(pt)): + if Relationtype.objects.filter(left_subjecttype = pt[i].id): + reltype.append(Relationtype.objects.filter(left_subjecttype = pt[i].id)) + if Relationtype.objects.filter(right_subjecttype = pt[i].id): + reltype.append(Relationtype.objects.filter(right_subjecttype = pt[i].id)) + + reltype = [num for elem in reltype for num in elem] + + for i in reltype: + titledict.update({i:i.id}) + + + for i in range(len(titledict)): + listval.append(Relationtype.objects.get(title = titledict.keys()[i])) + inverselist.append(titledict.keys()[i].inverse) + + for j in range(len(pt)): + for i in range(len(listval)): + if pt[j].id == listval[i].left_subjecttype_id and (str(listval[i].left_applicable_nodetypes) == 'OT' or str(listval[i].left_applicable_nodetypes) == 'OB'): + finaldict.update({titledict.keys()[i]:titledict.values()[i]}) + if pt[j].id == listval[i].right_subjecttype_id and (str(listval[i].right_applicable_nodetypes)=='OT' or str(listval[i].right_applicable_nodetypes) == 'OB'): + finaldict.update({inverselist[i]:titledict.values()[i]}) + + + return finaldict.keys() + def get_relations(self): relation_set = {} # ALGO to find the relations and their left-subjecttypes and right_subjecttypes @@ -240,7 +334,8 @@ class Gbobject(Node): relation_set.update(rel_dict['right_subjecttypes']) return relation_set - + + def get_attributes(self): attributes_dict = {} @@ -359,21 +454,24 @@ class Gbobject(Node): g_json = {} g_json["node_metadata"]= [] g_json["relations"]=[] + g_json["relset"]=[] - + global counter + global attr_counter nbh = self.get_nbh predicate_id = {} - counter = 1 + for key in nbh.keys(): - val = "a" + str(counter) + val = str(counter) + "b" predicate_id[key] = val counter = counter + 1 #print predicate_id - attr_counter = -1 + - this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url()} + this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"expanded":"true"} g_json["node_metadata"].append(this_node) + g_json["relset"].append(self.id) for key in predicate_id.keys(): if nbh[key]: @@ -385,20 +483,34 @@ class Gbobject(Node): g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] }) if not isinstance(nbh[key],basestring): for item in nbh[key]: + if item.reftype!="Relation": # create nodes - g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url()}) - # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) - #create links - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id }) - + g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"expanded":"false"}) + g_json["relset"].append(item.id) + # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + #create links + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id }) + + else: + + if item.left_subject.id==self.id: + item1=item.right_subject + elif item.right_subject.id==self.id: + item1=item.left_subject + + g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"expanded":"false"}) + + # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + #create links + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item1.id }) else: #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"} #this_node[str(key)]=nbh[key] key, nbh[key] #for item in value.keys(): - g_json["node_metadata"].append({"_id":attr_counter,"screen_name":nbh[key]}) + g_json["node_metadata"].append({"_id":(str(attr_counter)+"b"),"screen_name":nbh[key]}) #g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 }) - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":attr_counter }) + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"b") }) attr_counter-=1 except: @@ -637,7 +749,7 @@ class Gbobject(Node): if self.objecttypes.count: for each in self.objecttypes.all(): return '%s is a member of objecttype %s' % (self.title, each) - return '%s is not a fully defined name, consider making it a member of a suitable objecttype' % (self.title) + return u'%s is not a fully defined name, consider making it a member of a suitable objecttype' % (self.title) @models.permalink @@ -649,6 +761,20 @@ class Gbobject(Node): 'day': self.creation_date.strftime('%d'), 'slug': self.slug}) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if OBJECTAPP_VERSIONING: + with reversion.create_revision(): + super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. + @property + def ref(self): + return eval(self.nodemodel).objects.get(id=self.id) + + + class Meta: """Gbobject's Meta""" ordering = ['-creation_date'] @@ -688,6 +814,15 @@ class Process(Gbobject): def __unicode__(self): return self.title + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if OBJECTAPP_VERSIONING: + with reversion.create_revision(): + super(Process, self).save(*args, **kwargs) # Call the "real" save() method. + + super(Process, self).save(*args, **kwargs) # Call the "real" save() method. + class Meta: verbose_name = _('process') verbose_name_plural = _('processes') @@ -724,21 +859,29 @@ class System(Gbobject): system_set = models.ManyToManyField('self', related_name="in_system_set_of", verbose_name='nested systems', blank=True, null=False) + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if OBJECTAPP_VERSIONING: + with reversion.create_revision(): + super(System, self).save(*args, **kwargs) # Call the "real" save() method. + + super(System, self).save(*args, **kwargs) # Call the "real" save() method. def __unicode__(self): return self.title - -if not reversion.is_registered(Process): - reversion.register(Process, follow=["priorstate_attribute_set", "priorstate_relation_set", "poststate_attribute_set", "poststate_relation_set", "prior_nodes", "posterior_nodes"]) +if OBJECTAPP_VERSIONING == True: + if not reversion.is_registered(Process): + reversion.register(Process, follow=["priorstate_attribute_set", "priorstate_relation_set", "poststate_attribute_set", "poststate_relation_set", "prior_nodes", "posterior_nodes"]) -if not reversion.is_registered(System): - reversion.register(System, follow=["systemtypes", "gbobject_set", "relation_set", "attribute_set", "process_set", "system_set", "prior_nodes", "posterior_nodes"]) + if not reversion.is_registered(System): + reversion.register(System, follow=["systemtypes", "gbobject_set", "relation_set", "attribute_set", "process_set", "system_set", "prior_nodes", "posterior_nodes"]) -if not reversion.is_registered(Gbobject): - reversion.register(Gbobject, follow=["objecttypes", "prior_nodes", "posterior_nodes"]) + if not reversion.is_registered(Gbobject): + reversion.register(Gbobject, follow=["objecttypes", "prior_nodes", "posterior_nodes"]) moderator.register(Gbobject, GbobjectCommentModerator) diff --git a/objectapp/settings.py b/objectapp/settings.py index 885a8701..ba6004dc 100644 --- a/objectapp/settings.py +++ b/objectapp/settings.py @@ -56,7 +56,7 @@ SAVE_PING_EXTERNAL_URLS = getattr(settings, 'OBJECTAPP_PING_EXTERNAL_URLS', True COPYRIGHT = getattr(settings, 'OBJECTAPP_COPYRIGHT', 'Objectapp') -PAGINATION = getattr(settings, 'OBJECTAPP_PAGINATION', 10) +PAGINATION = getattr(settings, 'OBJECTAPP_PAGINATION', 4) ALLOW_EMPTY = getattr(settings, 'OBJECTAPP_ALLOW_EMPTY', True) ALLOW_FUTURE = getattr(settings, 'OBJECTAPP_ALLOW_FUTURE', True) @@ -133,3 +133,5 @@ TWITTER_ACCESS_SECRET = getattr(settings, 'TWITTER_ACCESS_SECRET', '') USE_TWITTER = getattr(settings, 'OBJECTAPP_USE_TWITTER', bool(TWITTER_ACCESS_KEY and TWITTER_ACCESS_SECRET and \ TWITTER_CONSUMER_KEY and TWITTER_CONSUMER_SECRET)) + +OBJECTAPP_VERSIONING = False diff --git a/objectapp/static/objectapp/css/screen.css b/objectapp/static/objectapp/css/screen.css index c69ca997..408dd84b 100644 --- a/objectapp/static/objectapp/css/screen.css +++ b/objectapp/static/objectapp/css/screen.css @@ -1,4 +1,4 @@ -body { line-height: 1.5; font-family: Arial, Helvetica, sans-serif; color: #333333; font-size: 75%; height:1500px;width:1500px} +body { line-height: 1.5; font-family: Arial, Helvetica, sans-serif; color: #333333; font-size: 75%; height:1500px; width: 85%; } h1, h2, h3, h4, h5, h6 { font-weight: normal; color: #000000; border-radius:15px; } h1 img, h2 img, h3 img, h4 img, h5 img, h6 img { margin: 0; } @@ -424,7 +424,7 @@ ul, ol { margin: 0 1.5em 1.5em 0; padding-left: 3.333em; } a { text-decoration: none; } a:hover { text-decoration: underline; } -#header { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; } +#header { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; background: #2b3959; color: white;} #header h1 { font-size: 2em; font-weight: bold; margin-bottom: 0; } #header .top-navigation { float: right; } #header .top-navigation img { border: 0; } @@ -440,7 +440,7 @@ a:hover { text-decoration: underline; } #b1 {position:relative; center:5%; background-color:#43AEE7; color: white; border: 1px solid #000000; font-size:1em;} #b2 {position:relative; center:6%; background-color:#43AEE7; color: white; border: 1px solid #000000; font-size:1em;} -#body { margin-bottom: 1em; border-bottom: 1px solid #e9e9f3; } +#body { margin-bottom: 1em; border-bottom: 0px solid #e9e9f3; width: 100%;} #content h1, #content h2, #content h3 { margin-top: 10px; } @@ -450,10 +450,10 @@ a:hover { text-decoration: underline; } float: left; clear: both; margin-bottom: 10px; - margin-left: 0; - margin-right: 60px; + margin-left: 0%; + margin-right: 0%; margin-top: 10px; - padding-right: 30px; + padding-right: 0%; width:250px; } @@ -479,14 +479,14 @@ a:hover { text-decoration: underline; } font-weight: bold; } #graphcss{ - margin-left: 230px; - margin-right: 150px; + margin-left: 237px; + margin-right: 0px; margin-top: 1px; position: absolute; - width: 300px; + width: 46%; height: 900px } -#sidebar{position:absolute; margin-left:600px; margin-right:150px; margin-top:10px; width:300px;} +#sidebar{position:relative; margin-left:92%; margin-right:0px; margin-top:10px; width:23%;} #sidebar div:first-child h3 { margin-top:0px; } #sidebar h3 { background-color: #FFE9E8; padding: 0.5em; } #sidebar p { padding-left: 1em; } @@ -508,7 +508,7 @@ a:hover { text-decoration: underline; } #sidebar .tags div ul .tag_4 { font-size: 2em; color: #0070a8; } #sidebar .tags div ul .tag_5 { font-size: 2.25em; color: #0099e5; } #sidebar .tags div ul .tag_6 { font-size: 3em; color: #00adff; } - +#footer{ position:static; border-bottom: 1px solid #E9E9F3; margin-top: 85px; } th.month{padding:0cm 2.5cm;} table.month { margin-bottom: 0; } table.month th.month { text-transform: uppercase; color: #555555; background: none; } @@ -516,7 +516,7 @@ table.month th { text-transform: capitalize; color: #555555; background-color: # table.month td { text-align: center; font-weight: bold; } table.month td.objecttype { background-color: #C4EBF4; } -div.paginator { margin-bottom: 1em; } +div.paginator { margin-bottom: 2em; } div.paginator span { font-size: 1.2em; margin-left: 0.3em; padding: 0 0.5em 0 0.5em; float: left; border: 1px solid #e9e9f3; } div.paginator span.index { margin-left: 0; } div.paginator span.page:hover, div.paginator span.next:hover, div.paginator span.previous:hover { background-color: #006699; } diff --git a/objectapp/static/objectapp/js/savert.js b/objectapp/static/objectapp/js/savert.js index 0e1f8b07..b5294cc5 100644 --- a/objectapp/static/objectapp/js/savert.js +++ b/objectapp/static/objectapp/js/savert.js @@ -3,7 +3,7 @@ $ = django.jQuery $(document).ready(function() { - $("#id_submit_rt").ajaxSend(function(e,xhr,settings){ + $("#id_go").ajaxSend(function(e,xhr,settings){ function getCookie(name) { @@ -41,14 +41,14 @@ $ = django.jQuery xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } }); - $("#id_submit_rt").click(function(){ + $("#id_go").click(function(){ left = document.getElementById("id_left") - rt = document.getElementById("id_reltype") + rt = document.getElementById("id_rel") right = document.getElementById("id_right") absolute_url = document.getElementById("id_back_url") - url = "/objects/dynamicRelation/save/"+ left.value + "/" +rt.value+"/"+right.value+"/" - // alert(url); - $.get(url,function(data){ + url = "/objects/dynamicRelation/save/"+ left.value+"/"+rt.value+"/"+right.value+"/" + //alert(url); + $.get(url, function(data){ window.location.replace(absolute_url.value); }); diff --git a/objectapp/static/objectapp/js/setMember.js b/objectapp/static/objectapp/js/setMember.js index a71b6750..977bd63c 100644 --- a/objectapp/static/objectapp/js/setMember.js +++ b/objectapp/static/objectapp/js/setMember.js @@ -42,10 +42,16 @@ $ = django.jQuery } }); $("#id_select_mem").change(function(){ - right_member = $(this).val() - document.getElementById("id_right").value = right_member; - // alert("hello "+ right_member); + right = $(this).val() + left =document.getElementById("id_left") + rel=document.getElementById("id_rel") + document.getElementById("id_right").value = right; + //url="/objects/dynamicRelation/save/"+left.value+"/"+rel.value+"/"+right+"/" + //alert("hello "+ ur); + }); }); + + diff --git a/objectapp/templates/objectapp/_gbobject_detail.html b/objectapp/templates/objectapp/_gbobject_detail.html index 6b213566..ee43aba2 100644 --- a/objectapp/templates/objectapp/_gbobject_detail.html +++ b/objectapp/templates/objectapp/_gbobject_detail.html @@ -28,7 +28,7 @@ </div> -</div> + <p> <b>Name: </b> {{ object.title }} <br/> @@ -76,7 +76,7 @@ </p> - +</div> <div class="gbobject-body span-16 last"> diff --git a/objectapp/templates/objectapp/base.html b/objectapp/templates/objectapp/base.html index d2b78ceb..90e061bb 100644 --- a/objectapp/templates/objectapp/base.html +++ b/objectapp/templates/objectapp/base.html @@ -19,8 +19,8 @@ {% endblock %} {% block sidebar %} - <img src="{{ STATIC_URL }}objectapp/img/rss.png" alt="?" width="20" height="" /> - <a href="{% url objectapp_gbobject_latest_feed %}" class="feeds"><h4>Rssfeed</h4></a> + + <a href="{% url objectapp_gbobject_latest_feed %}" class="feeds" title="Rssfeed"><img src="{{ STATIC_URL }}objectapp/img/rss.png" alt="?" width="20" height="" /></a> <div class="search"> <h3>{% trans "Search" %}</h3> diff --git a/objectapp/templates/objectapp/fillAT.html b/objectapp/templates/objectapp/fillAT.html index 6ddabe44..a788c8d9 100644 --- a/objectapp/templates/objectapp/fillAT.html +++ b/objectapp/templates/objectapp/fillAT.html @@ -1,28 +1,17 @@ {% extends "objectapp/base.html" %} {% load i18n %} {% block content %} -<form action="." method="POST"> +<form action="." method="POST" enctype="multipart/form-data"> {% csrf_token %} -<b>Details of {{ name }} </b> -<table id= "id_table" class = "class_table"> - <tr> - <th> Attribute Type </th> - <th> Value </th> - </tr> - {% for field in form %} - <tr> - <td>{{ field.label_tag }}</td> - <td>{{ field }} {{ field.errors }}</td> - </tr> - {% endfor %} - <tr> - <td><input type="submit" id="id_submit" value="Go"/></td> - <td><input type="button" id="id_back" value="Back"/></td> - </tr> -</table> +<b>{{ title }}</b> +{% for field in form %} +{{ field }} {{ field.errors }} +{% endfor %} +<input type="submit" id="id_submit" value="Go"/> +<input type="button" id="id_back" value="Back"/> <input type="hidden" id="id_back_url" value="{{ absolute_url_node }}"/> -<input type="hidden" id="id_hidden" value=" "/> + </form> {% endblock %} diff --git a/objectapp/templates/objectapp/gbobject_detail.html b/objectapp/templates/objectapp/gbobject_detail.html index b8ce7265..e4574206 100644 --- a/objectapp/templates/objectapp/gbobject_detail.html +++ b/objectapp/templates/objectapp/gbobject_detail.html @@ -1,6 +1,5 @@ {% extends "objectapp/base.html" %} {% load i18n comments objectapp_tags %} - {% block title %}{{ object.title }}{% endblock %} {% block meta-description %}{% if object.excerpt %}{{ object.excerpt|striptags }}{% else %}{{ object.content|striptags|truncatewords:100 }}{% endif %}{% endblock %} @@ -30,15 +29,12 @@ {% endblock %} - - {% block content %} {% block gbobject-content %} {% with object.html_content|safe as object_content %} {% include "objectapp/_gbobject_detail.html" %} - <script type="text/javascript" > var s = 0 var i @@ -78,6 +74,20 @@ {% endblock %} +<br/> +<p><br/> +<b>AddAttributes: </b> +<input type="hidden" id="id_object" value="{{ object.title }}"/> +{% for i in object.getattributetypes %} +<a href="{{ get_absolute_url }}/objects/dynamicAttribute/save/{{ i }}/{{ object.title }}/">{{ i }}</a><nbsp>; +{% endfor %} +</p> +<p> +<b>Add Relations: </b> +{% for i in object.getrelationtypes %} +<a href=" {{ get_absolute_url }}/objects/dynamicRelation/displaymem/{{ i }}/{{ object.title }}/">{{ i }}</a><nbsp>; +{% endfor %} +</p> {% block gbobject-widgets %} <div class="gbobject-widgets span-16 last"> @@ -132,11 +142,7 @@ </div> </div> {% endblock %} - - - - - + {% block gbobject-comments %} <div id="comments" class="span-16 last"> diff --git a/objectapp/templates/objectapp/selectRT.html b/objectapp/templates/objectapp/selectRT.html index cfec3c74..5ceae85e 100644 --- a/objectapp/templates/objectapp/selectRT.html +++ b/objectapp/templates/objectapp/selectRT.html @@ -5,33 +5,30 @@ {% block content %} <form method="." action="POST"> {% csrf_token %} -<b>Details of {{ gb }}</b> +<b>{{ gb }}</b> +<b>{{ reltit }}</b> <!-- -------------------------------------------- --> -<select id ="id_select_rt"> +<select id ="id_select_mem"> <option>-select-</option> -{% if final %} -{% for key, val in final.iteritems %} - <option value="{{ key }}">{{ val }}</option> +{% if finaldict %} +{% for key, val in finaldict.iteritems %} + <option value="{{ val }}">{{ val }}</option> {% endfor %} {% else %} - <option> No Relation </option> + <option> No Member </option> <input type="button" id="id_back" value="Back"/> {% endif %} </select> <!-- -------------------------------------------- --> - -<input id="id_left" type="hidden" value="{{ gbid }}"> -<input id="id_right" type="hidden" value=" "> -<input id="id_reltype" type="hidden" value=" "> +<input type="button" id="id_go" value="GO"/> +<input type="button" id="id_back" value="Back"/> +<input id="id_left" type="hidden" value="{{ gb }}"> +<input id="id_rel" type="hidden" value="{{ reltit }}"> <input id="id_back_url" type="hidden" value="{{ absolute_url_node }}"> - -<!-- -------------------------------------------- --> - -<div id = "id_div1"> -</div> +<input id="id_right" type="hidden" value=" "> <!-- -------------------------------------------- --> diff --git a/objectapp/templates/objectapp/skeleton.html b/objectapp/templates/objectapp/skeleton.html index 4d4b0a23..d04b02f4 100644 --- a/objectapp/templates/objectapp/skeleton.html +++ b/objectapp/templates/objectapp/skeleton.html @@ -11,20 +11,20 @@ } .nodetext { #pointer-events: none; - font: 10px Serif; + font: 12px Serif; font-style:italic; } .mainnode{ font: 15px sans-serif; - fill:"red"; + fill:"black"; border-width: 1px; font-weight:bold; border-color: gray; } .relnode { - font: 10px sans-serif; + font: 12px sans-serif; font-weight:bold; fill:#000; } @@ -33,8 +33,9 @@ .node { border-width: 1px; border-color: gray; - fill:"green"; - font: 10px sans-serif; + font: 12px sans-serif; + fill:#25587E; + font-weight:bold; } body { background-color: white; @@ -46,8 +47,8 @@ display: block; } svg { - margin-left: 50%; - margin-right: 50%; + margin-left: 0%; + margin-right: 0%; display: block; position: absolute; } @@ -96,17 +97,18 @@ <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_fk.js" type="text/javascript"></script> <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_m2m.js" type="text/javascript"></script> <script src="{% admin_media_prefix %}js/grappelli/jquery.grp_autocomplete_generic.js" type="text/javascript"></script> - <script type="text/javascript" src="{{ STATIC_URL }}objectapp/js/saveat.js"></script> - <script type="text/javascript" src="{{ STATIC_URL }}objectapp/js/selectRT.js"></script> + <script type="text/javascript" src="{{ STATIC_URL }}objectapp/js/setMember.js"></script> <script type="text/javascript" src="{{ STATIC_URL }}objectapp/js/savert.js"></script> <script type="text/javascript" src="{{ STATIC_URL }}objectapp/js/noat.js"></script> + <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> <script type="text/javascript" src="{{ STATIC_URL }}objectapp/js/setdate.js"></script> + <!-- EXTRAHEAD --> {% block extrahead %}{% endblock %} @@ -186,56 +188,20 @@ Javascript for Object type force graph --> <script type="text/javascript" > - - var a = 75 * s; - - if ( a > 700 ) - { - var w = 700; - } - else - { - var w = a; - } - - var h = 75 * s, - - /* var w = 700, - h = 400,*/ - fill = d3.scale.category20(); - - var vis = d3.select("#chart") - .append("svg:svg") - .attr("width", w) - .attr("height", h); - - vis.append("svg:g").attr("class", "edges"); - vis.append("svg:g").attr("class", "nodes"); - -$(function() { - $.ajax({ - url: '/nodetypes/graphs/graph_json/{{ object.id }}', - //crossDomain: true, - dataType: 'json', - success : function(json) { - - //var node = NID.objects.get(slug='{{ slug }}'); - var force; - - // this contains all the nodes as a dict with _id as the key - - var nodes_by_id = _.reduce(json.node_metadata, function(acc, n) { +function init(a,b) +{ + + + nodes_by_id = _.reduce(a, function(acc, n) { acc[n._id] = n; return acc; }, {}); + + + all_edges=new Array(); - - -all_edges=new Array(); - - - - all_edges =_(json.relations).chain().map(function(e) { + //this contains all the links between the nodes + all_edges =_(b).chain().map(function(e) { e.source = nodes_by_id[e.from]; e.target = nodes_by_id[e.to]; @@ -244,182 +210,61 @@ all_edges=new Array(); return nodes_by_id[e.from] && nodes_by_id[e.to]&& e.type!="title" && e.type!="content" }).value(); - /* var member_of = _(json.member_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'member_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - var contains_subtypes = _(json.contains_subtypes).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'contains_subtypes'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - var contains_members = _(json.contains_members).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'contains_members'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - +} - var left_subjecttype_of = _(json.left_subjecttype_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'left_subjecttype_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - var subjecttype_of = _(json.subjecttype_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'subjecttype_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); +$(function fgraph() { + - var plural = _(json.plural).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'plural'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - var altnames = _(json.altnames).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'altnames'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - var authors = _(json.authors).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'authors'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); +$.getJSON('/nodetypes/graphs/graph_json/' + {{object.id}}, function (json1) { + metadata=json1.node_metadata; + relations=json1.relations; + init(metadata,relations); + load({{object.id}}) }); - - var type_of = _(json.type_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'type_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - /*var content = _(json.content).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'content'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - contains_members = _(json.contains_members).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'contains_members'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); +function load(key) +{ - var prior_nodes = _(json.prior_nodes).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'prior_node'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - var posterior_nodes = _(json.posterior_nodes).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'posterior_node'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - - - var right_subjecttype_of = _(json.right_subjecttype_of).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'right_subjecttype_of'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - +if ( s > 0) { +var w = 700; +var p = 122 + "%"; +var h = 680; +var q = 3 * s + 80 + "%"; +}else{ +var w = 700; +var p = 122 + "%"; +var h = 680; +var q = 110 + "%"; +} + fill = d3.scale.category20(); + + var vis = d3.select("#chart") + .append("svg:svg") + .attr("id", "amazingViz") + .attr("width", p) + .attr("height", q); - var follows_edges = _(json.is_followed_by).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'follows_edges'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - + vis.append("svg:g").attr("class", "edges"); + vis.append("svg:g").attr("class", "nodes"); + - var mentions_edges = _(json.is_mentioned_by).chain().map(function(e) { - e.source = nodes_by_id[e.from]; - e.target = nodes_by_id[e.to]; - e.type = 'mentions_edges'; - return e; - }).filter(function(e){ - return nodes_by_id[e.from] && nodes_by_id[e.to] - }).value(); - */ + - nodes_by_id[{{ object.id }}].x = w/2.0; - nodes_by_id[{{ object.id }}].y = h/2.0; + + nodes_by_id[key].x = w/2.0; + nodes_by_id[key].y = h/2.0; - /* all_edges = new Array(); - all_edges = all_edges.concat(follows_edges, member_of, contains_members, contains_subtypes, mentions_edges, right_subjecttype_of, left_subjecttype_of, subjecttype_of,type_of,plural,altnames,contains_members, prior_nodes,posterior_nodes); - /* all_edges.concat(follows_edges); - all_edges.concat(member_of_metatype); - all_edges.concat(contains_members); - all_edges.concat(contains_subtypes); - all_edges.concat(mentions_edges); - + - document.getElementById('debugbox1').value= follows_edges; //member_of_metatype - document.getElementById('debugbox2').value= mentions_edges; - //document.getElementById('debugbox2').value= member_of_metatype; - document.getElementById('debugbox3').value= all_edges; - */ - var force = d3.layout.force() + + var force = d3.layout.force() .linkStrength(0.5) - .charge(-2000) + .charge(-5000) .friction(0.7) .gravity(0.7) - .linkDistance(15) + .linkDistance(50) .nodes([]) .links([]) .size([w, h]) @@ -445,18 +290,17 @@ all_edges=new Array(); force.links(edges); force.start(); - link = d3.select("#chart g.edges").selectAll("line.link") + link = d3.select("#chart g.edges").selectAll("line.link").select(this.arrowhead) .data(edges, function(e){return e.from + "-" + e.to + "-" + e.type}); link.enter().append("svg:line") .attr("class", "link") - .style("stroke-width", 2 /* function(d) { + .style("stroke-width", 2/* function(d) { return Math.sqrt(d.value); } */ ) .attr("x1", function(d) { return d.source.x; - }) - + }) .attr("y1", function(d) { return d.source.y; }) @@ -469,43 +313,128 @@ all_edges=new Array(); .attr("text", function(d) { return d.type; }) + + .attr("marker-end", "url(#arrowhead)"); + - .append("a") - .text(function(d) { return d.type; }); - + - var node = d3.select("#chart g.nodes").selectAll("g.node").data(nodes); + + var node = d3.select("#chart g.nodes").selectAll("g.node").data(nodes); - - + + + var new_g = node.enter().append("svg:a") - .attr("class", function(d) { if (d._id=={{ object.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) - .attr("xlink:href", function(d){return d.url;}) + .attr("class", function(d) { var e=(d._id).charAt(0); if (d._id==key) return "mainnode"; else if (e=="-") return "nodetext"; else if (isNaN(d._id)) return "relnode" ; else return "node"; }) + .call(force.drag); - - - new_g.append("svg:circle") - .attr("cx", function(d) { return d.x - w/2.0 + 15; }) - .attr("cy", function(d) { return d.y - h/2.0 + 15; }) - .attr("r", function(d) { if (d._id=={{ object.id }}) return 8; else if (isNaN(d._id) || (d._id)<0) return 1; else return 7 }) - .style("fill", function color(d) { if (d._id=={{ object.id }}) return "red"; else if (isNaN(d._id) || (d._id)<0) return "white" ; else return "green"}); + + new_g.append("svg:marker") + .attr("id", "arrowhead") + .attr("viewBox","0 0 10 10") + .attr("refX","20") + .attr("refY","5") + .attr("markerUnits","strokeWidth") + .attr("markerWidth","9") + .attr("markerHeight","5") + .attr("orient","auto") + .append("svg:path") + .attr("d","M 0 0 L 10 5 L 0 10 z") + .attr("fill", "#6D6666"); + + + + + + + +$(window).bind('keydown',function(event){ + if(17==event.keyCode){ + new_g.on("click",function(d){ + if(d._id>0 && d.expanded=="false") + { + d3.select("#amazingViz").remove(); + d.expanded="true"; + $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) { + new_metadata=json2.node_metadata; + new_relations=json2.relations; + metadata=_.union(new_metadata,metadata); + relations=_.union(new_relations,relations); + init(metadata,relations); + load(d._id) + }) - new_g.append("svg:text") - .attr("class",function(d) { if (d._id=={{ object.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) + } + }); +} +}); + + new_g.on("click", function(d) { + + new_g.attr("xlink:href",function(d){return d.url;}); + }); + + + /*new_g.append("svg:ellipse") + .attr("cx", function(d) { return d.x - w/2.0 +15; }) + .attr("cy", function(d) { return d.y - h/2.0 +15 ; }) + .call(force.drag) + .attr("rx", function(d) { return ((d.screen_name).length) +10 }) + .attr("ry", function(d) { if (d._id==key) return 8; else if (isNaN(d._id) || (d._id)<0) return 1; else return 7 }); + //.style("fill", function color(d) { if (d._id==key) return "red"; else if (isNaN(d._id) || (d._id)<0) return "white" ; else return "green"});*/ + + + + + + var text1 = new_g.append("svg:text") + .attr("class",function(d) {var e=(d._id).charAt(0); if (d._id==key) return "mainnode";else if (e=="-") return "nodetext"; else if (isNaN(d._id)) return "relnode"; else return "node"; }) .attr("dy", 20) .attr("dx", 25) - .attr("text-anchor",function text(d) { if (isNaN(d._id) || (d._id)<0) return "middle" ; else return "left"}) - -// .attr("style",function text(d) { if (isNaN(d._id)) return "font-size:9.00pt;fill:#333;" ; else return "font-size:9.00pt;fill:black;"}) + .attr("text-anchor","middle") + + // .attr("style",function text(d) { if ((d._id)>0) return "font-size:9.00pt;fill:blue;" ; else return "font-size:9.00pt;fill:black;"}) .text(function(d) { return d.screen_name; }); - - node.exit().remove(); - + var bbox = text1.node().getBBox(); + + + new_g.filter(function(d) { return (d._id).charAt(0)=="-"; }).append("svg:rect") + .attr("x",bbox.x-22) + .attr("y", bbox.y) + .attr("width", function(d) {var ttx=d.screen_name ; return (ttx.length +bbox.width+40)}) + .attr("height", bbox.height) + .call(force.drag) + .style("fill-opacity", ".1") + .style("stroke", "#000") + .style("stroke-width","1px" ); + + + + + + + + new_g.filter(function(d) { return (d._id)>0;}).append("svg:ellipse") + .attr("cx", bbox.x+25) + .attr("cy", bbox.y+13) + .call(force.drag) + .attr("rx",function(d) {var ttx=d.screen_name ; return (ttx.length + 55)}) + .attr("ry",14) + .style("fill-opacity", ".2") + .style("stroke", "#666") + .style("stroke-width", "1.5px") + .style("fill", function color(d) {var e=(d._id).charAt(0); if (d.expanded=="true") return "red"; else return "none"}); + + + + + node.exit().remove(); force.on("tick", function() { @@ -522,44 +451,47 @@ all_edges=new Array(); }); } - + + + update(all_edges); + vis.style("opacity", 1e-6) .transition() .duration(1000) .style("opacity", 1); - /* $('input#follows').change(function(){ - update(all_edges); - }); - */ - - /* $('input#mentions').change(function(){ - update(all_edges); - }); */ - } - }); - -// $("#relation_type").buttonset(); -// $('input#mentions').change(function(){console.log(this)}); -// $('input#follows').change(function(){console.log(this)}); -}); + +} + + +}); +//fgraph({{object.id}}); + </script> {% block graph %} {% endblock %} </div> - <div id="sidebar" class="span-8 last"> + <div id="sidebar"> {% block sidebar %} {% endblock %} </div> - </div> - <div id="footer" class="span-24 last"> - <p>Powered by <a href="http://www.djangoproject.com" title="http://www.djangoproject.com">Django</a> and <a href="http://github.com/gnowgi/django-gstudio" title="http://github.com/gnowgi/django-gstudio">Gstudio {{ GSTUDIO_VERSION }}</a>.</p> + + <div id="footer"> + <p> + + <a rel="license" + href="http://creativecommons.org/licenses/by-sa/3.0/" title="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative + Commons License" style="border-width:0"src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png"/></a> All material is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/" title = "http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a> unless mentioned otherwise. + <br/> + Poweredby <a href="http://www.djangoproject.com" title="https://www.djangoproject.com/">Django</a> + and <a href="https://github.com/gnowgi/gnowsys-studio" title="https://github.com/gnowgi/gnowsys-studio">Gstudio + {{ GSTUDIO_VERSION }}</a>. + </p> </div> </div> </body> </html> - diff --git a/objectapp/urls/ATurl.py b/objectapp/urls/ATurl.py index 00122fb9..2363fd89 100644 --- a/objectapp/urls/ATurl.py +++ b/objectapp/urls/ATurl.py @@ -1,12 +1,8 @@ from django.conf.urls.defaults import url
from django.conf.urls.defaults import patterns
-#from objectapp.views import testview
+
urlpatterns = patterns('objectapp.views.dynamicAT',
- url(r'^dynamicattr/$','dynamic_view',
- name = 'objectapp_dynamic_view'),
- url(r'^save/(\w.+)/$','dynamic_save',
+ url(r'^save/(\w.+)/(\w.+)/$','dynamic_save',
name='objectapp_dynamic_save'),
- # url(r'^dynamicOT/(\w.+)/$','dynamic_objecttype',
- # name='objectapp_dynamic_objecttype'),
)
diff --git a/objectapp/urls/RTurl.py b/objectapp/urls/RTurl.py index cea15cdc..53cfb8de 100644 --- a/objectapp/urls/RTurl.py +++ b/objectapp/urls/RTurl.py @@ -1,13 +1,12 @@ from django.conf.urls.defaults import url from django.conf.urls.defaults import patterns -#from objectapp.views import testview -urlpatterns = patterns('objectapp.views.dynamicRT', - url(r'^displayRT/(\w.+)/$','context_RT', - name='objectapp_context_view'), - url(r'^displaymem/(\w+)/(\w+)/$','context_member', + +urlpatterns = patterns('objectapp.views.dynamicRT', + url(r'^displaymem/(\w.+)/(\w.+)/$','context_member', name='objectapp_context_display'), - url(r'^save/(\w+)/(\w+)/(\w+)/$','context_save', + + url(r'^save/(\w.+)/(\w.+)/(\w.+)/$','context_save', name='objectapp_context_save'), ) diff --git a/objectapp/views/add.py b/objectapp/views/add.py index afe96f98..356cc785 100644 --- a/objectapp/views/add.py +++ b/objectapp/views/add.py @@ -68,9 +68,10 @@ from django.template import RequestContext from django.shortcuts import render_to_response from datetime import datetime from objectapp.forms import * -from reversion.models import * -@reversion.create_revision() + + + def addgbobject(request): if request.method == 'POST': formset = GbobjectForm(request.POST) @@ -91,7 +92,7 @@ def addgbobject(request): -@reversion.create_revision() + def addprocess(request): if request.method == 'POST': formset = ProcessForm(request.POST) @@ -111,7 +112,7 @@ def addprocess(request): return render_to_response(template, variables) -@reversion.create_revision() + def addsystem(request): if request.method == 'POST': formset = ProcessForm(request.POST) diff --git a/objectapp/views/dynamicAT.py b/objectapp/views/dynamicAT.py index 52a6256c..a5d71de9 100644 --- a/objectapp/views/dynamicAT.py +++ b/objectapp/views/dynamicAT.py @@ -1,155 +1,80 @@ from django.http import * -from django import forms +from django.forms import ModelForm from django.shortcuts import render_to_response from django.template import RequestContext +from django.forms.models import modelform_factory from objectapp.models import * from objectapp.forms import * from gstudio.models import * +from gstudio.admin.forms import * -def dynamic_view(request): - rdict = {} - for j in Gbobject.objects.all(): - rdict.update({j.id:j.title}) +def MakeForm(model_cls, *args, **kwargs): + class ContextForm(ModelForm): + class Meta: + model = model_cls.values()[0] + print 'model' ,model + fields = ('value',) + print 'fields',fields - template="objectapp/selectAT.html" - context= RequestContext(request,{ 'rdict':rdict }) - return render_to_response(template,context) + def __init__(self, *args, **kwargs): -def dynamic_save(request,tit): #view for gb and ot too - testlst = [] - parenttype = [] - attributetype = [] - rdict = {} - nodelist = [] - syst = []#parent for system - try: - offset = str(tit) - except ValueError: - raise Http404() - - #flag = 0 #means its object - - if Objecttype.objects.filter(title = offset): - flag = 1 - elif Gbobject.objects.filter(title = offset): - flag = 0 - elif Systemtype.objects.filter(title = offset): - flag = 2 - - if flag == 1: - parenttype.append(Objecttype.objects.get(title = offset)) - pt_id = NID.objects.get(title = offset) - name = pt_id - - elif flag == 0: - #utit = Gbobject.objects.get(title = offset) - gb=Gbobject.objects.get(title=offset) - name = gb - # checking whether object is gb or system coz created objects are treated as Gbobject n then System objects - if System.objects.filter(title = (gb.ref).title): - gb = System.objects.get(title = offset) - syst = gb.systemtypes.all() - for i in syst: - nodelist = i.nodetype_set.all() - parenttype.append(i) - - for i in nodelist: - parenttype.append(i.ref) - - elif Gbobject.objects.filter(title = (gb.ref).title): - parenttype = gb.objecttypes.all() - - pt_id = NID.objects.get(id = gb.id) - - elif flag == 2: - systype = Systemtype.objects.get(title = offset) - nodelist = systype.nodetype_set.all() - parenttype.append(Systemtype.objects.get(title = offset)) - for i in nodelist: - parenttype.append(i.ref) - pt_id = NID.objects.get(title = offset) - name = pt_id + super(ContextForm,self).__init__(*args, **kwargs) + + + return ContextForm(*args, **kwargs) - absolute_url_node = name.get_absolute_url() - for each in parenttype: - attributetype.append(each.subjecttype_of.all()) - attributetype = [num for elem in attributetype for num in elem] +def dynamic_save(request, attit, memtit): + rdict ={} + savedict = {} + memtit = NID.objects.get(title = str(memtit)) + name = memtit.ref - for each in range(len(attributetype)): - rdict.update({attributetype[each]:str(Attributetype.get_dataType_display(attributetype[each]))}) - - if request.method=='POST': - form = ContextForm(rdict,request.POST) - bound= form.is_bound + absolute_url_node = name.get_absolute_url() - if form.is_valid(): - for key,val in rdict.items(): - testlst.append(str(request.POST[str(key)+"_"+str(val)])) + at = Attributetype.objects.get(title = str(attit)) + dt = str(at.get_dataType_display()) + MyModel = eval('Attribute'+dt) + + rdict.update({str(at.title):MyModel}) + print "rdict",str(rdict) + + if request.method == 'POST': + form = MakeForm(rdict,request.POST,request.FILES) + try: + if form.is_valid(): + value = form.cleaned_data['value'] - for val in range(len(testlst)): - if testlst[val] != '' : - savedict = {'title':testlst[val],'slug':testlst[val], 'svalue':testlst[val], 'subject':pt_id, 'attributetype':rdict.keys()[val]} - att = Attribute.objects.create(**savedict) + if Attribute.objects.filter(subject = memtit.id) and Attribute.objects.filter(attributetype = at.id): + att = Attribute.objects.get(subject = memtit.id, attributetype = at.id) + att.delete() + del att + savedict = {'title':str(value),'slug':str(value),'svalue':str(value),'subject':memtit, 'attributetype':at,'value':str(value)} + att = MyModel.objects.create(**savedict) + att.save() + print 'savedict',str(savedict) + return HttpResponseRedirect(absolute_url_node) + else: + savedict = {'title':str(value),'slug':str(value),'svalue':str(value),'subject':memtit, 'attributetype':at,'value':str(value)} + att = MyModel.objects.create(**savedict) att.save() + print 'savedict',str(savedict) + return HttpResponseRedirect(absolute_url_node) + except: + raise Http404() - return HttpResponseRedirect(absolute_url_node) else: - form = ContextForm(rdict) - + form = MakeForm(rdict) + template = "objectapp/fillAT.html" - context = RequestContext(request,{'form' : form, 'name':name,'absolute_url_node':absolute_url_node}) + context = RequestContext(request,{'form' : form,'title':str(attit), 'absolute_url_node':absolute_url_node}) return render_to_response(template,context) -# def dynamic_objecttype(request,iden): #gb view for dynamic at -# testlst = [] -# attributetype = [] -# rdict = {} -# try: -# offset = str(iden) -# except ValueError: -# raise Http404() - -# #uid = Gbobject.objects.get(title = offset) -# gb=Gbobject.objects.get(title=offset) -# parenttype = gb.objecttypes.all() -# pt_id = NID.objects.get(id = gb.id) - - -# for each in parenttype: -# attributetype.append(each.subjecttype_of.all()) - -# attributetype = [num for elem in attributetype for num in elem] - -# for each in range(len(attributetype)): -# rdict.update({attributetype[each]:str(Attributetype.get_dataType_display(attributetype[each]))}) - -# if request.method=='POST': -# form = ContextForm(rdict,request.POST) -# bound= form.is_bound - -# if form.is_valid(): -# for key,val in rdict.items(): -# testlst.append(str(request.POST[str(key)+"_"+str(val)])) - -# for val in range(len(testlst)): -# if testlst[val] != '' : -# savedict = {'title':testlst[val],'slug':testlst[val], 'svalue':testlst[val], 'subject':pt_id, 'attributetype':rdict.keys()[val]} -# att = Attribute.objects.create(**savedict) -# att.save() - -# return HttpResponseRedirect("/objects/") -# else: -# form = ContextForm(rdict) - -# template = "objectapp/fillAT.html" -# context = RequestContext(request,{'form' : form}) -# return render_to_response(template,context) diff --git a/objectapp/views/dynamicRT.py b/objectapp/views/dynamicRT.py index f0781683..f85fe53e 100644 --- a/objectapp/views/dynamicRT.py +++ b/objectapp/views/dynamicRT.py @@ -1,256 +1,279 @@ -from gstudio.models import * -from objectapp.models import * + from django.http import * from django.shortcuts import render_to_response from django.template import RequestContext from django.db import IntegrityError +from django.forms import ModelForm +from gstudio.models import * +from objectapp.models import * -def context_RT(request, gbid): - pt =[] #contains parenttype - reltype =[] #contains relationtype - titledict = {} #contains relationtype's title - inverselist = [] #contains relationtype's inverse - finaldict = {} #contains either title of relationtype or inverse of relationtype - listval=[] #contains keys of titledict to check whether parenttype id is equals to listval's left or right subjecttypeid +def context_member(request,reltit , memtit): + + member = [] + subtype = [] + subtypemember = [] + finaldict = {} + nt = [] + parenttype = [] + +#------------------------------------------------------------- + if Objecttype.objects.filter(title = str(memtit)): + ot = Objecttype.objects.get(title = str(memtit)) + absolute_url_node = ot.get_absolute_url() + elif Gbobject.objects.filter(title = str(memtit)): + ot = Gbobject.objects.get(title = str(memtit)) + absolute_url_node = ot.get_absolute_url() +#-------------------------------------------------------------- + + if Relationtype.objects.filter(title = str(reltit)): + r =Relationtype.objects.get(title = str(reltit)) + role = r.left_subjecttype.ref + roletype = str(r.left_applicable_nodetypes) + print "Original is left role of relation" + newrole = r.right_subjecttype.ref + newroletype = str(r.right_applicable_nodetypes) + print 'original ' ,str(role) + print 'newrole (i.e right)', str(newrole) - #flag = 0 #check whether OT or OB, flag = 0 means it is OB + else: + r = Relationtype.objects.get(inverse = str(reltit)) + role = r.right_subjecttype.ref + roletype = str(r.right_applicable_nodetypes) + print "Original is right role of relation" + newrole = r.left_subjecttype.ref + newroletype = str(r.left_applicable_nodetypes) + print 'original ' ,str(role) + print 'newrole (i.e left)', str(newrole) - # if its an OT, then parse separately - if Objecttype.objects.filter(title=str(gbid)): - flag = 1 - elif Gbobject.objects.filter(title = str(gbid)): - flag = 0 - elif Systemtype.objects.filter(title = str(gbid)): - flag = 2 - - if flag == 1: - pt.append(Objecttype.objects.get(title = str(gbid))) - name = NID.objects.get(title = str(gbid)) - - for i in range(len(pt)): - if Relationtype.objects.filter(left_subjecttype = pt[i].id): - reltype.append(Relationtype.objects.get(left_subjecttype = pt[i].id)) - if Relationtype.objects.filter(right_subjecttype = pt[i].id): - reltype.append(Relationtype.objects.get(right_subjecttype = pt[i].id)) - - # it converts 2 or more list as one list - #reltype = [num for elem in reltype for num in elem] #this rqud for filtering - - for i in reltype: - titledict.update({i:i.id}) - - - for i in range(len(titledict)): - listval.append(Relationtype.objects.get(title = titledict.keys()[i])) - inverselist.append(titledict.keys()[i].inverse) - - - for j in range(len(pt)): - for i in range(len(listval)): - if pt[j].id == listval[i].left_subjecttype_id : - finaldict.update({titledict.values()[i]:titledict.keys()[i]}) - elif pt[j].id == listval[i].right_subjecttype_id: - finaldict.update({titledict.values()[i]:inverselist[i]}) - - - elif flag == 0: - gb= Gbobject.objects.get(title=str(gbid)) - name = gb - pt = gb.objecttypes.all() - for i in range(len(pt)): - if Relationtype.objects.filter(left_subjecttype = pt[i].id): - reltype.append(Relationtype.objects.get(left_subjecttype = pt[i].id)) - if Relationtype.objects.filter(right_subjecttype = pt[i].id): - reltype.append(Relationtype.objects.get(right_subjecttype = pt[i].id)) - if Relationtype.objects.filter(left_subjecttype = gb): - reltype.append(Relationtype.objects.get(left_subjecttype = gb)) - if Relationtype.objects.filter(right_subjecttype = gb): - reltype.append(Relationtype.objects.get(right_subjecttype = gb)) - - - #reltype = [num for elem in reltype for num in elem] - - for i in reltype: - titledict.update({i:i.id}) +#--------------------------------------------------------------------- + + if newrole.reftype == 'Objecttype' and newroletype == 'OT': + print "Objecttype and OT" + for i in newrole.get_members: + member.append(i) + + for i in member: + finaldict.update({i.id:str(i.title)}) + + # for i in newrole.get_children(): + # subtype.append(i.ref) + for i in newrole.get_descendants(): + subtype.append(i.ref) + + for i in subtype: + finaldict.update({i.id:str(i.title)}) + + for i in subtype: + subtypemember.append(i.get_members) - for i in range(len(titledict)): - listval.append(Relationtype.objects.get(title = titledict.keys()[i])) - inverselist.append(titledict.keys()[i].inverse) - - for j in range(len(pt)): - for i in range(len(listval)): - if pt[j].id == listval[i].left_subjecttype_id or gb.id == listval[i].left_subjecttype_id : - finaldict.update({titledict.values()[i]: titledict.keys()[i]}) - elif pt[j].id == listval[i].right_subjecttype_id or gb.id == listval[i].right_subjecttype_id: - finaldict.update({titledict.values()[i]:inverselist[i]}) - - elif flag == 2: - systype = Systemtype.objects.get(title = str(gbid)) - nodelist = [] - nodelist = systype.nodetype_set.all() - for i in nodelist: - pt.append(i.ref) - pt.append(systype) - name = NID.objects.get(title = str(gbid)) - - for i in range(len(pt)): - if Relationtype.objects.filter(left_subjecttype = pt[i].id): - reltype.append(Relationtype.objects.get(left_subjecttype = pt[i].id)) - if Relationtype.objects.filter(right_subjecttype = pt[i].id): - reltype.append(Relationtype.objects.get(right_subjecttype = pt[i].id)) - - # it converts 2 or more list as one list - #reltype = [num for elem in reltype for num in elem] #this rqud for filtering - - for i in reltype: - titledict.update({i:i.id}) - - - for i in range(len(titledict)): - listval.append(Relationtype.objects.get(title = titledict.keys()[i])) - inverselist.append(titledict.keys()[i].inverse) - - - for j in range(len(pt)): - for i in range(len(listval)): - if pt[j].id == listval[i].left_subjecttype_id : - finaldict.update({titledict.values()[i]:titledict.keys()[i]}) - elif pt[j].id == listval[i].right_subjecttype_id: - finaldict.update({titledict.values()[i]:inverselist[i]}) - + subtypemember = [num for elem in subtypemember for num in elem] + + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) + + finaldict.update({newrole.id:str(newrole.title)}) + + elif newrole.reftype == 'Gbobject' and newroletype == 'OB': + print "Gbobject and OB" + nt = newrole.objecttypes.all() + + for i in nt: + parenttype.append(i.ref) - absolute_url_node = name.get_absolute_url() + for i in parenttype: + member.append(i.get_members) + + member = [num for elem in member for num in elem] + subtypent = [] - template="objectapp/selectRT.html" - context = RequestContext(request,{'final':finaldict , 'gb':name ,'gbid':name.id, 'absolute_url_node':absolute_url_node}) - return render_to_response(template,context) + # for i in parenttype: + # subtypent.append(i.get_children()) + # subtypent = [num for elem in subtypent for num in elem] + # for i in subtypent: + # subtype.append(i.ref) + # subtype = [num for elem in subtype for num in elem] -def context_member(request,relid, memid):#id of relationtype, id of selected object - try: - relid = int(relid) #relationtype - memid = int(memid) #left member id - except: - raise Http404() + for i in parenttype: + subtypent.append(i.get_descendants()) - # checks wheter memid is OT or OB - flag=0 #means OB + for i in subtypent: + subtype.append(i.ref) - if Objecttype.objects.filter(id = memid): - flag=1 + for i in subtype: + subtypemember.append(i.get_members) + subtypemember = [num for elem in subtypemember for num in elem] + - nt =[] #contains parent as <Nodetype:parent> - pt= [] #contains parent as <Objecttype:parent> + for i in member: + finaldict.update({i.id:str(i.title)}) - if flag == 1: - pt.append(Objecttype.objects.get(id=memid)) + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) - else: - gb = Gbobject.objects.get(id = memid) - nt = gb.objecttypes.all() - for i in range(len(nt)): #conversion of nodetype in objecttype - pt.append(Objecttype.objects.get(id = nt[i].id)) - - memlist = [] #contains OB and OT for appearing in 1st combo box - - r = Relationtype.objects.get(id = relid) #contains RelationType - - # extracting left and right applicable nodetypes(OB or OT) of RelationType - lefttype = str(r.left_applicable_nodetypes) - righttype = str(r.right_applicable_nodetypes) - - if lefttype == righttype: - if lefttype == "OB" and righttype == "OB": - - if r.left_subjecttype_id == memid: - memlist.append(Gbobject.objects.get(id = r.right_subjecttype_id)) - else : - memlist.append(Gbobject.objects.get(id = r.left_subjecttype_id)) - - elif lefttype == "OT" and righttype == "OT": - for each in range(len(pt)): - if r.left_subjecttype_id == memid or r.left_subjecttype_id == pt[each].id: - o = Objecttype.objects.get(title = NID.objects.get(title=(r.right_subjecttype).title)) - memlist.append(o) - for i in o.get_members: - memlist.append(i) - # elif r.right_subjecttype_id == memid or r.right_subejcttype_id == pt[each].id: - else: - o = Objecttype.objects.get(title = NID.objects.get(title=(r.left_subjecttype).title)) - memlist.append(o) - for i in o.get_members: - memlist.append(i) - else: - if r.left_subjecttype_id == memid: - if righttype == "OB": - memlist.append(Gbobject.objects.get(id = r.right_subjecttype_id)) + elif newrole.reftype == 'Objecttype' and newroletype == 'OB': + print "Objecttype and OB" + for i in newrole.get_members: + member.append(i) - else : - o = Objecttype.objects.get(title = NID.objects.get(title=(r.right_subjecttype).title)) - memlist.append(o) - for i in o.get_members: - memlist.append(i) + for i in member: + finaldict.update({i.id:str(i.title)}) - else: - if lefttype == "OB": - memlist.append(Gbobject.objects.get(id = r.left_subjecttype_id)) - - else : - o = Objecttype.objects.get(title = NID.objects.get(title=(r.left_subjecttype).title)) - memlist.append(o) - for i in o.get_members: - memlist.append(i) - - memdict = {} #converting list into dict and to set id of right member as hidden field - for i in memlist: - memdict.update({i.id:i}) + # for i in newrole.get_children(): + # subtype.append(i.ref) + + for i in newrole.get_descendants(): + subtype.append(i.ref) + for i in subtype: + subtypemember.append(i.get_members) + + subtypemember = [num for elem in subtypemember for num in elem] + + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) + + print 'member',str(member) + print 'subtype', str(subtype) + print 'subtypemember', str(subtypemember) + elif newrole.reftype == 'Gbobject' and newroletype == 'OT': + print "Gbobject and OT" + nt = newrole.objecttypes.all() + for i in nt: + parenttype.append(i.ref) + + for i in parenttype: + member.append(i.get_members) + + member = [num for elem in member for num in elem] + subtypent = [] + + # for i in parenttype: + # subtypent.append(i.get_children()) + # subtypent = [num for elem in subtypent for num in elem] + + # for i in subtypent: + # subtype.append(i.ref) + # subtype = [num for elem in subtype for num in elem] + for i in parenttype: + subtypent.append(i.get_descendants()) + + for i in subtypent: + subtype.append(i.ref) + for i in subtype: + subtypemember.append(i.get_members) + subtypemember = [num for elem in subtypemember for num in elem] + + + for i in subtype: + finaldict.update({i.id:str(i.title)}) + + for i in parenttype: + finaldict.update({i.id:str(i.title)}) - template="objectapp/fillRT.html" - context = RequestContext(request,{'memdict':memdict}) + for i in member: + finaldict.update({i.id:str(i.title)}) + + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) + + + print 'absolute_url_node', str(absolute_url_node) + template="objectapp/selectRT.html" + context = RequestContext(request,{'finaldict':finaldict,'gb':memtit,'reltit':reltit, 'absolute_url_node': absolute_url_node}) return render_to_response(template,context) + def context_save(request,leftmem, reltype, rightmem): try: - leftmem = int(leftmem) - reltype = int(reltype) - rightmem = int(rightmem) + leftmem = str(leftmem) + reltype = str(reltype) + rightmem = str(rightmem) + + + + print 'leftmem :', leftmem, 'rightmem :', rightmem + pt = [] + nt = [] + + left = NID.objects.get(title = leftmem) + print 'leftid', str(left.id) + right = NID.objects.get(title = rightmem) + print 'rightid', str(right.id) + + if Relationtype.objects.filter(title=reltype): + relation = Relationtype.objects.get(title = reltype) + else: + relation = Relationtype.objects.get(inverse = reltype) - relation = Relationtype.objects.get(id = reltype) rightrole = relation.right_subjecttype_id + r = relation.right_subjecttype.ref + print 'rightrole', str(r) leftrole = relation.left_subjecttype_id + l=relation.left_subjecttype.ref + print 'leftrole', str(l) +#----------------------------------------------------------------------- flag = 1 - if Objecttype.objects.filter(id = leftmem): - if leftmem == leftrole : - flag = 0 - print "Objecttype flag = 0 " - else: - print "Objecttype flag = 1 " - elif Gbobject.objects.filter(id = leftmem): - gb = Gbobject.objects.get(id = leftmem) - pt = gb.objecttypes.all() + if Objecttype.objects.filter(title = leftmem): + + obj = Objecttype.objects.get(title = leftmem) + print 'OT', str(obj) + + while obj.parent: + pt.append((obj.parent).ref) + obj=obj.parent + for i in range(len(pt)): + if pt[i].id == leftrole : + flag = 0 + print "Objecttype flag = 0 " + break + else: + print "Objecttype flag = 1 " + + elif Gbobject.objects.filter(title = leftmem): + gb = Gbobject.objects.get(title = leftmem) + print 'Ob', str(gb) + nt = gb.objecttypes.all() + print 'nt ', str(nt) + + + for i in range(len(nt)): + pt.append(nt[i].ref) + obj = nt[i].ref + while obj.parent: + pt.append(obj.parent.ref) + obj = obj.parent + + print 'pt ', str(pt) for i in range(len(pt)): - if leftmem == leftrole or pt[i].id == leftrole: + if left.id == leftrole or pt[i].id == leftrole: flag = 0 print "Object flag = 0" + break else: print "Object flag = 1" + print 'pt:',str(pt) +#----------------------------------------------------------------------------------- + + if flag == 0: - savedict = {'title':relation, 'slug':relation, 'left_subject_id':leftmem, 'right_subject_id':rightmem, 'relationtype_id':reltype, 'left_subject_scope':' ', 'right_subject_scope':' ', 'relationtype_scope':' ' } + print 'left_subject_id', l + savedict = {'title':relation, 'slug':relation, 'left_subject_id':left.id, 'right_subject_id':right.id, 'relationtype_id':relation.id, 'left_subject_scope':' ', 'right_subject_scope':' ', 'relationtype_scope':' ' } else: - savedict = {'title':relation, 'slug':relation, 'left_subject_id':rightmem, 'right_subject_id':leftmem, 'relationtype_id':reltype, 'left_subject_scope':' ', 'right_subject_scope':' ', 'relationtype_scope':' '} + savedict = {'title':relation, 'slug':relation, 'left_subject_id':right.id, 'right_subject_id':left.id, 'relationtype_id':relation.id, 'left_subject_scope':' ', 'right_subject_scope':' ', 'relationtype_scope':' '} rtt = Relation.objects.create(**savedict) rtt.save() - print "leftmem"+ str(leftmem) + " rightmem" + str(rightmem) + " reltype" +str(reltype)+ " leftrole"+ str(leftrole) + " rightrole " + str(rightrole) + print "left"+ str(left) + " right" + str(right) + " reltype" +str(relation)+ " leftrole"+ str(leftrole) + " rightrole " + str(rightrole) + print savedict return HttpResponseRedirect("/nodetypes/") #return savedict except IntegrityError: #Exception raised when the relational integrity of the database is affected, e.g. a foreign key check fails, duplicate key, etc. - raise Http404() + return HttpResponseRedirect("/nodetypes/") #pass |