浏览代码

move api methods to api controller + add create_contact api method

damien 11 年前
父节点
当前提交
1fa48bd7ab
共有 3 个文件被更改,包括 72 次插入24 次删除
  1. 14 2
      pboard/pboard/controllers/api.py
  2. 28 20
      pboard/pboard/templates/document.mak
  3. 30 2
      pboard/pboard/templates/master.mak

+ 14 - 2
pboard/pboard/controllers/api.py 查看文件

42
       redirect(lurl('/document/%i'%(loNewNode.parent_id)))
42
       redirect(lurl('/document/%i'%(loNewNode.parent_id)))
43
 
43
 
44
     @expose()
44
     @expose()
45
+    def create_contact(self, parent_id=None, data_label=u'', data_content=u'', **kw):
46
+
47
+      loNewNode = pld.createNode()
48
+      loNewNode.parent_id     = int(parent_id)
49
+      loNewNode.node_type     = pmd.PBNodeType.Contact
50
+      loNewNode.data_label    = data_label
51
+      loNewNode.data_content  = data_content
52
+
53
+      pm.DBSession.flush()
54
+      redirect(lurl('/document/%i'%(loNewNode.parent_id)))
55
+
56
+    @expose()
45
     def set_parent_node(self, node_id, new_parent_id, **kw):
57
     def set_parent_node(self, node_id, new_parent_id, **kw):
46
       loNewNode = pld.getNode(node_id)
58
       loNewNode = pld.getNode(node_id)
47
       if new_parent_id!='':
59
       if new_parent_id!='':
71
       else:
83
       else:
72
         loNewNode.parent_id = parent_id
84
         loNewNode.parent_id = parent_id
73
 
85
 
74
-      DBSession.flush()
86
+      pm.DBSession.flush()
75
       redirect(lurl('/document/%i'%(loNewNode.node_id)))
87
       redirect(lurl('/document/%i'%(loNewNode.node_id)))
76
 
88
 
77
     @expose()
89
     @expose()
97
       loNode     = pld.getNode(node_id)
109
       loNode     = pld.getNode(node_id)
98
       liParentId = loNode.parent_id
110
       liParentId = loNode.parent_id
99
       if loNode.getChildNb()<=0:
111
       if loNode.getChildNb()<=0:
100
-        DBSession.delete(loNode)
112
+        pm.DBSession.delete(loNode)
101
       redirect(lurl('/document/%i'%(liParentId or 0)))
113
       redirect(lurl('/document/%i'%(liParentId or 0)))
102
 
114
 

+ 28 - 20
pboard/pboard/templates/document.mak 查看文件

36
   % else:
36
   % else:
37
     % if len(node_list)>0:
37
     % if len(node_list)>0:
38
       % for node in node_list:
38
       % for node in node_list:
39
-        <div class="pod-toolbar-parent" style="padding-left: ${(indentation+2)*0.5}em; position: relative;">
40
-          <a href="?node=${node.node_id}" title="${node.data_label}">
39
+        <div class="pod-toolbar-parent ${'pod-status-active' if node.node_id==current_node.node_id else ''}" style="padding-left: ${(indentation+2)*0.5}em; position: relative;">
40
+          <a href="${tg.url('/document/%s'%(node.node_id))}" title="${node.data_label}">
41
             % if node.getStatus().status_family=='closed' or node.getStatus().status_family=='invisible':
41
             % if node.getStatus().status_family=='closed' or node.getStatus().status_family=='invisible':
42
               <strike>
42
               <strike>
43
             % endif
43
             % endif
83
 
83
 
84
   <div class="row">
84
   <div class="row">
85
     <div class="span3">
85
     <div class="span3">
