var path = require('path'); | var path = require('path'); | ||||
var webpack = require('webpack'); | var webpack = require('webpack'); | ||||
var autoprefixer = require('autoprefixer'); | var autoprefixer = require('autoprefixer'); | ||||
var ExtractTextPlugin = require('extract-text-webpack-plugin'); | |||||
var autoprefixerOptions = require('./../autoprefixer'); | var autoprefixerOptions = require('./../autoprefixer'); | ||||
var paths = require('./../paths'); | var paths = require('./../paths'); | ||||
filename: '[name].js' | filename: '[name].js' | ||||
}, | }, | ||||
plugins: [ | plugins: [ | ||||
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js') | |||||
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js'), | |||||
new ExtractTextPlugin('../../css/sonar.css', { allChunks: true }) | |||||
], | ], | ||||
resolve: { | resolve: { | ||||
root: path.join(__dirname, '../../src/main/js') | root: path.join(__dirname, '../../src/main/js') | ||||
} | } | ||||
}, | }, | ||||
{ | { | ||||
test: /\.css/, | |||||
loader: 'style-loader!css-loader!postcss-loader' | |||||
test: /\.css$/, | |||||
loader: 'style!css!postcss' | |||||
}, | |||||
{ | |||||
test: /\.less$/, | |||||
loader: ExtractTextPlugin.extract('style', 'css?-url!postcss!less') | |||||
}, | }, | ||||
{ test: require.resolve('jquery'), loader: 'expose?$!expose?jQuery' }, | { test: require.resolve('jquery'), loader: 'expose?$!expose?jQuery' }, | ||||
{ test: require.resolve('underscore'), loader: 'expose?_' }, | { test: require.resolve('underscore'), loader: 'expose?_' }, |
/* eslint no-var: 0 */ | |||||
var del = require('del'); | |||||
var gulp = require('gulp'); | |||||
var gulpif = require('gulp-if'); | |||||
var less = require('gulp-less'); | |||||
var nano = require('gulp-cssnano'); | |||||
var autoprefixer = require('gulp-autoprefixer'); | |||||
var paths = require('./config/paths'); | |||||
var autoprefixerOptions = require('./config/autoprefixer'); | |||||
var nanoOptions = { | |||||
zindex: false, | |||||
discardComments: { removeAll: true } | |||||
}; | |||||
function styles (output, production) { | |||||
return gulp.src(['src/main/less/sonar.less']) | |||||
.pipe(less()) | |||||
.pipe(autoprefixer(autoprefixerOptions)) | |||||
.pipe(gulpif(production, nano(nanoOptions))) | |||||
.pipe(gulp.dest(output)); | |||||
} | |||||
gulp.task('clean', function (done) { | |||||
del(paths.cssBuild, done); | |||||
}); | |||||
gulp.task('styles:prod', function () { | |||||
return styles(paths.cssBuild, true); | |||||
}); | |||||
gulp.task('styles:dev', function () { | |||||
return styles(paths.cssBuild, false); | |||||
}); | |||||
gulp.task('default', ['clean', 'styles:prod']); | |||||
gulp.task('build', ['clean', 'styles:prod']); | |||||
gulp.task('build-fast', ['clean', 'styles:dev']); |
"cross-env": "2.0.0", | "cross-env": "2.0.0", | ||||
"css-loader": "0.23.1", | "css-loader": "0.23.1", | ||||
"d3": "3.5.6", | "d3": "3.5.6", | ||||
"del": "2.0.2", | |||||
"enzyme": "2.2.0", | "enzyme": "2.2.0", | ||||
"eslint": "^2.13.1", | "eslint": "^2.13.1", | ||||
"eslint-plugin-import": "^1.9.2", | "eslint-plugin-import": "^1.9.2", | ||||
"expose-loader": "0.7.1", | "expose-loader": "0.7.1", | ||||
"express": "4.13.4", | "express": "4.13.4", | ||||
"express-http-proxy": "0.6.0", | "express-http-proxy": "0.6.0", | ||||
"gulp": "3.9.0", | |||||
"gulp-autoprefixer": "3.1.0", | |||||
"gulp-cssnano": "2.0.0", | |||||
"gulp-if": "2.0.0", | |||||
"gulp-less": "3.0.3", | |||||
"extract-text-webpack-plugin": "1.0.1", | |||||
"handlebars": "2.0.0", | "handlebars": "2.0.0", | ||||
"handlebars-loader": "1.1.4", | "handlebars-loader": "1.1.4", | ||||
"history": "2.0.0", | "history": "2.0.0", | ||||
"imports-loader": "0.6.5", | "imports-loader": "0.6.5", | ||||
"jquery": "2.2.0", | "jquery": "2.2.0", | ||||
"jsdom": "6.5.1", | "jsdom": "6.5.1", | ||||
"less": "2.7.1", | |||||
"less-loader": "2.2.3", | |||||
"lodash": "4.6.1", | "lodash": "4.6.1", | ||||
"mocha": "2.3.4", | "mocha": "2.3.4", | ||||
"moment": "2.10.6", | "moment": "2.10.6", | ||||
"sinon-chai": "2.8.0", | "sinon-chai": "2.8.0", | ||||
"style-loader": "0.13.0", | "style-loader": "0.13.0", | ||||
"underscore": "1.8.3", | "underscore": "1.8.3", | ||||
"vinyl-buffer": "1.0.0", | |||||
"webpack": "1.13.0", | "webpack": "1.13.0", | ||||
"webpack-dev-middleware": "1.6.1", | "webpack-dev-middleware": "1.6.1", | ||||
"webpack-hot-middleware": "2.10.0", | "webpack-hot-middleware": "2.10.0", | ||||
}, | }, | ||||
"scripts": { | "scripts": { | ||||
"start": "node ./scripts/start.js", | "start": "node ./scripts/start.js", | ||||
"build-fast": "node ./scripts/build.js --fast && gulp build-fast", | |||||
"build": "node ./scripts/build.js && gulp build", | |||||
"build-fast": "node ./scripts/build.js --fast", | |||||
"build": "node ./scripts/build.js", | |||||
"test": "cross-env NODE_ENV=test mocha --opts tests/mocha.opts src/main/js/**/__tests__/**/*", | "test": "cross-env NODE_ENV=test mocha --opts tests/mocha.opts src/main/js/**/__tests__/**/*", | ||||
"coverage": "cross-env NODE_ENV=test nyc mocha --opts tests/mocha.opts src/main/js/**/__tests__/**/* && nyc report --reporter lcov --report-dir target/coverage", | "coverage": "cross-env NODE_ENV=test nyc mocha --opts tests/mocha.opts src/main/js/**/__tests__/**/* && nyc report --reporter lcov --report-dir target/coverage", | ||||
"lint": "eslint src/main/js" | "lint": "eslint src/main/js" |
// Remove all content but keep the directory so that | // Remove all content but keep the directory so that | ||||
// if you're in it, you don't end up in Trash | // if you're in it, you don't end up in Trash | ||||
console.log(chalk.cyan.bold('Cleaning output directory...')); | |||||
console.log(chalk.cyan.bold('Cleaning output directories...')); | |||||
console.log(paths.jsBuild + '/*'); | console.log(paths.jsBuild + '/*'); | ||||
console.log(); | |||||
rimrafSync(paths.jsBuild + '/*'); | rimrafSync(paths.jsBuild + '/*'); | ||||
console.log(paths.cssBuild + '/*'); | |||||
rimrafSync(paths.cssBuild + '/*'); | |||||
console.log(); | |||||
if (isFastBuild) { | if (isFastBuild) { | ||||
console.log(chalk.magenta.bold('Running fast build...')); | console.log(chalk.magenta.bold('Running fast build...')); | ||||
} else { | } else { | ||||
} | } | ||||
console.log(); | console.log(); | ||||
webpack(config).run(function (err, stats) { | |||||
webpack(config, function (err, stats) { | |||||
if (err) { | if (err) { | ||||
console.log(chalk.red.bold('Failed to create a production build!')); | console.log(chalk.red.bold('Failed to create a production build!')); | ||||
console.log(chalk.red(err.message || err)); | console.log(chalk.red(err.message || err)); | ||||
process.exit(1); | process.exit(1); | ||||
} | } | ||||
if (stats.compilation.errors && stats.compilation.errors.length) { | |||||
console.log(chalk.red.bold('Failed to create a production build!')); | |||||
stats.compilation.errors.forEach(function (err) { | |||||
console.log(chalk.red(err.message || err)); | |||||
}); | |||||
process.exit(1); | |||||
} | |||||
console.log(chalk.green.bold('Compiled successfully!')); | console.log(chalk.green.bold('Compiled successfully!')); | ||||
var jsonStats = stats.toJson(); | var jsonStats = stats.toJson(); |
import * as measures from '../helpers/measures'; | import * as measures from '../helpers/measures'; | ||||
import * as request from '../helpers/request'; | import * as request from '../helpers/request'; | ||||
import '../../less/sonar.less'; | |||||
// set the Backbone's $ | // set the Backbone's $ | ||||
Backbone.$ = $; | Backbone.$ = $; | ||||
position: absolute; | position: absolute; | ||||
z-index: @navigator-fetching-z-index; | z-index: @navigator-fetching-z-index; | ||||
top: 0; bottom: 0; left: 0; right: 0; | top: 0; bottom: 0; left: 0; right: 0; | ||||
background: #fff url(../images/loading.gif) no-repeat 4px 4px; | |||||
background: #fff url(../../images/loading.gif) no-repeat 4px 4px; | |||||
} | } | ||||
} | } | ||||
overflow: auto; | overflow: auto; | ||||
&.loading { | &.loading { | ||||
background: @white url("../images/loading.gif") no-repeat 4px 2px; | |||||
background: @white url("../../images/loading.gif") no-repeat 4px 2px; | |||||
} | } | ||||
} | } | ||||
display: block; | display: block; | ||||
width: 16px; | width: 16px; | ||||
height: 16px; | height: 16px; | ||||
background: #fff url(../images/loading.gif) no-repeat center center; | |||||
background: #fff url(../../images/loading.gif) no-repeat center center; | |||||
} | } | ||||
&.fetching-error { | &.fetching-error { | ||||
.navigator-filter-favorite-toggle { | .navigator-filter-favorite-toggle { | ||||
width: 16px; | width: 16px; | ||||
height: @navigatorFiltersHeight; | height: @navigatorFiltersHeight; | ||||
background: url(../images/navigator/favorite-filters@2x.png) no-repeat center center; | |||||
background: url(../../images/navigator/favorite-filters@2x.png) no-repeat center center; | |||||
background-size: 16px 14px; | background-size: 16px 14px; | ||||
} | } | ||||
} | } | ||||
.select-list-list > li.progress { | .select-list-list > li.progress { | ||||
background: url(../images/loading.gif) no-repeat 10px 5px; | |||||
background: url(../../images/loading.gif) no-repeat 10px 5px; | |||||
} | } | ||||
.select-list-list > li.progress .select-list-list-checkbox { | .select-list-list > li.progress .select-list-list-checkbox { |
.source-line-expand { | .source-line-expand { | ||||
.source-line-code { | .source-line-code { | ||||
background: url(../images/gray-stripes.png) repeat; | |||||
background: url(../../images/gray-stripes.png) repeat; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
.loading { | .loading { | ||||
background: url("../images/loading.gif") no-repeat 4px 2px; | |||||
background: url("../../images/loading.gif") no-repeat 4px 2px; | |||||
color: #444; | color: #444; | ||||
padding: 3px 25px; | padding: 3px 25px; | ||||
} | } | ||||
} | } | ||||
.source_options td { | .source_options td { | ||||
background: url("../images/sep12.png") no-repeat scroll 0 50% transparent; | |||||
background: url("../../images/sep12.png") no-repeat scroll 0 50% transparent; | |||||
padding: 0 10px; | padding: 0 10px; | ||||
} | } | ||||
} | } | ||||
a.external { | a.external { | ||||
background: url('../images/links/external.png') no-repeat 100% 0; | |||||
background: url('../../images/links/external.png') no-repeat 100% 0; | |||||
padding: 0 16px 0 0; | padding: 0 16px 0 0; | ||||
} | } | ||||
.fav { | .fav { | ||||
display: inline-block; | display: inline-block; | ||||
background: url('../images/star.png') no-repeat 100% 0; | |||||
background: url('../../images/star.png') no-repeat 100% 0; | |||||
width: 16px; | width: 16px; | ||||
height: 16px; | height: 16px; | ||||
vertical-align: text-bottom; | vertical-align: text-bottom; | ||||
.notfav { | .notfav { | ||||
display: inline-block; | display: inline-block; | ||||
background: url('../images/star_off.png') no-repeat 100% 0; | |||||
background: url('../../images/star_off.png') no-repeat 100% 0; | |||||
width: 16px; | width: 16px; | ||||
height: 16px; | height: 16px; | ||||
vertical-align: text-bottom; | vertical-align: text-bottom; |
@font-face { | @font-face { | ||||
font-family: 'sonar'; | font-family: 'sonar'; | ||||
src:url('../fonts/sonar-5.2.eot?'); | |||||
src:url('../fonts/sonar-5.2.eot?#iefix') format('embedded-opentype'), | |||||
url('../fonts/sonar-5.2.woff?') format('woff'), | |||||
url('../fonts/sonar-5.2.ttf?') format('truetype'), | |||||
url('../fonts/sonar-5.2.svg?#sonar') format('svg'); | |||||
src:url('../../fonts/sonar-5.2.eot?'); | |||||
src:url('../../fonts/sonar-5.2.eot?#iefix') format('embedded-opentype'), | |||||
url('../../fonts/sonar-5.2.woff?') format('woff'), | |||||
url('../../fonts/sonar-5.2.ttf?') format('truetype'), | |||||
url('../../fonts/sonar-5.2.svg?#sonar') format('svg'); | |||||
font-weight: normal; | font-weight: normal; | ||||
font-style: normal; | font-style: normal; | ||||
} | } |
} | } | ||||
.data td.category.withSubcategories { | .data td.category.withSubcategories { | ||||
background-image: url('../images/bullet_arrow_down.gif'); | |||||
background-image: url('../../images/bullet_arrow_down.gif'); | |||||
background-position: right center; | background-position: right center; | ||||
background-repeat: no-repeat; | background-repeat: no-repeat; | ||||
} | } | ||||
} | } | ||||
table.sortable .sortasc { | table.sortable .sortasc { | ||||
background-image: url('../images/bullet_arrow_up.gif'); | |||||
background-image: url('../../images/bullet_arrow_up.gif'); | |||||
background-position: left center; | background-position: left center; | ||||
} | } | ||||
table.sortable .sortdesc { | table.sortable .sortdesc { | ||||
background-image: url('../images/bullet_arrow_down.gif'); | |||||
background-image: url('../../images/bullet_arrow_down.gif'); | |||||
background-position: left center; | background-position: left center; | ||||
} | } | ||||
height: 100%; | height: 100%; | ||||
top: 0; | top: 0; | ||||
left: 0; | left: 0; | ||||
background: url('../images/transparent.gif') repeat; | |||||
background: url('../../images/transparent.gif') repeat; | |||||
z-index: @dashboard-transparent-z-index; | z-index: @dashboard-transparent-z-index; | ||||
} | } | ||||
#dashboard .widget-handle { | #dashboard .widget-handle { | ||||
cursor: move; | cursor: move; | ||||
margin: 0; | margin: 0; | ||||
background-image: url('../images/move.png'); | |||||
background-image: url('../../images/move.png'); | |||||
background-position: left center; | background-position: left center; | ||||
background-repeat: no-repeat; | background-repeat: no-repeat; | ||||
padding-left: 20px; | padding-left: 20px; |
@import (reference) "mixins"; | @import (reference) "mixins"; | ||||
@import (reference) "variables"; | @import (reference) "variables"; | ||||
@imagesPath: '../images/select2.png'; | |||||
@imagesPath2x: '../images/select2x2.png'; | |||||
@spinnerPath: '../images/spinner.gif'; | |||||
@imagesPath: '../../images/select2.png'; | |||||
@imagesPath2x: '../../images/select2x2.png'; | |||||
@spinnerPath: '../../images/spinner.gif'; | |||||
.select2-container { | .select2-container { | ||||
vertical-align: middle; | vertical-align: middle; |
width: 12px; | width: 12px; | ||||
height: 12px; | height: 12px; | ||||
font-size: 1px; | font-size: 1px; | ||||
background: url('../images/select2.png') right top no-repeat; | |||||
background: url('../../images/select2.png') right top no-repeat; | |||||
cursor: pointer; | cursor: pointer; | ||||
text-decoration: none; | text-decoration: none; | ||||
border: 0; | border: 0; | ||||
} | } | ||||
.select2-container .select2-choice div b { | .select2-container .select2-choice div b { | ||||
background: url('../images/select2.png') no-repeat 0 1px; | |||||
background: url('../../images/select2.png') no-repeat 0 1px; | |||||
display: block; | display: block; | ||||
width: 100%; | width: 100%; | ||||
height: 100%; | height: 100%; | ||||
} | } | ||||
.select2-search input { | .select2-search input { | ||||
background: #fff url('../images/select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%); | |||||
background: #fff url('../../images/select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%); | |||||
padding: 4px 20px 4px 5px; | padding: 4px 20px 4px 5px; | ||||
outline: 0; | outline: 0; | ||||
border: 1px solid #aaa; | border: 1px solid #aaa; | ||||
} | } | ||||
.select2-search input.select2-active { | .select2-search input.select2-active { | ||||
background: #ffff url('../images/spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%); | |||||
background: #ffff url('../../images/spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%); | |||||
} | } | ||||
.select2-container-active .select2-choice, | .select2-container-active .select2-choice, | ||||
} | } | ||||
.select2-more-results.select2-active { | .select2-more-results.select2-active { | ||||
background: #f4f4f4 url('../images/spinner.gif') no-repeat 100%; | |||||
background: #f4f4f4 url('../../images/spinner.gif') no-repeat 100%; | |||||
} | } | ||||
.select2-more-results { | .select2-more-results { | ||||
} | } | ||||
.select2-container-multi .select2-choices .select2-search-field input.select2-active { | .select2-container-multi .select2-choices .select2-search-field input.select2-active { | ||||
background: #fff url('../images/spinner.gif') no-repeat 100% !important; | |||||
background: #fff url('../../images/spinner.gif') no-repeat 100% !important; | |||||
} | } | ||||
.select2-default { | .select2-default { | ||||
width: 12px; | width: 12px; | ||||
height: 13px; | height: 13px; | ||||
font-size: 1px; | font-size: 1px; | ||||
background: url('../images/select2.png') right top no-repeat; | |||||
background: url('../../images/select2.png') right top no-repeat; | |||||
outline: none; | outline: none; | ||||
} | } | ||||
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { | @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { | ||||
.select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b { | .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b { | ||||
background-image: url(../images/select2x2.png) !important; | |||||
background-image: url(../../images/select2x2.png) !important; | |||||
background-repeat: no-repeat !important; | background-repeat: no-repeat !important; | ||||
background-size: 60px 40px !important; | background-size: 60px 40px !important; | ||||
} | } |
} | } | ||||
ul.headerLine li.sep { | ul.headerLine li.sep { | ||||
background: url("../images/sep12.png") no-repeat scroll 50% 50% transparent; | |||||
background: url("../../images/sep12.png") no-repeat scroll 50% 50% transparent; | |||||
padding: 0 5px 0 5px; | padding: 0 5px 0 5px; | ||||
} | } | ||||
} | } | ||||
option.status_open { | option.status_open { | ||||
background-image: url('../images/status/OPEN.png'); | |||||
background-image: url('../../images/status/OPEN.png'); | |||||
} | } | ||||
option.status_reopened { | option.status_reopened { | ||||
background-image: url('../images/status/REOPENED.png'); | |||||
background-image: url('../../images/status/REOPENED.png'); | |||||
} | } | ||||
option.status_resolved { | option.status_resolved { | ||||
background-image: url('../images/status/RESOLVED.png'); | |||||
background-image: url('../../images/status/RESOLVED.png'); | |||||
} | } | ||||
option.status_closed { | option.status_closed { | ||||
background-image: url('../images/status/CLOSED.png'); | |||||
background-image: url('../../images/status/CLOSED.png'); | |||||
} | } | ||||
option.sev_INFO, span.sev_INFO { | option.sev_INFO, span.sev_INFO { | ||||
background-image: url('../images/priority/INFO.png'); | |||||
background-image: url('../../images/priority/INFO.png'); | |||||
} | } | ||||
option.sev_MINOR, span.sev_MINOR { | option.sev_MINOR, span.sev_MINOR { | ||||
background-image: url('../images/priority/MINOR.png'); | |||||
background-image: url('../../images/priority/MINOR.png'); | |||||
} | } | ||||
option.sev_MAJOR, span.sev_MAJOR { | option.sev_MAJOR, span.sev_MAJOR { | ||||
background-image: url('../images/priority/MAJOR.png'); | |||||
background-image: url('../../images/priority/MAJOR.png'); | |||||
} | } | ||||
option.sev_CRITICAL, span.sev_CRITICAL { | option.sev_CRITICAL, span.sev_CRITICAL { | ||||
background-image: url('../images/priority/CRITICAL.png'); | |||||
background-image: url('../../images/priority/CRITICAL.png'); | |||||
} | } | ||||
option.sev_BLOCKER, span.sev_BLOCKER { | option.sev_BLOCKER, span.sev_BLOCKER { | ||||
background-image: url('../images/priority/BLOCKER.png'); | |||||
background-image: url('../../images/priority/BLOCKER.png'); | |||||
} | } | ||||
/* ------------------- VARIATIONS ------------------- */ | /* ------------------- VARIATIONS ------------------- */ | ||||
color: #444; | color: #444; | ||||
vertical-align: bottom; | vertical-align: bottom; | ||||
font-weight: bold; | font-weight: bold; | ||||
background: url('../images/information.png') no-repeat left center; | |||||
background: url('../../images/information.png') no-repeat left center; | |||||
} | } | ||||
.help p { | .help p { | ||||
ul.bullet li { | ul.bullet li { | ||||
padding: 2px 0; | padding: 2px 0; | ||||
list-style-image: url("../images/bullet.png"); | |||||
list-style-image: url("../../images/bullet.png"); | |||||
} | } | ||||
.rule_title { | .rule_title { | ||||
} | } | ||||
.line-info { | .line-info { | ||||
background: url('../images/information.png') no-repeat scroll left 50% transparent; | |||||
background: url('../../images/information.png') no-repeat scroll left 50% transparent; | |||||
padding-left: 18px | padding-left: 18px | ||||
} | } | ||||
.csv { | .csv { | ||||
display: block; | display: block; | ||||
background: url("../images/csv.png") no-repeat scroll left 50% transparent; | |||||
background: url("../../images/csv.png") no-repeat scroll left 50% transparent; | |||||
padding: 2px 0 2px 20px; | padding: 2px 0 2px 20px; | ||||
} | } | ||||
.add { | .add { | ||||
display: block; | display: block; | ||||
background: url("../images/add.png") no-repeat scroll left 50% transparent; | |||||
background: url("../../images/add.png") no-repeat scroll left 50% transparent; | |||||
padding: 2px 0 2px 20px; | padding: 2px 0 2px 20px; | ||||
} | } | ||||
.restore { | .restore { | ||||
display: block; | display: block; | ||||
background: url("../images/restore.gif") no-repeat scroll left 50% transparent; | |||||
background: url("../../images/restore.gif") no-repeat scroll left 50% transparent; | |||||
padding: 2px 0 2px 20px; | padding: 2px 0 2px 20px; | ||||
} | } | ||||
.compare { | .compare { | ||||
display: block; | display: block; | ||||
background: url("../images/compare.png") no-repeat scroll left 50% transparent; | |||||
background: url("../../images/compare.png") no-repeat scroll left 50% transparent; | |||||
padding: 2px 0 2px 20px; | padding: 2px 0 2px 20px; | ||||
} | } | ||||
} | } | ||||
.link-more { | .link-more { | ||||
background-image: url('../images/bullet_arrow_down.png'); | |||||
background-image: url('../../images/bullet_arrow_down.png'); | |||||
background-repeat: no-repeat; | background-repeat: no-repeat; | ||||
padding-right: 20px; | padding-right: 20px; | ||||
background-position: right center; | background-position: right center; |