.
9 |
10 | .list-group {
11 | // No need to set list-style: none; since .list-group-item is block level
12 | margin-bottom: 20px;
13 | padding-left: 0; // reset padding because ul and ol
14 | }
15 |
16 |
17 | // Individual list items
18 | //
19 | // Use on `li`s or `div`s within the `.list-group` parent.
20 |
21 | .list-group-item {
22 | position: relative;
23 | display: block;
24 | padding: 10px 15px;
25 | // Place the border on the list items and negative margin up for better styling
26 | margin-bottom: -1px;
27 | background-color: @list-group-bg;
28 | border: 1px solid @list-group-border;
29 |
30 | // Round the first and last items
31 | &:first-child {
32 | .border-top-radius(@list-group-border-radius);
33 | }
34 | &:last-child {
35 | margin-bottom: 0;
36 | .border-bottom-radius(@list-group-border-radius);
37 | }
38 |
39 | // Align badges within list items
40 | > .badge {
41 | float: right;
42 | }
43 | > .badge + .badge {
44 | margin-right: 5px;
45 | }
46 | }
47 |
48 |
49 | // Linked list items
50 | //
51 | // Use anchor elements instead of `li`s or `div`s to create linked list items.
52 | // Includes an extra `.active` modifier class for showing selected items.
53 |
54 | a.list-group-item {
55 | color: @list-group-link-color;
56 |
57 | .list-group-item-heading {
58 | color: @list-group-link-heading-color;
59 | }
60 |
61 | // Hover state
62 | &:hover,
63 | &:focus {
64 | text-decoration: none;
65 | background-color: @list-group-hover-bg;
66 | }
67 |
68 | // Active class on item itself, not parent
69 | &.active,
70 | &.active:hover,
71 | &.active:focus {
72 | z-index: 2; // Place active items above their siblings for proper border styling
73 | color: @list-group-active-color;
74 | background-color: @list-group-active-bg;
75 | border-color: @list-group-active-border;
76 |
77 | // Force color to inherit for custom content
78 | .list-group-item-heading {
79 | color: inherit;
80 | }
81 | .list-group-item-text {
82 | color: @list-group-active-text-color;
83 | }
84 | }
85 | }
86 |
87 |
88 | // Contextual variants
89 | //
90 | // Add modifier classes to change text and background color on individual items.
91 | // Organizationally, this must come after the `:hover` states.
92 |
93 | .list-group-item-variant(success; @state-success-bg; @state-success-text);
94 | .list-group-item-variant(info; @state-info-bg; @state-info-text);
95 | .list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
96 | .list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
97 |
98 |
99 | // Custom content options
100 | //
101 | // Extra classes for creating well-formatted content within `.list-group-item`s.
102 |
103 | .list-group-item-heading {
104 | margin-top: 0;
105 | margin-bottom: 5px;
106 | }
107 | .list-group-item-text {
108 | margin-bottom: 0;
109 | line-height: 1.3;
110 | }
111 |
--------------------------------------------------------------------------------
/less/twbs/media.less:
--------------------------------------------------------------------------------
1 | // Media objects
2 | // Source: http://stubbornella.org/content/?p=497
3 | // --------------------------------------------------
4 |
5 |
6 | // Common styles
7 | // -------------------------
8 |
9 | // Clear the floats
10 | .media,
11 | .media-body {
12 | overflow: hidden;
13 | zoom: 1;
14 | }
15 |
16 | // Proper spacing between instances of .media
17 | .media,
18 | .media .media {
19 | margin-top: 15px;
20 | }
21 | .media:first-child {
22 | margin-top: 0;
23 | }
24 |
25 | // For images and videos, set to block
26 | .media-object {
27 | display: block;
28 | }
29 |
30 | // Reset margins on headings for tighter default spacing
31 | .media-heading {
32 | margin: 0 0 5px;
33 | }
34 |
35 |
36 | // Media image alignment
37 | // -------------------------
38 |
39 | .media {
40 | > .pull-left {
41 | margin-right: 10px;
42 | }
43 | > .pull-right {
44 | margin-left: 10px;
45 | }
46 | }
47 |
48 |
49 | // Media list variation
50 | // -------------------------
51 |
52 | // Undo default ul/ol styles
53 | .media-list {
54 | padding-left: 0;
55 | list-style: none;
56 | }
57 |
--------------------------------------------------------------------------------
/less/twbs/modals.less:
--------------------------------------------------------------------------------
1 | //
2 | // Modals
3 | // --------------------------------------------------
4 |
5 | // .modal-open - body class for killing the scroll
6 | // .modal - container to scroll within
7 | // .modal-dialog - positioning shell for the actual modal
8 | // .modal-content - actual modal w/ bg and corners and shit
9 |
10 | // Kill the scroll on the body
11 | .modal-open {
12 | overflow: hidden;
13 | }
14 |
15 | // Container that the modal scrolls within
16 | .modal {
17 | display: none;
18 | overflow: auto;
19 | overflow-y: scroll;
20 | position: fixed;
21 | top: 0;
22 | right: 0;
23 | bottom: 0;
24 | left: 0;
25 | z-index: @zindex-modal;
26 | -webkit-overflow-scrolling: touch;
27 |
28 | // Prevent Chrome on Windows from adding a focus outline. For details, see
29 | // https://github.com/twbs/bootstrap/pull/10951.
30 | outline: 0;
31 |
32 | // When fading in the modal, animate it to slide down
33 | &.fade .modal-dialog {
34 | .translate(0, -25%);
35 | .transition-transform(~"0.3s ease-out");
36 | }
37 | &.in .modal-dialog { .translate(0, 0)}
38 | }
39 |
40 | // Shell div to position the modal with bottom padding
41 | .modal-dialog {
42 | position: relative;
43 | width: auto;
44 | margin: 10px;
45 | }
46 |
47 | // Actual modal
48 | .modal-content {
49 | position: relative;
50 | background-color: @modal-content-bg;
51 | border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
52 | border: 1px solid @modal-content-border-color;
53 | border-radius: @border-radius-large;
54 | .box-shadow(0 3px 9px rgba(0,0,0,.5));
55 | background-clip: padding-box;
56 | // Remove focus outline from opened modal
57 | outline: none;
58 | }
59 |
60 | // Modal background
61 | .modal-backdrop {
62 | position: fixed;
63 | top: 0;
64 | right: 0;
65 | bottom: 0;
66 | left: 0;
67 | z-index: @zindex-modal-background;
68 | background-color: @modal-backdrop-bg;
69 | // Fade for backdrop
70 | &.fade { .opacity(0); }
71 | &.in { .opacity(@modal-backdrop-opacity); }
72 | }
73 |
74 | // Modal header
75 | // Top section of the modal w/ title and dismiss
76 | .modal-header {
77 | padding: @modal-title-padding;
78 | border-bottom: 1px solid @modal-header-border-color;
79 | min-height: (@modal-title-padding + @modal-title-line-height);
80 | }
81 | // Close icon
82 | .modal-header .close {
83 | margin-top: -2px;
84 | }
85 |
86 | // Title text within header
87 | .modal-title {
88 | margin: 0;
89 | line-height: @modal-title-line-height;
90 | }
91 |
92 | // Modal body
93 | // Where all modal content resides (sibling of .modal-header and .modal-footer)
94 | .modal-body {
95 | position: relative;
96 | padding: @modal-inner-padding;
97 | }
98 |
99 | // Footer (for actions)
100 | .modal-footer {
101 | margin-top: 15px;
102 | padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;
103 | text-align: right; // right align buttons
104 | border-top: 1px solid @modal-footer-border-color;
105 | &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons
106 |
107 | // Properly space out buttons
108 | .btn + .btn {
109 | margin-left: 5px;
110 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
111 | }
112 | // but override that for button groups
113 | .btn-group .btn + .btn {
114 | margin-left: -1px;
115 | }
116 | // and override it for block buttons as well
117 | .btn-block + .btn-block {
118 | margin-left: 0;
119 | }
120 | }
121 |
122 | // Scale up the modal
123 | @media (min-width: @screen-sm-min) {
124 | // Automatically set modal's width for larger viewports
125 | .modal-dialog {
126 | width: @modal-md;
127 | margin: 30px auto;
128 | }
129 | .modal-content {
130 | .box-shadow(0 5px 15px rgba(0,0,0,.5));
131 | }
132 |
133 | // Modal sizes
134 | .modal-sm { width: @modal-sm; }
135 | }
136 |
137 | @media (min-width: @screen-md-min) {
138 | .modal-lg { width: @modal-lg; }
139 | }
140 |
--------------------------------------------------------------------------------
/less/twbs/pager.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pager pagination
3 | // --------------------------------------------------
4 |
5 |
6 | .pager {
7 | padding-left: 0;
8 | margin: @line-height-computed 0;
9 | list-style: none;
10 | text-align: center;
11 | &:extend(.clearfix all);
12 | li {
13 | display: inline;
14 | > a,
15 | > span {
16 | display: inline-block;
17 | padding: 5px 14px;
18 | background-color: @pager-bg;
19 | border: 1px solid @pager-border;
20 | border-radius: @pager-border-radius;
21 | }
22 |
23 | > a:hover,
24 | > a:focus {
25 | text-decoration: none;
26 | background-color: @pager-hover-bg;
27 | }
28 | }
29 |
30 | .next {
31 | > a,
32 | > span {
33 | float: right;
34 | }
35 | }
36 |
37 | .previous {
38 | > a,
39 | > span {
40 | float: left;
41 | }
42 | }
43 |
44 | .disabled {
45 | > a,
46 | > a:hover,
47 | > a:focus,
48 | > span {
49 | color: @pager-disabled-color;
50 | background-color: @pager-bg;
51 | cursor: not-allowed;
52 | }
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/less/twbs/pagination.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pagination (multiple pages)
3 | // --------------------------------------------------
4 | .pagination {
5 | display: inline-block;
6 | padding-left: 0;
7 | margin: @line-height-computed 0;
8 | border-radius: @border-radius-base;
9 |
10 | > li {
11 | display: inline; // Remove list-style and block-level defaults
12 | > a,
13 | > span {
14 | position: relative;
15 | float: left; // Collapse white-space
16 | padding: @padding-base-vertical @padding-base-horizontal;
17 | line-height: @line-height-base;
18 | text-decoration: none;
19 | color: @pagination-color;
20 | background-color: @pagination-bg;
21 | border: 1px solid @pagination-border;
22 | margin-left: -1px;
23 | }
24 | &:first-child {
25 | > a,
26 | > span {
27 | margin-left: 0;
28 | .border-left-radius(@border-radius-base);
29 | }
30 | }
31 | &:last-child {
32 | > a,
33 | > span {
34 | .border-right-radius(@border-radius-base);
35 | }
36 | }
37 | }
38 |
39 | > li > a,
40 | > li > span {
41 | &:hover,
42 | &:focus {
43 | color: @pagination-hover-color;
44 | background-color: @pagination-hover-bg;
45 | border-color: @pagination-hover-border;
46 | }
47 | }
48 |
49 | > .active > a,
50 | > .active > span {
51 | &,
52 | &:hover,
53 | &:focus {
54 | z-index: 2;
55 | color: @pagination-active-color;
56 | background-color: @pagination-active-bg;
57 | border-color: @pagination-active-border;
58 | cursor: default;
59 | }
60 | }
61 |
62 | > .disabled {
63 | > span,
64 | > span:hover,
65 | > span:focus,
66 | > a,
67 | > a:hover,
68 | > a:focus {
69 | color: @pagination-disabled-color;
70 | background-color: @pagination-disabled-bg;
71 | border-color: @pagination-disabled-border;
72 | cursor: not-allowed;
73 | }
74 | }
75 | }
76 |
77 | // Sizing
78 | // --------------------------------------------------
79 |
80 | // Large
81 | .pagination-lg {
82 | .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);
83 | }
84 |
85 | // Small
86 | .pagination-sm {
87 | .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);
88 | }
89 |
--------------------------------------------------------------------------------
/less/twbs/popovers.less:
--------------------------------------------------------------------------------
1 | //
2 | // Popovers
3 | // --------------------------------------------------
4 |
5 |
6 | .popover {
7 | position: absolute;
8 | top: 0;
9 | left: 0;
10 | z-index: @zindex-popover;
11 | display: none;
12 | max-width: @popover-max-width;
13 | padding: 1px;
14 | text-align: left; // Reset given new insertion method
15 | background-color: @popover-bg;
16 | background-clip: padding-box;
17 | border: 1px solid @popover-fallback-border-color;
18 | border: 1px solid @popover-border-color;
19 | border-radius: @border-radius-large;
20 | .box-shadow(0 5px 10px rgba(0,0,0,.2));
21 |
22 | // Overrides for proper insertion
23 | white-space: normal;
24 |
25 | // Offset the popover to account for the popover arrow
26 | &.top { margin-top: -@popover-arrow-width; }
27 | &.right { margin-left: @popover-arrow-width; }
28 | &.bottom { margin-top: @popover-arrow-width; }
29 | &.left { margin-left: -@popover-arrow-width; }
30 | }
31 |
32 | .popover-title {
33 | margin: 0; // reset heading margin
34 | padding: 8px 14px;
35 | font-size: @font-size-base;
36 | font-weight: normal;
37 | line-height: 18px;
38 | background-color: @popover-title-bg;
39 | border-bottom: 1px solid darken(@popover-title-bg, 5%);
40 | border-radius: 5px 5px 0 0;
41 | }
42 |
43 | .popover-content {
44 | padding: 9px 14px;
45 | }
46 |
47 | // Arrows
48 | //
49 | // .arrow is outer, .arrow:after is inner
50 |
51 | .popover > .arrow {
52 | &,
53 | &:after {
54 | position: absolute;
55 | display: block;
56 | width: 0;
57 | height: 0;
58 | border-color: transparent;
59 | border-style: solid;
60 | }
61 | }
62 | .popover > .arrow {
63 | border-width: @popover-arrow-outer-width;
64 | }
65 | .popover > .arrow:after {
66 | border-width: @popover-arrow-width;
67 | content: "";
68 | }
69 |
70 | .popover {
71 | &.top > .arrow {
72 | left: 50%;
73 | margin-left: -@popover-arrow-outer-width;
74 | border-bottom-width: 0;
75 | border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback
76 | border-top-color: @popover-arrow-outer-color;
77 | bottom: -@popover-arrow-outer-width;
78 | &:after {
79 | content: " ";
80 | bottom: 1px;
81 | margin-left: -@popover-arrow-width;
82 | border-bottom-width: 0;
83 | border-top-color: @popover-arrow-color;
84 | }
85 | }
86 | &.right > .arrow {
87 | top: 50%;
88 | left: -@popover-arrow-outer-width;
89 | margin-top: -@popover-arrow-outer-width;
90 | border-left-width: 0;
91 | border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
92 | border-right-color: @popover-arrow-outer-color;
93 | &:after {
94 | content: " ";
95 | left: 1px;
96 | bottom: -@popover-arrow-width;
97 | border-left-width: 0;
98 | border-right-color: @popover-arrow-color;
99 | }
100 | }
101 | &.bottom > .arrow {
102 | left: 50%;
103 | margin-left: -@popover-arrow-outer-width;
104 | border-top-width: 0;
105 | border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback
106 | border-bottom-color: @popover-arrow-outer-color;
107 | top: -@popover-arrow-outer-width;
108 | &:after {
109 | content: " ";
110 | top: 1px;
111 | margin-left: -@popover-arrow-width;
112 | border-top-width: 0;
113 | border-bottom-color: @popover-arrow-color;
114 | }
115 | }
116 |
117 | &.left > .arrow {
118 | top: 50%;
119 | right: -@popover-arrow-outer-width;
120 | margin-top: -@popover-arrow-outer-width;
121 | border-right-width: 0;
122 | border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
123 | border-left-color: @popover-arrow-outer-color;
124 | &:after {
125 | content: " ";
126 | right: 1px;
127 | border-right-width: 0;
128 | border-left-color: @popover-arrow-color;
129 | bottom: -@popover-arrow-width;
130 | }
131 | }
132 |
133 | }
134 |
--------------------------------------------------------------------------------
/less/twbs/print.less:
--------------------------------------------------------------------------------
1 | //
2 | // Basic print styles
3 | // --------------------------------------------------
4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
5 |
6 | @media print {
7 |
8 | * {
9 | text-shadow: none !important;
10 | color: #000 !important; // Black prints faster: h5bp.com/s
11 | background: transparent !important;
12 | box-shadow: none !important;
13 | }
14 |
15 | a,
16 | a:visited {
17 | text-decoration: underline;
18 | }
19 |
20 | a[href]:after {
21 | content: " (" attr(href) ")";
22 | }
23 |
24 | abbr[title]:after {
25 | content: " (" attr(title) ")";
26 | }
27 |
28 | // Don't show links for images, or javascript/internal links
29 | a[href^="javascript:"]:after,
30 | a[href^="#"]:after {
31 | content: "";
32 | }
33 |
34 | pre,
35 | blockquote {
36 | border: 1px solid #999;
37 | page-break-inside: avoid;
38 | }
39 |
40 | thead {
41 | display: table-header-group; // h5bp.com/t
42 | }
43 |
44 | tr,
45 | img {
46 | page-break-inside: avoid;
47 | }
48 |
49 | img {
50 | max-width: 100% !important;
51 | }
52 |
53 | p,
54 | h2,
55 | h3 {
56 | orphans: 3;
57 | widows: 3;
58 | }
59 |
60 | h2,
61 | h3 {
62 | page-break-after: avoid;
63 | }
64 |
65 | // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
66 | // Once fixed, we can just straight up remove this.
67 | select {
68 | background: #fff !important;
69 | }
70 |
71 | // Bootstrap components
72 | .navbar {
73 | display: none;
74 | }
75 | .table {
76 | td,
77 | th {
78 | background-color: #fff !important;
79 | }
80 | }
81 | .btn,
82 | .dropup > .btn {
83 | > .caret {
84 | border-top-color: #000 !important;
85 | }
86 | }
87 | .label {
88 | border: 1px solid #000;
89 | }
90 |
91 | .table {
92 | border-collapse: collapse !important;
93 | }
94 | .table-bordered {
95 | th,
96 | td {
97 | border: 1px solid #ddd !important;
98 | }
99 | }
100 |
101 | }
102 |
--------------------------------------------------------------------------------
/less/twbs/progress-bars.less:
--------------------------------------------------------------------------------
1 | //
2 | // Progress bars
3 | // --------------------------------------------------
4 |
5 |
6 | // Bar animations
7 | // -------------------------
8 |
9 | // WebKit
10 | @-webkit-keyframes progress-bar-stripes {
11 | from { background-position: 40px 0; }
12 | to { background-position: 0 0; }
13 | }
14 |
15 | // Spec and IE10+
16 | @keyframes progress-bar-stripes {
17 | from { background-position: 40px 0; }
18 | to { background-position: 0 0; }
19 | }
20 |
21 |
22 |
23 | // Bar itself
24 | // -------------------------
25 |
26 | // Outer container
27 | .progress {
28 | overflow: hidden;
29 | height: @line-height-computed;
30 | margin-bottom: @line-height-computed;
31 | background-color: @progress-bg;
32 | border-radius: @border-radius-base;
33 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
34 | }
35 |
36 | // Bar of progress
37 | .progress-bar {
38 | float: left;
39 | width: 0%;
40 | height: 100%;
41 | font-size: @font-size-small;
42 | line-height: @line-height-computed;
43 | color: @progress-bar-color;
44 | text-align: center;
45 | background-color: @progress-bar-bg;
46 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
47 | .transition(width .6s ease);
48 | }
49 |
50 | // Striped bars
51 | .progress-striped .progress-bar {
52 | #gradient > .striped();
53 | background-size: 40px 40px;
54 | }
55 |
56 | // Call animation for the active one
57 | .progress.active .progress-bar {
58 | .animation(progress-bar-stripes 2s linear infinite);
59 | }
60 |
61 |
62 |
63 | // Variations
64 | // -------------------------
65 |
66 | .progress-bar-success {
67 | .progress-bar-variant(@progress-bar-success-bg);
68 | }
69 |
70 | .progress-bar-info {
71 | .progress-bar-variant(@progress-bar-info-bg);
72 | }
73 |
74 | .progress-bar-warning {
75 | .progress-bar-variant(@progress-bar-warning-bg);
76 | }
77 |
78 | .progress-bar-danger {
79 | .progress-bar-variant(@progress-bar-danger-bg);
80 | }
81 |
--------------------------------------------------------------------------------
/less/twbs/responsive-utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Responsive: Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // IE10 in Windows (Phone) 8
7 | //
8 | // Support for responsive views via media queries is kind of borked in IE10, for
9 | // Surface/desktop in split view and for Windows Phone 8. This particular fix
10 | // must be accompanied by a snippet of JavaScript to sniff the user agent and
11 | // apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
12 | // our Getting Started page for more information on this bug.
13 | //
14 | // For more information, see the following:
15 | //
16 | // Issue: https://github.com/twbs/bootstrap/issues/10497
17 | // Docs: http://getbootstrap.com/getting-started/#browsers
18 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
19 |
20 | @-ms-viewport {
21 | width: device-width;
22 | }
23 |
24 |
25 | // Visibility utilities
26 | .visible-xs,
27 | .visible-sm,
28 | .visible-md,
29 | .visible-lg {
30 | .responsive-invisibility();
31 | }
32 |
33 | .visible-xs {
34 | @media (max-width: @screen-xs-max) {
35 | .responsive-visibility();
36 | }
37 | }
38 | .visible-sm {
39 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
40 | .responsive-visibility();
41 | }
42 | }
43 | .visible-md {
44 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
45 | .responsive-visibility();
46 | }
47 | }
48 | .visible-lg {
49 | @media (min-width: @screen-lg-min) {
50 | .responsive-visibility();
51 | }
52 | }
53 |
54 | .hidden-xs {
55 | @media (max-width: @screen-xs-max) {
56 | .responsive-invisibility();
57 | }
58 | }
59 | .hidden-sm {
60 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
61 | .responsive-invisibility();
62 | }
63 | }
64 | .hidden-md {
65 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
66 | .responsive-invisibility();
67 | }
68 | }
69 | .hidden-lg {
70 | @media (min-width: @screen-lg-min) {
71 | .responsive-invisibility();
72 | }
73 | }
74 |
75 |
76 | // Print utilities
77 | //
78 | // Media queries are placed on the inside to be mixin-friendly.
79 |
80 | .visible-print {
81 | .responsive-invisibility();
82 |
83 | @media print {
84 | .responsive-visibility();
85 | }
86 | }
87 |
88 | .hidden-print {
89 | @media print {
90 | .responsive-invisibility();
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/less/twbs/scaffolding.less:
--------------------------------------------------------------------------------
1 | //
2 | // Scaffolding
3 | // --------------------------------------------------
4 |
5 |
6 | // Reset the box-sizing
7 | //
8 | // Heads up! This reset may cause conflicts with some third-party widgets.
9 | // For recommendations on resolving such conflicts, see
10 | // http://getbootstrap.com/getting-started/#third-box-sizing
11 | * {
12 | .box-sizing(border-box);
13 | }
14 | *:before,
15 | *:after {
16 | .box-sizing(border-box);
17 | }
18 |
19 |
20 | // Body reset
21 |
22 | html {
23 | font-size: 62.5%;
24 | -webkit-tap-highlight-color: rgba(0,0,0,0);
25 | }
26 |
27 | body {
28 | font-family: @font-family-base;
29 | font-size: @font-size-base;
30 | line-height: @line-height-base;
31 | color: @text-color;
32 | background-color: @body-bg;
33 | }
34 |
35 | // Reset fonts for relevant elements
36 | input,
37 | button,
38 | select,
39 | textarea {
40 | font-family: inherit;
41 | font-size: inherit;
42 | line-height: inherit;
43 | }
44 |
45 |
46 | // Links
47 |
48 | a {
49 | color: @link-color;
50 | text-decoration: none;
51 |
52 | &:hover,
53 | &:focus {
54 | color: @link-hover-color;
55 | text-decoration: underline;
56 | }
57 |
58 | &:focus {
59 | .tab-focus();
60 | }
61 | }
62 |
63 |
64 | // Figures
65 | //
66 | // We reset this here because previously Normalize had no `figure` margins. This
67 | // ensures we don't break anyone's use of the element.
68 |
69 | figure {
70 | margin: 0;
71 | }
72 |
73 |
74 | // Images
75 |
76 | img {
77 | vertical-align: middle;
78 | }
79 |
80 | // Responsive images (ensure images don't scale beyond their parents)
81 | .img-responsive {
82 | .img-responsive();
83 | }
84 |
85 | // Rounded corners
86 | .img-rounded {
87 | border-radius: @border-radius-large;
88 | }
89 |
90 | // Image thumbnails
91 | //
92 | // Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
93 | .img-thumbnail {
94 | padding: @thumbnail-padding;
95 | line-height: @line-height-base;
96 | background-color: @thumbnail-bg;
97 | border: 1px solid @thumbnail-border;
98 | border-radius: @thumbnail-border-radius;
99 | .transition(all .2s ease-in-out);
100 |
101 | // Keep them at most 100% wide
102 | .img-responsive(inline-block);
103 | }
104 |
105 | // Perfect circle
106 | .img-circle {
107 | border-radius: 50%; // set radius in percents
108 | }
109 |
110 |
111 | // Horizontal rules
112 |
113 | hr {
114 | margin-top: @line-height-computed;
115 | margin-bottom: @line-height-computed;
116 | border: 0;
117 | border-top: 1px solid @hr-border;
118 | }
119 |
120 |
121 | // Only display content to screen readers
122 | //
123 | // See: http://a11yproject.com/posts/how-to-hide-content/
124 |
125 | .sr-only {
126 | position: absolute;
127 | width: 1px;
128 | height: 1px;
129 | margin: -1px;
130 | padding: 0;
131 | overflow: hidden;
132 | clip: rect(0,0,0,0);
133 | border: 0;
134 | }
135 |
--------------------------------------------------------------------------------
/less/twbs/thumbnails.less:
--------------------------------------------------------------------------------
1 | //
2 | // Thumbnails
3 | // --------------------------------------------------
4 |
5 |
6 | // Mixin and adjust the regular image class
7 | .thumbnail {
8 | display: block;
9 | padding: @thumbnail-padding;
10 | margin-bottom: @line-height-computed;
11 | line-height: @line-height-base;
12 | background-color: @thumbnail-bg;
13 | border: 1px solid @thumbnail-border;
14 | border-radius: @thumbnail-border-radius;
15 | .transition(all .2s ease-in-out);
16 |
17 | > img,
18 | a > img {
19 | &:extend(.img-responsive);
20 | margin-left: auto;
21 | margin-right: auto;
22 | }
23 |
24 | // Add a hover state for linked versions only
25 | a&:hover,
26 | a&:focus,
27 | a&.active {
28 | border-color: @link-color;
29 | }
30 |
31 | // Image captions
32 | .caption {
33 | padding: @thumbnail-caption-padding;
34 | color: @thumbnail-caption-color;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/less/twbs/tooltip.less:
--------------------------------------------------------------------------------
1 | //
2 | // Tooltips
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .tooltip {
8 | position: absolute;
9 | z-index: @zindex-tooltip;
10 | display: block;
11 | visibility: visible;
12 | font-size: @font-size-small;
13 | line-height: 1.4;
14 | .opacity(0);
15 |
16 | &.in { .opacity(@tooltip-opacity); }
17 | &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }
18 | &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }
19 | &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }
20 | &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }
21 | }
22 |
23 | // Wrapper for the tooltip content
24 | .tooltip-inner {
25 | max-width: @tooltip-max-width;
26 | padding: 3px 8px;
27 | color: @tooltip-color;
28 | text-align: center;
29 | text-decoration: none;
30 | background-color: @tooltip-bg;
31 | border-radius: @border-radius-base;
32 | }
33 |
34 | // Arrows
35 | .tooltip-arrow {
36 | position: absolute;
37 | width: 0;
38 | height: 0;
39 | border-color: transparent;
40 | border-style: solid;
41 | }
42 | .tooltip {
43 | &.top .tooltip-arrow {
44 | bottom: 0;
45 | left: 50%;
46 | margin-left: -@tooltip-arrow-width;
47 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
48 | border-top-color: @tooltip-arrow-color;
49 | }
50 | &.top-left .tooltip-arrow {
51 | bottom: 0;
52 | left: @tooltip-arrow-width;
53 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
54 | border-top-color: @tooltip-arrow-color;
55 | }
56 | &.top-right .tooltip-arrow {
57 | bottom: 0;
58 | right: @tooltip-arrow-width;
59 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
60 | border-top-color: @tooltip-arrow-color;
61 | }
62 | &.right .tooltip-arrow {
63 | top: 50%;
64 | left: 0;
65 | margin-top: -@tooltip-arrow-width;
66 | border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;
67 | border-right-color: @tooltip-arrow-color;
68 | }
69 | &.left .tooltip-arrow {
70 | top: 50%;
71 | right: 0;
72 | margin-top: -@tooltip-arrow-width;
73 | border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;
74 | border-left-color: @tooltip-arrow-color;
75 | }
76 | &.bottom .tooltip-arrow {
77 | top: 0;
78 | left: 50%;
79 | margin-left: -@tooltip-arrow-width;
80 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
81 | border-bottom-color: @tooltip-arrow-color;
82 | }
83 | &.bottom-left .tooltip-arrow {
84 | top: 0;
85 | left: @tooltip-arrow-width;
86 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
87 | border-bottom-color: @tooltip-arrow-color;
88 | }
89 | &.bottom-right .tooltip-arrow {
90 | top: 0;
91 | right: @tooltip-arrow-width;
92 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
93 | border-bottom-color: @tooltip-arrow-color;
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/less/twbs/utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // Floats
7 | // -------------------------
8 |
9 | .clearfix {
10 | .clearfix();
11 | }
12 | .center-block {
13 | .center-block();
14 | }
15 | .pull-right {
16 | float: right !important;
17 | }
18 | .pull-left {
19 | float: left !important;
20 | }
21 |
22 |
23 | // Toggling content
24 | // -------------------------
25 |
26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
27 | .hide {
28 | display: none !important;
29 | }
30 | .show {
31 | display: block !important;
32 | }
33 | .invisible {
34 | visibility: hidden;
35 | }
36 | .text-hide {
37 | .text-hide();
38 | }
39 |
40 |
41 | // Hide from screenreaders and browsers
42 | //
43 | // Credit: HTML5 Boilerplate
44 |
45 | .hidden {
46 | display: none !important;
47 | visibility: hidden !important;
48 | }
49 |
50 |
51 | // For Affix plugin
52 | // -------------------------
53 |
54 | .affix {
55 | position: fixed;
56 | }
57 |
--------------------------------------------------------------------------------
/less/twbs/wells.less:
--------------------------------------------------------------------------------
1 | //
2 | // Wells
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .well {
8 | min-height: 20px;
9 | padding: 19px;
10 | margin-bottom: 20px;
11 | background-color: @well-bg;
12 | border: 1px solid @well-border;
13 | border-radius: @border-radius-base;
14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15 | blockquote {
16 | border-color: #ddd;
17 | border-color: rgba(0,0,0,.15);
18 | }
19 | }
20 |
21 | // Sizes
22 | .well-lg {
23 | padding: 24px;
24 | border-radius: @border-radius-large;
25 | }
26 | .well-sm {
27 | padding: 9px;
28 | border-radius: @border-radius-small;
29 | }
30 |
--------------------------------------------------------------------------------
/licence.lic:
--------------------------------------------------------------------------------
1 | Copyright (c) 2008-2014 the qwebirc project.
2 | http://www.qwebirc.org/
3 |
4 | This program is free software; you can redistribute it and/or
5 | modify it under the terms of the GNU General Public License
6 | version 2 as published by the Free Software Foundation.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | GNU General Public License for more details.
12 |
13 | You should have received a copy of the GNU General Public License
14 | along with this program; if not, write to the Free Software
15 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 |
17 | Though it is not required, we would appreciate public facing
18 | instances leaving a mention of the original author(s) and the
19 | project name and URL in the about dialog, thanks!
--------------------------------------------------------------------------------
/mcss/Readme.md:
--------------------------------------------------------------------------------
1 | Handlebars CSS templates used to dynamically change the qwebirc view based on user options. Would prefer to use less...
--------------------------------------------------------------------------------
/mcss/qui-modifiable-css.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 | * Note this is a handlebars template. Changing values in here requires a grunt rebuild
3 | * note the context (for property names) is the uiOptions values see ui/standardUI for implementation
4 | * update the Browser object is also now part of the context so you can do #if ie6 or something
5 |
6 | * Available helpers
7 | * see js/src/utils/Templates (github.com/megawac/qwebirc-enhancements/blob/master/js/src/util/Templates.js)
8 | * colours will assume the base background by default
9 | * "$result": property, default -> str get a property or its default val
10 | * "$hex": str ([colour]) -> hex get hex val
11 | * "$mix": str (colour), [type|colour] -> hex mix colour and base colour by default
12 | * "$saturate": num, [type|colour] -> hex saturate colour by delta (less than 1)
13 | * "$lighten": num, [type|colour] -> hex lighten colour by delta (less than 1). Negative delta to darken
14 | * "$invert": [type|colour] -> hex invert a colour or default
15 | --}}
16 |
17 | .qui .content {
18 | color: {{$hex 'font'}};
19 | background: {{$hex 'background'}};
20 | }
21 |
22 | .qui .lines {
23 | font-size: {{$result 'font_size' 12}}px;
24 | }
25 |
26 | .qui .lines .timestamp {
27 | display: {{#if show_timestamps}}'inline'{{else}}'none'{{/if}};
28 | }
29 |
30 | .qui .lines .highlight1 {
31 | background: {{$hue '-0.25'}};
32 | }
33 |
34 | .qui .lines .highlight2 {
35 | background: {{$hue '0.25'}};
36 | }
37 |
38 | .qui .lines .mentioned {
39 | background: {{$hue '0.5'}} !important;
40 | }
41 |
42 | {{! tab stuff }}
43 | .qui .outertabbar, .qui .detached-window .header {
44 | color: {{$mix '0d0b0b' 'font'}};
45 | background: {{$saturate '0.1'}};
46 | border-bottom: thin solid {{$lighten '-0.05'}};
47 | }
48 |
49 | .qui .tabbar .tab {
50 | background: {{$lighten '-0.005'}};
51 | background: rgba(189, 189, 189, 0.1);
52 | border: thin solid {{$lighten '-0.1'}};
53 | }
54 |
55 | .qui .tabbar .selected.tab {
56 | color: {{$mix '333333' 'font'}};
57 | }
58 | {{! tab stuff }}
59 |
60 | {{! nicklist }}
61 |
62 | .qui .nicklist {
63 | border-left: thin solid {{$lighten '-0.15'}};
64 | }
65 |
66 | .qui .dropdownmenu, .qui hr.lastpos {
67 | border: thin solid {{$lighten '-0.15'}};
68 | background: {{$hex 'background'}};
69 | }
70 |
71 | .qui .dropdownmenu a:hover {
72 | background: {{$saturate '40%'}};
73 | }
74 |
75 | .qui .properties {
76 | background: {{$saturate '0.04'}};
77 | border-top: thin solid {{$lighten '-0.1'}};
78 | }
79 |
80 | .qui .topic {
81 | color: {{$mix '4f4f4f' 'font'}};
82 | background: {{$hex 'background'}};
83 | border-bottom: thin dashed {{$lighten '-0.15'}};
84 | }
85 |
86 | {{! irc input stuff }}
87 | {{! scary gradients }}
88 |
89 | .qui .input {
90 | background: {{$saturate '0.04'}};
91 | }
92 |
93 | .qui .input div {
94 | border-top: thin solid {{$lighten '-0.15'}};
95 | }
96 |
97 | .qui hr.lastpos {
98 | border: thin solid {{$lighten '-0.15'}};
99 | }
100 |
101 | .qui .user {
102 | background: {{$saturate '-0.15'}};
103 | }
104 |
105 | {{!custom brouhaha styling}}
106 | .qui .brouhaha .content, .qui .brouhaha .dropdownmenu {
107 | background: {{$hue '-0.10'}};
108 | }
109 |
110 | .qui .brouhaha .properties, .qui .brouhaha .input {
111 | background: {{$hue '-0.96'}};
112 | }
113 |
114 | {{!pretty input}}
115 |
116 | .qwebirc .input .decorated {
117 | background: {{$saturate '-0.15'}};
118 | {{! will be split using .split(',')}}
119 | {{#vendor-prefix '-webkit-,-moz-,-o-,-ms-,'}}
120 | background-image: {prefix}linear-gradient(bottom, {{$saturate '0.055'}} 30%, {{$saturate '-0.025'}} 80%);
121 | {{/vendor-prefix}}
122 | }
123 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "qwebirc",
3 | "description": "webirc client",
4 | "repository": "www.github.com/megawac/qwebirc-enhancements",
5 | "version": "0.97.0",
6 | "tags": [
7 | "webirc",
8 | "irc",
9 | "irc client"
10 | ],
11 | "author": {
12 | "name": "Graeme Yeates",
13 | "url": "www.github.com/megawac",
14 | "email": "megawac@gmail.com"
15 | },
16 | "fork": {
17 | "author": "Chris Porter",
18 | "name": "qwebirc",
19 | "url": "www.qwebirc.org"
20 | },
21 | "licence": {
22 | "type": "GNU",
23 | "url": "http://www.gnu.org/licenses/gpl.html",
24 | "file": "licence.lic"
25 | },
26 | "scripts": {
27 | "prepublish": "grunt",
28 | "test": "grunt test"
29 | },
30 | "optionalDependencies": {
31 | "grunt-contrib-jshint": "0.10",
32 | "grunt-express": "~1.2.1",
33 | "grunt-mocha": "0.4",
34 | "expect.js": "0.3",
35 | "express": "4.0",
36 | "mocha": "1.18",
37 | "sinon": "~1.9.1"
38 | },
39 | "devDependencies": {
40 | "grunt": "^0.4.5",
41 | "grunt-autoprefixer": "~0.7.2",
42 | "grunt-concat-in-order": "~0.1",
43 | "grunt-contrib-concat": "0.3",
44 | "grunt-contrib-csslint": "0.2",
45 | "grunt-contrib-cssmin": "0.7",
46 | "grunt-contrib-handlebars": "0.7",
47 | "grunt-contrib-less": "~0.11.3",
48 | "grunt-contrib-uglify": "0.3",
49 | "grunt-csscomb": "2.0",
50 | "grunt-file-info": "~1.0.4",
51 | "grunt-html-build": "0.3",
52 | "grunt-release": "0.7",
53 | "lodash": "https://github.com/lodash/lodash/tarball/10adb686248793fd0f3e237c3928719c6d88e5b5",
54 | "toSrc": "~0.1.3"
55 | },
56 | "frontend-dependencies": {
57 | "twbs": {
58 | "version": "3.1.1"
59 | },
60 | "mootools": {
61 | "version": "1.4.5"
62 | },
63 | "respond": {
64 | "version": "1.4"
65 | },
66 | "soundManager": {
67 | "version": "2.97a.20130512"
68 | },
69 | "Handlebars": {
70 | "version": "1.0.0"
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/panes/about.hbs:
--------------------------------------------------------------------------------
1 |
10 |
11 |
This is a rewrite of Chris Porter's qwebirc inspired by cinq's brouhaha integrated with Atheme's iris for channel list supports.
12 |
13 |
By megawac © 2013-2014. Source of the project or for file issues is https://github.com/megawac/qwebirc-enhancements . Cheers!
14 |
15 |
46 |
47 |
Special thanks to various comments/suggestions/hardware/bug reports from Zarjazz, Bazerka, boojah, meeb, Microbe, morphium, Starman, truff, coekie, qip, soczol, tomaw, the muppets in #rogue (hi dunks!) and everyone else I forgot :(.
48 |
49 |
50 | Copyright © 2008-2011 Chris Porter and the qwebirc project.
All rights reserved.
51 | Licensed under the GNU General Public License, version 2 only.
52 |
53 | http://www.qwebirc.org/
54 |
55 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56 |
This software contains portions by the following third parties:
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/panes/channel-list.hbs:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 | {{lang "users"}}
14 | {{lang "channel"}}
15 | {{lang "topic"}}
16 |
17 |
18 |
19 | {{! content loaded here }}
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/panes/faq.hbs:
--------------------------------------------------------------------------------
1 |
10 |
11 |
Can I make the widget autoconnect?
12 |
No, if this was allowed then bad people could IFRAME lots and lots of copies, which would get you glined for having too many clones. However you can prefill the channel/nickname information (type /EMBED in the main window).
13 |
14 |
To be continued...
15 |
16 |
17 |
--------------------------------------------------------------------------------
/panes/feedback.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/panes/partials/channel-list-content.hbs:
--------------------------------------------------------------------------------
1 | {{#each channels}}
2 |
3 | {{users}}
4 |
5 | {{{topic}}}
6 |
7 | {{/each}}
--------------------------------------------------------------------------------
/panes/partials/customNotice.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/panes/privacypolicy.hbs:
--------------------------------------------------------------------------------
1 |
10 |
11 |
Data retention policy
12 |
Non-retention
13 |
14 | We do not log what you say or what other people say to you.
15 | We do not log who you speak to or who speaks to you.
16 | We do not log any IRC commands you send or recieve.
17 | But please note that the people you talk to on IRC may have configured their IRC clients to log what you say!
18 |
19 |
Retention
20 |
Webserver logs
21 |
Whenever your web browser downloads a page our various webservers store industry standard logs in the following format or one very similar to it:
22 |
2008-12-06 21:34:32+0000 1.2.3.4 "GET / HTTP/1.1" 200 449 "http://webchat.quakenet.org/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.29 Safari/525.19"
23 |
These components are:
24 |
25 | The date and time that the page was requested.
26 | The IP address of the requesting machine (your machine).
27 | The page requested, the method and the HTTP version.
28 | The success or failure code returned by the webserver, and the size of the page returned.
29 | The page that referred you to the requested page.
30 | Your User Agent (normally your web browser, the browser version and the operating system it is running on).
31 |
32 |
33 |
34 |
When you use the Log in functionality the Authgate passes your Q account details to the Webchat system, which contains the data you gave us when you created your Q account, your user id, the time you logged in and some cryptographic data.
35 |
This information is logged on the Authgate, as part of the design of the system it also appears in the Webchat server logs.
36 |
IRC server logs
37 |
When you connect to IRC the remote IRC server logs the nickname you signed on with, the time and the IP address you were using at that time.
38 |
Cookies/Local Storage
39 |
This site defaults to use local storage to store user data and will fallback to corresponding cookies, specifically. (below is not updated we use more cookies than that)
40 |
41 | A session cookie used to connect your browsing session and your QuakeNet login, this cookie expires when you close your web browser.
42 | A preferences cookie used to store various options you set in the options dialog, this cookie does not expire unless you instruct your browser to delete it.
43 | A redirection state cookie is used to store what page you were viewing before you attempted to log in to the auth gateway. This cookie expires when you close your web browser and also when the login process is completed successfully.
44 |
45 |
Feedback
46 |
When you submit feedback we log your feedback(!) and the IP address you posted it from, in addition to normal webserver logs.
47 |
48 |
49 |
--------------------------------------------------------------------------------
/panes/wizard.hbs:
--------------------------------------------------------------------------------
1 |
10 |
14 |
--------------------------------------------------------------------------------
/sound/beep.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/beep.mp3
--------------------------------------------------------------------------------
/sound/beep.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/beep.ogg
--------------------------------------------------------------------------------
/sound/beep.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/beep.wav
--------------------------------------------------------------------------------
/sound/readme.md:
--------------------------------------------------------------------------------
1 | https://www.scirra.com/blog/44/on-html5-audio-formats-aac-and-ogg
2 |
3 | Using html5 audio. I use foobar2000 to convert formats
4 | Only really use mp3 and ogg
5 |
6 | The mario sounds are from http://themushroomkingdom.net/media/smw/wav
--------------------------------------------------------------------------------
/sound/smb3_fireball.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb3_fireball.mp3
--------------------------------------------------------------------------------
/sound/smb3_fireball.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb3_fireball.ogg
--------------------------------------------------------------------------------
/sound/smb3_fireball.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb3_fireball.wav
--------------------------------------------------------------------------------
/sound/smb3_frog_mario_walk.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb3_frog_mario_walk.mp3
--------------------------------------------------------------------------------
/sound/smb3_frog_mario_walk.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb3_frog_mario_walk.ogg
--------------------------------------------------------------------------------
/sound/smb3_frog_mario_walk.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb3_frog_mario_walk.wav
--------------------------------------------------------------------------------
/sound/smb_coin.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_coin.mp3
--------------------------------------------------------------------------------
/sound/smb_coin.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_coin.ogg
--------------------------------------------------------------------------------
/sound/smb_coin.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_coin.wav
--------------------------------------------------------------------------------
/sound/smb_kick.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_kick.mp3
--------------------------------------------------------------------------------
/sound/smb_kick.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_kick.ogg
--------------------------------------------------------------------------------
/sound/smb_kick.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_kick.wav
--------------------------------------------------------------------------------
/sound/smb_pause.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_pause.mp3
--------------------------------------------------------------------------------
/sound/smb_pause.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_pause.ogg
--------------------------------------------------------------------------------
/sound/smb_pause.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smb_pause.wav
--------------------------------------------------------------------------------
/sound/smw_spring_jump.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smw_spring_jump.mp3
--------------------------------------------------------------------------------
/sound/smw_spring_jump.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smw_spring_jump.ogg
--------------------------------------------------------------------------------
/sound/smw_spring_jump.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smw_spring_jump.wav
--------------------------------------------------------------------------------
/sound/smw_stomp.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smw_stomp.mp3
--------------------------------------------------------------------------------
/sound/smw_stomp.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smw_stomp.ogg
--------------------------------------------------------------------------------
/sound/smw_stomp.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/sound/smw_stomp.wav
--------------------------------------------------------------------------------
/swf/WebSocketMain.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/swf/WebSocketMain.swf
--------------------------------------------------------------------------------
/swf/soundmanager2.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/swf/soundmanager2.swf
--------------------------------------------------------------------------------
/swf/soundmanager2_debug.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/swf/soundmanager2_debug.swf
--------------------------------------------------------------------------------
/swf/soundmanager2_flash9.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/swf/soundmanager2_flash9.swf
--------------------------------------------------------------------------------
/templates/amd/popup-alert.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/amd/popup-dialog.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 | {{#if content}}
10 | {{{content}}}
11 | {{else}}
12 |
13 | {{text}}
14 |
15 |
16 | {{/if}}
17 |
18 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/templates/amd/welcome-pane.hbs:
--------------------------------------------------------------------------------
1 |
2 |
×
3 |
{{lang "welcome.title"}}
4 |
22 | {{#if firstvisit}}
23 |
26 | {{/if}}
27 |
--------------------------------------------------------------------------------
/templates/authpage.hbs:
--------------------------------------------------------------------------------
1 |
2 |
28 |
{{channels}}
29 |
--------------------------------------------------------------------------------
/templates/channelName.hbs:
--------------------------------------------------------------------------------
1 |
{{{channel}}}
--------------------------------------------------------------------------------
/templates/customlink.hbs:
--------------------------------------------------------------------------------
1 |
{{{val}}}
2 |
--------------------------------------------------------------------------------
/templates/detachedWindow.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/templates/failed-validator.hbs:
--------------------------------------------------------------------------------
1 |
{{description}}
--------------------------------------------------------------------------------
/templates/image-popover.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/templates/ircInput.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/ircMessage.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#if timestamp}}{{$timestamp timestamp}} {{/if}}
3 | {{{message}}} {{! compiled message (prop from ui.theme)}}
4 |
--------------------------------------------------------------------------------
/templates/ircTab.hbs:
--------------------------------------------------------------------------------
1 |
{{{name}}}{{> tabDetach}}{{#if closable}}{{> tabClose}}{{/if}}
--------------------------------------------------------------------------------
/templates/ircnick.hbs:
--------------------------------------------------------------------------------
1 |
<{{prefix}}
2 | {{nick}}
3 | {{#if linkedchannel}}{{linkedchannel}} {{/if}}>
4 |
--------------------------------------------------------------------------------
/templates/ircstyle.hbs:
--------------------------------------------------------------------------------
1 | {{! Note needs to be a safe string or urls will be escaped }}
2 |
{{{text}}}
3 |
--------------------------------------------------------------------------------
/templates/loadingPage.hbs:
--------------------------------------------------------------------------------
1 |
{{lang "loadingMessage"}}
--------------------------------------------------------------------------------
/templates/mainmenu.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/menubtn.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/templates/menuitem.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{text}}
4 | {{#if hint}}{{hint}} {{/if}}
5 |
6 |
--------------------------------------------------------------------------------
/templates/navbar.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/templates/nickMenu.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/nickbtn.hbs:
--------------------------------------------------------------------------------
1 |
{{prefix}} {{nick}}
{{! wrapped for delegation}}
--------------------------------------------------------------------------------
/templates/nickmenubtn.hbs:
--------------------------------------------------------------------------------
1 |
{{text}}
--------------------------------------------------------------------------------
/templates/qwebirc-layout.hbs:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/templates/status.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/topicText.hbs:
--------------------------------------------------------------------------------
1 |
[{{{topic}}} ]
--------------------------------------------------------------------------------
/templates/userlink.hbs:
--------------------------------------------------------------------------------
1 |
{{nick}}
--------------------------------------------------------------------------------
/templates/window-container.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{! fill }}
3 |
--------------------------------------------------------------------------------
/templates/window.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#if isChannel}}
3 |
{{> topicText}}
4 | {{/if}}
5 |
6 |
7 | {{#if isChannel}}
8 |
9 | {{/if}}
10 |
11 |
{{> channelName}}
12 |
13 | {{#if needsInput}}{{> ircInput}}{{/if}}
14 |
15 |
--------------------------------------------------------------------------------
/test/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "globals": {
3 | "mocha": true,
4 | "expect": true,
5 | "describe": true,
6 | "it": true,
7 | "sinon": true,
8 |
9 | "_": true,
10 |
11 | "qwebirc": true
12 | },
13 |
14 | "expr": true,
15 |
16 | "strict": false,
17 |
18 | "mootools": true
19 | }
--------------------------------------------------------------------------------
/test/Elements.from.js:
--------------------------------------------------------------------------------
1 | /*
2 | ---
3 | name: Elements.From Tests
4 | requires: [More/Elements.From]
5 | provides: [Elements.From.Tests]
6 | ...
7 | */
8 | describe("Elements.From", function() {
9 |
10 | it("should return a group of elements", function() {
11 | var str = "
foo
bar ";
12 | var div = new Element("div");
13 | expect(div.adopt(Elements.from(str)).get("html").toLowerCase().trim()).to.equal(str);
14 | });
15 |
16 | it("should return a text nodes as well as elements", function() {
17 | var str = "
foo
some text
bar more text";
18 | var div = new Element("div");
19 | expect(div.adopt(Elements.from(str)).get("html").toLowerCase().trim()).to.equal(str);
20 | });
21 |
22 | // it("should return a group of table elements", function() {
23 | // var str = "
foo ";
24 | // var tbody = new Element("tbody").inject(new Element("table")).adopt(Elements.from(str));
25 | // expect(tbody.get("html").toLowerCase().replace(/\s+/g, "").trim()).to.equal(str);
26 | // });
27 |
28 | it("should also process commented out html", function() {
29 | var str = "
foo
stuff";
30 | var commented = " " + str;
31 | var div = new Element("div").adopt(Elements.from(commented));
32 | expect(div.get("html").toLowerCase().trim()).to.equal(str);
33 | });
34 |
35 | });
--------------------------------------------------------------------------------
/test/irc-styles.js:
--------------------------------------------------------------------------------
1 | // see https://github.com/megawac/irc-style-parser/blob/master/test
2 |
--------------------------------------------------------------------------------
/test/options.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/test/options.js
--------------------------------------------------------------------------------
/test/qwebirc.js:
--------------------------------------------------------------------------------
1 | describe("Core qwebirc methods", function() {
2 | it("qwebirc.ready()", function(done) {
3 | var spy = sinon.spy();
4 | qwebirc.ready(spy);
5 |
6 | var spy2 = sinon.spy();
7 | qwebirc.ready(spy2, 1, 2, 3, 4, 5);
8 | setTimeout(function() {
9 | expect(spy.callCount).to.be.equal(1);
10 | expect(spy2.getCall(0).args).to.eql([1, 2, 3, 4, 5]);
11 | done();
12 | }, 1000);
13 | });
14 | });
--------------------------------------------------------------------------------
/test/server/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "node": true
3 | }
--------------------------------------------------------------------------------
/test/server/run.js:
--------------------------------------------------------------------------------
1 | var app = require("./server");
2 | var port = 8000;
3 | console.log("Started server on 127.0.0.1:%s", port);
4 | app.listen(port);
--------------------------------------------------------------------------------
/test/server/server.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var express = require("express");
4 | var app = express();
5 |
6 | var base = require("path").resolve(__dirname, "../../");
7 |
8 | function middleware(req, res, next) {
9 | if (req.url !== "/lang") {
10 | return next();
11 | }
12 | res.writeHead(200, {
13 | "Content-Type": "application/json"
14 | });
15 | res.write(JSON.stringify(require(base + "/lang/base.json")));
16 | res.end();
17 | }
18 |
19 | app.use(middleware);
20 | app.use(express.static(base));
21 |
22 | module.exports = app;
--------------------------------------------------------------------------------
/test/test-runner.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Mocha Tests
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/test/ui.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megawac/qwebirc-enhancements/d04252a7ccfca6c1119f40f0f9082d875751b0e7/test/ui.js
--------------------------------------------------------------------------------