86
-      <div class="btn-group">
87
-        <button class="btn">${_('Documents')}</button>
88
-        <button class="btn" title="${_('Show current filtering state')}"><i class="  icon-g-eye-open"></i></button>
89
-        
90
-        <a class="btn dropdown-toggle" data-toggle="dropdown" href="#" title='${_('Adjust filtering')}'><i class=" icon-g-adjust"></i></a>
91
-                <ul class="dropdown-menu">
92
-          % for node_status in node_status_list:
93
-            <li>
94
-              <a class="${node_status.css}" href="${tg.url('/edit_status?node_id=%i&node_status=%s'%(current_node.node_id, node_status.status_id))}">
95
-                <i class="${node_status.icon_id}"></i> ${node_status.label}
96
-              </a>
97
-            </li>
98
-          % endfor
99
-        </ul>
100
-      </div>
101
-      <p></p>
102
       <div>
86
       <div>
103
         ${node_treeview(root_node_list)}
87
         ${node_treeview(root_node_list)}
104
       </div>
88
       </div>
114
         <ul class="dropdown-menu">
98
         <ul class="dropdown-menu">
115
           % for node_status in node_status_list:
99
           % for node_status in node_status_list:
116
             <li>
100
             <li>
117
-              <a class="${node_status.css}" href="${tg.url('/edit_status?node_id=%i&node_status=%s'%(current_node.node_id, node_status.status_id))}">
101
+              <a class="${node_status.css}" href="${tg.url('/api/edit_status?node_id=%i&node_status=%s'%(current_node.node_id, node_status.status_id))}">
118
                 <i class="${node_status.icon_id}"></i> ${node_status.label}
102
                 <i class="${node_status.icon_id}"></i> ${node_status.label}
119
               </a>
103
               </a>
120
             </li>
104
             </li>
252
             % endif
236
             % endif
253
             </div>
237
             </div>
254
             <div class="tab-pane" id="contacts">
238
             <div class="tab-pane" id="contacts">
239
+            
240
+              <!-- ADD CONTACT FORM -->
241
+              ${POD.AddButton('current-document-add-contact-button', True, _(' Add contact'))}
242
+              <form style='display: none;' id='current-document-add-contact-form' action='${tg.url('/api/create_contact')}' method='post' class="well">
243
+                <input type="hidden" name='parent_id' value='${current_node.node_id}'/>
244
+                <fieldset>
245
+                  <legend>Add an event</legend>
246
+                  <label>
247
+                    <input type="text" name='data_label' placeholder="Title"/>
248
+                  </label>
249
+                  <label>
250
+                    <div>
251
+                      <textarea id="add_contact_data_content_textarea" name='data_content' spellcheck="false" wrap="off" autofocus placeholder="${_('detail...')}"></textarea>
252
+                    </div>
253
+                  </label>
254
+                  ${POD.CancelButton('current-document-add-contact-cancel-button', True)}
255
+                  ${POD.SaveButton('current-document-add-contact-save-button', True)}
256
+                </fieldset>
257
+              </form>
258
+
259
+              <!-- LIST OF CONTACT NODES -->
255
               % for contact in current_node.getContacts():
260
               % for contact in current_node.getContacts():
256
                 <div class="well">
261
                 <div class="well">
257
                   <legend class="text-info">${contact.data_label}</legend>
262
                   <legend class="text-info">${contact.data_label}</legend>
258
-                  <div>${contact.data_content|n}</div>
263
+                  <div>
264
+                    <a style='float: right;' href="" title='${_('Search on google maps')}'><i class='icon-g-google-maps'></i></a>
265
+                    ${contact.data_content|n}
266
+                  </div>
259
                 </div>
267
                 </div>
260
               % endfor
268
               % endfor
261
             </div>
269
             </div>

+ 30 - 2
pboard/pboard/templates/master.mak 查看文件

