Skip to content
Snippets Groups Projects
Commit a96ba747 authored by tuhe's avatar tuhe
Browse files

More work on knowledge map (links + style + layout)

parent 3a5aedfc
No related branches found
No related tags found
No related merge requests found
Showing
with 3684 additions and 46 deletions
No preview for this file type
No preview for this file type
# from dkbn2.kmap.views2 import mm2
No preview for this file type
No preview for this file type
No preview for this file type
from django.urls import re_path from django.urls import re_path
from dkbn2.kmap import views from dkbn2.kmap import views
from pages import views_kmap
#from django.views.generic.simple import direct_to_template #from django.views.generic.simple import direct_to_template
from django.views.generic import TemplateView from django.views.generic import TemplateView
...@@ -10,9 +11,9 @@ urlpatterns =[ ...@@ -10,9 +11,9 @@ urlpatterns =[
re_path(r'^mm/(?P<presentation_mode>\d+)$', views.mm, name="kmap_presentation_mode"), re_path(r'^mm/(?P<presentation_mode>\d+)$', views.mm, name="kmap_presentation_mode"),
# Tue: Here we go with version 2. # Tue: Here we go with version 2.
# re_path(r'^present/$', TemplateView.as_view(template_name='kmap/kmap_presentation.html'), name='kmap_present'), # re_path(r'^present/$', TemplateView.as_view(template_name='kmap/kmap_presentation.html'), name='kmap_present'),
re_path(r'^kmap2/$', views.kmap2, name='kmap2'), re_path(r'^kmap2/$', views2.kmap2, name='kmap2'),
re_path(r'^kmap2_static/$', views.kmap2_static, name='kmap2_static'), re_path(r'^kmap2_static/$', views2.kmap2_static, name='kmap2_static'),
re_path(r'^mm2/$', views.mm2, name="kmap_mm2"), re_path(r'^mm2/$', views2.mm2, name="kmap_mm2"),
# re_path(r'^mm/(?P<presentation_mode>\d+)$', views.mm, name="kmap_presentation_mode"), # re_path(r'^mm/(?P<presentation_mode>\d+)$', views.mm, name="kmap_presentation_mode"),
......
...@@ -205,22 +205,22 @@ def constraint(n1, n2, horizontal=True, gap=10): ...@@ -205,22 +205,22 @@ def constraint(n1, n2, horizontal=True, gap=10):
return {l1: n1, l2: n2, 'gap': gap} return {l1: n1, l2: n2, 'gap': gap}
def edge(source, target): # def edge(source, target):
#
id = source+"_"+target # id = source+"_"+target
data = dict(id=id) # data = dict(id=id)
data['class'] = 'production' # data['class'] = 'production'
data['source'] = source # data['source'] = source
data['target'] = target # data['target'] = target
data['portsource'] = source # data['portsource'] = source
data['porttarget'] = target # data['porttarget'] = target
# data['line-width'] # # data['line-width']
data["line-color"] = "#555555" # data["line-color"] = "#555555"
data["width"] = 1.25 # data["width"] = 1.25
e = dict() # e = dict()
e['data'] = data # e['data'] = data
e['group'] = 'edges' # e['group'] = 'edges'
return e # return e
# "bendPointPositions": [], # "bendPointPositions": [],
# "language": "PD", # "language": "PD",
...@@ -352,12 +352,12 @@ def mm(request, presentation_mode=0): ...@@ -352,12 +352,12 @@ def mm(request, presentation_mode=0):
response.write(xml) response.write(xml)
return response return response
# def edge(doc, node, width=1): def edge(doc, node, width=1):
# edge = doc.createElement("edge") edge = doc.createElement("edge")
# edge.setAttribute("STYLE", "sharp_bezier") edge.setAttribute("STYLE", "sharp_bezier")
# edge.setAttribute("WIDTH", "%i"%width) edge.setAttribute("WIDTH", "%i"%width)
# node.appendChild(edge) node.appendChild(edge)
# return node return node
def create_node(doc, text, background_color=None, color=None, bubble=None, fork=None, link=None): def create_node(doc, text, background_color=None, color=None, bubble=None, fork=None, link=None):
node = doc.createElement("node") node = doc.createElement("node")
......
...@@ -14,6 +14,7 @@ import socket ...@@ -14,6 +14,7 @@ import socket
import os import os
# import kmap.views # Listen for changes? # import kmap.views # Listen for changes?
# import django # import django
# django.setup() # django.setup()
...@@ -159,7 +160,7 @@ INSTALLED_APPS = [ ...@@ -159,7 +160,7 @@ INSTALLED_APPS = [
'profile.apps.ProfileAppConfig', 'profile.apps.ProfileAppConfig',
'project.apps.ProjectAppConfig', 'project.apps.ProjectAppConfig',
'threadedcomments.apps.ThreadedcommentsAppConfig', 'threadedcomments.apps.ThreadedcommentsAppConfig',
'dkbn2.kmap', # 'dkbn2.kmap',
'fileshare.apps.FileshareAppConfig', 'fileshare.apps.FileshareAppConfig',
'dkbn2.graph', 'dkbn2.graph',
'tinymce', 'tinymce',
...@@ -268,3 +269,4 @@ USE_TZ = True ...@@ -268,3 +269,4 @@ USE_TZ = True
# STATIC_URL = '/static/' # STATIC_URL = '/static/'
# print("No at apps") # print("No at apps")
# import dkbn2.kmap
\ No newline at end of file
...@@ -12,16 +12,16 @@ ...@@ -12,16 +12,16 @@
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
--> -->
<!-- Cytoscape and fcose --> <!-- Cytoscape and fcose -->
<script src="https://unpkg.com/cytoscape/dist/cytoscape.min.js"></script> <script src="{% static 'js/cyto/cytoscape.min.js'%}"></script>
<script src="https://unpkg.com/layout-base/layout-base.js"></script> <script src="{% static 'js/cyto/layout-base.js'%}"></script>
<script src="https://unpkg.com/cose-base/cose-base.js"></script> <script src="{% static 'js/cyto/cose-base.js'%}"></script>
<script src="{% static 'js/cytoscape-fcose.js' %}"></script> <script src="{% static 'js/cyto/cytoscape-fcose.js' %}"></script>
<script src="{% static 'js/demo-constraint-control.js' %}" defer></script> <script src="{% static 'js/demo-constraint-control.js' %}" defer></script>
<!-- CoLa for local comparison only --> <!-- CoLa for local comparison only -->
<!-- <script src="https://unpkg.com/webcola/WebCola/cola.min.js"></script> --> <!-- <script src="https://unpkg.com/webcola/WebCola/cola.min.js"></script> -->
<!-- <script src="cytoscape-cola.js"></script> --> <!-- <script src="cytoscape-cola.js"></script> -->
<script src="https://unpkg.com/cytoscape-layout-utilities/cytoscape-layout-utilities.js"></script> <script src="{% static 'js/cyto/cytoscape-layout-utilities.js' %}"></script>
<!-- <!--
<script src="https://unpkg.com/cytoscape-view-utilities/cytoscape-view-utilities.js"></script> <script src="https://unpkg.com/cytoscape-view-utilities/cytoscape-view-utilities.js"></script>
--> -->
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
<style> <style>
body { body {
font-family: helvetica neue, helvetica, liberation sans, arial, sans-serif; font-family: helvetica neue, helvetica, liberation sans, arial, sans-serif;
font-size: 13px; /** font-size: 13px; **/
} }
#cy { #cy {
......
...@@ -34,10 +34,11 @@ from django.urls import path,re_path,include ...@@ -34,10 +34,11 @@ from django.urls import path,re_path,include
#from django.views.generic.simple import direct_to_template #from django.views.generic.simple import direct_to_template
#from django.views.generic.simple import redirect_to #from django.views.generic.simple import redirect_to
# print("AA import start") # print("AA import start")
from django.contrib import admin
#from dkbn2.project.urls import urlpatterns as project_patterns #from dkbn2.project.urls import urlpatterns as project_patterns
#from dkbn2.pages.urls import urlpatterns as pages_patterns #from dkbn2.pages.urls import urlpatterns as pages_patterns
#from dkbn2.communication.urls import urlpatterns as communication_patterns #from dkbn2.communication.urls import urlpatterns as communication_patterns
# import dkbn2.kmap.urls
print("B import start") print("B import start")
from project.views import ProjectView from project.views import ProjectView
print("BB import start") print("BB import start")
...@@ -56,8 +57,6 @@ from dkbn2 import settings ...@@ -56,8 +57,6 @@ from dkbn2 import settings
from userprofile.urls import en from userprofile.urls import en
# print("import start") # print("import start")
from fileshare import urls as fileshare_urls from fileshare import urls as fileshare_urls
from dkbn2.kmap import urls as kmap_urls
from dkbn2.graph import urls as graph_urls
# from tinymce import urls as tinymce_urls # from tinymce import urls as tinymce_urls
from pages import urls as pages_urls from pages import urls as pages_urls
from project import urls as project_urls from project import urls as project_urls
...@@ -68,6 +67,8 @@ from django.contrib import admin ...@@ -68,6 +67,8 @@ from django.contrib import admin
def i18n_javascript(request): def i18n_javascript(request):
return admin.site.i18n_javascript(request) return admin.site.i18n_javascript(request)
import dkbn2.kmap
#admin.autodiscover() #admin.autodiscover()
#(r'^admin/jsi18n', i18n_javascript), #(r'^admin/jsi18n', i18n_javascript),
...@@ -93,7 +94,7 @@ urlpatterns = [ ...@@ -93,7 +94,7 @@ urlpatterns = [
path('accounts/', include(en.urlpatterns) ), path('accounts/', include(en.urlpatterns) ),
re_path(r'^files/', include(fileshare_urls.urlpatterns)), re_path(r'^files/', include(fileshare_urls.urlpatterns)),
re_path(r'^threadedcomments/', include('threadedcomments.urls')), re_path(r'^threadedcomments/', include('threadedcomments.urls')),
re_path(r'^kmap/', include('dkbn2.kmap.urls')), # re_path(r'^kmap/', include(dkbn2.kmap.urls.urlpatterns) ),
re_path(r'^graph/', include('dkbn2.graph.urls')), re_path(r'^graph/', include('dkbn2.graph.urls')),
re_path(r'^tinymce/', include('tinymce.urls')), re_path(r'^tinymce/', include('tinymce.urls')),
] ]
......
No preview for this file type
No preview for this file type
File added
...@@ -3,8 +3,7 @@ from django.urls import re_path ...@@ -3,8 +3,7 @@ from django.urls import re_path
from pages import views from pages import views
from pages import views_meeting from pages import views_meeting
from pages.models import Task,Meeting,Notepad,Preject from pages.models import Preject
from pages.forms import PrejectForm
from pages.views import * from pages.views import *
from django.views.generic import TemplateView from django.views.generic import TemplateView
...@@ -14,7 +13,6 @@ from django.views.generic.base import RedirectView ...@@ -14,7 +13,6 @@ from django.views.generic.base import RedirectView
#from django.views.generic.simple import direct_to_template #from django.views.generic.simple import direct_to_template
#from django.views.generic.simple import redirect_to #from django.views.generic.simple import redirect_to
#from django.contrib import admin #from django.contrib import admin
from pages import meeting_generics
# import dkbn2.kmap.views # import dkbn2.kmap.views
# from dkbn2.kmap import views # from dkbn2.kmap import views
...@@ -52,7 +50,9 @@ notepad_delete = { ...@@ -52,7 +50,9 @@ notepad_delete = {
from django.views.generic.edit import CreateView,UpdateView from django.views.generic.edit import CreateView,UpdateView
from django.views.generic.edit import DeleteView from django.views.generic.edit import DeleteView
from pages.forms import MeetingStage0Form,NotepadForm from pages.forms import MeetingStage0Form,NotepadForm
# from pages.views_kmap import mm2
# from pages.views_kmap i
from pages import views_kmap
urlpatterns = [ urlpatterns = [
re_path(r'^tasks/$', views.task_list, name="task_list"), re_path(r'^tasks/$', views.task_list, name="task_list"),
re_path(r'^tasks/create/(?P<meeting_id>\d+)/$', views.task_create, {}, name='task_create'), re_path(r'^tasks/create/(?P<meeting_id>\d+)/$', views.task_create, {}, name='task_create'),
...@@ -103,5 +103,19 @@ urlpatterns = [ ...@@ -103,5 +103,19 @@ urlpatterns = [
re_path(r'^tactic_log$', views.tactic_log,name='tactic_log'), re_path(r'^tactic_log$', views.tactic_log,name='tactic_log'),
re_path(r'^social_log$', views.social_log,name='social_log'), re_path(r'^social_log$', views.social_log,name='social_log'),
# re_path(r'^kmap_bullshit/mm2$', mm2,name='mm2bullshit'),
re_path(r'^kmap/kmap2/$', views_kmap.kmap2, name='kmap2'),
re_path(r'^kmap/$', views_kmap.kmap2, name='kmap'),
re_path(r'^kmap/kmap2_static/$', views_kmap.kmap2_static, name='kmap2_static'),
re_path(r'^kmap/mm2/$', views_kmap.mm2, name="kmap_mm2"),
] ]
# re_path(r'^present/$', TemplateView.as_view(template_name='kmap/kmap_presentation.html'), name='kmap_present'),
# re_path(r'^$', views.kmap,name='kmap'),
# re_path(r'^mm/$', views.mm, name="kmap_mm"),
# re_path(r'^mm/(?P<presentation_mode>\d+)$', views.mm, name="kmap_presentation_mode"),
# Tue: Here we go with version 2.
# re_path(r'^present/$', TemplateView.as_view(template_name='kmap/kmap_presentation.html'), name='kmap_present'),
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Create your views here. # Create your views here.
from django.views.generic.edit import DeleteView, UpdateView from django.views.generic.edit import DeleteView, UpdateView
from django.views.generic import DetailView, ListView from django.views.generic import DetailView
from pages.models import task_in_project, meeting_in_project, notepad_in_project from pages.models import task_in_project
from django.shortcuts import render from django.shortcuts import render
from pages.forms import MeetingVideoForm, PrejectForm,NotepadForm,NotepadFeedbackForm,CreateTaskForm from pages.forms import MeetingVideoForm, PrejectForm,NotepadForm,NotepadFeedbackForm,CreateTaskForm
from pages.models import notepad_feedback_in_project, meeting_in_project, shalit_in_project, user_in_project from pages.models import notepad_feedback_in_project, meeting_in_project, shalit_in_project, user_in_project
...@@ -17,11 +17,11 @@ from pages import tables ...@@ -17,11 +17,11 @@ from pages import tables
#from django.views.generic import create_update #from django.views.generic import create_update
#from django.views.generic import list_detail #from django.views.generic import list_detail
from django.urls import reverse from django.urls import reverse
from django.views.generic.list import ListView
#from django.contrib.auth.decorators import login_required #from django.contrib.auth.decorators import login_required
from pages.video import convertvideo from pages.video import convertvideo
def preject_create(request): def preject_create(request):
do_create = True do_create = True
if request.method == 'POST': if request.method == 'POST':
......
from django.shortcuts import render
from django.http import *
# from pages import models
from threadedcomments import models as threaded_models
from datetime import date
# xml parsing
from xml.dom.minidom import Document
import numpy as np
def kma_wrap(request):
return render(request, 'kmap/kmap_wrap.html')
# return render_to_response('kmap/kmap_wrap.html')
def kmap(request):
return render(request, 'kmap/kmap.html')
"""
Tue: Starting over with the knowledge map using a free JS implementation (BSD). Don't think it is prettiest, but it should work.
"""
def kmap2(request):
return render(request, 'kmap/kmap2.html')
def kmap2_static(request):
return render(request, 'kmap/kmap2_static.html')
import json
# from django.http import JsonResponse
def node(id,label="Surface Boi", x=155,y=230, parent=None, style_class='nucleic acid feature', href=None):
n = dict()
data = dict(id=id,
bbox=dict(x=x, y=y, w=100, h=25),
label=label,
statesandinfos=[],
language="PD",
color="#000000",
ports=[],
infoboxCalculated=True,
auxunitlayouts={})
data['background-image'] = ""
data['border-width'] =1.25
if parent is not None:
data['parent'] = parent
if href is not None:
data['href'] = href
data['border-color']="#555555"
data['background-color']="#f40582"
data['background-opacity']=1
data['background-image-opacity']=1
data['text-wrap']= "wrap"
data['font-size']= 26
data['font-family']= "Helvetica"
data['font-style']= "normal"
data['font-weight']= "normal"
data["infoboxCalculated"] =True
data["auxunitlayouts"] = {}
n['position'] = dict(x=x,y=y)
n_extra = dict(group="nodes",
removed=False,
selected=False,
selectable=True,
locked=False,
grabbable=True,
classes="")
n = {**n, **n_extra}
data['class'] = style_class # "nucleic acid feature"
n['data'] = data
return n
style = {}
base = dict(elements=dict(nodes=[], edges=[]),
style=[],
zoomingEnabled=True,
userZoomingEnabled=True,
zoom=0.8925320450269244,
minZoom=0.125,
maxZoom=16,
panningEnabled=True,
userPanningEnabled=True,
pan=dict(x=128.15184671589566, y=-93.65929006599106),
boxSelectionEnabled=True,
renderer=dict(name="canvas"),
wheelSensitivity=0.1,
motionBlur=True,
# nodeSep=100,
)
def get_base():
b = base.copy()
b['style'] = [{
"selector": "node",
"style": {
"shape": "rectangle",
"text-halign": "center",
"text-valign": "center",
"font-weight": "normal",
"background-color": "#ffffff",
"opacity": "1",
'padding': '20px',
"border-color": "#555555"
}
},
{
"selector": "node[class = 'simple chemical']",
"style": {
"shape": "ellipse",
"font-size": 14,
"background-color": "#fddbc7"
}
},
{
"selector": "node[class = 'macromolecule']",
"style": {
"shape": "roundrectangle"
}
},
{
"selector": "node[class = 'unspecified entity']",
"style": {
"shape": "ellipse",
"background-color": "#f7f7f7"
}
},
{
"selector": "node[class = 'preject']",
"style": {
"shape": "ellipse",
"background-color": "#f7f7f7"
}
},
{
"selector": 'task', #"node[class = 'task']", # This has no effect.
"style": {
'padding': '5px',
"shape": "rectangle",
"background-color": "#f7f7f7"
}
},
{
"selector": "node[class='task.uncompleted']",
"style": {
'padding': '5px',
"background-color": "#EEEE33"
}
},
{
"selector": "node[class='task.completed']",
"style": {
'padding': '5px',
"background-color": "#33EE33"
}
},
{
"selector": "node[class = 'nucleic acid feature']",
"style": {
"shape": "ellipse",
"font-size": 26,
# "font-weight": 'bold',
"background-color": "#f4a582",
}
},
{
"selector": ":parent",
"style": {
"background-opacity": "0.333",
"text-valign": "bottom",
"shape": "barrel",
"text-margin-y": "2px",
"font-weight": "normal",
"border-color": "#555555"
}
},
{
"selector": "node:selected",
"style": {
"background-color": "#33ff00",
"border-color": "#22ee00"
}
},
{
"selector": "edge",
"style": {
"curve-style": "unbundled-bezier",
"width": "2px",
"line-color": "rgb(58,126,207)",
"opacity": "1"
}
},
{
"selector": "edge:selected",
"style": {
"line-color": "#33ff00",
"font-size": "13px",
"text-opacity": "1",
"text-rotation": "autorotate",
"color": "#33ff00",
"font-weight": "bold",
"text-background-shape": "roundrectangle",
"text-background-opacity": "1",
"text-background-padding": "2px"
}
},
{
"selector": "edge[class = 'production']",
"style": {
"target-arrow-shape": "triangle",
"target-arrow-color": "rgb(58,126,207)"
}
},
{
"selector": "edge:selected[class = 'production']",
"style": {
"target-arrow-shape": "triangle",
"target-arrow-color": "#33ff00"
}
},
]
return b
def meeting():
return {}
def corner():
n = node()
pass
def constraint(n1, n2, horizontal=True, gap=10):
if horizontal:
l1 = 'left'
l2 = 'right'
else:
l1, l2 = 'top', 'bottom'
return {l1: n1, l2: n2, 'gap': gap}
def edge(source, target):
id = source+"_"+target
data = dict(id=id)
data['class'] = 'production'
data['source'] = source
data['target'] = target
data['portsource'] = source
data['porttarget'] = target
# data['line-width']
data["line-color"] = "#555555"
data["width"] = 1.25
e = dict()
e['data'] = data
e['group'] = 'edges'
return e
def mm2(request, presentation_mode=0):
from pages import models
response = HttpResponse(content_type='application/x-javascript')
# data = {'elements': {'nodes': 'myvar', 'x': 23, 'mlist': []} }
nodes = []
constrains = []
edges = []
delta = 200
constrains.append(constraint("root", "c0", gap=delta))
constrains.append(constraint("root", "c1", gap=delta))
#
constrains.append(constraint("root", "c1", horizontal=False, gap=delta))
constrains.append(constraint("c0", "root", horizontal=False, gap=delta))
#
constrains.append(constraint("c2", "root", gap=delta))
constrains.append(constraint("c3", "root", gap=delta))
#
constrains.append(constraint("root", "c2", horizontal=False, gap=delta))
constrains.append(constraint("c3", "root", horizontal=False, gap=delta))
# nodes.append(node("box0"))
# for i in range(4):
# print(models.CORNERS[i])
# constrains.append(constraint("root", "c1", gap=300))
# constrains.append(constraint("c3", "root", gap=300))
# constrains.append(constraint("c4", "root", gap=300))
#
# for i in range(3):
# c = constraint(f'c{i}', f'c{i+1}', horizontal=True, gap=100)
# constrains.append(c)
#
# for i in range(3):
# c = constraint(f'c3', f'c2', horizontal=False, gap=100)
# constrains.append(c)
# c1 = constraint('c1', 'c3', horizontal=True, gap=100)
# c2 = constraint('c0', 'c2', horizontal=True, gap=100)
# constrains.append(c1)
# constrains.append(c2)
data = get_base()
# data['elements']['nodes'].append(node('n01', label="Some stuff") )
# data['elements']['nodes'].append()
x0 = 0
y0 = 0
root = node('root', label="Project 4", x=0, y=0)
nodes.append(root)
for c in [0, 3, 1, 2]:
cor = models.CORNERS[c]
# n = node(f'c{c}', label=cor[1], style_class='submap', x=x0-100, y=x0+100)
cx, cy = -400 if c in [2,3] else 400, 400 if c in [1,2] else -400
# n =
nodes.append(node(f'c{c}', parent=f'cc{c}', label=cor[1], x=cx,y=cy))
nodes.append(node(f'cc{c}', label=cor[1], x=cx+1,y=cy+1, style_class='submap'))
# edges.append(edge('root', f'c{c}'))
# node = create_node(doc, cor[1], bubble=True, background_color="#d5d57f", color="#787805")
# node = font(doc, node, 16, bold=True)
# node = edge(doc, node, 8)
prejects = models.preject_in_project().filter(arena=cor[0])
# import math
# u = np.random.rand()
for p in prejects:
# continue
ns = 10
# nodes.append(node(f'p{p.id}', p.title, x=cx + np.random.rand() * ns, y=cy - np.random.rand() * ns))
nodes.append(node(f'p{p.id}', p.title, parent=f'cc{c}', x=cx + np.random.rand()*ns, y=cy - np.random.rand()*ns,style_class='preject'))
# edges.append(edge(f"c{c}", f'p{p.id}'))
# nodes.append(n)
for t in models.task_in_project():
# continue
url = t.get_absolute_url()
nodes.append(node(f"t{t.id}", label=t.title, x=np.random.rand()*200, y=-np.random.rand()*200, href=url, style_class='task.uncompleted'))
edges.append(edge(f'p{t.preject.id}', f"t{t.id}"))
for n in models.notepad_in_project():
print(n)
data['elements']['nodes'] = nodes
data['elements']['edges'] = edges
s = "uwsn = " + json.dumps(data,indent=True)
s += "\n"
cd = dict(relativePlacementConstraint=constrains)
s += "uwsn_constraints = " + json.dumps(cd, indent=True)
response.write(s)
return response
dictionary = {
"id": "04",
"name": "sunil",
"department": "HR"
}
# Now make the Json code.
print("Json stuff. ")
doc = Document()
map = doc.createElement("map")
map.setAttribute("version", "0.8.FA Alpha 5a")
doc.appendChild(map)
project_node = create_node(doc, "Project", background_color="#EEEEFF")
project_node = font(doc, project_node, 16, bold=True)
project_node.setAttribute("ID", "Freemind_Link_1757763095")
map.appendChild(project_node)
corners = models.CORNERS
corner_order = [0, 3, 1, 2]
for c in corner_order:
project_node.appendChild(populate_corner(doc, c, presentation_mode))
xml = doc.toprettyxml(u' ', encoding="utf-8");
response.write(xml)
return response
def mm(request, presentation_mode=0):
response = HttpResponse(content_type='text/xml')
doc = Document()
map = doc.createElement("map")
map.setAttribute("version", "0.8.FA Alpha 5a")
doc.appendChild(map)
project_node = create_node(doc, "Project", background_color="#EEEEFF")
project_node = font(doc, project_node, 16, bold=True)
project_node.setAttribute("ID", "Freemind_Link_1757763095")
map.appendChild(project_node)
corners = models.CORNERS
corner_order = [0, 3, 1, 2]
for c in corner_order :
project_node.appendChild(populate_corner(doc, c,presentation_mode))
xml = doc.toprettyxml(u' ', encoding="utf-8");
response.write(xml)
return response
# def edge(doc, node, width=1):
# edge = doc.createElement("edge")
# edge.setAttribute("STYLE", "sharp_bezier")
# edge.setAttribute("WIDTH", "%i"%width)
# node.appendChild(edge)
# return node
def create_node(doc, text, background_color=None, color=None, bubble=None, fork=None, link=None):
node = doc.createElement("node")
node.setAttribute("TEXT", u'%s'%text)
if background_color : node.setAttribute("BACKGROUND_COLOR", background_color)
if color : node.setAttribute("COLOR", color)
if bubble : node.setAttribute("STYLE", "bubble")
if fork : node.setAttribute("STYLE", "fork")
if link : node.setAttribute("LINK", link)
# node.setAttribute("STYLE", "bubble" if bubble else "fork")
return node
def font(doc, node, size=12, bold=False, italic=False):
font = doc.createElement("font")
font.setAttribute("SIZE", "%i"%size)
if bold : font.setAttribute("BOLD", "true")
if italic : font.setAttribute("ITALIC", "true")
node.appendChild(font)
return node
def populate_meeting(doc, meeting):
node = create_node(doc, meeting.title(), background_color="#EEEEB4", link=meeting.get_absolute_url())
node = font(doc, node, 12, bold=False)
node = populate_communication(doc, node, meeting)
node.appendChild(create_node(doc, u"%s"%meeting.red_leader, background_color="#EEaaaa"))
node.appendChild(create_node(doc, u"%s"%meeting.green_leader, background_color="#aaEEaa"))
return node
def populate_preject(doc, preject,presentation_mode):
node = create_node(doc, preject.title, background_color="#EEEEB4")
node = font(doc, node, 14, bold=True)
tasks = models.task_in_project().filter(preject = preject)
for t in tasks : node.appendChild(populate_task(doc, t,presentation_mode))
# node = populate_communication(doc, node, meeting)
return node
def populate_task(doc, task,presentation_mode):
color = ""
bold = None
color = "#000000"
if task.status == models.COMPLETED :
background_color = "#E6EFC2"
if task.status == models.UNCOMPLETED :
background_color = "#FFF6BF"
bold = True
if task.status == models.ABANDONED :
background_color = "#FBE3E4"
if not presentation_mode : url = task.get_absolute_url()
else : url = None
node = create_node(doc, task.title, background_color=background_color, color=color, link=url)
node = font(doc, node, bold=bold)
node = edge(doc, node, 1)
notepads = models.notepad_in_project().filter(task = task)
for n in notepads : node.appendChild(populate_notepad(doc, n, presentation_mode))
return node
def populate_corner(doc, corner,presentation_mode):
cor = models.CORNERS[corner]
node = create_node(doc, cor[1], bubble=True, background_color="#d5d57f", color="#787805")
node = font(doc, node, 16, bold=True)
node = edge(doc, node, 8)
prejects = models.preject_in_project().filter(arena = cor[0])
for p in prejects :
node.appendChild(populate_preject(doc, p,presentation_mode))
return node
def populate_notepad(doc, notepad, presentation_mode):
if not presentation_mode : url = notepad.get_absolute_url()
else : url = None
node = create_node(doc, notepad.title, fork=True, background_color="#EEEEEE", link=url)
node = font(doc, node, size=10)
if not presentation_mode :
node = populate_communication(doc, node, notepad)
return node
def create_communication_node(doc, communication):
text = communication.comment
text = text[0:min(len(text), 50)]
cn = create_node(doc, text, color="#AAAAAA", fork=True)
cn = font(doc, cn, size=10, italic=True)
cn = edge(doc, cn, width=1)
return cn
def com_for_com(doc, parent_node, parent_object):
communications = threaded_models.ThreadedComment.objects.filter(parent=parent_object)
for c in communications :
cn = create_communication_node(doc, c)
cn = com_for_com(doc, cn, c)
parent_node.appendChild(cn)
return parent_node
def populate_communication(doc, parent_node, parent_object):
communications = threaded_models.ThreadedComment.public.all_for_object(parent_object)
for c in communications :
cn = create_communication_node(doc, c)
cn = com_for_com(doc, cn, c)
parent_node.appendChild(cn)
return parent_node
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment