Commit 7aa6f173b0e365bb4a005ee4d8d5ceb2255ca6fb

Authored by Deepak
1 parent 4b187a6878
Exists in master

added student view

imports/client/views/org/admin/students/FabMenu.js
... ... @@ -0,0 +1,38 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { FormGroup,Panel,Table,
  7 + ButtonToolbar,Modal,
  8 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  9 +import { AddStudentForm } from './addStudentForm';
  10 +import FloatingActionButton from 'material-ui/FloatingActionButton';
  11 +import ContentAdd from 'material-ui/svg-icons/content/add';
  12 +const style = {
  13 + marginRight: 20,
  14 +};
  15 +export class FabMenuView extends Component {
  16 +
  17 + constructor(props) {
  18 + super(props);
  19 + this.state = {
  20 + show: false
  21 + };
  22 + this.onUpdate = this.onUpdate.bind(this);
  23 + };
  24 + onUpdate(key, value) {
  25 + this.setState({[key]: value});
  26 + };
  27 +
  28 + render() {
  29 + return (
  30 + <div>
  31 + <FloatingActionButton>
  32 + <ContentAdd />
  33 + </FloatingActionButton>
  34 + </div>
  35 + );
  36 + };
  37 +
  38 +};
... ...
imports/client/views/org/admin/students/Header.js
... ... @@ -0,0 +1,98 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { FormGroup,
  7 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  8 +
  9 +
  10 +export class Header extends Component {
  11 +
  12 + constructor(props) {
  13 + super(props);
  14 + this.state = {
  15 +
  16 + };
  17 + this.onUpdate = this.onUpdate.bind(this);
  18 + };
  19 +
  20 + onUpdate(key, value) {
  21 + this.setState({[key]: value});
  22 + };
  23 +
  24 + render() {
  25 + return (
  26 + <div className = "enterPane-box">
  27 + <div className="row">
  28 + <div className="col-lg-3 col-md-6">
  29 + <div className="panel panel-body">
  30 + <div className="media">
  31 + <div className="media-left">
  32 + <a href="assets/images/placeholder.png" data-popup="lightbox">
  33 + <img src="assets/images/download2.png" className="img-circle img-lg" alt="" />
  34 + </a>
  35 + </div>
  36 + <div className="media-body">
  37 + <h6 className="media-heading">Students</h6>
  38 + <span className="text-muted">Click to view</span>
  39 + </div>
  40 + </div>
  41 + </div>
  42 + </div>
  43 + <div className="col-lg-3 col-md-6">
  44 + <div className="panel panel-body">
  45 + <div className="media">
  46 + <div className="media-left">
  47 + <a href="assets/images/placeholder.jpg" data-popup="lightbox">
  48 + <img src="assets/images/download.png" className="img-circle img-lg" alt="" />
  49 + </a>
  50 + </div>
  51 +
  52 + <div className="media-body">
  53 + <h6 className="media-heading">Teachers</h6>
  54 + <span className="text-muted">Click to view</span>
  55 + </div>
  56 + </div>
  57 + </div>
  58 + </div>
  59 +
  60 + <div className="col-lg-3 col-md-6">
  61 + <div className="panel panel-body">
  62 + <div className="media">
  63 + <div className="media-left">
  64 + <a href="assets/images/placeholder.jpg" data-popup="lightbox">
  65 + <img src="assets/images/download3.png" className="img-circle img-lg" alt="" />
  66 + </a>
  67 + </div>
  68 +
  69 + <div className="media-body">
  70 + <h6 className="media-heading">Parents</h6>
  71 + <span className="text-muted">Click to view</span>
  72 + </div>
  73 + </div>
  74 + </div>
  75 + </div>
  76 +
  77 + <div className="col-lg-3 col-md-6">
  78 + <div className="panel panel-body">
  79 + <div className="media">
  80 + <div className="media-left">
  81 + <a href="assets/images/placeholder.jpg" data-popup="lightbox">
  82 + <img src="assets/images/download1.png" className="img-circle img-lg" alt="" />
  83 + </a>
  84 + </div>
  85 +
  86 + <div className="media-body">
  87 + <h6 className="media-heading">Non Teaching Staff</h6>
  88 + <span className="text-muted">Click to view</span>
  89 + </div>
  90 + </div>
  91 + </div>
  92 + </div>
  93 + </div>
  94 + </div>
  95 + );
  96 + };
  97 +
  98 +};
... ...
imports/client/views/org/admin/students/StudentDataView.js
... ... @@ -33,55 +33,239 @@ export class StudentDataView extends Component {
33 33  
34 34 render() {
35 35 return (
36   - <div className = "enterPane-box">
37   - <Panel header="Students Info" bsStyle="primary">
38   - <Table striped bordered condensed hover>
39   - <thead>
40   - <tr>
41   - <th>#</th>
42   - <th>First Name</th>
43   - <th>Last Name</th>
44   - </tr>
45   - </thead>
46   - <tbody>
47   - {
48   - this.props.data.students.map(function(student, i)
49   - {
50   - return(
51   - <tr>
52   - <td>{i+1}</td>
53   - <td>{student.firstName}</td>
54   - <td>{student.lastName}</td>
55   - </tr>
56   - )
57   - })
58   - }
59   -
60   - </tbody>
61   - </Table>
62   - <ButtonToolbar>
63   - <Button bsStyle="primary" onClick={this.showModal}>
64   - Add Student
65   - </Button>
66   - <Modal
67   - {...this.props}
68   - show={this.state.show}
69   - onHide={this.hideModal}
70   - dialogClassName="custom-modal"
71   - >
72   - <Modal.Header closeButton>
73   - <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title>
74   - </Modal.Header>
75   - <Modal.Body>
76   - <AddStudentForm />
77   - </Modal.Body>
78   - <Modal.Footer>
79   - <Button onClick={this.hideModal}>Close</Button>
80   - </Modal.Footer>
81   - </Modal>
82   - </ButtonToolbar>
83   - </Panel>
84   - </div>
  36 + <div className="content has-detached-left">
  37 + <div className="container-detached">
  38 + <div className="content-detached">
  39 + <div className="row">
  40 + <div className="col-lg-3 col-md-6">
  41 + <div className="panel panel-body">
  42 + <div className="media">
  43 + <div className="media-left">
  44 + <a href="assets/images/placeholder.png" data-popup="lightbox">
  45 + <img src="assets/images/download2.png" className="img-circle img-lg" alt="" />
  46 + </a>
  47 + </div>
  48 +
  49 + <div className="media-body">
  50 + <h6 className="media-heading">Students</h6>
  51 + <span className="text-muted">Click to view</span>
  52 + </div>
  53 + </div>
  54 + </div>
  55 + </div>
  56 +
  57 + <div className="col-lg-3 col-md-6">
  58 + <div className="panel panel-body">
  59 + <div className="media">
  60 + <div className="media-left">
  61 + <a href="assets/images/placeholder.jpg" data-popup="lightbox">
  62 + <img src="assets/images/download.png" className="img-circle img-lg" alt="" />
  63 + </a>
  64 + </div>
  65 +
  66 + <div className="media-body">
  67 + <h6 className="media-heading">Teachers</h6>
  68 + <span className="text-muted">Click to view</span>
  69 + </div>
  70 + </div>
  71 + </div>
  72 + </div>
  73 +
  74 + <div className="col-lg-3 col-md-6">
  75 + <div className="panel panel-body">
  76 + <div className="media">
  77 + <div className="media-left">
  78 + <a href="assets/images/placeholder.jpg" data-popup="lightbox">
  79 + <img src="assets/images/download3.png" className="img-circle img-lg" alt="" />
  80 + </a>
  81 + </div>
  82 +
  83 + <div className="media-body">
  84 + <h6 className="media-heading">Parents</h6>
  85 + <span className="text-muted">Click to view</span>
  86 + </div>
  87 + </div>
  88 + </div>
  89 + </div>
  90 +
  91 + <div className="col-lg-3 col-md-6">
  92 + <div className="panel panel-body">
  93 + <div className="media">
  94 + <div className="media-left">
  95 + <a href="assets/images/placeholder.jpg" data-popup="lightbox">
  96 + <img src="assets/images/download1.png" className="img-circle img-lg" alt="" />
  97 + </a>
  98 + </div>
  99 +
  100 + <div className="media-body">
  101 + <h6 className="media-heading">Non Teaching Staff</h6>
  102 + <span className="text-muted">Click to view</span>
  103 + </div>
  104 + </div>
  105 + </div>
  106 + </div>
  107 + </div>
  108 +
  109 + <div className="panel panel-flat">
  110 + <div className="panel-heading">
  111 + <h5 className="panel-title">Student Details</h5>
  112 + <div className="heading-elements">
  113 + <ul className="icons-list">
  114 + <li><a data-action="collapse"></a></li>
  115 + <li><a data-action="reload"></a></li>
  116 + </ul>
  117 + </div>
  118 + </div>
  119 +
  120 +
  121 + <table className="table datatable-basic table-striped">
  122 + <thead>
  123 + <tr>
  124 + <th>First Name</th>
  125 + <th>Last Name</th>
  126 + <th>className</th>
  127 + <th>DOB</th>
  128 + <th>Status</th>
  129 + <th className="text-center">Actions</th>
  130 + </tr>
  131 + </thead>
  132 + <tbody>
  133 + <tr>
  134 + <td>Marth</td>
  135 + <td><a href="#">Enright</a></td>
  136 + <td>VII</td>
  137 + <td>22 Jun 1972</td>
  138 + <td><span className="label label-success">Active</span></td>
  139 + <td className="text-center">
  140 + <ul className="icons-list">
  141 + <li className="dropdown">
  142 + <a href="#" className="dropdown-toggle" data-toggle="dropdown">
  143 + <i className="icon-menu9"></i>
  144 + </a>
  145 +
  146 + <ul className="dropdown-menu dropdown-menu-right">
  147 + <li><a href="#"><i className="icon-file-pdf"></i> Export to .pdf</a></li>
  148 + <li><a href="#"><i className="icon-file-excel"></i> Export to .csv</a></li>
  149 + <li><a href="#"><i className="icon-file-word"></i> Export to .doc</a></li>
  150 + </ul>
  151 + </li>
  152 + </ul>
  153 + </td>
  154 + </tr>
  155 + <tr>
  156 + <td>Jackelyn</td>
  157 + <td>Weible</td>
  158 + <td><a href="#">XI</a></td>
  159 + <td>3 Oct 1981</td>
  160 + <td><span className="label label-default">Inactive</span></td>
  161 + <td className="text-center">
  162 + <ul className="icons-list">
  163 + <li className="dropdown">
  164 + <a href="#" className="dropdown-toggle" data-toggle="dropdown">
  165 + <i className="icon-menu9"></i>
  166 + </a>
  167 +
  168 + <ul className="dropdown-menu dropdown-menu-right">
  169 + <li><a href="#"><i className="icon-file-pdf"></i> Export to .pdf</a></li>
  170 + <li><a href="#"><i className="icon-file-excel"></i> Export to .csv</a></li>
  171 + <li><a href="#"><i className="icon-file-word"></i> Export to .doc</a></li>
  172 + </ul>
  173 + </li>
  174 + </ul>
  175 + </td>
  176 + </tr>
  177 + </tbody>
  178 + </table>
  179 + </div>
  180 +
  181 +
  182 + <ul className="fab-menu fab-menu-fixed fab-menu-bottom-right" data-fab-toggle="click">
  183 + <li>
  184 + <a className="fab-menu-btn btn bg-teal-400 btn-float btn-rounded btn-icon">
  185 + <i className="fab-icon-open icon-plus3"></i>
  186 + <i className="fab-icon-close icon-cross2"></i>
  187 + </a>
  188 +
  189 + <ul className="fab-menu-inner">
  190 + <li>
  191 + <div data-fab-label="Upload bulk data">
  192 + <a href="#" className="btn btn-default btn-rounded btn-icon btn-float">
  193 + <i className="icon-file-upload2"></i>
  194 + </a>
  195 + </div>
  196 + </li>
  197 + <li>
  198 + <div data-fab-label="Add Student">
  199 + <a href="#" className="btn btn-default btn-rounded btn-icon btn-float">
  200 + <i className=" icon-file-plus2"></i>
  201 + </a>
  202 + <span className="badge bg-primary-400">5</span>
  203 + </div>
  204 + </li>
  205 + </ul>
  206 + </li>
  207 + </ul>
  208 +
  209 + </div>
  210 + </div>
  211 + <div className="sidebar-detached affix-top">
  212 + <div className="sidebar sidebar-default">
  213 + <div className="sidebar-content">
  214 +
  215 + <div className="sidebar-category">
  216 + <div className="category-title">
  217 + <span>Advanced Search</span>
  218 + <ul className="icons-list">
  219 + <li><a href="#" data-action="collapse"></a></li>
  220 + </ul>
  221 + </div>
  222 +
  223 + <div className="category-content">
  224 + <form action="#">
  225 + <div className="has-feedback has-feedback-left">
  226 + <input type="search" className="form-control" placeholder="First Name" />
  227 + <div className="form-control-feedback">
  228 + <i className="icon-search4 text-size-base text-muted"></i>
  229 + </div>
  230 + </div>
  231 + </form>
  232 + </div>
  233 + <div className="category-content">
  234 + <form action="#">
  235 + <div className="has-feedback has-feedback-left">
  236 + <input type="search" className="form-control" placeholder="Last Name" />
  237 + <div className="form-control-feedback">
  238 + <i className="icon-search4 text-size-base text-muted"></i>
  239 + </div>
  240 + </div>
  241 + </form>
  242 + </div>
  243 + <div className="category-content">
  244 + <form action="#">
  245 + <div className="has-feedback has-feedback-left">
  246 + <div className="btn-group">
  247 + <button type="button" className="dropdown-toggle form-control" data-toggle="dropdown">
  248 + <span data-bind="label">Select className</span>&nbsp;<span className="caret"></span>
  249 + </button>
  250 + <ul className="dropdown-menu" role="menu">
  251 + <li><a href="#">Item 1</a></li>
  252 + <li><a href="#">Another item</a></li>
  253 + <li><a href="#">This is a longer item that will not fit properly</a></li>
  254 + </ul>
  255 + </div>
  256 + <div className="form-control-feedback">
  257 + <i className="icon-search4 text-size-base text-muted"></i>
  258 + </div>
  259 + </div>
  260 + </form>
  261 + </div>
  262 + </div>
  263 +
  264 +
  265 + </div>
  266 + </div>
  267 + </div>
  268 +</div>
85 269 );
86 270 };
87 271  
... ...
imports/client/views/org/admin/students/StudentDataView0.js
... ... @@ -0,0 +1,88 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { FormGroup,Panel,Table,
  7 + ButtonToolbar,Modal,
  8 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  9 + import { AddStudentForm } from './addStudentForm';
  10 +
  11 +export class StudentDataView extends Component {
  12 +
  13 + constructor(props) {
  14 + super(props);
  15 + this.state = {
  16 + show: false
  17 + };
  18 + this.showModal = this.showModal.bind(this);
  19 + this.hideModal = this.hideModal.bind(this);
  20 + this.onUpdate = this.onUpdate.bind(this);
  21 + };
  22 +
  23 + showModal() {
  24 + this.setState({show: true});
  25 + }
  26 +
  27 + hideModal() {
  28 + this.setState({show: false});
  29 + }
  30 + onUpdate(key, value) {
  31 + this.setState({[key]: value});
  32 + };
  33 +
  34 + render() {
  35 + return (
  36 + <div className = "enterPane-box">
  37 + <Panel header="Students Info" bsStyle="primary">
  38 + <Table striped bordered condensed hover>
  39 + <thead>
  40 + <tr>
  41 + <th>#</th>
  42 + <th>First Name</th>
  43 + <th>Last Name</th>
  44 + </tr>
  45 + </thead>
  46 + <tbody>
  47 + {
  48 + this.props.data.students.map(function(student, i)
  49 + {
  50 + return(
  51 + <tr>
  52 + <td>{i+1}</td>
  53 + <td>{student.firstName}</td>
  54 + <td>{student.lastName}</td>
  55 + </tr>
  56 + )
  57 + })
  58 + }
  59 +
  60 + </tbody>
  61 + </Table>
  62 + <ButtonToolbar>
  63 + <Button bsStyle="primary" onClick={this.showModal}>
  64 + Add Student
  65 + </Button>
  66 + <Modal
  67 + {...this.props}
  68 + show={this.state.show}
  69 + onHide={this.hideModal}
  70 + dialogClassName="custom-modal"
  71 + >
  72 + <Modal.Header closeButton>
  73 + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title>
  74 + </Modal.Header>
  75 + <Modal.Body>
  76 + <AddStudentForm />
  77 + </Modal.Body>
  78 + <Modal.Footer>
  79 + <Button onClick={this.hideModal}>Close</Button>
  80 + </Modal.Footer>
  81 + </Modal>
  82 + </ButtonToolbar>
  83 + </Panel>
  84 + </div>
  85 + );
  86 + };
  87 +
  88 +};
... ...
imports/client/views/org/admin/students/StudentTable.js
... ... @@ -0,0 +1,107 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { FormGroup,Panel,Table,
  7 + ButtonToolbar,Modal,
  8 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  9 + import { AddStudentForm } from './addStudentForm';
  10 +
  11 +export class StudentTable extends Component {
  12 +
  13 + constructor(props) {
  14 + super(props);
  15 + this.state = {
  16 + show: false
  17 + };
  18 + this.onUpdate = this.onUpdate.bind(this);
  19 + };
  20 + onUpdate(key, value) {
  21 + this.setState({[key]: value});
  22 + };
  23 +
  24 + render() {
  25 + return (
  26 + <div className="panel panel-flat">
  27 + <div className="panel-heading">
  28 + <h5 className="panel-title">Student Details</h5>
  29 + <div className="heading-elements">
  30 + <ul className="icons-list">
  31 + <li><a data-action="collapse"></a></li>
  32 + <li><a data-action="reload"></a></li>
  33 + </ul>
  34 + </div>
  35 + </div>
  36 +
  37 +
  38 + <Table striped bordered condensed hover>
  39 + <thead>
  40 + <tr>
  41 + <th>First Name</th>
  42 + <th>Last Name</th>
  43 + <th>className</th>
  44 + <th>DOB</th>
  45 + <th>Status</th>
  46 + <th className="text-center">Actions</th>
  47 + </tr>
  48 + </thead>
  49 + <tbody>
  50 + {
  51 + this.props.data.students.map(function(student, i)
  52 + {
  53 + return(
  54 + <tr>
  55 + <td>{student.firstName}</td>
  56 + <td>{student.lastName}</td>
  57 + <td>VII</td>
  58 + <td>22 Jun 1972</td>
  59 + <td><span className="label label-success">Active</span></td>
  60 + <td className="text-center">
  61 + <ul className="icons-list">
  62 + <li className="dropdown">
  63 + <a href="#" className="dropdown-toggle" data-toggle="dropdown">
  64 + <i className="icon-menu9"></i>
  65 + </a>
  66 +
  67 + <ul className="dropdown-menu dropdown-menu-right">
  68 + <li><a href="#"><i className="icon-file-pdf"></i> Export to .pdf</a></li>
  69 + <li><a href="#"><i className="icon-file-excel"></i> Export to .csv</a></li>
  70 + <li><a href="#"><i className="icon-file-word"></i> Export to .doc</a></li>
  71 + </ul>
  72 + </li>
  73 + </ul>
  74 + </td>
  75 + </tr>
  76 + )
  77 + })
  78 + }
  79 + <tr>
  80 + <td>Jackelyn</td>
  81 + <td>Weible</td>
  82 + <td><a href="#">XI</a></td>
  83 + <td>3 Oct 1981</td>
  84 + <td><span className="label label-default">Inactive</span></td>
  85 + <td className="text-center">
  86 + <ul className="icons-list">
  87 + <li className="dropdown">
  88 + <a href="#" className="dropdown-toggle" data-toggle="dropdown">
  89 + <i className="icon-menu9"></i>
  90 + </a>
  91 +
  92 + <ul className="dropdown-menu dropdown-menu-right">
  93 + <li><a href="#"><i className="icon-file-pdf"></i> Export to .pdf</a></li>
  94 + <li><a href="#"><i className="icon-file-excel"></i> Export to .csv</a></li>
  95 + <li><a href="#"><i className="icon-file-word"></i> Export to .doc</a></li>
  96 + </ul>
  97 + </li>
  98 + </ul>
  99 + </td>
  100 + </tr>
  101 + </tbody>
  102 + </Table>
  103 + </div>
  104 + );
  105 + };
  106 +
  107 +};
... ...
imports/client/views/org/admin/students/StudentView.js
... ... @@ -0,0 +1,111 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { FormGroup,Panel,Table,
  7 + ButtonToolbar,Modal,
  8 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  9 +import { AddStudentForm } from './addStudentForm';
  10 +import { StudentTable } from './StudentTable';
  11 +import { Header } from './Header';
  12 +import { FabMenuView } from './FabMenu';
  13 +
  14 +export class StudentView extends Component {
  15 +
  16 + constructor(props) {
  17 + super(props);
  18 + this.state = {
  19 + show: false
  20 + };
  21 + this.showModal = this.showModal.bind(this);
  22 + this.hideModal = this.hideModal.bind(this);
  23 + this.onUpdate = this.onUpdate.bind(this);
  24 + };
  25 +
  26 + showModal() {
  27 + this.setState({show: true});
  28 + }
  29 +
  30 + hideModal() {
  31 + this.setState({show: false});
  32 + }
  33 + onUpdate(key, value) {
  34 + this.setState({[key]: value});
  35 + };
  36 +
  37 + render() {
  38 + return (
  39 + <div className="content has-detached-left">
  40 + <div className="container-detached">
  41 + <div className="content-detached">
  42 + <Header/>
  43 + <StudentTable
  44 + data = {this.props.data}
  45 + />
  46 + <FabMenuView/>
  47 +
  48 + </div>
  49 + </div>
  50 + <div className="sidebar-detached affix-top">
  51 + <div className="sidebar sidebar-default">
  52 + <div className="sidebar-content">
  53 +
  54 + <div className="sidebar-category">
  55 + <div className="category-title">
  56 + <span>Advanced Search</span>
  57 + <ul className="icons-list">
  58 + <li><a href="#" data-action="collapse"></a></li>
  59 + </ul>
  60 + </div>
  61 +
  62 + <div className="category-content">
  63 + <form action="#">
  64 + <div className="has-feedback has-feedback-left">
  65 + <input type="search" className="form-control" placeholder="First Name" />
  66 + <div className="form-control-feedback">
  67 + <i className="icon-search4 text-size-base text-muted"></i>
  68 + </div>
  69 + </div>
  70 + </form>
  71 + </div>
  72 + <div className="category-content">
  73 + <form action="#">
  74 + <div className="has-feedback has-feedback-left">
  75 + <input type="search" className="form-control" placeholder="Last Name" />
  76 + <div className="form-control-feedback">
  77 + <i className="icon-search4 text-size-base text-muted"></i>
  78 + </div>
  79 + </div>
  80 + </form>
  81 + </div>
  82 + <div className="category-content">
  83 + <form action="#">
  84 + <div className="has-feedback has-feedback-left">
  85 + <div className="btn-group">
  86 + <button type="button" className="dropdown-toggle form-control" data-toggle="dropdown">
  87 + <span data-bind="label">Select className</span>&nbsp;<span className="caret"></span>
  88 + </button>
  89 + <ul className="dropdown-menu" role="menu">
  90 + <li><a href="#">Item 1</a></li>
  91 + <li><a href="#">Another item</a></li>
  92 + <li><a href="#">This is a longer item that will not fit properly</a></li>
  93 + </ul>
  94 + </div>
  95 + <div className="form-control-feedback">
  96 + <i className="icon-search4 text-size-base text-muted"></i>
  97 + </div>
  98 + </div>
  99 + </form>
  100 + </div>
  101 + </div>
  102 +
  103 +
  104 + </div>
  105 + </div>
  106 + </div>
  107 +</div>
  108 + );
  109 + };
  110 +
  111 +};
... ...
imports/client/views/org/admin/students/index.js
... ... @@ -9,7 +9,7 @@ import { Loading } from &#39;/imports/client/components/Loadi
9 9  
10 10 import { Orgs } from '/imports/collections/orgs/index';
11 11 import { Users } from '/imports/collections/users/index';
12   -import { StudentDataView } from './StudentDataView';
  12 +import { StudentView } from './StudentView';
13 13 import { Students } from '/imports/collections/students/methods'
14 14  
15 15  
... ... @@ -51,4 +51,4 @@ const reduxTick = (props, onData) =&gt; {
51 51 export const StudentDataController = composeAll(
52 52 composeWithTracker(meteorTick, Loading),
53 53 compose(reduxTick, Loading),
54   -)(StudentDataView);
  54 +)(StudentView);
... ...
... ... @@ -67,6 +67,8 @@
67 67 "bootstrap": "^4.0.0-alpha.6",
68 68 "jquery": "^2.2.4",
69 69 "jquery-validation": "^1.15.1",
  70 + "material-fabmenu": "0.0.1",
  71 + "material-ui": "^0.17.1",
70 72 "moment": "^2.18.0",
71 73 "react": "^15.4.2",
72 74 "react-addons-css-transition-group": "^15.4.2",
... ... @@ -80,6 +82,7 @@
80 82 "react-router": "^2.6.1",
81 83 "react-router-bootstrap": "^0.23.1",
82 84 "react-svg": "^2.1.19",
  85 + "react-tap-event-plugin": "^2.0.1",
83 86 "reactstrap": "^4.3.0",
84 87 "velocity-animate": "^1.4.3",
85 88 "velocity-react": "^1.2.1"
... ...
public/assets/images/download.png

32.8 KB

public/assets/images/download1.png

41.3 KB

public/assets/images/download2.png

34.4 KB

public/assets/images/download3.png

37.2 KB

public/css/assets/css/components.css
... ... @@ -144,17 +144,15 @@ a.badge,
144 144 * Styles for sidebar components, main navigation and sidebar itself
145 145 *
146 146 * Version: 1.2
147   - * Latest update: Mar 10, 2016
  147 + * Latest update: Nov 25, 2015
148 148 *
149 149 * ---------------------------------------------------------------------------- */
150 150 .sidebar {
  151 + background-color: #263238;
151 152 color: #fff;
152 153 position: relative;
153 154 width: 100%;
154 155 display: none;
155   -}
156   -.sidebar .sidebar-content {
157   - background-color: #263238;
158 156 -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
159 157 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
160 158 }
... ... @@ -162,8 +160,7 @@ a.badge,
162 160 .sidebar {
163 161 display: table-cell;
164 162 vertical-align: top;
165   - width: 280px;
166   - padding-right: 20px;
  163 + width: 260px;
167 164 }
168 165 }
169 166 .sidebar-main {
... ... @@ -179,31 +176,28 @@ a.badge,
179 176 @media (min-width: 769px) {
180 177 .sidebar-opposite-visible .sidebar-opposite {
181 178 display: table-cell;
182   - padding-right: 0;
183   - padding-left: 20px;
184 179 }
185 180 }
186 181 .sidebar-default {
187   - color: #333333;
188   -}
189   -.sidebar-default .sidebar-content {
190 182 background-color: #fff;
  183 + color: #333333;
191 184 }
192 185 .sidebar-content {
193 186 position: relative;
194   - border-radius: 3px;
195   - margin-bottom: 20px;
  187 + padding-bottom: 8px;
196 188 }
197 189 .sidebar-all-hidden .sidebar-main,
198 190 .sidebar-all-hidden .sidebar-secondary,
199 191 .sidebar-main-hidden .sidebar-main,
  192 +.sidebar-detached-hidden .sidebar-detached > .sidebar,
200 193 .sidebar-secondary-hidden .sidebar-secondary {
201 194 display: none;
202 195 }
203 196 @media (max-width: 768px) {
204 197 .sidebar-mobile-main .sidebar-main,
205 198 .sidebar-mobile-secondary .sidebar-secondary,
206   - .sidebar-mobile-opposite .sidebar-opposite {
  199 + .sidebar-mobile-opposite .sidebar-opposite,
  200 + .sidebar-mobile-detached .sidebar-detached > .sidebar {
207 201 display: block;
208 202 }
209 203 }
... ... @@ -216,19 +210,12 @@ a.badge,
216 210 }
217 211 .category-title > span {
218 212 display: block;
219   -}
220   -.category-title:not(.h5):not(.h6) > span {
221   - padding-top: 2px;
  213 + margin-top: 2px;
222 214 text-transform: uppercase;
223 215 font-weight: 500;
224 216 font-size: 11px;
225 217 line-height: 1.82;
226 218 }
227   -.category-title.h5,
228   -.category-title.h6 {
229   - padding: 20px;
230   - border-bottom: 0;
231   -}
232 219 .category-title > i {
233 220 position: absolute;
234 221 right: 20px;
... ... @@ -241,10 +228,6 @@ a.badge,
241 228 top: 50%;
242 229 margin-top: -8px;
243 230 }
244   -.category-title + .sidebar-user {
245   - padding-top: 5px;
246   - padding-bottom: 5px;
247   -}
248 231 .sidebar-default .category-title {
249 232 border-bottom-color: #ddd;
250 233 }
... ... @@ -272,7 +255,7 @@ a.badge,
272 255 .sidebar-user-material .navigation {
273 256 padding: 8px 0;
274 257 }
275   -.sidebar-user-material:first-child .category-content {
  258 +.sidebar-detached .sidebar-user-material:first-child .category-content {
276 259 border-top-right-radius: 3px;
277 260 border-top-left-radius: 3px;
278 261 }
... ... @@ -352,8 +335,7 @@ a.badge,
352 335 list-style: none;
353 336 position: relative;
354 337 }
355   -.sidebar-category > .h5 + .category-content > .navigation,
356   -.sidebar-category > .h6 + .category-content > .navigation {
  338 +.sidebar-user + .sidebar-category .navigation {
357 339 padding-top: 0;
358 340 }
359 341 .navigation .hidden-ul {
... ... @@ -448,7 +430,7 @@ a.badge,
448 430 .navigation > li.active > a,
449 431 .navigation > li.active > a:hover,
450 432 .navigation > li.active > a:focus {
451   - background-color: #26A69A;
  433 + background-color: #304047;
452 434 color: #fff;
453 435 }
454 436 .navigation > li.active > a > [class*=text-] {
... ... @@ -658,85 +640,162 @@ a.badge,
658 640 min-height: 32px;
659 641 }
660 642 @media (min-width: 769px) {
661   - .sidebar-fixed.affix {
  643 + .sidebar-fixed .sidebar-content {
  644 + position: fixed;
  645 + width: 260px;
  646 + max-height: 100%;
  647 + overflow: auto;
  648 + top: 50px;
  649 + bottom: 50px;
  650 + margin-bottom: -50px;
  651 + }
  652 + .sidebar-xs .sidebar-fixed.sidebar-main .sidebar-content {
  653 + width: 56px;
  654 + }
  655 + .sidebar-fixed.sidebar-default .sidebar-content {
  656 + width: 260px;
  657 + }
  658 + .sidebar-fixed-expanded .sidebar-fixed.sidebar-main {
  659 + position: fixed;
  660 + display: block;
  661 + height: 100%;
  662 + z-index: 1001;
  663 + }
  664 + .sidebar-fixed-expanded .sidebar-fixed.sidebar-main .sidebar-content {
662 665 position: fixed;
  666 + }
  667 + .sidebar-xs .sidebar-fixed-expanded .sidebar-fixed.sidebar-main {
663 668 width: 260px;
  669 + }
  670 + .sidebar-fixed-expanded .content-wrapper {
  671 + padding-left: 56px;
  672 + }
  673 +}
  674 +.sidebar-xs-indicator .sidebar-fixed .sidebar-content {
  675 + top: 0!important;
  676 +}
  677 +@media (min-width: 769px) {
  678 + .has-detached-left .container-detached {
  679 + float: right;
  680 + margin-left: -260px;
  681 + width: 100%;
  682 + }
  683 + .has-detached-left .content-detached {
  684 + margin-left: 280px;
  685 + }
  686 + .has-detached-left .sidebar-detached {
  687 + float: left;
  688 + }
  689 + .has-detached-right .container-detached {
  690 + float: left;
  691 + margin-right: -260px;
  692 + width: 100%;
  693 + }
  694 + .has-detached-right .content-detached {
  695 + margin-right: 280px;
  696 + }
  697 + .has-detached-right .sidebar-detached {
  698 + float: right;
  699 + }
  700 + .has-detached-right .sidebar-detached.affix {
  701 + right: 20px;
  702 + }
  703 + .sidebar-detached-hidden .container-detached {
  704 + float: none;
  705 + margin: 0;
  706 + }
  707 + .sidebar-detached-hidden .content-detached {
  708 + margin: 0;
  709 + }
  710 + .sidebar-detached-hidden .sidebar-detached {
  711 + float: none;
  712 + }
  713 +}
  714 +.sidebar-detached .navigation.nav > .active > .hidden-ul {
  715 + display: block;
  716 +}
  717 +@media (max-width: 768px) {
  718 + .sidebar-detached .navigation.nav > li > .hidden-ul {
  719 + display: block;
  720 + }
  721 +}
  722 +.sidebar-detached.affix {
  723 + position: static;
  724 +}
  725 +@media (min-width: 769px) {
  726 + .sidebar-detached {
  727 + display: block;
  728 + position: relative;
  729 + margin-bottom: 0;
  730 + }
  731 + .sidebar-detached > .sidebar {
  732 + margin-bottom: 0;
  733 + display: block;
  734 + border-radius: 3px;
  735 + }
  736 + .sidebar-detached.affix {
  737 + position: fixed;
664 738 top: 20px;
665 739 bottom: 20px;
666 740 -webkit-transition: bottom ease-in-out 0.15s;
667 741 -o-transition: bottom ease-in-out 0.15s;
668 742 transition: bottom ease-in-out 0.15s;
669 743 }
670   - .sidebar-fixed.affix .sidebar-content {
  744 + .sidebar-detached.affix > .sidebar {
671 745 max-height: 100%;
672 746 overflow-y: auto;
673 747 }
674   - .sidebar-fixed.affix.fixed-sidebar-space {
675   - bottom: 60px;
  748 + .sidebar-detached.fixed-sidebar-space {
  749 + bottom: 80px;
676 750 }
677   - .navbar-bottom .sidebar-fixed.affix.fixed-sidebar-space {
  751 + .navbar-bottom .sidebar-detached.fixed-sidebar-space {
678 752 bottom: 90px;
679 753 }
680   - .navbar-bottom-lg .sidebar-fixed.affix.fixed-sidebar-space {
  754 + .navbar-bottom-lg .sidebar-detached.fixed-sidebar-space {
681 755 bottom: 94px;
682 756 }
683   - .navbar-bottom-sm .sidebar-fixed.affix.fixed-sidebar-space {
  757 + .navbar-bottom-sm .sidebar-detached.fixed-sidebar-space {
684 758 bottom: 88px;
685 759 }
686   - .navbar-bottom-xs .sidebar-fixed.affix.fixed-sidebar-space {
  760 + .navbar-bottom-xs .sidebar-detached.fixed-sidebar-space {
687 761 bottom: 86px;
688 762 }
689   - .navbar-fixed .sidebar-fixed.affix {
  763 + .navbar-fixed .sidebar-detached {
690 764 top: 90px;
691 765 }
692   - .navbar-fixed-lg .sidebar-fixed.affix {
  766 + .navbar-fixed-lg .sidebar-detached {
693 767 top: 94px;
694 768 }
695   - .navbar-fixed-sm .sidebar-fixed.affix {
  769 + .navbar-fixed-sm .sidebar-detached {
696 770 top: 88px;
697 771 }
698   - .navbar-fixed-xs .sidebar-fixed.affix {
  772 + .navbar-fixed-xs .sidebar-detached {
699 773 top: 86px;
700 774 }
701   - .sidebar-xs .sidebar-fixed.affix {
702   - width: 56px;
703   - }
704   -}
705   -.sidebar-fixed-expanded .sidebar-main {
706   - position: absolute;
707   - display: block;
708   - z-index: 1001;
709   -}
710   -.sidebar-xs .sidebar-fixed-expanded .sidebar-main {
711   - width: 280px;
712   -}
713   -.sidebar-fixed-expanded .content-wrapper {
714   - padding-left: 76px;
715 775 }
716 776 @media (min-width: 769px) {
717   - .sidebar-separate .sidebar-content {
  777 + .sidebar-separate {
718 778 background-color: transparent;
719 779 }
720 780 .sidebar-separate .sidebar-category {
721 781 background-color: #263238;
722 782 border-radius: 3px;
723 783 margin-bottom: 20px;
724   - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
725   - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
726 784 }
727   - .sidebar-separate.sidebar-default .sidebar-content {
  785 + .sidebar-separate.sidebar-default {
728 786 background-color: transparent;
729   - border: 0;
730 787 -webkit-box-shadow: none;
731 788 box-shadow: none;
732 789 }
733 790 .sidebar-separate.sidebar-default .sidebar-category {
734 791 background-color: #fff;
  792 + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
  793 + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
735 794 }
736 795 }
737 796 @media (min-width: 769px) {
738 797 .sidebar-xs .sidebar-main {
739   - width: 76px;
  798 + width: 56px;
740 799 }
741 800 .sidebar-xs .sidebar-main .sidebar-category {
742 801 display: none;
... ... @@ -789,7 +848,7 @@ a.badge,
789 848 position: absolute;
790 849 top: 0;
791 850 right: -260px;
792   - background-color: #26A69A;
  851 + background-color: #304047;
793 852 padding: 12px 20px;
794 853 width: 260px;
795 854 text-align: left;
... ... @@ -874,7 +933,7 @@ a.badge,
874 933 .sidebar-xs .sidebar-main .navigation > .navigation-header > span {
875 934 display: none;
876 935 }
877   - .sidebar-xs .sidebar-main .sidebar-user {
  936 + .sidebar-xs .sidebar-main .sidebar-user .category-content {
878 937 padding-left: 0;
879 938 padding-right: 0;
880 939 }
... ... @@ -951,12 +1010,10 @@ a.badge,
951 1010 }
952 1011 .sidebar .panel-group .panel {
953 1012 border-radius: 0;
954   - border-bottom: 1px solid #ddd;
955   - -webkit-box-shadow: none;
956   - box-shadow: none;
  1013 + border-width: 0 0 1px 0;
957 1014 }
958 1015 .sidebar .panel-group .panel:first-child {
959   - border-top: 1px solid #ddd;
  1016 + border-top-width: 1px;
960 1017 }
961 1018 .sidebar .panel-group .panel + .panel {
962 1019 margin-top: 0;
... ... @@ -1047,22 +1104,6 @@ a.badge,
1047 1104 background-color: rgba(0, 0, 0, 0.2);
1048 1105 }
1049 1106 }
1050   -@media (max-width: 768px) {
1051   - .sidebar .nav-tabs {
1052   - border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1053   - border-bottom-right-radius: 0;
1054   - border-bottom-left-radius: 0;
1055   - -webkit-box-shadow: none;
1056   - box-shadow: none;
1057   - }
1058   -}
1059   -.sidebar .tab-pane > .category-title:first-child {
1060   - padding-top: 0;
1061   -}
1062   -.sidebar .tab-pane > .category-title:first-child .icons-list {
1063   - top: 0;
1064   - margin-top: 4px;
1065   -}
1066 1107 @media (min-width: 769px) {
1067 1108 .sidebar-default .nav-tabs > li > a {
1068 1109 background-color: #fafafa;
... ... @@ -1074,12 +1115,6 @@ a.badge,
1074 1115 color: #333333;
1075 1116 border-bottom-color: #ddd;
1076 1117 }
1077   - .sidebar-default .nav-tabs > li:first-child > a {
1078   - border-top-left-radius: 3px;
1079   - }
1080   - .sidebar-default .nav-tabs > li:last-child > a {
1081   - border-top-right-radius: 3px;
1082   - }
1083 1118 .sidebar-default .nav-tabs > .active > a,
1084 1119 .sidebar-default .nav-tabs > .active > a:hover,
1085 1120 .sidebar-default .nav-tabs > .active > a:focus {
... ... @@ -1094,11 +1129,6 @@ a.badge,
1094 1129 background-color: #fafafa;
1095 1130 }
1096 1131 }
1097   -@media (max-width: 768px) {
1098   - .sidebar-default .nav-tabs {
1099   - border-bottom-color: #ddd;
1100   - }
1101   -}
1102 1132 @media (min-width: 769px) {
1103 1133 .sidebar-default .nav-justified > li:first-child .dropdown-menu:not(.dropdown-menu-right) {
1104 1134 left: -1px;
... ... @@ -1119,17 +1149,6 @@ a.badge,
1119 1149 * ---------------------------------------------------------------------------- */
1120 1150 .page-container {
1121 1151 position: relative;
1122   - padding: 20px 20px;
1123   - padding-bottom: 60px;
1124   -}
1125   -.navbar-bottom .page-container,
1126   -.navbar-bottom-lg .page-container,
1127   -.navbar-bottom-sm .page-container,
1128   -.navbar-bottom-xs .page-container {
1129   - padding-bottom: 20px;
1130   -}
1131   -.page-header + .page-container {
1132   - padding-top: 0;
1133 1152 }
1134 1153 @media (min-width: 769px) {
1135 1154 .page-container {
... ... @@ -1157,6 +1176,20 @@ a.badge,
1157 1176 vertical-align: top;
1158 1177 }
1159 1178 }
  1179 +.content {
  1180 + padding: 0 20px 60px 20px;
  1181 +}
  1182 +.content:after {
  1183 + content: '';
  1184 + display: table;
  1185 + clear: both;
  1186 +}
  1187 +.content:first-child {
  1188 + padding-top: 20px;
  1189 +}
  1190 +body[class*=navbar-bottom] .content {
  1191 + padding-bottom: 20px;
  1192 +}
1160 1193 /* ------------------------------------------------------------------------------
1161 1194 *
1162 1195 * # Boxed layout
... ... @@ -1167,66 +1200,42 @@ a.badge,
1167 1200 * Latest update: May 25, 2015
1168 1201 *
1169 1202 * ---------------------------------------------------------------------------- */
1170   -.layout-boxed .navbar .navbar-boxed,
1171   -.layout-boxed .page-header-content,
1172   -.layout-boxed .page-header .breadcrumb-boxed,
1173   -.layout-boxed .page-container,
1174   -.layout-boxed .footer-boxed {
  1203 +.layout-boxed {
  1204 + background: url(../images/backgrounds/boxed_bg.png) repeat;
  1205 +}
  1206 +.layout-boxed > .navbar {
1175 1207 margin-left: auto;
1176 1208 margin-right: auto;
1177 1209 }
1178   -@media (min-width: 769px) {
1179   - .layout-boxed .navbar:not(.navbar-component) {
1180   - padding-left: 0;
1181   - padding-right: 0;
1182   - }
1183   - .layout-boxed .navbar:not(.navbar-component) .navbar-boxed {
1184   - position: relative;
1185   - padding-left: 20px;
1186   - padding-right: 20px;
1187   - }
1188   - .layout-boxed .navbar:not(.navbar-component) .navbar-boxed .navbar-header {
1189   - margin-left: 0;
1190   - }
1191   - .layout-boxed .navbar:not(.navbar-component) .navbar-boxed .navbar-brand {
1192   - padding-left: 0;
1193   - }
1194   - .layout-boxed .navbar:not(.navbar-component) .navbar-boxed .mega-menu-wide .dropdown-content {
1195   - left: 20px;
1196   - right: 20px;
1197   - }
1198   -}
1199   -.layout-boxed .page-header .breadcrumb-boxed {
1200   - padding-left: 20px;
1201   - padding-right: 20px;
  1210 +.layout-boxed .page-container {
  1211 + background-color: #eeeded;
  1212 + margin-left: auto;
  1213 + margin-right: auto;
  1214 + min-width: 0;
1202 1215 }
1203 1216 @media (min-width: 769px) {
1204 1217 .layout-boxed .page-container,
1205   - .layout-boxed .navbar .navbar-boxed,
1206   - .layout-boxed .page-header .breadcrumb-boxed,
1207   - .layout-boxed .page-header-content,
1208   - .layout-boxed .footer-boxed {
  1218 + .layout-boxed > .navbar {
1209 1219 width: 769px;
1210 1220 }
1211 1221 }
1212 1222 @media (min-width: 1025px) {
1213 1223 .layout-boxed .page-container,
1214   - .layout-boxed .navbar .navbar-boxed,
1215   - .layout-boxed .page-header .breadcrumb-boxed,
1216   - .layout-boxed .page-header-content,
1217   - .layout-boxed .footer-boxed {
  1224 + .layout-boxed > .navbar {
1218 1225 width: 1025px;
1219 1226 }
1220 1227 }
1221 1228 @media (min-width: 1200px) {
1222 1229 .layout-boxed .page-container,
1223   - .layout-boxed .navbar .navbar-boxed,
1224   - .layout-boxed .page-header .breadcrumb-boxed,
1225   - .layout-boxed .page-header-content,
1226   - .layout-boxed .footer-boxed {
  1230 + .layout-boxed > .navbar {
1227 1231 width: 1200px;
1228 1232 }
1229 1233 }
  1234 +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  1235 + .layout-boxed {
  1236 + background: url(../images/backgrounds/boxed_bg_retina.png) repeat;
  1237 + }
  1238 +}
1230 1239 /* ------------------------------------------------------------------------------
1231 1240 *
1232 1241 * # Footer
... ... @@ -1239,8 +1248,6 @@ a.badge,
1239 1248 * ---------------------------------------------------------------------------- */
1240 1249 .footer {
1241 1250 position: absolute;
1242   - left: 20px;
1243   - right: 20px;
1244 1251 bottom: 30px;
1245 1252 }
1246 1253 .footer:not(.navbar-fixed-bottom) {
... ... @@ -11841,7 +11848,12 @@ img ~ .legitRipple-ripple {
11841 11848 }
11842 11849 .fab-menu-top-left,
11843 11850 .fab-menu-top-right {
  11851 + margin-top: -26px;
  11852 +}
  11853 +.fab-menu-top-left.affix,
  11854 +.fab-menu-top-right.affix {
11844 11855 top: 20px;
  11856 + margin-top: 0;
11845 11857 }
11846 11858 .content-wrapper > .fab-menu-top-left,
11847 11859 .content-wrapper > .fab-menu-top-right {
... ... @@ -14496,7 +14508,7 @@ a.plupload_disabled:focus {
14496 14508 *
14497 14509 * # Dropzone file uploader
14498 14510 *
14499   - * Open source library that provides drag’n’drop file uploads with image previews
  14511 + * Open source library that provides drag’n’drop file uploads with image previews
14500 14512 *
14501 14513 * Version: 1.2
14502 14514 * Latest update: Mar 10, 2016
... ... @@ -17741,7 +17753,7 @@ thead .htCollapseButton:after {
17741 17753 *
17742 17754 * # Responsive extension
17743 17755 *
17744   -* Optimise the table's layout for different screen sizes through the dynamic
  17756 +* Optimise the table's layout for different screen sizes through the dynamic
17745 17757 * insertion and removal of columns from the table
17746 17758 *
17747 17759 * Version: 1.0
... ... @@ -18418,7 +18430,7 @@ thead .htCollapseButton:after {
18418 18430 margin-top: 0;
18419 18431 }
18420 18432 .task-details > li:before {
18421   - content: '';
  18433 + content: '•';
18422 18434 position: absolute;
18423 18435 right: 8px;
18424 18436 color: #999;
... ... @@ -18769,7 +18781,7 @@ thead .htCollapseButton:after {
18769 18781 font-size: 12px;
18770 18782 }
18771 18783 .timeline-time span:before {
18772   - content: '';
  18784 + content: '•';
18773 18785 display: inline-block;
18774 18786 margin-right: 5px;
18775 18787 position: relative;
... ...