105
 .pod-status-grey-light  { background-color: #DDD; }
105
 .pod-status-grey-light  { background-color: #DDD; }
106
 .pod-status-grey-middle { background-color: #BBB; }
106
 .pod-status-grey-middle { background-color: #BBB; }
107
 .pod-status-grey-dark   { background-color: #AAA; }
107
 .pod-status-grey-dark   { background-color: #AAA; }
108
+.pod-status-active      { background-color: #FEE; }
108
 
109
 
109
 </style>
110
 </style>
110
 
111
 
136
                 $('#current_node_textarea').css("min-height", "12em");
137
                 $('#current_node_textarea').css("min-height", "12em");
137
                 $('#current_node_textarea').addClass("span5");
138
                 $('#current_node_textarea').addClass("span5");
138
 
139
 
140
+                /* ADD EVENT FORM */
139
                 $('#add_event_data_content_textarea').wysihtml5({
141
                 $('#add_event_data_content_textarea').wysihtml5({
140
                   "font-styles": false, //Font styling, e.g. h1, h2, etc. Default true
142
                   "font-styles": false, //Font styling, e.g. h1, h2, etc. Default true
141
                   "emphasis": true, //Italics, bold, etc. Default true
143
                   "emphasis": true, //Italics, bold, etc. Default true
149
                 $('#add_event_data_content_textarea').css("height", "4em");
151
                 $('#add_event_data_content_textarea').css("height", "4em");
150
                 $('#add_event_data_content_textarea').addClass("span3");
152
                 $('#add_event_data_content_textarea').addClass("span3");
151
 
153
 
154
+                /* ADD CONTACT FORM */
155
+                $('#add_contact_data_content_textarea').wysihtml5({
156
+                  "font-styles": false, //Font styling, e.g. h1, h2, etc. Default true
157
+                  "emphasis": true, //Italics, bold, etc. Default true
158
+                  "lists": false, //(Un)ordered lists, e.g. Bullets, Numbers. Default true
159
+                  "html": true, //Button which allows you to edit the generated HTML. Default false
160
+                  "link": true, //Button to insert a link. Default true
161
+                  "image": true, //Button to insert an image. Default true,
162
+                  // "color": true //Button to change color of font  
163
+                });
164
+                $('#add_contact_data_content_textarea').css('margin-bottom', '0');
165
+                $('#add_contact_data_content_textarea').css("height", "4em");
166
+                $('#add_contact_data_content_textarea').addClass("span3");
152
 
167
 
153
 
168
 
154
                 /* Edit title form */
169
                 /* Edit title form */
202
                   $('#current-document-add-event-form').submit();
217
                   $('#current-document-add-event-form').submit();
203
                 });
218
                 });
204
 
219
 
220
+                /* Add contact form hide/show behavior */
221
+                $("#current-document-add-contact-button" ).click(function() {
222
+                  $("#current-document-add-contact-form" ).css("display", "block");
223
+                  $("#current-document-add-contact-button" ).css("display", "none");
224
+                });
225
+                $('#current-document-add-contact-cancel-button').on('click', function(e){
226
+                  $("#current-document-add-contact-form" ).css("display", "none");
227
+                  $("#current-document-add-contact-button" ).css("display", "block");
228
+                });
229
+                $('#current-document-add-contact-save-button').on('click', function(e){
230
+                  e.preventDefault(); // We don't want this to act as a link so cancel the link action
231
+                  $('#current-document-add-contact-form').submit();
232
+                });
205
 
233
 
206
 
234
 
207
 
235
 
255
         <div class="nav-collapse">
283
         <div class="nav-collapse">
256
           <ul class="nav">
284
           <ul class="nav">
257
             <li class="active"><a href="${tg.url('/dashboard')}"><i class="icon-home icon-white"></i> Dashboard</a></li>
285
             <li class="active"><a href="${tg.url('/dashboard')}"><i class="icon-home icon-white"></i> Dashboard</a></li>
286
+            <li><a>Link</a></li>
258
             <li><a href="#">Link</a></li>
287
             <li><a href="#">Link</a></li>
259
-            <li><a href="#">Link</a></li>
260
-            <li><a href="#">Link</a></li>
288
+
261
           % if request.identity:
289
           % if request.identity:
262
             <li class="dropdown">
290
             <li class="dropdown">
263
               <a href="#" class="dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>
291
               <a href="#" class="dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>