Rev 1856 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1856 | Rev 1869 | ||
---|---|---|---|
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
2 | <%@ page import="jomm.dao.impl.AbstractDao" %> |
2 | <%@ page import="jomm.dao.impl.AbstractDao" %> |
3 | <%@ page import="pt.estgp.estgweb.domain.CourseImpl" %> |
3 | <%@ page import="pt.estgp.estgweb.domain.CourseImpl" %> |
4 | <%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
4 | <%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
5 | <%@ page import="pt.estgp.estgweb.utils.documentBuilder.TextComponent" %> |
5 | <%@ page import="pt.estgp.estgweb.utils.documentBuilder.TextComponent" %> |
6 | <%@ page import="pt.estgp.estgweb.utils.documentBuilder.ImageComponent" %> |
6 | <%@ page import="pt.estgp.estgweb.utils.documentBuilder.ImageComponent" %> |
7 | <%@ page import="pt.estgp.estgweb.services.courses.CourseReportServices" %> |
7 | <%@ page import="pt.estgp.estgweb.services.courses.CourseReportServices" %> |
8 | <%@ page import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument" %> |
8 | <%@ page import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument" %> |
9 | <%@ page import="org.json.JSONException" %> |
9 | <%@ page import="org.json.JSONException" %> |
10 | <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
10 | <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
11 | <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
11 | <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
12 | <%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
12 | <%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
13 | <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
13 | <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
14 | <%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
14 | <%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
15 | <%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
15 | <%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
16 | <%@taglib prefix="t" tagdir="/WEB-INF/tags" %> |
16 | <%@taglib prefix="t" tagdir="/WEB-INF/tags" %> |
17 | 17 | ||
18 | <link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.css"> |
18 | <link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.css"> |
19 | <script src="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.min.js"></script> |
19 | <script src="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.min.js"></script> |
20 | <link rel="stylesheet" href="<%=request.getContextPath()%>/css/flora-commons/flora.resizable.css"> |
20 | <link rel="stylesheet" href="<%=request.getContextPath()%>/css/flora-commons/flora.resizable.css"> |
21 | <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script> |
21 | <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script> |
22 | <script> |
22 | <script> |
23 | function demoFromHTML() { |
23 | function demoFromHTML() { |
24 | var pdf = new jsPDF('p', 'pt', 'letter'); |
24 | var pdf = new jsPDF('p', 'pt', 'letter'); |
25 | // source can be HTML-formatted string, or a reference |
25 | // source can be HTML-formatted string, or a reference |
26 | // to an actual DOM element from which the text will be scraped. |
26 | // to an actual DOM element from which the text will be scraped. |
27 | source = $('#courseReportApp')[0]; |
27 | source = $('#courseReportApp')[0]; |
28 | 28 | ||
29 | // we support special element handlers. Register them with jQuery-style |
29 | // we support special element handlers. Register them with jQuery-style |
30 | // ID selector for either ID or node name. ("#iAmID", "div", "span" etc.) |
30 | // ID selector for either ID or node name. ("#iAmID", "div", "span" etc.) |
31 | // There is no support for any other type of selectors |
31 | // There is no support for any other type of selectors |
32 | // (class, of compound) at this time. |
32 | // (class, of compound) at this time. |
33 | specialElementHandlers = { |
33 | specialElementHandlers = { |
34 | // element with id of "bypass" - jQuery style selector |
34 | // element with id of "bypass" - jQuery style selector |
35 | '#bypassme': function (element, renderer) { |
35 | '#bypassme': function (element, renderer) { |
36 | // true = "handled elsewhere, bypass text extraction" |
36 | // true = "handled elsewhere, bypass text extraction" |
37 | return true |
37 | return true |
38 | } |
38 | } |
39 | }; |
39 | }; |
40 | margins = { |
40 | margins = { |
41 | top: 80, |
41 | top: 80, |
42 | bottom: 60, |
42 | bottom: 60, |
43 | left: 40, |
43 | left: 40, |
44 | width: 522 |
44 | width: 522 |
45 | }; |
45 | }; |
46 | // all coords and widths are in jsPDF instance's declared units |
46 | // all coords and widths are in jsPDF instance's declared units |
47 | // 'inches' in this case |
47 | // 'inches' in this case |
48 | pdf.fromHTML( |
48 | pdf.fromHTML( |
49 | source, // HTML string or DOM elem ref. |
49 | source, // HTML string or DOM elem ref. |
50 | margins.left, // x coord |
50 | margins.left, // x coord |
51 | margins.top, { // y coord |
51 | margins.top, { // y coord |
52 | 'width': margins.width, // max width of content on PDF |
52 | 'width': margins.width, // max width of content on PDF |
53 | 'elementHandlers': specialElementHandlers |
53 | 'elementHandlers': specialElementHandlers |
54 | }, |
54 | }, |
55 | 55 | ||
56 | function (dispose) { |
56 | function (dispose) { |
57 | // dispose: object with X, Y of the last line add to the PDF |
57 | // dispose: object with X, Y of the last line add to the PDF |
58 | // this allow the insertion of new lines after html |
58 | // this allow the insertion of new lines after html |
59 | //var pdfDocument = pdf.save('Test.pdf'); |
59 | //var pdfDocument = pdf.save('Test.pdf'); |
60 | var pdfDocument = pdf.output(); |
60 | var pdfDocument = pdf.output(); |
61 | 61 | ||
62 | var boundary = '---------------------------'; |
62 | var boundary = '---------------------------'; |
63 | boundary += Math.floor(Math.random()*32768); |
63 | boundary += Math.floor(Math.random()*32768); |
64 | boundary += Math.floor(Math.random()*32768); |
64 | boundary += Math.floor(Math.random()*32768); |
65 | boundary += Math.floor(Math.random()*32768); |
65 | boundary += Math.floor(Math.random()*32768); |
66 | 66 | ||
67 | var body = ''; |
67 | var body = ''; |
68 | body += '--' + boundary + '\r\n' + |
68 | body += '--' + boundary + '\r\n' + |
69 | 'Content-Disposition: form-data; name="filesInputId-UPLOAD[]"; filename="20170530_210340.pdf"' + '\r\n'; |
69 | 'Content-Disposition: form-data; name="filesInputId-UPLOAD[]"; filename="20170530_210340.pdf"' + '\r\n'; |
70 | body += 'Content-Type: application/pdf'; |
70 | body += 'Content-Type: application/pdf'; |
71 | body += '\r\n\r\n'; |
71 | body += '\r\n\r\n'; |
72 | body += pdfDocument; |
72 | body += pdfDocument; |
73 | body += '\r\n' |
73 | body += '\r\n' |
74 | body += '--' + boundary + '--'; |
74 | body += '--' + boundary + '--'; |
75 | 75 | ||
76 | 76 | ||
77 | 77 | ||
78 | $.ajax({ |
78 | $.ajax({ |
79 | type: "POST", |
79 | type: "POST", |
80 | cache: false, |
80 | cache: false, |
81 | url: "<%=request.getContextPath()%>/filesUpload", |
81 | url: "<%=request.getContextPath()%>/filesUpload", |
82 | data: body , |
82 | data: body , |
83 | processData: false, |
83 | processData: false, |
84 | contentType : 'multipart/form-data; boundary=' + boundary, |
84 | contentType : 'multipart/form-data; boundary=' + boundary, |
85 | success: function (data) { |
85 | success: function (data) { |
86 | alert('success'); |
86 | alert('success'); |
87 | return false; |
87 | return false; |
88 | } |
88 | } |
89 | }); |
89 | }); |
90 | }, margins |
90 | }, margins |
91 | ); |
91 | ); |
92 | } |
92 | } |
93 | </script> |
93 | </script> |
94 | 94 | ||
95 | <% |
95 | <% |
96 | 96 | ||
97 | String courseCode = request.getParameter("courseCode"); |
97 | String courseCode = request.getParameter("courseCode"); |
98 | AbstractDao.getCurrentSession().beginTransaction(); |
98 | AbstractDao.getCurrentSession().beginTransaction(); |
99 | CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode); |
99 | CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode); |
100 | request.setAttribute("course",courseImpl); |
100 | request.setAttribute("course",courseImpl); |
101 | CourseReportDocument courseReport = null; |
101 | CourseReportDocument courseReport = null; |
102 | try { |
102 | try { |
103 | courseReport = new CourseReportServices().createNewCourseReportDocument("44", "201617"); |
103 | courseReport = new CourseReportServices().createNewCourseReportDocument(courseCode, "201617"); |
104 | } catch (Throwable e) { |
104 | } catch (Throwable e) { |
105 | System.out.println(e); |
105 | System.out.println(e); |
106 | e.printStackTrace(); |
106 | e.printStackTrace(); |
107 | } |
107 | } |
108 | String courseReportJson = courseReport.toJson(); |
108 | String courseReportJson = courseReport.toJson(); |
109 | request.setAttribute("courseDocumentJson",courseReportJson); |
109 | request.setAttribute("courseDocumentJson",courseReportJson); |
110 | request.setAttribute("courseDocument",courseReport); |
110 | request.setAttribute("courseDocument",courseReport); |
111 | 111 | ||
112 | %> |
112 | %> |
113 | <%--<a href="javascript:demoFromHTML()" class="button">Run Code</a>--%> |
113 | <%--<a href="javascript:demoFromHTML()" class="button">Run Code</a>--%> |
114 | 114 | ||
115 | <div class="container-fluid"> |
115 | <div class="container-fluid"> |
116 | 116 | ||
117 | <style> |
117 | <style> |
118 | .separatorSection |
118 | .separatorSection |
119 | { |
119 | { |
120 | border: 1px solid #ddd; |
120 | border: 1px solid #ddd; |
121 | } |
121 | } |
122 | </style> |
122 | </style> |
123 | 123 | ||
124 | 124 | ||
125 | <!-- Apresentacao da Unidade --> |
125 | <!-- Apresentacao da Unidade --> |
126 | 126 | ||
127 | <div class="panel panel-default"> |
127 | <div class="panel panel-default"> |
128 | <div class="panel-heading"> |
128 | <div class="panel-heading"> |
129 | Relatório Anual do curso: ${course.name} |
129 | Relatório Anual do curso: ${course.name} |
130 | </div> |
130 | </div> |
131 | <div class="panel-body"> |
131 | <div class="panel-body"> |
132 | 132 | ||
133 | <p><b class="label-info">Tipo de Curso:</b> <bean:message key="course.${course.degree}"/></p> |
133 | <p><b class="label-info">Tipo de Curso:</b> <bean:message key="course.${course.degree}"/></p> |
134 | <p><b class="label-info">Ano Lectivo:</b> ${course.importYear}</p> |
134 | <p><b class="label-info">Ano Lectivo:</b> ${course.importYear}</p> |
135 | <p><b class="label-info">Departamento:</b> ${course.department.name}</p> |
135 | <p><b class="label-info">Departamento:</b> ${course.department.name}</p> |
136 | <p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p> |
136 | <p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p> |
137 | 137 | ||
138 | 138 | ||
139 | 139 | ||
140 | 140 | ||
141 | <script> |
141 | <script> |
142 | 142 | ||
143 | //Especifico da aplicacao |
143 | //Especifico da aplicacao |
144 | var courseReportApp = angular.module('courseReportApp', []); |
144 | var courseReportApp = angular.module('courseReportApp', []); |
145 | GLOBAL_BacoAngularAppDependencies.push('courseReportApp'); |
145 | GLOBAL_BacoAngularAppDependencies.push('courseReportApp'); |
146 | 146 | ||
147 | 147 | ||
148 | courseReportApp.directive('resizable', function () { |
148 | courseReportApp.directive('resizable', function () { |
149 | return { |
149 | return { |
150 | restrict: 'A', |
150 | restrict: 'A', |
151 | scope: { |
151 | scope: { |
152 | callback: '&onResize' |
152 | callback: '&onResize' |
153 | }, |
153 | }, |
154 | link: function postLink(scope, elem, attrs) { |
154 | link: function postLink(scope, elem, attrs) { |
155 | elem.resizable(); |
155 | elem.resizable(); |
156 | elem.on('resize', function (evt, ui, comp) { |
156 | elem.on('resize', function (evt, ui, comp) { |
157 | scope.$apply(function() { |
157 | scope.$apply(function() { |
158 | if (scope.callback) { |
158 | if (scope.callback) { |
159 | scope.callback({$evt: evt, $ui: ui, $comp: comp }); |
159 | scope.callback({$evt: evt, $ui: ui, $comp: comp }); |
160 | } |
160 | } |
161 | }) |
161 | }) |
162 | }); |
162 | }); |
163 | } |
163 | } |
164 | }; |
164 | }; |
165 | }); |
165 | }); |
166 | 166 | ||
167 | 167 | ||
168 | courseReportApp.controller('courseReportAppController', function($scope) |
168 | courseReportApp.controller('courseReportAppController', function($scope) |
169 | { |
169 | { |
170 | 170 | ||
171 | $scope.docAppSelector = "#courseReportApp"; |
171 | $scope.docAppSelector = "#courseReportApp"; |
172 | $scope.report = <%=courseReportJson%> |
172 | $scope.report = <%=courseReportJson%> |
173 | 173 | ||
174 | $scope.resize = function(evt,ui,comp) { |
174 | $scope.resize = function(evt,ui,comp) { |
175 | //console.log (evt,ui); |
175 | //console.log (evt,ui); |
176 | comp.width = ui.size.width; |
176 | comp.width = ui.size.width; |
177 | comp.height = ui.size.height; |
177 | comp.height = ui.size.height; |
178 | } |
178 | } |
179 | 179 | ||
180 | /** |
180 | /** |
181 | * @classe class to match |
181 | * @classe class to match |
182 | * @superClasses array of strings |
182 | * @superClasses array of strings |
183 | * */ |
183 | * */ |
184 | $scope.contains = function(obj,classe) |
184 | $scope.contains = function(obj,classe) |
185 | { |
185 | { |
186 | if(obj['@class'] && obj['@class'] == classe) |
186 | if(obj['@class'] && obj['@class'] == classe) |
187 | return true; |
187 | return true; |
188 | if(obj.allSuperClasses) |
188 | if(obj.allSuperClasses) |
189 | { |
189 | { |
190 | for(var i in obj.allSuperClasses) |
190 | for(var i in obj.allSuperClasses) |
191 | { |
191 | { |
192 | if(classe == obj.allSuperClasses[i]) |
192 | if(classe == obj.allSuperClasses[i]) |
193 | return true; |
193 | return true; |
194 | } |
194 | } |
195 | } |
195 | } |
196 | return false; |
196 | return false; |
197 | } |
197 | } |
198 | 198 | ||
199 | $scope.showSep = function(section) |
199 | $scope.showSep = function(section,subSection) |
200 | { |
200 | { |
- | 201 | var s; |
|
- | 202 | for(s in section.sections) |
|
- | 203 | { |
|
- | 204 | section.sections[s].active = false; |
|
- | 205 | } |
|
201 | $(".separatorSectionNav").each(function() |
206 | /*$(".separatorSectionNav").each(function() |
202 | { |
207 | { |
203 | angular.element($(this)).scope().section.active = false; |
208 | angular.element($(this)).scope().section.active = false; |
204 | }); |
209 | });*/ |
205 | section.active = true; |
210 | subSection.active = true; |
206 | - | ||
207 | } |
211 | } |
208 | 212 | ||
- | 213 | /** |
|
- | 214 | * Este metodo devolve o template mais profundo na hierarquia de classes |
|
- | 215 | * permitindo emular o override, quanto mais especifica for a classe |
|
- | 216 | * e caso exista template é esse o template devolvido |
|
- | 217 | * procura um script com o id da classe e se nao existir |
|
- | 218 | * vai subindo nas super classes |
|
- | 219 | * @param obj |
|
- | 220 | * @returns {*} |
|
- | 221 | */ |
|
209 | $scope.class2id = function(obj) |
222 | $scope.class2id = function(obj) |
210 | { |
223 | { |
- | 224 | var objClassId = obj["@class"].replaceAll(".","_"); |
|
- | 225 | if($("script#" + objClassId).length > 0) |
|
- | 226 | { |
|
- | 227 | return objClassId; |
|
- | 228 | } |
|
- | 229 | if(obj.allSuperClasses) |
|
- | 230 | { |
|
- | 231 | var s; |
|
- | 232 | for(s in obj.allSuperClasses) |
|
- | 233 | { |
|
- | 234 | var superClass = obj.allSuperClasses[s]; |
|
- | 235 | var superClassId = superClass.replaceAll(".","_"); |
|
- | 236 | if($("script#" + superClassId).length > 0) |
|
- | 237 | { |
|
- | 238 | return superClassId; |
|
- | 239 | } |
|
- | 240 | } |
|
- | 241 | } |
|
211 | return obj["@class"].replaceAll(".","_"); |
242 | return obj["@class"].replaceAll(".","_"); |
212 | } |
243 | } |
213 | 244 | ||
214 | $scope.addText = function(parentCustomPane) |
245 | $scope.addText = function(parentCustomPane) |
215 | { |
246 | { |
216 | $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent") |
247 | $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent") |
217 | } |
248 | } |
218 | 249 | ||
219 | $scope.addImage = function(parentCustomPane) |
250 | $scope.addImage = function(parentCustomPane) |
220 | { |
251 | { |
221 | $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent") |
252 | $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent") |
222 | } |
253 | } |
223 | 254 | ||
224 | $scope.addSimpleDocComponent = function(parentCustomPane,classComponent) |
255 | $scope.addSimpleDocComponent = function(parentCustomPane,classComponent) |
225 | { |
256 | { |
226 | if(!parentCustomPane.components) |
257 | if(!parentCustomPane.components) |
227 | { |
258 | { |
228 | parentCustomPane.components = []; |
259 | parentCustomPane.components = []; |
229 | } |
260 | } |
230 | parentCustomPane.components.push( |
261 | parentCustomPane.components.push( |
231 | { |
262 | { |
232 | "@class" : classComponent |
263 | "@class" : classComponent |
233 | } |
264 | } |
234 | ); |
265 | ); |
235 | } |
266 | } |
236 | $scope.removeComponent = function(index,array) |
267 | $scope.removeComponent = function(index,array) |
237 | { |
268 | { |
238 | array.splice(index,1); |
269 | array.splice(index,1); |
239 | 270 | ||
240 | 271 | ||
241 | } |
272 | } |
242 | $scope.callbackUploadedFiles = function(filesUploadResult,token,targetElement) |
273 | $scope.callbackUploadedFiles = function(filesUploadResult,token,targetElement) |
243 | { |
274 | { |
244 | var modelObject = BacoAngularUtils.getAngularElementModel(targetElement); |
275 | var modelObject = BacoAngularUtils.getAngularElementModel(targetElement); |
245 | modelObject.filesUploadResult = filesUploadResult; |
276 | modelObject.filesUploadResult = filesUploadResult; |
246 | if(modelObject.image && modelObject.image.identifier) |
277 | if(modelObject.image && modelObject.image.identifier) |
247 | { |
278 | { |
248 | widgetCallWithActionParameters( |
279 | widgetCallWithActionParameters( |
249 | "<%=request.getContextPath()%>/user/json/repository.do", |
280 | "<%=request.getContextPath()%>/user/json/repository.do", |
250 | "replaceRepositoryFileFromTempPrivateDomain", |
281 | "replaceRepositoryFileFromTempPrivateDomain", |
251 | { |
282 | { |
252 | "identifier" : modelObject.image.identifier, |
283 | "identifier" : modelObject.image.identifier, |
253 | "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
284 | "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
254 | }, |
285 | }, |
255 | "#courseReportApp", |
286 | "#courseReportApp", |
256 | function(repositoryFile4JsonView) |
287 | function(repositoryFile4JsonView) |
257 | { |
288 | { |
258 | modelObject.image = repositoryFile4JsonView; |
289 | modelObject.image = repositoryFile4JsonView; |
259 | modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
290 | modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
260 | delete modelObject.filesUploadResult; |
291 | delete modelObject.filesUploadResult; |
261 | angular.element($("#courseReportApp")).scope().$apply(); |
292 | angular.element($("#courseReportApp")).scope().$apply(); |
262 | }, |
293 | }, |
263 | function(){} |
294 | function(){} |
264 | ); |
295 | ); |
265 | } |
296 | } |
266 | else |
297 | else |
267 | { |
298 | { |
268 | widgetCallWithActionParameters( |
299 | widgetCallWithActionParameters( |
269 | "<%=request.getContextPath()%>/user/json/repository.do", |
300 | "<%=request.getContextPath()%>/user/json/repository.do", |
270 | "saveRepositoryFileFromTempPrivateDomain", |
301 | "saveRepositoryFileFromTempPrivateDomain", |
271 | { |
302 | { |
272 | "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
303 | "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
273 | }, |
304 | }, |
274 | "#courseReportApp", |
305 | "#courseReportApp", |
275 | function(repositoryFile4JsonView) |
306 | function(repositoryFile4JsonView) |
276 | { |
307 | { |
277 | modelObject.image = repositoryFile4JsonView; |
308 | modelObject.image = repositoryFile4JsonView; |
278 | modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
309 | modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
279 | delete modelObject.filesUploadResult; |
310 | delete modelObject.filesUploadResult; |
280 | angular.element($("#courseReportApp")).scope().$apply(); |
311 | angular.element($("#courseReportApp")).scope().$apply(); |
281 | }, |
312 | }, |
282 | function(){} |
313 | function(){} |
283 | ); |
314 | ); |
284 | } |
315 | } |
285 | } |
316 | } |
286 | 317 | ||
287 | 318 | ||
288 | }); |
319 | }); |
289 | </script> |
320 | </script> |
290 | 321 | ||
291 | <!--TEMPLATES FOR DOCUMENT BUILDER--> |
322 | <!--TEMPLATES FOR DOCUMENT BUILDER--> |
292 | <jsp:include page="../utils/documentsBuilder.jsp"/> |
323 | <jsp:include page="../utils/documentsBuilder.jsp"/> |
293 | 324 | ||
294 | <div class="form-vertical"> |
325 | <div class="form-vertical"> |
295 | <div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController"> |
326 | <div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController"> |
296 | 327 | ||
297 | - | ||
298 | <ul class="nav nav-tabs"> |
- | |
299 | <li ng-model="section" class="separatorSectionNav" ng-class="{ active: section.active}" ng-repeat="section in report.sections"> |
328 | <div ng-init="section=report;" ng-include="'pt_estgp_estgweb_utils_documentBuilder_DocumentSection'"> |
300 | <a ng-click="showSep(section)">{{section.title}}</a> |
- | |
301 | </li> |
- | |
302 | </ul> |
- | |
303 | - | ||
304 | - | ||
305 | - | ||
306 | <!--DocumentSection--> |
- | |
307 | <div ng-model="section" ng-class="{ hidden: !section.active}" ng-repeat="section in report.sections" class="separatorSection clearfix"> |
- | |
308 | - | ||
309 | <div ng-repeat="comp in section.components" ng-include="class2id(comp)"> |
- | |
310 | - | ||
311 | </div> |
- | |
312 | - | ||
313 | 329 | ||
314 | </div> |
330 | </div> |
315 | <!--/DocumentSection--> |
- | |
316 | 331 | ||
317 | <%-- |
- | |
318 | <pre class="code">{{ report | json }}</pre> |
332 | <pre class="code">{{ report | json }}</pre> |
319 | --%> |
333 | |
320 | 334 | ||
321 | 335 | ||
322 | </div><!--App--> |
336 | </div><!--App--> |
323 | </div> <!--form--> |
337 | </div> <!--form--> |
324 | 338 | ||
325 | </div><!--Panel Body--> |
339 | </div><!--Panel Body--> |
326 | 340 | ||
327 | </div><!--Panel--> |
341 | </div><!--Panel--> |
328 | 342 | ||
329 | </div><!--container-fluid--> |
343 | </div><!--container-fluid--> |
330 | 344 | ||
331 | <% |
345 | <% |
332 | AbstractDao.getCurrentSession().getTransaction().commit(); |
346 | AbstractDao.getCurrentSession().getTransaction().commit(); |
333 | %> |
347 | %> |
334 | 348 | ||
335 | Generated by GNU Enscript 1.6.5.2. |
349 | Generated by GNU Enscript 1.6.5.2. |
336 | 350 | ||
337 | 351 |