Mercurial > hg > webaudioevaluationtool
comparison test_create.html @ 2907:a1e294297380
#222 WIP
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Mon, 31 Jul 2017 16:15:47 +0100 |
parents | cedaf7ee1b81 |
children | 9c26e579e64d |
comparison
equal
deleted
inserted
replaced
2906:281393b64a13 | 2907:a1e294297380 |
---|---|
10 <script type="text/javascript" src="js/specification.js"></script> | 10 <script type="text/javascript" src="js/specification.js"></script> |
11 <script type="text/javascript" src="test_create/test_core.js"></script> | 11 <script type="text/javascript" src="test_create/test_core.js"></script> |
12 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> | 12 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> |
13 <script type="text/javascript" src="js/xmllint.js"></script> | 13 <script type="text/javascript" src="js/xmllint.js"></script> |
14 | 14 |
15 <title>WAET 1.2.1 Test Creator</title> | 15 <title>WAET 1.2.2 Test Creator</title> |
16 </head> | 16 </head> |
17 | 17 |
18 <body ng-app="creator" ng-controller="view"> | 18 <body ng-app="creator" ng-controller="view"> |
19 <div class="container"> | 19 <div class="container"> |
20 <div id="pageRoot"> | 20 <div id="pageRoot"> |
21 <h1>Web Audio Evaluation Tool - Test Creator</h1> | 21 <h1>Web Audio Evaluation Tool</h1> |
22 <h3>Test Creator <span class="label label-primary">v1.2.2</span></h3> | |
22 </div> | 23 </div> |
23 <button type="button" class="btn btn-info" ng-click="validate()">Validate</button> | 24 <button type="button" class="btn btn-info" ng-click="validate()">Validate</button> |
24 <button type="button" class="btn btn-success" ng-click="exportXML()" ng-disabled="validated == false">Export XML</button> | 25 <button type="button" class="btn btn-success" ng-click="exportXML()" ng-disabled="validated == false">Export XML</button> |
25 <div ng-switch on="validated" ng-show="showValidationMessages"> | 26 <div ng-switch on="validated" ng-show="showValidationMessages"> |
26 <div class="panel panel-danger" ng-switch-when="false"> | 27 <div class="panel panel-danger" ng-switch-when="false"> |
51 <span>Save URL: </span> | 52 <span>Save URL: </span> |
52 <input type="text" ng-model="specification.projectReturn" placeholder="save.php" /> | 53 <input type="text" ng-model="specification.projectReturn" placeholder="save.php" /> |
53 </div> | 54 </div> |
54 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed and save confirmed, the browser will redirect to this page, if not defined."> | 55 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed and save confirmed, the browser will redirect to this page, if not defined."> |
55 <span>Exit URL: </span> | 56 <span>Exit URL: </span> |
56 <input type="text" ng-model="specification.returnURL" /> | 57 <input type="text" ng-model="specification.returnURL" placeholder="{{placeholder('returnURL')}}" /> |
57 </div> | 58 </div> |
58 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Randomise the page order"> | 59 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Randomise the page order"> |
59 <span>Randomise Page Order: </span> | 60 <span>Randomise Page Order: </span> |
60 <input type="checkbox" ng-model="specification.randomiseOrder" /> | 61 <input type="checkbox" ng-model="specification.randomiseOrder" /> |
61 </div> | 62 </div> |
62 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the number of pages to present to the user. This includes repeated pages. Set to '0' or blank to ignore. Randomise page order must be selected."> | 63 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the number of pages to present to the user. This includes repeated pages. Set to '0' or blank to ignore. Randomise page order must be selected."> |
63 <span>Page Pool Size: </span> | 64 <span>Page Pool Size: </span> |
64 <input type="number" ng-model="specification.poolSize" min="0" /> | 65 <input type="number" ng-model="specification.poolSize" min="0" placeholder="{{placeholder('poolSize')}}" /> |
65 </div> | 66 </div> |
66 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Automatically analyse and normalsie audio to this target LUFS. If unsure, use -25LUFS. 0 or blank disables normalisation"> | 67 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Automatically analyse and normalsie audio to this target LUFS. If unsure, use -25LUFS. 0 or blank disables normalisation"> |
67 <span>Loudness Normalisation (LUFS): </span> | 68 <span>Loudness Normalisation (LUFS): </span> |
68 <input type="number" ng-model="specification.loudness" max="0" /> | 69 <input type="number" ng-model="specification.loudness" max="0" placeholder="{{placeholder('loudness')}}" /> |
69 </div> | 70 </div> |
70 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Only perform the test if the browser reported sampling rate matches this."> | 71 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Only perform the test if the browser reported sampling rate matches this."> |
71 <span>Fixed Sampling Rate: </span> | 72 <span>Fixed Sampling Rate: </span> |
72 <input type="number" ng-model="specification.sampleRate" min="0" /> | 73 <input type="number" ng-model="specification.sampleRate" min="0" placeholder="{{placeholder('sampleRate')}}" /> |
73 </div> | 74 </div> |
74 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show a 'method of adjustment' audio calibration before testing."> | 75 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show a 'method of adjustment' audio calibration before testing."> |
75 <span>Pre-Test audio calibration: </span> | 76 <span>Pre-Test audio calibration: </span> |
76 <input type="checkbox" ng-model="specification.calibration" /> | 77 <input type="checkbox" ng-model="specification.calibration" /> |
77 </div> | 78 </div> |
78 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default cross-fade time when switching between elements. Can be over-ridden on each page"> | 79 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default cross-fade time when switching between elements. Can be over-ridden on each page"> |
79 <span>Global Cross-fade time: </span> | 80 <span>Global Cross-fade time: </span> |
80 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" /> | 81 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" placeholder="{{placeholder('crossFade')}}" /> |
81 </div> | 82 </div> |
82 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default pre-play element silence. Can be over-ridden on each page and element"> | 83 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default pre-play element silence. Can be over-ridden on each page and element"> |
83 <span>Global Fragment Pre-Silence: </span> | 84 <span>Global Fragment Pre-Silence: </span> |
84 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> | 85 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" placeholder="{{placeholder('preSilence')}}" /> |
85 </div> | 86 </div> |
86 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default post-play element silence. Can be over-ridden on each page and element"> | 87 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default post-play element silence. Can be over-ridden on each page and element"> |
87 <span>Global Fragment Post-Silence: </span> | 88 <span>Global Fragment Post-Silence: </span> |
88 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> | 89 <input type="number" ng-model="specification.postSilence" min="0" step="0.1" placeholder="{{placeholder('postSilence')}}" /> |
89 </div> | 90 </div> |
90 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio elements"> | 91 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio elements"> |
91 <span>Play audio one-at-a-time: </span> | 92 <span>Play audio one-at-a-time: </span> |
92 <input type="checkbox" ng-model="specification.playOne" /> | 93 <input type="checkbox" ng-model="specification.playOne" /> |
93 </div> | 94 </div> |
94 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum number of times an audio fragment must be played"> | 95 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum number of times an audio fragment must be played"> |
95 <span>Minimum number of fragment plays</span> | 96 <span>Minimum number of fragment plays</span> |
96 <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" /> | 97 <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" placeholder="{{placeholder('minNumberPlays')}}" /> |
97 </div> | 98 </div> |
98 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of times an audio fragment can be played"> | 99 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of times an audio fragment can be played"> |
99 <span>Maximum number of fragment plays</span> | 100 <span>Maximum number of fragment plays</span> |
100 <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" /> | 101 <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" placeholder="{{placeholder('maxNumberPlays')}}" /> |
101 </div> | 102 </div> |
102 </div> | 103 </div> |
103 <div class="node"> | 104 <div class="node"> |
104 <h2>Test Completed Message</h2> | 105 <h2>Test Completed Message</h2> |
105 <textarea ng-model="specification.exitText" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed, you can show a message to the user. Markdown syntax is supported for formatting."></textarea> | 106 <textarea ng-model="specification.exitText" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed, you can show a message to the user. Markdown syntax is supported for formatting."></textarea> |
466 <span>Randomise Fragment Order: </span> | 467 <span>Randomise Fragment Order: </span> |
467 <input type="checkbox" ng-model="page.randomiseOrder" /> | 468 <input type="checkbox" ng-model="page.randomiseOrder" /> |
468 </div> | 469 </div> |
469 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Specify if this page should be repeated and how many times. Please note, that if page-pooling is also selected then it 'may' not repeat as many times."> | 470 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Specify if this page should be repeated and how many times. Please note, that if page-pooling is also selected then it 'may' not repeat as many times."> |
470 <span>Repeat Page N-times: </span> | 471 <span>Repeat Page N-times: </span> |
471 <input type="number" ng-model="page.repeatCount" value="0" step="1" /> | 472 <input type="number" ng-model="page.repeatCount" value="0" step="1" placeholder="{{placeholder('repeatCount')}}" /> |
472 </div> | 473 </div> |
473 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Loop audio playback until manually stopped or the page submit button is pressed"> | 474 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Loop audio playback until manually stopped or the page submit button is pressed"> |
474 <span>Loop audio: </span> | 475 <span>Loop audio: </span> |
475 <input type="checkbox" ng-model="page.loop" /> | 476 <input type="checkbox" ng-model="page.loop" /> |
476 </div> | 477 </div> |
478 <span>Synchronous audio playback: </span> | 479 <span>Synchronous audio playback: </span> |
479 <input type="checkbox" ng-model="page.synchronous" /> | 480 <input type="checkbox" ng-model="page.synchronous" /> |
480 </div> | 481 </div> |
481 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global loudness normalisation"> | 482 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global loudness normalisation"> |
482 <span>Loudness (page): </span> | 483 <span>Loudness (page): </span> |
483 <input type="number" ng-model="page.loudness" max="0" /> | 484 <input type="number" ng-model="page.loudness" max="0" placeholder="{{specification.loudness || placeholder('loudness')}}" /> |
484 </div> | 485 </div> |
485 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Label type to display on the fragments."> | 486 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Label type to display on the fragments."> |
486 <span>Label type: </span> | 487 <span>Label type: </span> |
487 <select ng-model="page.label"> | 488 <select ng-model="page.label"> |
488 <option value="default">Default</option> | 489 <option value="default">Default</option> |
497 <span>Label Start: </span> | 498 <span>Label Start: </span> |
498 <input type="text" ng-model="page.labelStart" /> | 499 <input type="text" ng-model="page.labelStart" /> |
499 </div> | 500 </div> |
500 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Select a subgroup of the given audio fragments to display. 0 or blank means all fragments will be displayed."> | 501 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Select a subgroup of the given audio fragments to display. 0 or blank means all fragments will be displayed."> |
501 <span>Fragment pool size: </span> | 502 <span>Fragment pool size: </span> |
502 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" /> | 503 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" placeholder="{{placeholder('poolSize')}}" /> |
503 </div> | 504 </div> |
504 <div class="attribute" ng-show="specification.poolSize > 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Always display this page, even after sub-pooling of pages"> | 505 <div class="attribute" ng-show="specification.poolSize > 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Always display this page, even after sub-pooling of pages"> |
505 <span>Always include page: </span> | 506 <span>Always include page: </span> |
506 <input type="checkbox" ng-model="page.alwaysInclude" /> | 507 <input type="checkbox" ng-model="page.alwaysInclude" /> |
507 </div> | 508 </div> |
509 <span>Fixed Page Position: </span> | 510 <span>Fixed Page Position: </span> |
510 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" /> | 511 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" /> |
511 </div> | 512 </div> |
512 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global pre-silence"> | 513 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global pre-silence"> |
513 <span>Fragment pre-silence: </span> | 514 <span>Fragment pre-silence: </span> |
514 <input type="number" ng-model="page.preSilence" min="0" step="0.1" /> | 515 <input type="number" ng-model="page.preSilence" min="0" step="0.1" placeholder="{{specification.preSilence || placeholder('preSilence')}}" /> |
515 </div> | 516 </div> |
516 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global post-silence"> | 517 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global post-silence"> |
517 <span>Fragment post-silence: </span> | 518 <span>Fragment post-silence: </span> |
518 <input type="number" ng-model="page.postSilence" min="0" step="0.1" /> | 519 <input type="number" ng-model="page.postSilence" min="0" step="0.1" placeholder="{{specification.postSilence || placeholder('postSilence')}}" /> |
519 </div> | 520 </div> |
520 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio"> | 521 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio"> |
521 <span>Cannot interupt audio: </span> | 522 <span>Cannot interupt audio: </span> |
522 <input type="checkbox" ng-model="page.playOne" /> | 523 <input type="checkbox" ng-model="page.playOne" /> |
523 </div> | 524 </div> |
525 <span>Only move playing audio: </span> | 526 <span>Only move playing audio: </span> |
526 <input type="checkbox" ng-model="page.restrictMovement" /> | 527 <input type="checkbox" ng-model="page.restrictMovement" /> |
527 </div> | 528 </div> |
528 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global minimum number of fragment plays"> | 529 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global minimum number of fragment plays"> |
529 <span>Minimum number of fragment plays</span> | 530 <span>Minimum number of fragment plays</span> |
530 <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" /> | 531 <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" placeholder="{{specification.minNumberPlays || placeholder('minNumberPlays')}}" /> |
531 </div> | 532 </div> |
532 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global maximum number of fragment plays"> | 533 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global maximum number of fragment plays"> |
533 <span>Maximum number of fragment plays</span> | 534 <span>Maximum number of fragment plays</span> |
534 <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" /> | 535 <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" placeholder="{{specification.maxNumberPlays || placeholder('maxNumberPlays')}}" /> |
535 </div> | 536 </div> |
536 </div> | 537 </div> |
537 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the title of the page"> | 538 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the title of the page"> |
538 <h3>Page Title</h3> | 539 <h3>Page Title</h3> |
539 <textarea ng-model="page.title"></textarea> | 540 <textarea ng-model="page.title"></textarea> |
997 <span>Reference must be above: </span> | 998 <span>Reference must be above: </span> |
998 <input type="number" ng-model="fragment.marker" min="0" max="100" /> | 999 <input type="number" ng-model="fragment.marker" min="0" max="100" /> |
999 </div> | 1000 </div> |
1000 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness"> | 1001 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness"> |
1001 <span>Loudness: </span> | 1002 <span>Loudness: </span> |
1002 <input type="number" ng-model="fragment.loudness" max="0" /> | 1003 <input type="number" ng-model="fragment.loudness" max="0" placeholder="{{page.loudness || specification.loudness || ''}}" /> |
1003 </div> | 1004 </div> |
1004 <div class="attribute" ng-show="page.poolSize > 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Always include this fragment after any sub-pooling"> | 1005 <div class="attribute" ng-show="page.poolSize > 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Always include this fragment after any sub-pooling"> |
1005 <span>Always include fragment: </span> | 1006 <span>Always include fragment: </span> |
1006 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" /> | 1007 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" /> |
1007 </div> | 1008 </div> |
1042 </div> | 1043 </div> |
1043 </div> | 1044 </div> |
1044 <div id="popupHolder" ng-show="popupVisible"> | 1045 <div id="popupHolder" ng-show="popupVisible"> |
1045 <div ng-controller="introduction" class="popup" ng-show="popupVisible"> | 1046 <div ng-controller="introduction" class="popup" ng-show="popupVisible"> |
1046 <div class="popupTitle" ng-switch="state"> | 1047 <div class="popupTitle" ng-switch="state"> |
1047 <span ng-switch-when="0">Test Creator</span> | 1048 <span ng-switch-when="0">Test Creator <span class="label label-primary">v1.2.2</span></span> |
1048 <span ng-switch-when="1">Create New Test</span> | 1049 <span ng-switch-when="1">Create New Test</span> |
1049 </div> | 1050 </div> |
1050 <div class="popupContent container-fluid" ng-switch="state"> | 1051 <div class="popupContent container-fluid" ng-switch="state"> |
1051 <div ng-switch-when="0"> | 1052 <div ng-switch-when="0"> |
1052 <div> | 1053 <div> |
1053 <span>Welcome to the WAET test creator tool. This will allow you to create a new test from scratch to suit your testing needs. If you wish to update a test file, please drag and drop the XML document into the area below for processing, otherwise press 'Next' to start a new test. This tool generates files for the WAET 1.2.1 version.</span> | 1054 <span>Welcome to the WAET test creator tool. This will allow you to create a new test from scratch to suit your testing needs. If you wish to update a test file, please drag and drop the XML document into the area below for processing, otherwise press 'Next' to start a new test. This tool generates files for the WAET 1.2.2 version.</span> |
1054 </div> | 1055 </div> |
1055 <div> | 1056 <div> |
1056 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" /> | 1057 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" /> |
1057 </div> | 1058 </div> |
1058 </div> | 1059 </div> |