├── .editorconfig ├── .gitignore ├── Gruntfile.js ├── LICENSE ├── README.md ├── generator.sublime-project ├── package.json └── src ├── docs ├── how-to │ ├── how-to-de.js │ ├── how-to-en.js │ ├── how-to-es.js │ ├── how-to-fr.js │ └── how-to-it.js ├── raw-data │ ├── raw-data-de.js │ ├── raw-data-en.js │ ├── raw-data-es.js │ ├── raw-data-fr.js │ └── raw-data-it.js └── save-state │ ├── save-state-de.js │ ├── save-state-en.js │ ├── save-state-es.js │ ├── save-state-fr.js │ └── save-state-it.js ├── fonts ├── LICENSES ├── fontawesome-webfont-subset.eot ├── fontawesome-webfont-subset.otf ├── fontawesome-webfont-subset.svg ├── fontawesome-webfont-subset.ttf ├── fontawesome-webfont-subset.woff ├── fontawesome-webfont-subset.woff2 ├── opensans-bold.eot ├── opensans-bold.otf ├── opensans-bold.svg ├── opensans-bold.ttf ├── opensans-bold.woff ├── opensans-bold.woff2 ├── opensans-regular.eot ├── opensans-regular.otf ├── opensans-regular.svg ├── opensans-regular.ttf ├── opensans-regular.woff └── opensans-regular.woff2 ├── js ├── bootstrap-datepicker.js ├── bootstrap3-typeahead.js ├── generator.js ├── multiline.js ├── parse-data.js └── table-dnd.js ├── lang ├── de.txt ├── en.txt ├── es.txt ├── fr.txt └── it.txt ├── libs ├── bootstrap.min.js └── jquery.min.js ├── sass ├── generator.scss └── partials │ ├── _bootstrap.scss │ ├── _datepicker.scss │ └── _invoice.print.scss └── template ├── data.js ├── data.txt ├── mobile.scss ├── print.css ├── template.html ├── template.scss └── themes ├── _alice.scss ├── _cananista.scss ├── _elegance.scss ├── _modesta.scss ├── _morelo.scss └── _onyx.scss /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # Howto with your editor: 4 | # Sublime: https://github.com/sindresorhus/editorconfig-sublime 5 | 6 | # top-most EditorConfig file 7 | root = true 8 | 9 | # Windows-style newlines with a newline ending every file 10 | [**] 11 | end_of_line = crlf 12 | insert_final_newline = true 13 | 14 | # Standard at: https://github.com/felixge/node-style-guide 15 | [**.js, **.json] 16 | trim_trailing_whitespace = true 17 | indent_style = space 18 | indent_size = 2 19 | max_line_length = 80 20 | quote_type = single 21 | curly_bracket_next_line = false 22 | spaces_around_operators = true 23 | space_after_control_statements = true 24 | space_after_anonymous_functions = false 25 | spaces_in_brackets = false 26 | 27 | # https://github.com/jedmao/codepainter 28 | [node_modules/**.js] 29 | codepaint = false 30 | 31 | # No Standard. Please document a standard if different from .js 32 | [**.yml, **.html, **.css] 33 | trim_trailing_whitespace = true 34 | indent_style = space 35 | indent_size = 2 36 | 37 | # No standard. Please document a standard if different from .js 38 | [**.md] 39 | indent_style = space 40 | 41 | # Standard at: 42 | [**.py] 43 | indent_style = space 44 | indent_size = 4 45 | 46 | # Standard at: 47 | [Makefile] 48 | indent_style = tab 49 | indent_size = 8 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .sass-cache 3 | 4 | dist 5 | rackspace-cloudfiles.json 6 | package-lock.json 7 | promo*.html 8 | 9 | *.sublime-workspace 10 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | // Time how long tasks take, can help when optimizing build times 4 | require('time-grunt')(grunt); 5 | 6 | // If rackspace-cloudfiles.json file don't exist create one 7 | if(!grunt.file.exists('./rackspace-cloudfiles.json')) 8 | grunt.file.write('./rackspace-cloudfiles.json', '{}'); 9 | 10 | // If promo.html file don't exist create one 11 | if(!grunt.file.exists('./promo.html')) 12 | grunt.file.write('./promo.html', ''); 13 | 14 | 15 | // Project configuration. 16 | grunt.initConfig({ 17 | 18 | pkg: grunt.file.readJSON('package.json'), 19 | 20 | jshint: { 21 | options: { 22 | reporter: require('jshint-stylish'), // use jshint-stylish to make our errors look and read good 23 | reporterOutput: '' 24 | }, 25 | src: ['Gruntfile.js', '<%= js_src %>'] 26 | }, 27 | 28 | clean: { 29 | build: { 30 | src: ['dist'] 31 | }, 32 | fonts: { 33 | src: ['dist/fonts'] 34 | } 35 | }, 36 | 37 | concat: { 38 | options: { 39 | banner: '<%= banner %>\n' 40 | }, 41 | js: { 42 | src: '<%= js_src %>', 43 | dest: '<%= build_dir %><%= build_js %>' 44 | } 45 | }, 46 | 47 | uglify: { 48 | options: { 49 | compress: { 50 | drop_console: true 51 | }, 52 | banner: '<%= banner %>\n' 53 | }, 54 | js: { 55 | files: { 56 | '<%= build_dir %><%= build_js %>': '<%= js_src %>' 57 | } 58 | } 59 | }, 60 | 61 | compass: { 62 | options: { 63 | sassDir: '<%= css_src %>', 64 | fontsDir: 'src/fonts', 65 | httpFontsPath: 'fonts', 66 | force: true 67 | }, 68 | dev: { 69 | options: { 70 | banner: '<%= banner %>', 71 | specify: '<%= css_src %>/*.scss', 72 | cssDir: '<%= build_dir %>', 73 | environment: 'development' 74 | } 75 | }, 76 | prod: { 77 | options: { 78 | banner: '<%= banner %>', 79 | specify: '<%= css_src %>/*.scss', 80 | cssDir: '<%= build_dir %>', 81 | environment: 'production' 82 | } 83 | }, 84 | tpl_dev: { 85 | options: { 86 | sassDir: '<%= tpl_dir %>', 87 | cssDir: '<%= build_dir %>', 88 | environment: 'development' 89 | } 90 | }, 91 | tpl_prod: { 92 | options: { 93 | sassDir: '<%= tpl_dir %>', 94 | cssDir: '<%= build_dir %>', 95 | environment: 'development', // Don't compress 96 | debugInfo: false, 97 | noLineComments: true 98 | } 99 | } 100 | }, 101 | 102 | copy: { 103 | tpl: { 104 | src: ['<%= tpl_dir %>/*.html', '<%= tpl_dir %>/data.*', 'src/libs/*.js'], 105 | dest: '<%= build_dir %>', 106 | expand: true, 107 | flatten: true 108 | }, 109 | fonts: { 110 | src: ['src/fonts/*'], 111 | dest: '<%= build_dir %>/fonts', 112 | expand: true, 113 | flatten: true 114 | }, 115 | lang: { 116 | src: ['<%= lang_dir %>/*'], 117 | dest: '<%= build_dir %>/lang', 118 | expand: true, 119 | flatten: true 120 | }, 121 | docs: { 122 | src: ['**/*'], 123 | dest: '<%= build_dir %>/docs', 124 | cwd: 'src/docs/', 125 | expand: true 126 | }, 127 | print_css: { 128 | src: ['<%= tpl_dir %>/print.css'], 129 | dest: '<%= build_dir %>', 130 | expand: true, 131 | flatten: true 132 | } 133 | }, 134 | 135 | replace: { 136 | dev: { 137 | options: { 138 | patterns: [ 139 | { 140 | match: 'TRACKING', 141 | replacement: '<%= tracking %>' 142 | }, 143 | { 144 | match: 'MIN', 145 | replacement: '' 146 | }, 147 | { 148 | match: 'SAVE_URL', 149 | replacement: '<%= save_url %>' 150 | }, 151 | { 152 | match: 'GENERATOR', 153 | replacement: '<%= build_js %>' 154 | }, 155 | { 156 | match: 'SCRIPT', 157 | replacement: '\n' 158 | }, 159 | { 160 | match: 'TPL_NOTE', 161 | replacement: '<%= tpl_note %>' 162 | }, 163 | { 164 | match: 'PROMO', 165 | replacement: '<%= promo %>' 166 | } 167 | ] 168 | }, 169 | files: [ 170 | { 171 | expand: true, 172 | flatten: true, 173 | src: ['<%= build_dir %><%= build_js %>', '<%= build_dir %>*.html'], 174 | dest: '<%= build_dir %>' 175 | } 176 | ] 177 | }, 178 | pubdev: { 179 | options: { 180 | patterns: [ 181 | { 182 | match: 'TRACKING', 183 | replacement: '<%= tracking %>' 184 | }, 185 | { 186 | match: 'MIN', 187 | replacement: '' 188 | }, 189 | { 190 | match: 'SAVE_URL', 191 | replacement: '<%= save_url %>' 192 | }, 193 | { 194 | match: 'GENERATOR', 195 | replacement: '<%= build_js %>' 196 | }, 197 | { 198 | match: 'SCRIPT', 199 | replacement: '' 200 | }, 201 | { 202 | match: 'TPL_NOTE', 203 | replacement: '<%= tpl_note %>' 204 | }, 205 | { 206 | match: 'PROMO', 207 | replacement: '<%= promo %>' 208 | } 209 | ] 210 | }, 211 | files: [ 212 | { 213 | expand: true, 214 | flatten: true, 215 | src: ['<%= build_dir %>*.js', '<%= build_dir %>*.html'], 216 | dest: '<%= build_dir %>' 217 | } 218 | ] 219 | }, 220 | prod: { 221 | options: { 222 | patterns: [ 223 | { 224 | match: 'TRACKING', 225 | replacement: '<%= tracking %>' 226 | }, 227 | { 228 | match: 'MIN', 229 | replacement: '.min' 230 | }, 231 | { 232 | match: 'SAVE_URL', 233 | replacement: '<%= save_url %>' 234 | }, 235 | { 236 | match: 'GENERATOR', 237 | replacement: '<%= build_js.replace(".js", ".min.js") %>' 238 | }, 239 | { 240 | match: 'SCRIPT', 241 | replacement: '' 242 | }, 243 | { 244 | match: 'TPL_NOTE', 245 | replacement: '<%= tpl_note %>' 246 | }, 247 | { 248 | match: 'PROMO', 249 | replacement: '<%= promo %>' 250 | } 251 | ] 252 | }, 253 | files: [ 254 | { 255 | expand: true, 256 | flatten: true, 257 | src: ['<%= build_dir %><%= build_js %>', '<%= build_dir %>*.html'], 258 | dest: '<%= build_dir %>' 259 | } 260 | ] 261 | }, 262 | pubprod: { 263 | options: { 264 | patterns: [ 265 | { 266 | match: 'TRACKING', 267 | replacement: '<%= tracking %>' 268 | }, 269 | { 270 | match: 'MIN', 271 | replacement: '.min' 272 | }, 273 | { 274 | match: 'SAVE_URL', 275 | replacement: '<%= save_url %>' 276 | }, 277 | { 278 | match: 'GENERATOR', 279 | replacement: '<%= build_js.replace(".js", ".min.js") %>' 280 | }, 281 | { 282 | match: 'SCRIPT', 283 | replacement: '' 284 | }, 285 | { 286 | match: 'TPL_NOTE', 287 | replacement: '<%= tpl_note %>' 288 | }, 289 | { 290 | match: 'PROMO', 291 | replacement: '<%= promo %>' 292 | } 293 | ] 294 | }, 295 | files: [ 296 | { 297 | expand: true, 298 | flatten: true, 299 | src: ['<%= build_dir %>*.js', '<%= build_dir %>*.html'], 300 | dest: '<%= build_dir %>' 301 | } 302 | ] 303 | }, 304 | tpl: { 305 | options: { 306 | patterns: [ 307 | { 308 | match: 'TPL_NOTE', 309 | replacement: '<%= tpl_note %>' 310 | }, 311 | { 312 | match: 'SCRIPT', 313 | replacement: '' 314 | } 315 | ] 316 | }, 317 | files: [ 318 | { 319 | expand: true, 320 | flatten: true, 321 | src: ['<%= build_dir %>*.html'], 322 | dest: '<%= build_dir %>' 323 | } 324 | ] 325 | } 326 | }, 327 | 328 | rename: { 329 | prod: { 330 | files: [ 331 | { 332 | src: ['<%= build_dir %><%= build_js %>'], 333 | dest: '<%= build_dir %><%= build_js.replace(".js", ".min.js") %>' 334 | }, 335 | { 336 | src: ['<%= build_dir %><%= build_css %>'], 337 | dest: '<%= build_dir %><%= build_css.replace(".css", ".min.css") %>' 338 | } 339 | ] 340 | } 341 | }, 342 | 343 | compress: { 344 | tpl: { 345 | options: { 346 | level: 9, 347 | archive: '<%= build_dir %>template.zip' 348 | }, 349 | files: [ 350 | { 351 | src: ['template.html', 'template.css', 'data.txt'], 352 | cwd: '<%= build_dir %>', 353 | filter: 'isFile', 354 | expand: true 355 | } 356 | ] 357 | }, 358 | gen: { 359 | options: { 360 | level: 9, 361 | archive: '<%= build_dir %>generator.zip' 362 | }, 363 | files: [ 364 | { 365 | src: ['bootstrap.*', 'generator.*', 'jquery.*', '{fonts,lang,docs}/**/*'], 366 | cwd: '<%= build_dir %>', 367 | filter: 'isFile', 368 | expand: true 369 | } 370 | ] 371 | } 372 | }, 373 | 374 | // Used for uploading final version on CloudFiles CDN 375 | cloudfiles: { 376 | // In rackspace-cloudfiles.json add JSON object as described at https://github.com/rtgibbons/grunt-cloudfiles 377 | publish: grunt.file.readJSON('rackspace-cloudfiles.json') 378 | }, 379 | 380 | watch: { 381 | gruntfile: { 382 | files: 'Gruntfile.js', 383 | tasks: ['dev'] 384 | }, 385 | js: { 386 | files: ['<%= js_src %>'], 387 | tasks: ['jshint', 'concat:js', 'replace:dev'] 388 | }, 389 | css: { 390 | files: '<%= css_src %>/**/*', 391 | tasks: ['compass:dev'] 392 | }, 393 | tpl_html: { 394 | files: '<%= tpl_dir %>/*.html', 395 | tasks: ['copy:tpl', 'replace:dev'] 396 | }, 397 | tpl_data: { 398 | files: '<%= tpl_dir %>/data.*', 399 | tasks: ['copy:tpl', 'replace:dev'] 400 | }, 401 | tpl_css: { 402 | files: '<%= tpl_dir %>/*.scss', 403 | tasks: ['compass:tpl_dev'] 404 | }, 405 | lang: { 406 | files: '<%= lang_dir %>/*', 407 | tasks: ['copy:lang'] 408 | }, 409 | docs: { 410 | files: '<%= docs_dir %>/**/*', 411 | tasks: ['copy:docs'] 412 | }, 413 | livereload: { 414 | options: { 415 | livereload: true 416 | }, 417 | files: ['src/**/*', 'docs/*'], 418 | } 419 | }, 420 | 421 | banner: '/*! <%= pkg.description %> @author: <%= pkg.author.name %> @email: <%= pkg.author.email %> @web: <%= pkg.author.web %> @version: <%= pkg.version %> @updated: <%= grunt.template.today("yyyy-mm-dd HH:mm:ss") %> @license: <%= pkg.license %> */', 422 | tpl_note: '', 423 | promo: grunt.file.read('promo.html').replace(/'/g, "\\'").replace(/"/g, "\\\"").replace(/\r\n|\r|\n/g, '[crlf]'), 424 | 425 | js_src: ['src/js/<%= build_js %>', 'src/js/table-dnd.js', 'src/js/bootstrap-datepicker.js', 'src/js/bootstrap3-typeahead.js', 'src/js/multiline.js', 'src/js/parse-data.js'], 426 | css_src: 'src/sass', 427 | 428 | lang_dir: 'src/lang', 429 | docs_dir: 'src/docs', 430 | 431 | build_js: 'generator.js', 432 | build_css: 'generator.css', 433 | 434 | build_dir: 'dist/', 435 | 436 | tpl_dir: 'src/template', 437 | 438 | cdn_path: 'http://cdn.invoicebus.com/generator/', 439 | tracking: '?utm_source=generator&utm_medium=template&utm_campaign=invoicebus_templates', 440 | save_url: 'https://invoicebus.com/saveinvoice/' 441 | 442 | }); 443 | 444 | // Load the plugins that provides the tasks. 445 | require('load-grunt-tasks')(grunt); 446 | 447 | 448 | // Dev build task. 449 | grunt.registerTask('dev', ['clean', 'jshint', 'concat:js', 'compass:dev', 'compass:tpl_dev', 'copy:tpl', 'replace:dev', 'copy:fonts', 'copy:lang', 'copy:docs']); 450 | 451 | // Prod build task. 452 | grunt.registerTask('prod', ['clean', 'jshint', 'uglify:js', 'compass:prod', 'compass:tpl_prod', 'copy:tpl', 'replace:prod', 'rename:prod', 'copy:fonts', 'copy:lang', 'copy:docs']); 453 | 454 | 455 | // Publish to CloudFiles CDN 456 | grunt.registerTask('pub', [ 457 | 'clean', 458 | 459 | 'copy:fonts', 460 | 461 | 'jshint', 462 | 463 | 'copy:lang', 464 | 'copy:docs', 465 | 466 | 'uglify:js', 467 | 'compass:prod', 468 | 'compass:tpl_prod', 469 | 'copy:tpl', 470 | 'replace:prod', 471 | 'rename:prod', 472 | 473 | 'compress:gen', 474 | 475 | 'uglify:js', 476 | 'compass:prod', 477 | 'compass:tpl_prod', 478 | 'copy:tpl', 479 | 'replace:pubprod', 480 | 'rename:prod', 481 | 482 | 'compress:tpl', 483 | 484 | 'concat:js', 485 | 'compass:dev', 486 | 'replace:pubdev', 487 | 488 | 'copy:print_css', 489 | 490 | /* 491 | Fonts shouldn't be uploaded everytime, 492 | so if there are changes upload them manually and 493 | set header 'Access-Control-Allow-Origin': * to all font files 494 | and proper 'Content-Type' headers: 495 | 496 | .eot - application/vnd.ms-fontobject 497 | .otf - application/font-sfnt 498 | .svg - image/svg+xml 499 | .ttf - application/font-sfnt 500 | .woff - application/font-woff 501 | .woff2 - application/font-woff2 502 | */ 503 | 504 | 'clean:fonts', 505 | 506 | 'cloudfiles:publish' 507 | ]); 508 | 509 | 510 | // Default task(s). 511 | grunt.registerTask('default', ['dev', 'watch']); 512 | 513 | }; 514 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Invoicebus 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HTML Invoice Generator 2 | 3 | This Invoice Generator will easily transform your HTML invoice template in fully functional invoice editor. To create your own invoice template and use it with this generator see the [Create your own invoice template](#create-your-own-invoice-template) section. 4 | 5 | ## Demo 6 | 7 | To see the Invoice Generator in action check out working version of a [sample invoice](http://cdn.invoicebus.com/templates/Vip%20(tertia)/template.html). 8 | 9 | ## Setup 10 | 11 | Because we use [Sass](http://sass-lang.com/) and [Compass](http://compass-style.org/) for the styles, we'll need to make sure we have [Ruby](https://www.ruby-lang.org/en/) installed on our system. Make sure the `ruby` command is available in your command line terminal. 12 | 13 | After the Ruby setup, install Sass with: 14 | `gem install sass` 15 | 16 | And Compass with: 17 | `gem install compass` 18 | 19 | To make changes to the generator you'll need Node.js with npm so make sure it is installed on your machine. After this install grunt command line tool globally with: 20 | `npm install -g grunt-cli` 21 | 22 | And from the project's root install the dependencies with: 23 | `npm install` 24 | 25 | ### Development 26 | For easier development you can watch all files for changes and use auto livereload with the default task `grunt`. 27 | 28 | ### Build 29 | 30 | To build the generator just run `grunt dev` or `grunt prod` on the command line. Those will produce fully functional template and generator files in the `dist` folder. The production version will produce minimized JavaScript and CSS files unlike the development version which is meant for easier debugging. 31 | 32 | ## Supported browsers 33 | 34 | The generator script is tested and confirmed that is fully functional in: 35 | 36 | * Chrome 37 | * Firefox 38 | * Safari 6+ 39 | * Opera 15+ 40 | * Internet Explorer 10+ 41 | 42 | ## Create your own invoice template 43 | 44 | The major rule we have for this is **never start from scratch** so we encourage you to download the default Invoicebus [template](http://cdn.invoicebus.com/generator/template.zip) and use it as starting point for creating your custom invoice template. Refer to our [official guide](https://invoicebus.com/create-html-invoice-template/) on how to further customize your template. 45 | 46 | ## Issues and feedback 47 | 48 | If you found bugs please submit them [here](https://github.com/Invoicebus/html-invoice-generator/issues). For general questions and feedback use our [support forum](https://groups.google.com/d/forum/html-invoice-generator). 49 | 50 | ## License 51 | 52 | The Invoice Generator is under [MIT](https://github.com/Invoicebus/html-invoice-generator/blob/master/LICENSE) license. 53 | -------------------------------------------------------------------------------- /generator.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "follow_symlinks": true, 6 | "path": ".", 7 | "folder_exclude_patterns": ["node_modules", ".sass-cache", ".git"] 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "invoice-generator", 3 | "version": "1.0.0", 4 | "description": "Invoice Template Generator", 5 | "private": true, 6 | "keywords": [ 7 | "invoice", 8 | "invoicing" 9 | ], 10 | "author": { 11 | "name": "Invoicebus", 12 | "email": "info@invoicebus.com", 13 | "web": "https://invoicebus.com" 14 | }, 15 | "license": "MIT", 16 | "devDependencies": { 17 | "grunt": "^0.4.5", 18 | "grunt-cloudfiles": "^0.3.0", 19 | "grunt-contrib-clean": "^0.6.0", 20 | "grunt-contrib-compass": "^1.0.1", 21 | "grunt-contrib-compress": "^0.12.0", 22 | "grunt-contrib-concat": "^0.5.0", 23 | "grunt-contrib-copy": "^0.5.0", 24 | "grunt-contrib-jshint": "^0.10.0", 25 | "grunt-contrib-rename": "0.0.3", 26 | "grunt-contrib-uglify": "^0.5.1", 27 | "grunt-contrib-watch": "^0.6.1", 28 | "grunt-replace": "^0.8.0", 29 | "jshint-stylish": "^0.4.0", 30 | "load-grunt-tasks": "^0.6.0", 31 | "time-grunt": "^1.0.0" 32 | }, 33 | "engines": { 34 | "node": ">=0.10.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/docs/how-to/how-to-de.js: -------------------------------------------------------------------------------- 1 | var ib_how_to_data = function(){/* 2 | 3 | 4 | Wenn sie ein mann performer und alles, was sie für ihr unternehmen tun tun sie es selbst – willkommen im club! Sie sind gut mit dem schmerz des schreibens rechnungen vertraut. Word? Excel? Komplizierte abrechnungssoftware? Vergessen sie es und hallo sie neue freude! 5 | 6 | 7 | Was kann ich mit dieser vorlage zu tun? 8 | 9 | 10 | 11 | ●   Schreiben sie professionell aussehende rechnungen in einer angelegenheit von sekunden. 12 | 13 | 14 | ○   Verwenden sie eine sprache oder währung. 15 | 16 | 17 | ○   Fügen sie ihr eigenes logo mit einfachen drag-und-drop. 18 | 19 | 20 | ○   Einfaches hinzufügen, entfernen und positionszeilen neu anordnen. 21 | 22 | 23 | ○   In steuern und rabatten. 24 | 25 | 26 | ○   Artikel konfigurieren spalte sichtbarkeit. 27 | 28 | 29 | ○   Auto berechnen zwischensummen, summen, steuern und rabatte. 30 | 31 | 32 | ○   Speichern sie ihre standard-unternehmensdaten für die zukünftige nutzung. 33 | 34 | 35 | 36 | 37 | ●   Restyle es mit einfachen HTML und CSS techniken. 38 | 39 | 40 | ●   Drucken sie es direkt aus. 41 | 42 | 43 | ●   Speichern sie es auf PDF oder online speichern. 44 | 45 | 46 | 47 | 48 | Wie kann ich meine standard-unternehmensdaten für eine zukunfts verwendung speichern? 49 | 50 | Klicken sie auf "Sicherer Staat" und folgen sie den anweisungen auf dem bildschirm. 51 | 52 | 53 | Wie die rechnung speichern? 54 | 55 | Es gibt zwei möglichkeiten, um die rechnung zu sparen: 56 | 57 | 58 | -   Speichern sie es mit PDF-drucker in PDF. 59 | 60 | 61 | -   Sparen sie online in unserem Online-Abrechnungssystem Invoicebus. 62 | 63 | 64 | 65 | 66 | 67 | Speichern der rechnung zu PDF können mit etwas namens PDF-druckertreiber erfolgen. Dies wird auch als das drucken auf PDF bekannt, weil die ausgabe von dem browser zu einer datei an einen drucker gesendet wird, statt. Diese funktionalität ist in einigen browsern eingebaut (wie Google Chrome), während in anderen (wie Firefox oder Internet Explorer) sie müssen manuell PDF-drucker zu installieren. Eine gute und kostenlose PDF-drucker ist Bullzip. Wenn sie bereits ihre PDF-drucker installiert haben klicken sie auf "Drucken", gesetzt der zieldrucker auf "Als PDF Speichern" und klicken sie auf Speichern. 68 | 69 | 70 | 71 | Um die rechnung zu sparen online müssen sie zunächst ein Invoicebus konto zu erstellen. Sie können dies tun, indem Sie auf "Speichern Online" taste. Dann werden sie auf eine sichere seite, auf der sie ihre registrierung abschließen können und die rechnung speichern. Bitte beachten sie, dass eine online-rechnung ist viel mächtiger als eine statische PDF-rechnung. Zum beispiel kann ein online-rechnung on-the-fly bearbeitet werden, per e-mail gesendet, verfolgt und direkt per Kreditkarte, PayPal oder Bitcoin bezahlt. Hier ist ein beispiel. 72 | 73 | 74 | Wie die vorlage restyle? 75 | 76 | Die vorlage wird mit einfachheit im verstand gemacht, so kann leicht mit ihrem eigenen branding und farben angepasst werden. Jedoch wird grundwissen in HTML und CSS erforderlich. 77 | 78 | 79 | 80 | Für kleinere änderungen (wie das ändern sie farben, schriftarten oder elementgrößen) müssen sie nur die template.css datei zu ändern. Wenn sie größere strukturelle veränderungen des layouts machen wollen (löschen oder elemente neu anordnen), müssen sie die template.html datei zu ändern. Wir haben einen führen mit bewährte methoden, wie sie ihre eigene vorlage zu erstellen, so frei zu verwenden es als bezugspunkt zu fühlen. 81 | 82 | 83 | 84 | Hinweis: Die vorlage ist völlig unabhängig von seiner logik, so dass sie mess up mit jeder programmierung oder JavaScript-code nicht brauchen. 85 | 86 | 87 | Muss ich mit dem Internet verbunden werden müssen, es zu benutzen? 88 | 89 | Ja, aber ist nicht erforderlich. Im hintergrund die vorlage links remote-JavaScript-datei (generator.min.js) auf unserem server, von dem zieht es die ganze logik. Wenn sie aus irgendeinem grund keinen zugang zum internet auf ihrem computer haben, können sie herunterladen das skript lokal, und die template.html datei auf die lokale version des skripts zu punkt. 90 | 91 | 92 | 93 | Wir empfehlen ihnen, im allgemeinen mit dem remote-skript fortgesetzt werden, da alle aktuellen updates sofort in die vorlage reflektieren sie verwenden. 94 | 95 | 96 | Was ist mit den verwendeten schriften? 97 | 98 | Die vorlage benutzt Google Fonts, wie sie frei und für jedermann zugänglich sind. Wenn sie die vorlage offline verwenden möchten (ohne mit dem internet verbunden ist) sie herunterladen und die schriften auf ihrem lokalen computer installieren (SkyFonts ist ein einfaches werkzeug, das ihnen diese) leicht tun können. 99 | 100 | 101 | 102 | Kann ich die JavaScript-quellcode verwenden 103 | 104 | Absolut! In der tat würden wir uns stolz, wenn sie sich entscheiden, es zu benutzen (gabel uns auf GitHub). Ob sie es verwenden in kommerziellen oder nichtkommerziellen projekt wählen, können sie uns einen ruf zu geben, wie wir bestrebt sind, alle möglichkeiten zu hören, wie dieses werkzeug verwendet werden kann. Manchmal können wir ihnen sogar eine hand ;) 105 | 106 | 107 | Unterstützen sie unsere arbeit 108 | 109 | Dieses skript pflege braucht viel zeit und mühe es fehlerfrei zu halten und auf dem neuesten stand. Alles, was wir bitten, ist ein wenig gefallen – diskrete feinen druck unserer rechnungsdienst am unteren rand des gedruckten dokuments. Es würde uns die welt bedeuten, wenn sie es dort lassen. Vielen dank! 110 | 111 | 112 | 113 | Es ist in ordnung, auch wenn sie uns kredit zu vermeiden, entscheiden zu geben, so haben wir diese wahl für sie einfacher. Im data.txt datei, die wir eingeschlossen eigenschaft namens invoicebus_fineprint die eingestellt werden können, um true (das kleingedruckte zu zeigen) oder false (das kleingedruckte zu verstecken). 114 | 115 | 116 | Fehler gefunden? 117 | 118 | Wenn sie ein problem auftritt oder einen bug gefunden, melden sie dies bitte bei unserer GitHub repo. Bitte senden sie keine allgemeine fragen hier, anstatt das support-forum (siehe unten). 119 | 120 | 121 | Anregungen, fragen, kritik? 122 | 123 | Gibt es etwas, was wir tun können diese vorlage zu verbessern und machen es besser für sie? Gute dinge / schlechte dinge? Fühlen sie sich frei auf das entsprechende thema in unserem support-forum und treffen uns auf – wir jeden Beitrag lesen und beantworten. 124 | 125 | 126 | */} 127 | -------------------------------------------------------------------------------- /src/docs/how-to/how-to-en.js: -------------------------------------------------------------------------------- 1 | var ib_how_to_data = function(){/* 2 | 3 | 4 | If you're one-man performer and everything you do for your business you do it by yourself – welcome to the club! You're well familiar with the pain of writing invoices. Word? Excel? Complicated accounting software? Forget about it and hello you new joy! 5 | 6 | 7 | What can I do with this template? 8 | 9 | 10 | 11 | ●   Write professional looking invoices in a matter of seconds. 12 | 13 | 14 | ○   Use any language or currency. 15 | 16 | 17 | ○   Add your own logo with simple drag and drop. 18 | 19 | 20 | ○   Easily add, remove, and reorder item rows. 21 | 22 | 23 | ○   Add taxes and discounts. 24 | 25 | 26 | ○   Configure item column visibility. 27 | 28 | 29 | ○   Auto calculate subtotals, totals, taxes and discounts. 30 | 31 | 32 | ○   Save the current invoice data for future re-use. 33 | 34 | 35 | ○   Open already saved invoice data (useful when invoicing different clients). 36 | 37 | 38 | 39 | 40 | ●   Restyle it by using simple HTML & CSS techniques. 41 | 42 | 43 | ●   Directly print it out. 44 | 45 | 46 | ●   Save it to PDF or save it online. 47 | 48 | 49 | 50 | 51 | How to save the invoice? 52 | 53 | There are three ways to save the invoice: 54 | 55 | 56 | 1)  Save it locally in editable .txt format with the "Save State" button. 57 | 58 | 59 | 2)  Save it to PDF using PDF printer. 60 | 61 | 62 | 3)  Save it online to our online invoicing system Invoicebus. 63 | 64 | 65 | 66 | 67 | 68 | 1) To save the invoice data locally in editable format use the "Save State" button in the top menu and follow the on-screen instructions. 69 | 70 | 71 | 72 | 2) Saving the invoice to PDF can be done by using something called PDF Print Driver. This is also known as printing to PDF because the output from the browser is sent to a file instead to a printer. This functionality is built-in in some browsers (like Google Chrome), while in others (like Firefox or Internet Explorer) you have to install PDF printer manually. A good and free PDF printer is Bullzip. If you already have your PDF printer installed, click "Print", set the destination printer to "Save as PDF" and click Save. 73 | 74 | 75 | 76 | 3) In order to save the invoice online you'll need to create an Invoicebus account first. You can do this by clicking "Save Online" button. Then you'll be taken to a secure page where you can complete your registration and save the invoice. Please note that an online invoice is much more powerful than a static PDF invoice. For example, an online invoice can be edited on-the-fly, sent by email, tracked, and paid directly by Credit card, PayPal or Bitcoin. Here's an example. 77 | 78 | 79 | How can I open already saved local invoice data? 80 | 81 | To open local data, click the "Open" button and from the file browser window select the data file you want to open. Note that the file must be previously saved invoice data with .txt extension, otherwise it won't load. 82 | 83 | 84 | 85 | Due to browser privacy restrictions the file must be loaded from the same location as the template.html file (the root directory of the template). So if you want to open data file from other location on your computer, first copy it to the template root folder. 86 | 87 | 88 | How to restyle the template? 89 | 90 | The template is made with simplicity in mind so can be easily customized with your own branding and colors. However, basic knowledge in HTML and CSS is required. 91 | 92 | 93 | 94 | For smaller modifications (like changing colors, fonts or element sizes) you only need to modify the template.css file. If you want to make bigger structural changes of the layout (deleting or rearranging elements), you'll need to modify the template.html file. We've made a guide with best practices on how to create your own template, so feel free to use it as a reference point. 95 | 96 | 97 | 98 | Note: The template is completely separate from its logic, so you don't need to mess up with any programming or JavaScript code. 99 | 100 | 101 | Do I have to be connected to internet to use it? 102 | 103 | Yes, but isn't necessary. In the background the template links to remote JavaScript file (generator.min.js) located on our server from which it pulls all the logic. If for some reason you don't have internet access on your computer, you can download the script locally, and modify the template.html file to point to the local version of the script. 104 | 105 | 106 | 107 | We generally encourage you to continue using the remote script because any recent updates immediately reflect into the template you're using. 108 | 109 | 110 | What about the fonts used? 111 | 112 | The template uses Google Fonts as they are free and open to everyone. If you want to use the template offline (without being connected to internet) you'll have to download and install the fonts on your local computer (SkyFonts is a simple tool that helps you do this easily). 113 | 114 | 115 | Can I use the JavaScript source code? 116 | 117 | Absolutely! In fact, we would be proud if you decide to use it (fork us on GitHub). Whether you choose to use it in commercial or non-commercial project, feel free to give us a shout as we are eager to hear all possibilities how this tool can be used. Sometimes, we may even give you a hand ;) 118 | 119 | 120 | Support our work 121 | 122 | Maintaining this script takes a lot of time and effort to keep it bug free and up to date. All we're asking is a little favor – discrete fine print of our invoicing service at the bottom of the printed document. It would mean the world to us if you leave it there. Thanks! 123 | 124 | 125 | 126 | It's fine even if you decide to avoid giving us credit, so we made this choice easier to you. In the local .txt invoice data file there's a property called invoicebus_fineprint which can be set to true (to show the fine print) or false (to hide the fine print). 127 | 128 | 129 | Found a bug? 130 | 131 | If you encounter any issue or found a bug, please report it at our GitHub repo. Please do not submit general questions here, instead use the support forum (see below). 132 | 133 | 134 | Suggestions, questions, criticism? 135 | 136 | Is there anything we can do to improve this template and make it better for you? Good things / bad things? Feel free to find the appropriate topic at our support forum and hit us up – we read and respond to every post. 137 | 138 | 139 | */} 140 | -------------------------------------------------------------------------------- /src/docs/how-to/how-to-es.js: -------------------------------------------------------------------------------- 1 | var ib_how_to_data = function(){/* 2 | 3 | 4 | Si tu es one-man performer y todo que haces para tu negocio lo haces solo – bienvenido al club! Conoces bien el aburrimiento de escribir facturas. Word? Excel? Software de contabilidad complicado? Olvida todo y saluda a tu nueva alegría! 5 | 6 | 7 | Que puedo hacer con esta plantilla? 8 | 9 | 10 | 11 | ●   Escribe facturas profesionales en cuestión de segundos. 12 | 13 | 14 | ○   Utilice cualquier idioma o moneda. 15 | 16 | 17 | ○   Añade tu logotipo con un simple arrastrar y soltar. 18 | 19 | 20 | ○   Añade, elimina y reordena fácilmente las líneas de las secciónes 21 | 22 | 23 | ○   Añade impuestos y descuentos. 24 | 25 | 26 | ○   Configura la visibilidad de la sección de la columna. 27 | 28 | 29 | ○   Autocalcula subtotales, totales, impuestos y descuentos. 30 | 31 | 32 | ○   Guarda los datos de negocio por estándar para tu uso futuro. 33 | 34 | 35 | 36 | 37 | ●   Redisegnala con otro estilo, usando de técnicas de HTML y CSS simples. 38 | 39 | 40 | ●   Imprime directamente. 41 | 42 | 43 | ●   Guardala en formato PDF o guardala online. 44 | 45 | 46 | 47 | 48 | ¿Cómo puedo guardar mis datos de negocio predefinidos para uso futuro? 49 | 50 | Haz click "Guardar Estado" al botón y sigue las instrucciones de la pantalla. 51 | 52 | 53 | Cómo guardar la factura? 54 | 55 | Hay dos maneras de guardar la factura: 56 | 57 | 58 | -   Guardar en PDF usando la impresora PDF. 59 | 60 | 61 | -   Guardala online en nuestro sistema de facturación online Invoicebus 62 | 63 | 64 | 65 | 66 | 67 | Guardando la factura en PDF se puede hacer usando algo llamado PDF Print Driver. Esto también se conoce como impresión en PDF ya que el resultado del navegador se envía a un archivo en lugar de una impresora. Esta funcionalidad se crea en algunos navegadores (como Google Chrome) mientras en otros (como Firefox o Internet Explorer)es necesario instalar la impresora de PDF de forma manual. Una impresora de PDF buena y gratis es Bullzip. Si ya has instalado una impresora PDF, click "Impresión", establece el objetivo para la impresión "Guarda en PDF" y haz click guarda. 68 | 69 | 70 | 71 | Para guardar tu factura online, primero debes crear una cuenta Invoicebus. Esto se puede hacer con un simple clic "Guardar Online" botón. Después, serás llevado a una página segura donde puedes completar tu registro y guardar la factura. Por favor, tenga en cuenta que una factura online es mucho más potente que una factura en PDF estático. Por ejemplo, una factura online se puede cambiar on-the-fly, enviada por correo electrónico, rastreada y pagada directamente con Credit card, PayPal o Bitcoin. Aquí es example. 72 | 73 | 74 | Cómo remodelar la plantilla? 75 | 76 | La plantilla está hecha con una simplicidad y se puede personalizar con tu logotipo y colores.Sin embargo, se necesita un conocimiento básico de HTML y CSS. 77 | 78 | 79 | 80 | Para cambios más pequeños (como el cambio de colores, la fuente o el tamaño de los elementos) sólo hay que modificar el archivo template.css. Si deseas hacer grandes cambios estructurales de layout (eliminando o traferendo elementi), tendrás que modificar el archivo template.html. Hemos creado guide con las mejores prácticas de cómo crear tu propia plantilla, así que no dude en utilizarla como un punto de referencia. 81 | 82 | 83 | 84 | Note: La plantilla es totalmente diferente de la lógica, por eso no se debe mezclar con cualquier programa o código JavaScript. 85 | 86 | 87 | Tengo que estar conectado a Internet para utilizarla? 88 | 89 | Sí, pero no es necesario. En el fondo la plantilla se conecta a un archivo JavaScript (generator.min.js) colocado en nuestro servidor que tira toda la lógica. Si por alguna razón no tienes conexión a Internet para su computadora, puedes descargar el script localmente, y modificar template.html el archivo para apuntar a la versión local del script. 90 | 91 | 92 | 93 | Por lo general, te animamos a seguir utilizando el scrip viejo, ya que cualquier actualización si refleja inmediatamente. 94 | 95 | 96 | Qué ocurre con los caracteres utilizados? 97 | 98 | La plantilla utiliza Fuentes de Google, ya que son gratuitas y abiertas a todos. Si quieres utilizar la plantilla offline (sin estar conectado a Internet) debes descargar y instalar las fuentes en tu ordenador (SkyFonts es una herramienta sencilla y te ayuda a hacer esto facilmente). 99 | 100 | 101 | Puedo utilizar el código JavaScript? 102 | 103 | ¡Por supuesto! De hecho, vamos a estar orgullosos de ti por hacerlo (tenedor nos en GitHub). A pesar decides de utlizarlo en proyectos comerciales o no comerciales, no dudes en decirnos porque queremos saber todas las posibilidades como esta harramienta puede ser utilizada. A veces, te podemos ayudar ;) 104 | 105 | 106 | Apoya el nuestro trabajo 107 | 108 | Mantener este script requiere mucho tiempo y esfuerzo para salvarlo libre y actualizado.Todo lo que buscamos es una pequeña ayuda – escribir las cláusulas en la parte baja de nuestro servicio de facturación al final del documento. Esto significará un mundo para nosotros si las dejas allí. Gracias! 109 | 110 | 111 | 112 | No hay problema si no quieres darnos crédito y por eso hemos hecho esto aún más fácil para ti. En el archivo data.txt hemos incluido propiedad llamada invoicebus_fineprint que se puede ajustar en true (para mostrar las clausulas) o false (para nasconder las clausulas). 113 | 114 | 115 | Has encontrado un eror? 116 | 117 | Si te encuentras con algun problema o error, por favor denucialo a GitHub repo. Por favor, no haces preguntas generales aquí, utiliza el nuestro foro de soporte (véase más abajo). 118 | 119 | 120 | Sugerencias, preguntas, críticas? 121 | 122 | Hay algo para hacer esta plantilla más bella y mejor para ti? Cosas buenas / cosas malas? Siéntase libre para encontrar el título apropiado en el nuestro foro de soporte y golpearnos – Leemos y respondemos a todos los envíos. 123 | 124 | 125 | */} 126 | -------------------------------------------------------------------------------- /src/docs/how-to/how-to-fr.js: -------------------------------------------------------------------------------- 1 | var ib_how_to_data = function(){/* 2 | 3 | 4 | Si vous êtes quelqu'un qui travaille individuellement et tout ce que vous faites pour votre business vous le faites seul – bienvenu au club! Vous connaissez bien la peine d'écrire des factures. Word? Excel? Des logiciels de comptabilité compliqués? Oubliez tout ça et saluez votre nouvelle joie! 5 | 6 | 7 | Qu'est-ce que je peux faire avec ce template? 8 | 9 | 10 | 11 | ●   Ecrire des factures qui ont l'air professionnel dans des secondes. 12 | 13 | 14 | ○   Utiliser n'importe quelle langue ou monnaie. 15 | 16 | 17 | ○   Ajouter votre propre logo avec une simple action de tirer et laisser tomber. 18 | 19 | 20 | ○   Facilement ajouter, supprimer et réorganiser des lignes d'articles. 21 | 22 | 23 | ○  Ajouter des taxes et des réductions. 24 | 25 | 26 | ○   Configurer une visibilité de la colonne d'articles. 27 | 28 | 29 | ○   Auto-calculer des totals partiels,des totals,des taxes et des réductions. 30 | 31 | 32 | ○   Enregistre vos données d'entreprise de défaut pour un futur réemploi. 33 | 34 | 35 | 36 | 37 | ●   Donner un nouveau style en utilisant simplement des techniques HTML et CSS. 38 | 39 | 40 | ●   Impression directe. 41 | 42 | 43 | ●  Enregistrer sous un format PDF ou enregistrer en ligne. 44 | 45 | 46 | 47 | 48 | Comment est-ce que je peux enregistrer mes données d'entreprise de défaut pour un futur réemploi? 49 | 50 | Click "Enregistrer L'état" touche et suit les instructions sur l'écran. 51 | 52 | 53 | Comment sauvegarder la facture? 54 | 55 | Il y a deux façons de sauvegarder la facture: 56 | 57 | 58 | -   Enregistre sous PDF en utilisant une imprimante PDF. 59 | 60 | 61 | -   Enregistrer en ligne en utilisant notre système de facturation Invoicebus. 62 | 63 | 64 | 65 | 66 | 67 | L'enregistrement de la facture sous PDF peut être fait en utilisant quelque chose qui s'appelle PDF Print Driver. C'est le même comme imprimer sous PDF parce que la sortie du navigateur est envoyée à un document au lieu à une imprimante.Cette fonctionnalité est intégré dans quelques navigateurs (comme Google Chrome), tandis que dans d'autres (comme Firefox ou Internet Explorer)vous devez installer une imprimante PDF manuellement.Une bonne et gratuite imprimante PDF est Bullzip. Si vous avez déjà installé votre imprimante PDF, click "Imprimer", réglez la destination imprimante vers "Enregistrer au PDF" et cliquez Enrégistrez. 68 | 69 | 70 | 71 | Pour sauvegarder la facture en ligne vous devrez d'abord créer un compte Invoicebus.Vous pouvez faire cela en cliquant"Enregistrer en Ligne" touche. Après vous serez réorienté vers une page sécurisée ou vous pouvez compléter votre enregistrement et sauvegarder la facture.Retenez s'il vous plaît qu'une facture en ligne et beaucoup plus puissante qu'une facture PDF statique. Par exemple, une facture en ligne peut être éditée en volant, envoyées par courriel, suivies,et payée directement avec une carte crédit, PayPal ou Bitcoin. Voilà example. 72 | 73 | 74 | Comment donner un autre style au template? 75 | 76 | Le template est fait avec une simplicité pour qu'il puisse être facilement personnalisé avec vos propres marques et couleurs. Quand même, une connaissance basique de in HTML et CSS est requise. 77 | 78 | 79 | 80 | Pour de petites modifications (comme un changement de couleurs,de fontes ou de la taille des éléments ) vous devez seulement modifier le document template.css .Si vous voulez faire de plus grand changements structurels de la mise en page (en supprimant ou en récomposant d'elements), vous devrez modifier le document template.html. Nous avons fait guide avec de meilleures pratiques sur la création de votre propre template, et n'hésitez pas à l'utiliser comme point de référence. 81 | 82 | 83 | 84 | Note: Le template est complètement séparé de sa logique, alors vous ne devez pas vous occuper avec une programmation ou avec JavaScript code. 85 | 86 | 87 | Est-ce que je dois avoir une connection Internet pour l'utiliser? 88 | 89 | Oui, mais ce n'est pas nécessaire. Dans l'arrière-plan le template se relie à un document JavaScript file à distance (generator.min.js) mis sur notre serveur d'où il tire toute la logique. Si pour quelque raison vous n'avez pas une connexion internet sur votre ordinateurer, vous pouvez télécharger the script locally, et modifier template.html le document pour montrer la version locale du script. 90 | 91 | 92 | 93 | Généralement, nous vous encourageons à continuer avec l'utilisation du script à distance, car toute mise à jour récente met à jour immédiatement la réflexion dans le template que vous utilisez. 94 | 95 | 96 | Qu'est-ce qui se passe avec les fontes utilisées? 97 | 98 | Le template utilise Google Fontes parce qu'ils sont gratuits pour tous.Si vous voulez utiliser le template hors ligne (sans avoir une connexion internet)vous devrez télécharger et installer les fontes sur votre ordinateur local (SkyFonts est un outil simple qui vous aide à le faire facilement). 99 | 100 | 101 | Est-ce que je peux utiliser le JavaScript source code? 102 | 103 | Absolument!En fait, nous serions fiers si vous décider à l'utiliser (fourchette nous sur GitHub). Si vous décidez de l'utiliser dans un projet commercial ou non-commercial ,n'hésitez pas à nous donner un cri comme nous sommes impatients d'entendre toutes les possibilités d'utilisation de cet outil. Parfois,nous pouvons même vous aider;) 104 | 105 | 106 | Soutenez notre travail 107 | 108 | La maintenance de ce script prend beaucoup de temps et d'effort pour le garder sans bug et à jour. Tout ce que nous demandons est une petite faveur – une discrète impression de votre facturation dans le fond de votre document imprimé.Cela signifierait beaucoup pour nous si vous le laissez là. Merci! 109 | 110 | 111 | 112 | C'est bien même si vous décidez d'éviter le moment de nous exprimer la reconnaissance, alors nous avons fait ce choix plus facile pour vous. Dans le document data.txt nous avons inclus une propriété appelée invoicebus_fineprint qui peut être mise dans true (pour montrer l'impression) ou false (pour cacher l'impression). 113 | 114 | 115 | Vous avez trouvé un bug? 116 | 117 | Si vous rencontrez un problème ou vous trouvez un bug, s'il vous plaît dites-le nous sur notre GitHub repo.S'il vous plaît ne posez pas de questions générales ici,pour cela vous pouvez utiliser le forum de soutien(regardez en bas). 118 | 119 | 120 | Suggestions, questions, critiques? 121 | 122 | Y-a-t-il quelque chose que nous pouvons faire pour améliorer ce template pour vous? De bonnes choses / de mauvaises choses? N'hésitez pas à trouvez un sujet approprié sur notre forum de soutien et frappez nous – nous lisons et nous répondons à chaque question. 123 | 124 | 125 | */} 126 | -------------------------------------------------------------------------------- /src/docs/how-to/how-to-it.js: -------------------------------------------------------------------------------- 1 | var ib_how_to_data = function(){/* 2 | 3 | 4 | Se sei one-man performer e tutto quello che fai per il tuo business lo fai da solo – benvenuto nel club! Conosci bene la noia di scrivere fatture. Word? Excel? Software di contabilità complicato? Dimentica tutto quello e saluta la tua nuova gioia! 5 | 6 | 7 | Che cosa poso fare con questo modello? 8 | 9 | 10 | 11 | ●   Scrivi fatture professionali in pochi secondi. 12 | 13 | 14 | ○   Usa qualsiasi lingua o valuta. 15 | 16 | 17 | ○   Aggiungi il tuo proprio logo con un semplice trascinare e rilasciare. 18 | 19 | 20 | ○   Aggiungi, rimuovi e riordini facilmente le righe delle voci. 21 | 22 | 23 | ○   Aggiungi tasse e sconti. 24 | 25 | 26 | ○   Configura la visibilità della voce nella colonna. 27 | 28 | 29 | ○   Autocalcola subtotali, totali, tasse e sconti. 30 | 31 | 32 | ○   Salva i dati aziendali predefiniti per il futuro utilizzo. 33 | 34 | 35 | 36 | 37 | ●   Redisegnalo con un altro stile, usando semplici HTML e CSS technologie. 38 | 39 | 40 | ●   Stampalo direttamente. 41 | 42 | 43 | ●   Salvalo in PDF o salvalo online. 44 | 45 | 46 | 47 | 48 | Come posso salvare i miei dati aziendali predefiniti per il futuro utilizzo? 49 | 50 | Clicca "Salva Stato Della" bottone e segui le istruzioni sullo schermo. 51 | 52 | 53 | Come salvare la fattura? 54 | 55 | Ci sono due modi per salvare la fattura: 56 | 57 | 58 | -   Salvala in PDF usando PDF stampante. 59 | 60 | 61 | -   Salvala online nel nostro sistema di fatturazione online Invoicebus. 62 | 63 | 64 | 65 | 66 | 67 | Salvando la fattura in PDF si può fare usando qualcosa che si chiama PDF Print Driver. Questo è anche conosciuto come stampare in PDF perchè il risultato del browser è mandato in un archivio invece in un stampante. Questa funzionalità è creata in alcuni browser (come Google Chrome), mentre in altri (come Firefox o Internet Explorer) devi installare PDF stampante manualmente. Un buono e gratuito PDF stampante è Bullzip. Se già hai installato un PDF stampante, clicca "Stampare", "Salva come PDF" e clicca Salva. 68 | 69 | 70 | 71 | Per salvare la fattura online, devi prima creare un Invoicebus account. Puoi fare questo con un semplice cliccare "Salva Online" bottone. Poi sarai portato ad una pagina sicura dove puoi completare la tua registrazione e salvare la fattura. Per favore, nota che una fattura online è molto più potente che una statica fattura PDF. Per esempio, una fattura online può essere modificata on-the-fly, inviata per email, rintracciata e pagata direttamente con Credit card, PayPal o Bitcoin. Ecco un esempio. 72 | 73 | 74 | Come redisegnare il modello? 75 | 76 | Il modello è fatto con una semplicità nella mente così sarà personalizzato con il tuo marchio e colori. Comunque, una conoscenza di base in HTML e CSS è necessaria. 77 | 78 | 79 | 80 | Per modificazioni più piccole (come cambiamento di colori, caratteri o le dimensioni degli elementi) devi solo modificare l'archivio template.css. Se vuoi fare più grandi cambiamenti strutturali del layout (eliminando o traferendo elementi), devi solo modificare l'archivio template.html. Noi abbiamo creato guide con migliori pratiche di come creare il tuo proprio modello, per questo non esitare a usarlo come punto di riferimento. 81 | 82 | 83 | 84 | Note: Il modello è totalmente diverso dalla sua logica, per questo motivo non devi pasticciare con alcun programma o codice JavaScript. 85 | 86 | 87 | Devo essere collegato a Internet per usarlo? 88 | 89 | Sì, però non è necessario. Sullo sfondo il modello collega ad un archivio JavaScript (generator.min.js) collocato nel nostro server del quale tira tutta la logica. Se per qualche motivo tu non hai Internet connessione al tuo computer, puoi scaricare lo script localmente, e cambiare template.html l'archivio per puntare alla versione locale dello script. 90 | 91 | 92 | 93 | Noi generalmente ti incoraggiaamo di continuare di usare lo script remoto perchè qualsiasi aggiornamento si rifletta immediamente. 94 | 95 | 96 | Che cosa succede con i caratteri usati? 97 | 98 | Il modello usa Google Fonts perché sono gratuiti e aperti per tutti. Se vuoi usare il modello offline (senza essere connesso al'Internet) devi scaricare e installare i caratteri al tuo computer (SkyFonts è un semplice strumento e ti aiuta a fare questo in maniera facile). 99 | 100 | 101 | Posso utilizzare il codice JavaScript? 102 | 103 | Assolutamente! Infatti, saremo orgogliosi se decidi di farlo (forcella noi su GitHub). Nonostante decida di usarlo in progetti commerciali o non, sentiti libero di dirci perché abbiamo voglia di sentire tutte le possibilità come questo strumento puù essere usato. A volte, ti possiamo anche aiutare ;) 104 | 105 | 106 | Supporta il nostro lavoro 107 | 108 | Mantenendo questo script richiede molto tempo e fatica per salvarlo libero e aggiornato. Tutto quello che cerchiamo è un po' di aiuto – delle clausole scritte in piccolo del nostro servizio di fatturazione alla fine del documento. Significherà un mondo per noi se gli lasci lì. Grazie! 109 | 110 | 111 | 112 | Non c'è problema se non vuoi lodarci, per questo motivo abbiamo fatto questo ancora più facile per te. Nell'archivio data.txt abbiamo incluso proprietà chiamata invoicebus_fineprint che può essere imposta su true (per mostrare le clausole) o false (per nascondere le clausole). 113 | 114 | 115 | Hai riscontrato un errore? 116 | 117 | Se incontri qualche problema o errore, per favore denuncialo a GitHub repo. Per favore non porre domande generali qui, invece usa il nostro forum di supporto (vedi giù). 118 | 119 | 120 | Suggerimenti, domande, critiche? 121 | 122 | Esiste qualcosa per rendere questo modello più bello e farlo migliore per te? Cose buone / cose brutte? Sentiti libero di trovare il titolo approporiato al nostro forum di supporto e colpirci – leggiamo e rispondiamo ad ogni post. 123 | 124 | 125 | */} 126 | -------------------------------------------------------------------------------- /src/docs/raw-data/raw-data-de.js: -------------------------------------------------------------------------------- 1 | var ib_raw_data = function(){/* 2 | var ib_invoice_data = function(){\/* 3 | #========================================================================================================= 4 | 5 | 6 | ### Firmen Daten 7 | 8 | [{company_name}] 9 | |company_name| 10 | 11 | [{company_address}] 12 | |company_address| 13 | 14 | [{company_city_zip_state}] 15 | |company_city_zip_state| 16 | 17 | [{company_phone_fax}] 18 | |company_phone_fax| 19 | 20 | [{company_email_web}] 21 | |company_email_web| 22 | 23 | [{payment_info1}] 24 | |payment_info1| 25 | 26 | [{payment_info2}] 27 | |payment_info2| 28 | 29 | [{payment_info3}] 30 | |payment_info3| 31 | 32 | [{payment_info4}] 33 | |payment_info4| 34 | 35 | [{payment_info5}] 36 | |payment_info5| 37 | 38 | [{issue_date_label}] 39 | |issue_date_label| 40 | 41 | [{issue_date}] 42 | |issue_date| 43 | 44 | [{net_term_label}] 45 | |net_term_label| 46 | 47 | [{net_term}] 48 | |net_term| 49 | 50 | [{due_date_label}] 51 | |due_date_label| 52 | 53 | [{due_date}] 54 | |due_date| 55 | 56 | [{currency_label}] 57 | |currency_label| 58 | 59 | [{currency}] 60 | |currency| 61 | 62 | [{po_number_label}] 63 | |po_number_label| 64 | 65 | [{po_number}] 66 | |po_number| 67 | 68 | [{bill_to_label}] 69 | |bill_to_label| 70 | 71 | [{client_name}] 72 | |client_name| 73 | 74 | [{client_address}] 75 | |client_address| 76 | 77 | [{client_city_zip_state}] 78 | |client_city_zip_state| 79 | 80 | [{client_phone_fax}] 81 | |client_phone_fax| 82 | 83 | [{client_email}] 84 | |client_email| 85 | 86 | [{client_other}] 87 | |client_other| 88 | 89 | [{invoice_title}] 90 | |invoice_title| 91 | 92 | [{invoice_number}] 93 | |invoice_number| 94 | 95 | 96 | ### Spaltennamen 97 | 98 | [{item_row_number_label}] 99 | |item_row_number_label| 100 | 101 | [{item_description_label}] 102 | |item_description_label| 103 | 104 | [{item_quantity_label}] 105 | |item_quantity_label| 106 | 107 | [{item_price_label}] 108 | |item_price_label| 109 | 110 | [{item_discount_label}] 111 | |item_discount_label| 112 | 113 | [{item_tax_label}] 114 | |item_tax_label| 115 | 116 | [{item_line_total_label}] 117 | |item_line_total_label| 118 | 119 | [{item_row_number}] 120 | |item_row_number| 121 | 122 | [{item_description}] 123 | |item_description| 124 | 125 | [{item_quantity}] 126 | |item_quantity| 127 | 128 | [{item_price}] 129 | |item_price| 130 | 131 | [{item_discount}] 132 | |item_discount| 133 | 134 | [{item_tax}] 135 | |item_tax| 136 | 137 | [{item_line_total}] 138 | |item_line_total| 139 | 140 | 141 | ### Zusammenfassung der summen 142 | 143 | [{amount_subtotal_label}] 144 | |amount_subtotal_label| 145 | 146 | [{amount_subtotal}] 147 | |amount_subtotal| 148 | 149 | [{tax_name}] 150 | |tax_name| 151 | 152 | [{tax_value}] 153 | |tax_value| 154 | 155 | [{amount_total_label}] 156 | |amount_total_label| 157 | 158 | [{amount_total}] 159 | |amount_total| 160 | 161 | [{amount_paid_label}] 162 | |amount_paid_label| 163 | 164 | [{amount_due_label}] 165 | |amount_due_label| 166 | 167 | [{amount_due}] 168 | |amount_due| 169 | 170 | [{terms_label}] 171 | |terms_label| 172 | 173 | [{terms}] 174 | |terms| 175 | 176 | 177 | ### Einstellungen 178 | 179 | # Einer von 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 180 | [date_format] 181 | |date_format| 182 | 183 | # Einer von 'left' oder 'right' 184 | [currency_position] 185 | |currency_position| 186 | 187 | [show_currency] 188 | |show_currency| 189 | 190 | # Einer von '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 191 | [number_format] 192 | |number_format| 193 | 194 | [default_columns] 195 | |default_columns| 196 | 197 | [default_quantity] 198 | |default_quantity| 199 | 200 | [default_price] 201 | |default_price| 202 | 203 | [default_discount] 204 | |default_discount| 205 | 206 | [default_tax] 207 | |default_tax| 208 | 209 | [default_number_rows] 210 | |default_number_rows| 211 | 212 | [auto_calculate_dates] 213 | |auto_calculate_dates| 214 | 215 | [load_items] 216 | |load_items| 217 | 218 | [invoicebus_fineprint] 219 | |invoicebus_fineprint| 220 | 221 | [lang] 222 | |lang| 223 | 224 | 225 | ### Artikel (in dieser reihenfolge item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 226 | 227 | [items] 228 | |items| 229 | 230 | 231 | ### Kundenspezifische daten (im format field_name@||@field_value) 232 | 233 | # Dokument benutzerdefinierte daten 234 | [document_custom] 235 | |document_custom| 236 | 237 | 238 | # Client benutzerdefinierte daten 239 | [client_custom] 240 | |client_custom| 241 | 242 | 243 | ### Logo 244 | 245 | #base64 codierten daten URI von PNG-bild 246 | [{company_logo}] 247 | |company_logo| 248 | 249 | 250 | 251 | 252 | #========================================================================================================= 253 | *\/} 254 | */} 255 | -------------------------------------------------------------------------------- /src/docs/raw-data/raw-data-en.js: -------------------------------------------------------------------------------- 1 | var ib_raw_data = function(){/* 2 | var ib_invoice_data = function(){\/* 3 | #========================================================================================================= 4 | 5 | 6 | ### Company data 7 | 8 | [{company_name}] 9 | |company_name| 10 | 11 | [{company_address}] 12 | |company_address| 13 | 14 | [{company_city_zip_state}] 15 | |company_city_zip_state| 16 | 17 | [{company_phone_fax}] 18 | |company_phone_fax| 19 | 20 | [{company_email_web}] 21 | |company_email_web| 22 | 23 | [{payment_info1}] 24 | |payment_info1| 25 | 26 | [{payment_info2}] 27 | |payment_info2| 28 | 29 | [{payment_info3}] 30 | |payment_info3| 31 | 32 | [{payment_info4}] 33 | |payment_info4| 34 | 35 | [{payment_info5}] 36 | |payment_info5| 37 | 38 | [{issue_date_label}] 39 | |issue_date_label| 40 | 41 | [{issue_date}] 42 | |issue_date| 43 | 44 | [{net_term_label}] 45 | |net_term_label| 46 | 47 | [{net_term}] 48 | |net_term| 49 | 50 | [{due_date_label}] 51 | |due_date_label| 52 | 53 | [{due_date}] 54 | |due_date| 55 | 56 | [{currency_label}] 57 | |currency_label| 58 | 59 | [{currency}] 60 | |currency| 61 | 62 | [{po_number_label}] 63 | |po_number_label| 64 | 65 | [{po_number}] 66 | |po_number| 67 | 68 | [{bill_to_label}] 69 | |bill_to_label| 70 | 71 | [{client_name}] 72 | |client_name| 73 | 74 | [{client_address}] 75 | |client_address| 76 | 77 | [{client_city_zip_state}] 78 | |client_city_zip_state| 79 | 80 | [{client_phone_fax}] 81 | |client_phone_fax| 82 | 83 | [{client_email}] 84 | |client_email| 85 | 86 | [{client_other}] 87 | |client_other| 88 | 89 | [{invoice_title}] 90 | |invoice_title| 91 | 92 | [{invoice_number}] 93 | |invoice_number| 94 | 95 | 96 | ### Column names 97 | 98 | [{item_row_number_label}] 99 | |item_row_number_label| 100 | 101 | [{item_description_label}] 102 | |item_description_label| 103 | 104 | [{item_quantity_label}] 105 | |item_quantity_label| 106 | 107 | [{item_price_label}] 108 | |item_price_label| 109 | 110 | [{item_discount_label}] 111 | |item_discount_label| 112 | 113 | [{item_tax_label}] 114 | |item_tax_label| 115 | 116 | [{item_line_total_label}] 117 | |item_line_total_label| 118 | 119 | [{item_row_number}] 120 | |item_row_number| 121 | 122 | [{item_description}] 123 | |item_description| 124 | 125 | [{item_quantity}] 126 | |item_quantity| 127 | 128 | [{item_price}] 129 | |item_price| 130 | 131 | [{item_discount}] 132 | |item_discount| 133 | 134 | [{item_tax}] 135 | |item_tax| 136 | 137 | [{item_line_total}] 138 | |item_line_total| 139 | 140 | 141 | ### Summary of totals 142 | 143 | [{amount_subtotal_label}] 144 | |amount_subtotal_label| 145 | 146 | [{amount_subtotal}] 147 | |amount_subtotal| 148 | 149 | [{tax_name}] 150 | |tax_name| 151 | 152 | [{tax_value}] 153 | |tax_value| 154 | 155 | [{amount_total_label}] 156 | |amount_total_label| 157 | 158 | [{amount_total}] 159 | |amount_total| 160 | 161 | [{amount_paid_label}] 162 | |amount_paid_label| 163 | 164 | [{amount_due_label}] 165 | |amount_due_label| 166 | 167 | [{amount_due}] 168 | |amount_due| 169 | 170 | [{terms_label}] 171 | |terms_label| 172 | 173 | [{terms}] 174 | |terms| 175 | 176 | 177 | ### Settings 178 | 179 | # One of 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 180 | [date_format] 181 | |date_format| 182 | 183 | # One of 'left' or 'right' 184 | [currency_position] 185 | |currency_position| 186 | 187 | [show_currency] 188 | |show_currency| 189 | 190 | # One of '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 191 | [number_format] 192 | |number_format| 193 | 194 | [default_columns] 195 | |default_columns| 196 | 197 | [default_quantity] 198 | |default_quantity| 199 | 200 | [default_price] 201 | |default_price| 202 | 203 | [default_discount] 204 | |default_discount| 205 | 206 | [default_tax] 207 | |default_tax| 208 | 209 | [default_number_rows] 210 | |default_number_rows| 211 | 212 | [auto_calculate_dates] 213 | |auto_calculate_dates| 214 | 215 | [load_items] 216 | |load_items| 217 | 218 | [invoicebus_fineprint] 219 | |invoicebus_fineprint| 220 | 221 | [lang] 222 | |lang| 223 | 224 | 225 | ### Items (in this order item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 226 | 227 | [items] 228 | |items| 229 | 230 | 231 | ### Custom data (in format field_name@||@field_value) 232 | 233 | # Document custom data 234 | [document_custom] 235 | |document_custom| 236 | 237 | # Client custom data 238 | [client_custom] 239 | |client_custom| 240 | 241 | 242 | ### Logo 243 | 244 | # base64 encoded data URI of PNG image 245 | [{company_logo}] 246 | |company_logo| 247 | 248 | 249 | 250 | 251 | #========================================================================================================= 252 | *\/} 253 | */} 254 | -------------------------------------------------------------------------------- /src/docs/raw-data/raw-data-es.js: -------------------------------------------------------------------------------- 1 | var ib_raw_data = function(){/* 2 | var ib_invoice_data = function(){\/* 3 | #========================================================================================================= 4 | 5 | 6 | ### Datos de la empresa 7 | 8 | [{company_name}] 9 | |company_name| 10 | 11 | [{company_address}] 12 | |company_address| 13 | 14 | [{company_city_zip_state}] 15 | |company_city_zip_state| 16 | 17 | [{company_phone_fax}] 18 | |company_phone_fax| 19 | 20 | [{company_email_web}] 21 | |company_email_web| 22 | 23 | [{payment_info1}] 24 | |payment_info1| 25 | 26 | [{payment_info2}] 27 | |payment_info2| 28 | 29 | [{payment_info3}] 30 | |payment_info3| 31 | 32 | [{payment_info4}] 33 | |payment_info4| 34 | 35 | [{payment_info5}] 36 | |payment_info5| 37 | 38 | [{issue_date_label}] 39 | |issue_date_label| 40 | 41 | [{issue_date}] 42 | |issue_date| 43 | 44 | [{net_term_label}] 45 | |net_term_label| 46 | 47 | [{net_term}] 48 | |net_term| 49 | 50 | [{due_date_label}] 51 | |due_date_label| 52 | 53 | [{due_date}] 54 | |due_date| 55 | 56 | [{currency_label}] 57 | |currency_label| 58 | 59 | [{currency}] 60 | |currency| 61 | 62 | [{po_number_label}] 63 | |po_number_label| 64 | 65 | [{po_number}] 66 | |po_number| 67 | 68 | [{bill_to_label}] 69 | |bill_to_label| 70 | 71 | [{client_name}] 72 | |client_name| 73 | 74 | [{client_address}] 75 | |client_address| 76 | 77 | [{client_city_zip_state}] 78 | |client_city_zip_state| 79 | 80 | [{client_phone_fax}] 81 | |client_phone_fax| 82 | 83 | [{client_email}] 84 | |client_email| 85 | 86 | [{client_other}] 87 | |client_other| 88 | 89 | [{invoice_title}] 90 | |invoice_title| 91 | 92 | [{invoice_number}] 93 | |invoice_number| 94 | 95 | 96 | ### Nombres de las columnas 97 | 98 | [{item_row_number_label}] 99 | |item_row_number_label| 100 | 101 | [{item_description_label}] 102 | |item_description_label| 103 | 104 | [{item_quantity_label}] 105 | |item_quantity_label| 106 | 107 | [{item_price_label}] 108 | |item_price_label| 109 | 110 | [{item_discount_label}] 111 | |item_discount_label| 112 | 113 | [{item_tax_label}] 114 | |item_tax_label| 115 | 116 | [{item_line_total_label}] 117 | |item_line_total_label| 118 | 119 | [{item_row_number}] 120 | |item_row_number| 121 | 122 | [{item_description}] 123 | |item_description| 124 | 125 | [{item_quantity}] 126 | |item_quantity| 127 | 128 | [{item_price}] 129 | |item_price| 130 | 131 | [{item_discount}] 132 | |item_discount| 133 | 134 | [{item_tax}] 135 | |item_tax| 136 | 137 | [{item_line_total}] 138 | |item_line_total| 139 | 140 | 141 | ### Resumen de los totales 142 | 143 | [{amount_subtotal_label}] 144 | |amount_subtotal_label| 145 | 146 | [{amount_subtotal}] 147 | |amount_subtotal| 148 | 149 | [{tax_name}] 150 | |tax_name| 151 | 152 | [{tax_value}] 153 | |tax_value| 154 | 155 | [{amount_total_label}] 156 | |amount_total_label| 157 | 158 | [{amount_total}] 159 | |amount_total| 160 | 161 | [{amount_paid_label}] 162 | |amount_paid_label| 163 | 164 | [{amount_due_label}] 165 | |amount_due_label| 166 | 167 | [{amount_due}] 168 | |amount_due| 169 | 170 | [{terms_label}] 171 | |terms_label| 172 | 173 | [{terms}] 174 | |terms| 175 | 176 | 177 | ### Configuraciones 178 | 179 | # Uno de los siguentes 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 180 | [date_format] 181 | |date_format| 182 | 183 | # Uno de 'left' o 'right' 184 | [currency_position] 185 | |currency_position| 186 | 187 | [show_currency] 188 | |show_currency| 189 | 190 | # Uno de '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 191 | [number_format] 192 | |number_format| 193 | 194 | [default_columns] 195 | |default_columns| 196 | 197 | [default_quantity] 198 | |default_quantity| 199 | 200 | [default_price] 201 | |default_price| 202 | 203 | [default_discount] 204 | |default_discount| 205 | 206 | [default_tax] 207 | |default_tax| 208 | 209 | [default_number_rows] 210 | |default_number_rows| 211 | 212 | [auto_calculate_dates] 213 | |auto_calculate_dates| 214 | 215 | [load_items] 216 | |load_items| 217 | 218 | [invoicebus_fineprint] 219 | |invoicebus_fineprint| 220 | 221 | [lang] 222 | |lang| 223 | 224 | 225 | ### Secciones (en este orden item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 226 | 227 | [items] 228 | |items| 229 | 230 | 231 | ### Fecha personalizada (in format field_name@||@field_value) 232 | 233 | # Fecha personalizada del documento 234 | [document_custom] 235 | |document_custom| 236 | 237 | 238 | # Fecha personalizada del cliente 239 | [client_custom] 240 | |client_custom| 241 | 242 | 243 | ### Logotipo 244 | 245 | # base64 data codificada URI del imagen PNG 246 | [{company_logo}] 247 | |company_logo| 248 | 249 | 250 | 251 | 252 | #========================================================================================================= 253 | *\/} 254 | */} 255 | -------------------------------------------------------------------------------- /src/docs/raw-data/raw-data-fr.js: -------------------------------------------------------------------------------- 1 | var ib_raw_data = function(){/* 2 | var ib_invoice_data = function(){\/* 3 | #========================================================================================================= 4 | 5 | 6 | ### Données sur l'entreprise 7 | 8 | [{company_name}] 9 | |company_name| 10 | 11 | [{company_address}] 12 | |company_address| 13 | 14 | [{company_city_zip_state}] 15 | |company_city_zip_state| 16 | 17 | [{company_phone_fax}] 18 | |company_phone_fax| 19 | 20 | [{company_email_web}] 21 | |company_email_web| 22 | 23 | [{payment_info1}] 24 | |payment_info1| 25 | 26 | [{payment_info2}] 27 | |payment_info2| 28 | 29 | [{payment_info3}] 30 | |payment_info3| 31 | 32 | [{payment_info4}] 33 | |payment_info4| 34 | 35 | [{payment_info5}] 36 | |payment_info5| 37 | 38 | [{issue_date_label}] 39 | |issue_date_label| 40 | 41 | [{issue_date}] 42 | |issue_date| 43 | 44 | [{net_term_label}] 45 | |net_term_label| 46 | 47 | [{net_term}] 48 | |net_term| 49 | 50 | [{due_date_label}] 51 | |due_date_label| 52 | 53 | [{due_date}] 54 | |due_date| 55 | 56 | [{currency_label}] 57 | |currency_label| 58 | 59 | [{currency}] 60 | |currency| 61 | 62 | [{po_number_label}] 63 | |po_number_label| 64 | 65 | [{po_number}] 66 | |po_number| 67 | 68 | [{bill_to_label}] 69 | |bill_to_label| 70 | 71 | [{client_name}] 72 | |client_name| 73 | 74 | [{client_address}] 75 | |client_address| 76 | 77 | [{client_city_zip_state}] 78 | |client_city_zip_state| 79 | 80 | [{client_phone_fax}] 81 | |client_phone_fax| 82 | 83 | [{client_email}] 84 | |client_email| 85 | 86 | [{client_other}] 87 | |client_other| 88 | 89 | [{invoice_title}] 90 | |invoice_title| 91 | 92 | [{invoice_number}] 93 | |invoice_number| 94 | 95 | 96 | ### Noms de la colonne 97 | 98 | [{item_row_number_label}] 99 | |item_row_number_label| 100 | 101 | [{item_description_label}] 102 | |item_description_label| 103 | 104 | [{item_quantity_label}] 105 | |item_quantity_label| 106 | 107 | [{item_price_label}] 108 | |item_price_label| 109 | 110 | [{item_discount_label}] 111 | |item_discount_label| 112 | 113 | [{item_tax_label}] 114 | |item_tax_label| 115 | 116 | [{item_line_total_label}] 117 | |item_line_total_label| 118 | 119 | [{item_row_number}] 120 | |item_row_number| 121 | 122 | [{item_description}] 123 | |item_description| 124 | 125 | [{item_quantity}] 126 | |item_quantity| 127 | 128 | [{item_price}] 129 | |item_price| 130 | 131 | [{item_discount}] 132 | |item_discount| 133 | 134 | [{item_tax}] 135 | |item_tax| 136 | 137 | [{item_line_total}] 138 | |item_line_total| 139 | 140 | 141 | ### Sommaire des totals 142 | 143 | [{amount_subtotal_label}] 144 | |amount_subtotal_label| 145 | 146 | [{amount_subtotal}] 147 | |amount_subtotal| 148 | 149 | [{tax_name}] 150 | |tax_name| 151 | 152 | [{tax_value}] 153 | |tax_value| 154 | 155 | [{amount_total_label}] 156 | |amount_total_label| 157 | 158 | [{amount_total}] 159 | |amount_total| 160 | 161 | [{amount_paid_label}] 162 | |amount_paid_label| 163 | 164 | [{amount_due_label}] 165 | |amount_due_label| 166 | 167 | [{amount_due}] 168 | |amount_due| 169 | 170 | [{terms_label}] 171 | |terms_label| 172 | 173 | [{terms}] 174 | |terms| 175 | 176 | 177 | ### Settings 178 | 179 | # Un des suivants 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 180 | [date_format] 181 | |date_format| 182 | 183 | # Un des suivants'left' ou 'right' 184 | [currency_position] 185 | |currency_position| 186 | 187 | [show_currency] 188 | |show_currency| 189 | 190 | # Un des suivants '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 191 | [number_format] 192 | |number_format| 193 | 194 | [default_columns] 195 | |default_columns| 196 | 197 | [default_quantity] 198 | |default_quantity| 199 | 200 | [default_price] 201 | |default_price| 202 | 203 | [default_discount] 204 | |default_discount| 205 | 206 | [default_tax] 207 | |default_tax| 208 | 209 | [default_number_rows] 210 | |default_number_rows| 211 | 212 | [auto_calculate_dates] 213 | |auto_calculate_dates| 214 | 215 | [load_items] 216 | |load_items| 217 | 218 | [invoicebus_fineprint] 219 | |invoicebus_fineprint| 220 | 221 | [lang] 222 | |lang| 223 | 224 | 225 | ### Articles (dans l'ordre qui suit item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 226 | 227 | [items] 228 | |items| 229 | 230 | 231 | ### Données personnalisées (dans un format field_name@||@field_value) 232 | 233 | # Document données personnalisées 234 | [document_custom] 235 | |document_custom| 236 | 237 | 238 | # Client données personnalisées 239 | [client_custom] 240 | |client_custom| 241 | 242 | 243 | 244 | ### Logo 245 | 246 | # base64 données encodées URI d'image PNG 247 | [{company_logo}] 248 | |company_logo| 249 | 250 | 251 | 252 | 253 | #========================================================================================================= 254 | *\/} 255 | */} 256 | -------------------------------------------------------------------------------- /src/docs/raw-data/raw-data-it.js: -------------------------------------------------------------------------------- 1 | var ib_raw_data = function(){/* 2 | var ib_invoice_data = function(){\/* 3 | #========================================================================================================= 4 | 5 | 6 | ### Dati sull'azienda 7 | 8 | [{company_name}] 9 | |company_name| 10 | 11 | [{company_address}] 12 | |company_address| 13 | 14 | [{company_city_zip_state}] 15 | |company_city_zip_state| 16 | 17 | [{company_phone_fax}] 18 | |company_phone_fax| 19 | 20 | [{company_email_web}] 21 | |company_email_web| 22 | 23 | [{payment_info1}] 24 | |payment_info1| 25 | 26 | [{payment_info2}] 27 | |payment_info2| 28 | 29 | [{payment_info3}] 30 | |payment_info3| 31 | 32 | [{payment_info4}] 33 | |payment_info4| 34 | 35 | [{payment_info5}] 36 | |payment_info5| 37 | 38 | [{issue_date_label}] 39 | |issue_date_label| 40 | 41 | [{issue_date}] 42 | |issue_date| 43 | 44 | [{net_term_label}] 45 | |net_term_label| 46 | 47 | [{net_term}] 48 | |net_term| 49 | 50 | [{due_date_label}] 51 | |due_date_label| 52 | 53 | [{due_date}] 54 | |due_date| 55 | 56 | [{currency_label}] 57 | |currency_label| 58 | 59 | [{currency}] 60 | |currency| 61 | 62 | [{po_number_label}] 63 | |po_number_label| 64 | 65 | [{po_number}] 66 | |po_number| 67 | 68 | [{bill_to_label}] 69 | |bill_to_label| 70 | 71 | [{client_name}] 72 | |client_name| 73 | 74 | [{client_address}] 75 | |client_address| 76 | 77 | [{client_city_zip_state}] 78 | |client_city_zip_state| 79 | 80 | [{client_phone_fax}] 81 | |client_phone_fax| 82 | 83 | [{client_email}] 84 | |client_email| 85 | 86 | [{client_other}] 87 | |client_other| 88 | 89 | [{invoice_title}] 90 | |invoice_title| 91 | 92 | [{invoice_number}] 93 | |invoice_number| 94 | 95 | 96 | ### Nomi delle colonne 97 | 98 | [{item_row_number_label}] 99 | |item_row_number_label| 100 | 101 | [{item_description_label}] 102 | |item_description_label| 103 | 104 | [{item_quantity_label}] 105 | |item_quantity_label| 106 | 107 | [{item_price_label}] 108 | |item_price_label| 109 | 110 | [{item_discount_label}] 111 | |item_discount_label| 112 | 113 | [{item_tax_label}] 114 | |item_tax_label| 115 | 116 | [{item_line_total_label}] 117 | |item_line_total_label| 118 | 119 | [{item_row_number}] 120 | |item_row_number| 121 | 122 | [{item_description}] 123 | |item_description| 124 | 125 | [{item_quantity}] 126 | |item_quantity| 127 | 128 | [{item_price}] 129 | |item_price| 130 | 131 | [{item_discount}] 132 | |item_discount| 133 | 134 | [{item_tax}] 135 | |item_tax| 136 | 137 | [{item_line_total}] 138 | |item_line_total| 139 | 140 | 141 | ### Riassunto dei totali 142 | 143 | [{amount_subtotal_label}] 144 | |amount_subtotal_label| 145 | 146 | [{amount_subtotal}] 147 | |amount_subtotal| 148 | 149 | [{tax_name}] 150 | |tax_name| 151 | 152 | [{tax_value}] 153 | |tax_value| 154 | 155 | [{amount_total_label}] 156 | |amount_total_label| 157 | 158 | [{amount_total}] 159 | |amount_total| 160 | 161 | [{amount_paid_label}] 162 | |amount_paid_label| 163 | 164 | [{amount_due_label}] 165 | |amount_due_label| 166 | 167 | [{amount_due}] 168 | |amount_due| 169 | 170 | [{terms_label}] 171 | |terms_label| 172 | 173 | [{terms}] 174 | |terms| 175 | 176 | 177 | ### Impostazioni 178 | 179 | # Uno dei seguenti 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 180 | [date_format] 181 | |date_format| 182 | 183 | # Uno di 'left' o 'right' 184 | [currency_position] 185 | |currency_position| 186 | 187 | [show_currency] 188 | |show_currency| 189 | 190 | # Uno di '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 191 | [number_format] 192 | |number_format| 193 | 194 | [default_columns] 195 | |default_columns| 196 | 197 | [default_quantity] 198 | |default_quantity| 199 | 200 | [default_price] 201 | |default_price| 202 | 203 | [default_discount] 204 | |default_discount| 205 | 206 | [default_tax] 207 | |default_tax| 208 | 209 | [default_number_rows] 210 | |default_number_rows| 211 | 212 | [auto_calculate_dates] 213 | |auto_calculate_dates| 214 | 215 | [load_items] 216 | |load_items| 217 | 218 | [invoicebus_fineprint] 219 | |invoicebus_fineprint| 220 | 221 | [lang] 222 | |lang| 223 | 224 | 225 | ### Voci (in questo ordine item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 226 | 227 | [items] 228 | |items| 229 | 230 | 231 | ### Data personalizzata (in format field_name@||@field_value) 232 | 233 | # Data personalizzata del documento 234 | [document_custom] 235 | |document_custom| 236 | 237 | 238 | # Data personalizzata del cliente 239 | [client_custom] 240 | |client_custom| 241 | 242 | 243 | 244 | ### Logo 245 | 246 | # base64 data codificata URI di PNG immagine 247 | [{company_logo}] 248 | |company_logo| 249 | 250 | 251 | 252 | 253 | #========================================================================================================= 254 | *\/} 255 | */} 256 | -------------------------------------------------------------------------------- /src/docs/save-state/save-state-de.js: -------------------------------------------------------------------------------- 1 | var ib_save_state_data = function(){/* 2 | 3 | 4 | Diese aktion wird den aktuellen status der vorlage zu einer lokalen datei mit dem namen data.txt speichern. Die daten aus dieser datei verwendet werden, um die schablonenfelder in zukunft vorab auszufüllen. Dies ist praktisch, wenn sie ihre standard-details zu speichern möchten, wie firmenadresse, logo, währung, notizen, usw., so dass sie nicht brauchen, sie jedes mal neu eingeben. 5 | 6 | 7 | 8 | Nach einem klick auf die schaltfläche unten, werden sie die datei zu speichern aufgefordert. 9 | 10 | 11 | 12 | Achten sie darauf, diese datei zu benennen data.txt und es in der vorlage verzeichnis speichern. Wenn die datei bereits vorhanden ist, überschrieben. 13 | 14 | 15 | 16 | Hinweis: Speichern der zustand der vorlage ist nicht beabsichtigt, eine tatsächliche instanz der rechnung für die aufzeichnung zu speichern. Dazu sollten sie entweder um die rechnung zu PDF speichern (durch die option drucken mit) oder speichern sie es online. 17 | 18 | 19 | Speichern data.txt 20 | Rechts auf die schaltfläche klicken, und wählen sie "Verknüpfte Datei Laden Unter..." 21 | 22 | */} 23 | -------------------------------------------------------------------------------- /src/docs/save-state/save-state-en.js: -------------------------------------------------------------------------------- 1 | var ib_save_state_data = function(){/* 2 | 3 | 4 | This action will save the current state of the template to a local .txt file. The data from this file can be used to pre-populate the template fields in the future. This comes handy when you want to save the invoice details such as company address, logo, client info, currency, notes, etc. so you don't need to re-enter them every time. 5 | 6 | 7 | 8 | After clicking the button below, you'll be prompted to save the file. In order to open the file in future make sure you save it in the template root directory. The saved file will store instance of the invoice for record keeping. 9 | 10 | 11 | 12 | To save the current invoice data as your default, make sure to name the file data.txt and save it in the template root directory. If the file already exists, overwrite it. 13 | 14 | 15 | 16 | Hint: In addition to saving the data locally, you can save the invoice to PDF (by using the Print option) or save it online. 17 | 18 | 19 | Save Invoice Data 20 | Right click the button and choose "Download Linked File As..." 21 | 22 | */} 23 | -------------------------------------------------------------------------------- /src/docs/save-state/save-state-es.js: -------------------------------------------------------------------------------- 1 | var ib_save_state_data = function(){/* 2 | 3 | 4 | Esta accion guardara el estado actual de la plantilla en un archivo local llamado data.txt. Los datos de este asrchivo seran usados para rellenar los campos de la plantilla previamente en el futuro. Esto ocurre cuando quieres guardar los datos predeterminados como ubicacion de la empresa, logotipo, moneda, notas para no volver a escribirlos cada vez. 5 | 6 | 7 | 8 | Despues de hacer clic en el boton de abajo, se le preguntara si deseas guardar el archivo. 9 | 10 | 11 | 12 | No se olvide de dar nombre a este archivo data.txt y guardarlo en la carpeta de plantillas. Si el archivo ya existe, sobrescribalo. 13 | 14 | 15 | 16 | Nota: Guardando el estado de la plantilla no pretende memorizar un ejemplo real de la factura para el mantenimiento de registros. Por esto tu debes o guardar la factura en PDF (by using the Print option) o guardarla online. 17 | 18 | 19 | Guarda los data.txt 20 | Clica con el boton derecho y selecciona "Descargar Archivo Enlazado Como..." 21 | 22 | */} 23 | -------------------------------------------------------------------------------- /src/docs/save-state/save-state-fr.js: -------------------------------------------------------------------------------- 1 | var ib_save_state_data = function(){/* 2 | 3 | 4 | Cette action sauvegardera l'état actuel du template dans un documant local appelé data.txt. Les données de ce document seront utilisées pour to pré-peupler les champs du template dans l'avenir. Cela représente une aide quand vous voulez sauvegarder vos détails de défaut tels que l'adresse,le logo de l'entreprise, la monnaie,les notes, etc., alors vous n'avez pas besoin de les taper chaque fois de nouveau. 5 | 6 | 7 | 8 | Après avoir cliqué sur la touche en bas,vous serez incité à sauvegarder le document. 9 | 10 | 11 | 12 | N'oubliez pas à donner un nom au document data.txt et à le sauvegarder dans le directoire du template. Si le document existe déjà, récrivez-le. 13 | 14 | 15 | 16 | Note: Sauvegarder l'état du template ne veut pas dire garder une instance actuelle de la facture pour le dossier. Pour cela,vous devriez soit sauvegarder la facture sous PDF (en utilisant l'option Imprimer) ou sauvegarder en ligne. 17 | 18 | 19 | Enregistrer data.txt 20 | Droit cliquez la touche et choisissez "Télécharger Le Fichier Lié Sous..." 21 | 22 | */} 23 | -------------------------------------------------------------------------------- /src/docs/save-state/save-state-it.js: -------------------------------------------------------------------------------- 1 | var ib_save_state_data = function(){/* 2 | 3 | 4 | Questa azione salvera lo stato corrente del modello in un archivio locale chiamato data.txt. I dati di questo archivio saranno usati per completare i campi del modello nel futuro. Questo avviene a portata di mano quando vuoi salvare i dettagli predefiniti come indirizzo dell'azienda, logo, valuta, note, ecc., per non scriverli di nuovo ogni volta. 5 | 6 | 7 | 8 | Dopo aver cliccato sul bottone qui sotto, verra chiesto di salvare l'archivio. 9 | 10 | 11 | 12 | Non dimenticare di dare nome a questo archivio data.txt e salvarlo nella cartella dei modelli. Se l'archivio esiste gia, sovrascrivilo. 13 | 14 | 15 | 16 | Nota: Salvando lo stato del modello non e destinato a memorizzare un'istanza effettiva della fattura per la tenuta dei registri. Per questo, tu devi o salvare il modello in PDF (usando l'opzione Print) o salvarlo online. 17 | 18 | 19 | Salva i dati.txt 20 | Clicca con il tasto destro e scegli "Scaricare File Collegato Come..." 21 | 22 | */} 23 | -------------------------------------------------------------------------------- /src/fonts/LICENSES: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont-subset.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/fontawesome-webfont-subset.eot -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont-subset.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/fontawesome-webfont-subset.otf -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont-subset.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont-subset.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/fontawesome-webfont-subset.ttf -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont-subset.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/fontawesome-webfont-subset.woff -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont-subset.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/fontawesome-webfont-subset.woff2 -------------------------------------------------------------------------------- /src/fonts/opensans-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-bold.eot -------------------------------------------------------------------------------- /src/fonts/opensans-bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-bold.otf -------------------------------------------------------------------------------- /src/fonts/opensans-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-bold.ttf -------------------------------------------------------------------------------- /src/fonts/opensans-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-bold.woff -------------------------------------------------------------------------------- /src/fonts/opensans-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-bold.woff2 -------------------------------------------------------------------------------- /src/fonts/opensans-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-regular.eot -------------------------------------------------------------------------------- /src/fonts/opensans-regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-regular.otf -------------------------------------------------------------------------------- /src/fonts/opensans-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-regular.ttf -------------------------------------------------------------------------------- /src/fonts/opensans-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-regular.woff -------------------------------------------------------------------------------- /src/fonts/opensans-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Invoicebus/html-invoice-generator/e1a2060d76c8d9e03d3904d59592ad685659c1d6/src/fonts/opensans-regular.woff2 -------------------------------------------------------------------------------- /src/js/bootstrap3-typeahead.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap3-typeahead.js v3.0.3 3 | * https://github.com/bassjobsen/Bootstrap-3-Typeahead 4 | * ============================================================= 5 | * Original written by @mdo and @fat 6 | * ============================================================= 7 | * Copyright 2014 Bass Jobsen @bassjobsen 8 | * 9 | * Licensed under the Apache License, Version 2.0 (the "License"); 10 | * you may not use this file except in compliance with the License. 11 | * You may obtain a copy of the License at 12 | * 13 | * http://www.apache.org/licenses/LICENSE-2.0 14 | * 15 | * Unless required by applicable law or agreed to in writing, software 16 | * distributed under the License is distributed on an "AS IS" BASIS, 17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 | * See the License for the specific language governing permissions and 19 | * limitations under the License. 20 | * ============================================================ */ 21 | 22 | var ib_loadBootstrapTypeahead = function() { 23 | 24 | "use strict"; 25 | // jshint laxcomma: true 26 | 27 | /* TYPEAHEAD PUBLIC CLASS DEFINITION 28 | * ================================= */ 29 | 30 | var Typeahead = function (element, options) { 31 | this.$element = $(element); 32 | this.options = $.extend({}, $.fn.typeahead.defaults, options); 33 | this.matcher = this.options.matcher || this.matcher; 34 | this.sorter = this.options.sorter || this.sorter; 35 | this.select = this.options.select || this.select; 36 | this.autoSelect = typeof this.options.autoSelect == 'boolean' ? this.options.autoSelect : true; 37 | this.highlighter = this.options.highlighter || this.highlighter; 38 | this.updater = this.options.updater || this.updater; 39 | this.source = this.options.source; 40 | this.delay = typeof this.options.delay == 'number' ? this.options.delay : 250; 41 | this.$menu = $(this.options.menu); 42 | this.shown = false; 43 | this.listen(); 44 | this.showHintOnFocus = typeof this.options.showHintOnFocus == 'boolean' ? this.options.showHintOnFocus : false; 45 | }; 46 | 47 | Typeahead.prototype = { 48 | 49 | constructor: Typeahead, 50 | 51 | select: function () { 52 | var val = this.$menu.find('.active').data('value'); 53 | if(this.autoSelect || val) { 54 | this.$element 55 | .text(this.updater(val)) 56 | .change(); 57 | } 58 | return this.hide(); 59 | }, 60 | 61 | updater: function (item) { 62 | return item; 63 | }, 64 | 65 | setSource: function (source) { 66 | this.source = source; 67 | }, 68 | 69 | show: function () { 70 | var pos = $.extend({}, this.$element.offset(), { 71 | height: this.$element[0].offsetHeight 72 | }), scrollHeight; 73 | 74 | scrollHeight = typeof this.options.scrollHeight == 'function' ? 75 | this.options.scrollHeight.call() : 76 | this.options.scrollHeight; 77 | 78 | this.$menu 79 | //.insertAfter(this.$element) 80 | .appendTo(document.body) 81 | .css({ 82 | top: pos.top + pos.height + scrollHeight, 83 | left: pos.left 84 | }) 85 | .show(); 86 | 87 | this.shown = true; 88 | return this; 89 | }, 90 | 91 | hide: function () { 92 | this.$menu.hide(); 93 | this.shown = false; 94 | return this; 95 | }, 96 | 97 | lookup: function (query) { 98 | var items; 99 | if (typeof(query) != 'undefined' && query !== null) { 100 | this.query = query; 101 | } else { 102 | this.query = this.$element.text() || ''; 103 | } 104 | 105 | if (this.query.length < this.options.minLength) { 106 | return this.shown ? this.hide() : this; 107 | } 108 | 109 | var worker = $.proxy(function() { 110 | items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source; 111 | if (items) { 112 | this.process(items); 113 | } 114 | }, this); 115 | 116 | clearTimeout(this.lookupWorker); 117 | this.lookupWorker = setTimeout(worker, this.delay); 118 | }, 119 | 120 | process: function (items) { 121 | var that = this; 122 | 123 | items = $.grep(items, function (item) { 124 | return that.matcher(item); 125 | }); 126 | 127 | items = this.sorter(items); 128 | 129 | if (!items.length) { 130 | return this.shown ? this.hide() : this; 131 | } 132 | 133 | if (this.options.items == 'all') { 134 | return this.render(items).show(); 135 | } else { 136 | return this.render(items.slice(0, this.options.items)).show(); 137 | } 138 | }, 139 | 140 | matcher: function (item) { 141 | return ~item.toLowerCase().indexOf(this.query.toLowerCase()); 142 | }, 143 | 144 | sorter: function (items) { 145 | var beginswith = [], 146 | caseSensitive = [], 147 | caseInsensitive = [], 148 | item; 149 | 150 | while ((item = items.shift())) { 151 | if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item); 152 | else if (~item.indexOf(this.query)) caseSensitive.push(item); 153 | else caseInsensitive.push(item); 154 | } 155 | 156 | return beginswith.concat(caseSensitive, caseInsensitive); 157 | }, 158 | 159 | highlighter: function (item) { 160 | var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&'); 161 | return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { 162 | return '' + match + ''; 163 | }); 164 | }, 165 | 166 | render: function (items) { 167 | var that = this; 168 | 169 | items = $(items).map(function (i, item) { 170 | i = $(that.options.item).data('value', item); 171 | i.find('a').html(that.highlighter(item)); 172 | return i[0]; 173 | }); 174 | 175 | if (this.autoSelect) { 176 | items.first().addClass('active'); 177 | } 178 | this.$menu.html(items); 179 | return this; 180 | }, 181 | 182 | next: function (event) { 183 | var active = this.$menu.find('.active').removeClass('active'), 184 | next = active.next(); 185 | 186 | if (!next.length) { 187 | next = $(this.$menu.find('li')[0]); 188 | } 189 | 190 | next.addClass('active'); 191 | }, 192 | 193 | prev: function (event) { 194 | var active = this.$menu.find('.active').removeClass('active'), 195 | prev = active.prev(); 196 | 197 | if (!prev.length) { 198 | prev = this.$menu.find('li').last(); 199 | } 200 | 201 | prev.addClass('active'); 202 | }, 203 | 204 | listen: function () { 205 | this.$element 206 | .on('focus', $.proxy(this.focus, this)) 207 | .on('blur', $.proxy(this.blur, this)) 208 | .on('keypress', $.proxy(this.keypress, this)) 209 | .on('keyup', $.proxy(this.keyup, this)); 210 | 211 | if (this.eventSupported('keydown')) { 212 | this.$element.on('keydown', $.proxy(this.keydown, this)); 213 | } 214 | 215 | this.$menu 216 | .on('click', $.proxy(this.click, this)) 217 | .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) 218 | .on('mouseleave', 'li', $.proxy(this.mouseleave, this)); 219 | }, 220 | 221 | destroy : function () { 222 | this.$element.data('typeahead',null); 223 | this.$element 224 | .off('focus') 225 | .off('blur') 226 | .off('keypress') 227 | .off('keyup'); 228 | 229 | if (this.eventSupported('keydown')) { 230 | this.$element.off('keydown'); 231 | } 232 | 233 | this.$menu.remove(); 234 | }, 235 | 236 | eventSupported: function(eventName) { 237 | var isSupported = eventName in this.$element; 238 | if (!isSupported) { 239 | this.$element.setAttribute(eventName, 'return;'); 240 | isSupported = typeof this.$element[eventName] === 'function'; 241 | } 242 | return isSupported; 243 | }, 244 | 245 | move: function (e) { 246 | if (!this.shown) return; 247 | 248 | switch(e.keyCode) { 249 | case 9: // tab 250 | case 13: // enter 251 | case 27: // escape 252 | e.preventDefault(); 253 | break; 254 | 255 | case 38: // up arrow 256 | e.preventDefault(); 257 | this.prev(); 258 | break; 259 | 260 | case 40: // down arrow 261 | e.preventDefault(); 262 | this.next(); 263 | break; 264 | } 265 | 266 | e.stopPropagation(); 267 | }, 268 | 269 | keydown: function (e) { 270 | this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]); 271 | if (!this.shown && e.keyCode == 40) { 272 | this.lookup(""); 273 | } else { 274 | this.move(e); 275 | } 276 | }, 277 | 278 | keypress: function (e) { 279 | if (this.suppressKeyPressRepeat) return; 280 | this.move(e); 281 | }, 282 | 283 | keyup: function (e) { 284 | switch(e.keyCode) { 285 | case 40: // down arrow 286 | case 38: // up arrow 287 | case 16: // shift 288 | case 17: // ctrl 289 | case 18: // alt 290 | break; 291 | 292 | case 9: // tab 293 | case 13: // enter 294 | if (!this.shown) return; 295 | this.select(); 296 | break; 297 | 298 | case 27: // escape 299 | if (!this.shown) return; 300 | this.hide(); 301 | break; 302 | default: 303 | this.lookup(); 304 | } 305 | 306 | e.stopPropagation(); 307 | e.preventDefault(); 308 | }, 309 | 310 | focus: function (e) { 311 | if (!this.focused) { 312 | this.focused = true; 313 | if (this.options.minLength === 0 && !this.$element.text() || this.options.showHintOnFocus) { 314 | this.lookup(); 315 | } 316 | } 317 | }, 318 | 319 | blur: function (e) { 320 | this.focused = false; 321 | if (!this.mousedover && this.shown) this.hide(); 322 | }, 323 | 324 | click: function (e) { 325 | e.stopPropagation(); 326 | e.preventDefault(); 327 | this.select(); 328 | this.$element.focus(); 329 | }, 330 | 331 | mouseenter: function (e) { 332 | this.mousedover = true; 333 | this.$menu.find('.active').removeClass('active'); 334 | $(e.currentTarget).addClass('active'); 335 | }, 336 | 337 | mouseleave: function (e) { 338 | this.mousedover = false; 339 | if (!this.focused && this.shown) this.hide(); 340 | } 341 | 342 | }; 343 | 344 | /* TYPEAHEAD PLUGIN DEFINITION 345 | * =========================== */ 346 | 347 | var old = $.fn.typeahead; 348 | 349 | $.fn.typeahead = function (option) { 350 | var arg = arguments; 351 | return this.each(function () { 352 | var $this = $(this), 353 | data = $this.data('typeahead'), 354 | options = typeof option == 'object' && option; 355 | if (!data) $this.data('typeahead', (data = new Typeahead(this, options))); 356 | if (typeof option == 'string') { 357 | if (arg.length > 1) { 358 | data[option].apply(data, Array.prototype.slice.call(arg ,1)); 359 | } else { 360 | data[option](); 361 | } 362 | } 363 | }); 364 | }; 365 | 366 | $.fn.typeahead.defaults = { 367 | source: [], 368 | items: 8, 369 | menu: '', 370 | item: '
  • ', 371 | minLength: 1, 372 | scrollHeight: 0, 373 | autoSelect: true 374 | }; 375 | 376 | $.fn.typeahead.Constructor = Typeahead; 377 | 378 | /* TYPEAHEAD NO CONFLICT 379 | * =================== */ 380 | 381 | $.fn.typeahead.noConflict = function () { 382 | $.fn.typeahead = old; 383 | return this; 384 | }; 385 | 386 | /* TYPEAHEAD DATA-API 387 | * ================== */ 388 | 389 | $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { 390 | var $this = $(this); 391 | if ($this.data('typeahead')) return; 392 | $this.typeahead($this.data()); 393 | }); 394 | 395 | }; 396 | -------------------------------------------------------------------------------- /src/js/multiline.js: -------------------------------------------------------------------------------- 1 | // Used from https://github.com/sindresorhus/strip-indent and https://github.com/sindresorhus/multiline 2 | 3 | var ib_stripIndent = function (str) { 4 | var match = str.match(/^[ \t]*(?=\S)/gm); 5 | 6 | if (!match) { 7 | return str; 8 | } 9 | 10 | var indent = Math.min.apply(Math, match.map(function (el) { 11 | return el.length; 12 | })); 13 | 14 | var re = new RegExp('^[ \\t]{' + indent + '}', 'gm'); 15 | 16 | return indent > 0 ? str.replace(re, '') : str; 17 | }; 18 | 19 | // start matching after: comment start block => ! or @preserve => optional whitespace => newline 20 | // stop matching before: last newline => optional whitespace => comment end block 21 | var reCommentContents = /\/\*!?(?:\@preserve)?[ \t]*(?:\r\n|\n)([\s\S]*?)(?:\r\n|\n)[ \t]*\*\//; 22 | 23 | var ib_multiline = function (fn) { 24 | if (typeof fn !== 'function') { 25 | throw new TypeError('Expected a function'); 26 | } 27 | 28 | var match = reCommentContents.exec(fn.toString()); 29 | 30 | if (!match) { 31 | throw new TypeError('Multiline comment missing.'); 32 | } 33 | 34 | return match[1]; 35 | }; 36 | 37 | ib_multiline.stripIndent = function (fn) { 38 | return ib_stripIndent(ib_multiline(fn)); 39 | }; 40 | -------------------------------------------------------------------------------- /src/js/parse-data.js: -------------------------------------------------------------------------------- 1 | var ib_parseData = function(data) { 2 | var d, i, j, line, custom_data, items = [], parsed_data = {}; 3 | 4 | d = data.split('\n'); 5 | 6 | function trim(val) { 7 | return val.trim(); 8 | } 9 | 10 | for(i = 0; i < d.length; i++) 11 | { 12 | line = d[i].trim(); 13 | 14 | if(line == '#') // this is comment, ignore it 15 | continue; 16 | 17 | if(line[0] == '[') // this is property, the value is the next line 18 | { 19 | var property = line.substring(1, line.length - 1); 20 | parsed_data[property] = d[i + 1].replace(/\r|\n/g, ''); // clean the new line characters 21 | } 22 | 23 | if(line == '[default_columns]') // this is special case for [default_columns] because the value should be an array 24 | { 25 | parsed_data.default_columns = parsed_data.default_columns.split(',').map(trim); 26 | } 27 | 28 | if(line == '[items]') // this is special case for [items] because the value is multiline 29 | { 30 | j = i + 1; 31 | line = d[j].replace(/\r|\n/g, ''); // clean the new line characters 32 | while(line !== '') 33 | { 34 | var item = line.split('@||@'); 35 | items.push({ 36 | item_description : item[0], 37 | item_quantity : item[1], 38 | item_price : item[2], 39 | item_discount : item[3], 40 | item_tax : item[4] 41 | }); 42 | j++; 43 | line = d[j].trim(); 44 | } 45 | 46 | parsed_data.items = items; 47 | } 48 | 49 | if(line == '[document_custom]') // this is special case for [document_custom] because the value is multiline 50 | { 51 | j = i + 1; 52 | line = d[j].replace(/\r|\n/g, ''); // clean the new line characters 53 | while(line !== '') 54 | { 55 | custom_data = line.split('@||@'); 56 | parsed_data['{document_custom_' + custom_data[0] + '}'] = custom_data[1]; 57 | j++; 58 | line = d[j].trim(); 59 | } 60 | } 61 | 62 | if(line == '[client_custom]') // this is special case for [client_custom] because the value is multiline 63 | { 64 | j = i + 1; 65 | line = d[j].replace(/\r|\n/g, ''); // clean the new line characters 66 | while(line !== '') 67 | { 68 | custom_data = line.split('@||@'); 69 | parsed_data['{client_custom_' + custom_data[0] + '}'] = custom_data[1]; 70 | j++; 71 | line = d[j].trim(); 72 | } 73 | } 74 | } 75 | 76 | delete parsed_data.document_custom; 77 | delete parsed_data.client_custom; 78 | 79 | return parsed_data; 80 | }; 81 | -------------------------------------------------------------------------------- /src/js/table-dnd.js: -------------------------------------------------------------------------------- 1 | // =================================================================== 2 | // Author: Denis Howlett 3 | // WWW: http://www.isocra.com/ 4 | // 5 | // NOTICE: You may use this code for any purpose, commercial or 6 | // private, without any further permission from the author. You may 7 | // remove this notice from your final code if you wish, however we 8 | // would appreciate it if at least the web site address is kept. 9 | // 10 | // You may *NOT* re-distribute this code in any way except through its 11 | // use. That means, you can include it in your product, or your web 12 | // site, or any other form where the code is actually being used. You 13 | // may not put the plain javascript up on your site for download or 14 | // include it in your javascript libraries for download. 15 | // If you wish to share this code with others, please just point them 16 | // to the URL instead. 17 | // 18 | // Please DO NOT link directly to this .js files from your site. Copy 19 | // the files to your server and use them there. Thank you. 20 | // =================================================================== 21 | 22 | 23 | /** 24 | * Encapsulate table Drag and Drop in a class. We'll have this as a Singleton 25 | * so we don't get scoping problems. 26 | */ 27 | var ib_TableDnD = function(ib_resetRowNumbers) { 28 | 29 | /** 30 | * Keep hold of the current table being dragged 31 | */ 32 | var currentTable = null; 33 | /** 34 | * Keep hold of the current drag object if any 35 | */ 36 | this.dragObject = null; 37 | /** 38 | * The current mouse offset 39 | */ 40 | this.mouseOffset = null; 41 | /** 42 | * Remember the old value of Y so that we don't do too much processing 43 | */ 44 | this.oldY = 0; 45 | 46 | /** 47 | * Initialise the drag and drop by capturing mouse move events 48 | */ 49 | this.init = function () { 50 | var rows = $('[data-iterate="item"]'); 51 | for (var i = 0; i < rows.length; i++) 52 | this.makeDraggable(rows[i]); 53 | 54 | /** 55 | * Capture the onmousemove so that we can see if a row from the current 56 | * table if any is being dragged. 57 | * @param ev the event (for Firefox and Safari, otherwise we use window.event for IE) 58 | */ 59 | document.onmousemove = function (ev) { 60 | if (currentTable && currentTable.dragObject) { 61 | ev = ev || window.event; 62 | var mousePos = currentTable.mouseCoords(ev); 63 | var y = mousePos.y; 64 | if (y != currentTable.oldY) { 65 | // work out if we're going up or down... 66 | var movingDown = y > currentTable.oldY; 67 | // update the old value 68 | currentTable.oldY = y; 69 | // update the style to show we're dragging 70 | $(currentTable.dragObject).addClass('ib_dragrow'); 71 | document.body.style.cursor = "move"; 72 | 73 | // If we're over a row then move the dragged row to there so that the user sees the 74 | // effect dynamically 75 | var currentRow = currentTable.findDropTargetRow(y); 76 | if (currentRow) { 77 | if (movingDown && currentTable.dragObject != currentRow) { 78 | currentTable.dragObject.parentNode.insertBefore(currentTable.dragObject, currentRow.nextSibling); 79 | } else if (!movingDown && currentTable.dragObject != currentRow) { 80 | currentTable.dragObject.parentNode.insertBefore(currentTable.dragObject, currentRow); 81 | } 82 | } 83 | } 84 | 85 | return false; 86 | } 87 | }; 88 | 89 | /** 90 | * Similarly for the mouseup 91 | */ 92 | document.onmouseup = function (ev) { 93 | if (currentTable && currentTable.dragObject) { 94 | var droppedRow = currentTable.dragObject; 95 | // If we have a dragObject, then we need to release it, 96 | // The row will already have been moved to the right place so we just reset stuff 97 | $(currentTable.dragObject).removeClass('ib_dragrow'); 98 | 99 | currentTable.dragObject = null; 100 | // And then call the onDrop method in case anyone wants to do any post processing 101 | currentTable.onDrop(droppedRow); 102 | currentTable = null; // let go of the table too 103 | } 104 | }; 105 | }; 106 | 107 | /** 108 | * This function is called when you drop a row, so redefine it in your code 109 | * to do whatever you want, for example use Ajax to update the server 110 | */ 111 | this.onDrop = function (droppedRow) { 112 | document.body.style.cursor = "default"; 113 | ib_resetRowNumbers(); 114 | }; 115 | 116 | /** 117 | * Get the scroll X and Y position 118 | */ 119 | var getScrollXY = function () { 120 | var scrOfX = 0, scrOfY = 0; 121 | if (typeof (window.pageYOffset) == 'number') { 122 | //Netscape compliant 123 | scrOfY = window.pageYOffset; 124 | scrOfX = window.pageXOffset; 125 | } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) { 126 | //DOM compliant 127 | scrOfY = document.body.scrollTop; 128 | scrOfX = document.body.scrollLeft; 129 | } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) { 130 | //IE6 standards compliant mode 131 | scrOfY = document.documentElement.scrollTop; 132 | scrOfX = document.documentElement.scrollLeft; 133 | } 134 | return [scrOfX, scrOfY]; 135 | }; 136 | 137 | /** 138 | * Get the mouse coordinates from the event (allowing for browser differences) 139 | */ 140 | this.mouseCoords = function (ev) { 141 | if (ev.pageX || ev.pageY) { 142 | return { x: ev.pageX, y: ev.pageY }; 143 | } 144 | return { 145 | x: ev.clientX + getScrollXY()[0], 146 | y: ev.clientY + getScrollXY()[1] 147 | }; 148 | }; 149 | 150 | /** 151 | * Given a target element and a mouse event, get the mouse offset from that element. 152 | * To do this we need the element's position and the mouse position 153 | */ 154 | this.getMouseOffset = function (target, ev) { 155 | e = ev || window.event; 156 | 157 | var docPos = $(target).offset(); 158 | var mousePos = this.mouseCoords(e); 159 | return { x: mousePos.x - docPos.left, y: mousePos.y - docPos.top }; 160 | }; 161 | 162 | /** 163 | * Get the source element from an event in a way that works for IE and Firefox and Safari 164 | * @param evt the source event for Firefox (but not IE--IE uses window.event) 165 | */ 166 | var getEventSource = function (evt) { 167 | if (window.event) { 168 | evt = window.event; // For IE 169 | return evt.srcElement; 170 | } else { 171 | return evt.target; // For Firefox 172 | } 173 | }; 174 | 175 | /** 176 | * Take an item and add an onmousedown method so that we can make it draggable 177 | */ 178 | this.makeDraggable = function (item) { 179 | if (!item) return; 180 | var self = this; // Keep the context of the TableDnd inside the function 181 | $(item).find('.ib_move').on('mousedown', function (ev) { 182 | // Need to check to see if we are an input or not, if we are an input, then return true to allow normal processing 183 | var target = getEventSource(ev); 184 | if (target.tagName == 'INPUT' || target.tagName == 'SELECT' || target.tagName == 'TEXTAREA') return true; 185 | currentTable = self; 186 | self.dragObject = item; 187 | self.mouseOffset = self.getMouseOffset(item, ev); 188 | return false; 189 | }); 190 | $(item).find('.ib_move').css("cursor", "move"); 191 | }; 192 | 193 | /** 194 | * We're only worried about the y position really, because we can only move rows up and down 195 | */ 196 | this.findDropTargetRow = function (y) { 197 | var rows = $('[data-iterate="item"]'); 198 | for (var i = 0; i < rows.length; i++) { 199 | var row = rows[i]; 200 | var rowY = $(row).offset().top; 201 | var rowHeight = parseInt(row.offsetHeight); 202 | if (row.offsetHeight === 0) { 203 | rowY = $(row.firstChild).offset().top; 204 | rowHeight = parseInt(row.firstChild.offsetHeight); 205 | } 206 | // Because we always have to insert before, we need to offset the height a bit 207 | if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) { 208 | // that's the row we're over 209 | return row; 210 | } 211 | } 212 | return null; 213 | }; 214 | 215 | }; 216 | -------------------------------------------------------------------------------- /src/lang/de.txt: -------------------------------------------------------------------------------- 1 | var ib_invoice_data = function(){/* 2 | #========================================================================================================= 3 | 4 | 5 | ### Firmen Daten 6 | 7 | [{company_name}] 8 | Dino Store 9 | 10 | [{company_address}] 11 | 227 Cobblestone Road 12 | 13 | [{company_city_zip_state}] 14 | 30000 Bedrock, Cobblestone County 15 | 16 | [{company_phone_fax}] 17 | +555 7 789-1234 18 | 19 | [{company_email_web}] 20 | http://dinostore.bed | hello@dinostore.bed 21 | 22 | [{payment_info1}] 23 | Zahlungsdetails: 24 | 25 | [{payment_info2}] 26 | ACC:123006705 27 | 28 | [{payment_info3}] 29 | IBAN:US100000060345 30 | 31 | [{payment_info4}] 32 | SWIFT:BOA447 33 | 34 | [{payment_info5}] 35 | 36 | 37 | [{issue_date_label}] 38 | Ausgabedatum: 39 | 40 | [{issue_date}] 41 | 42 | 43 | [{net_term_label}] 44 | Net: 45 | 46 | [{net_term}] 47 | 21 48 | 49 | [{due_date_label}] 50 | Fälligkeitsdatum: 51 | 52 | [{due_date}] 53 | 54 | 55 | [{currency_label}] 56 | Währung: 57 | 58 | [{currency}] 59 | EUR 60 | 61 | [{po_number_label}] 62 | P.O. # 63 | 64 | [{po_number}] 65 | 1/3-147 66 | 67 | [{bill_to_label}] 68 | Rechnung für: 69 | 70 | [{client_name}] 71 | Slate Rock and Gravel Company 72 | 73 | [{client_address}] 74 | 222 Rocky Way 75 | 76 | [{client_city_zip_state}] 77 | 30000 Bedrock, Cobblestone County 78 | 79 | [{client_phone_fax}] 80 | +555 7 123-5555 81 | 82 | [{client_email}] 83 | fred@slaterockgravel.bed 84 | 85 | [{client_other}] 86 | Attn: Fred Flintstone 87 | 88 | [{invoice_title}] 89 | RECHNUNG 90 | 91 | [{invoice_number}] 92 | #1 93 | 94 | ### Spaltennamen 95 | 96 | [{item_row_number_label}] 97 | 98 | 99 | [{item_description_label}] 100 | Artikel 101 | 102 | [{item_quantity_label}] 103 | Menge 104 | 105 | [{item_price_label}] 106 | Preis 107 | 108 | [{item_discount_label}] 109 | Rabatt 110 | 111 | [{item_tax_label}] 112 | Steuer 113 | 114 | [{item_line_total_label}] 115 | Gesamt 116 | 117 | [{item_row_number}] 118 | 119 | 120 | [{item_description}] 121 | 122 | 123 | [{item_quantity}] 124 | 125 | 126 | [{item_price}] 127 | 128 | 129 | [{item_discount}] 130 | 131 | 132 | [{item_tax}] 133 | 134 | 135 | [{item_line_total}] 136 | 137 | 138 | 139 | ### Zusammenfassung der summen 140 | 141 | [{amount_subtotal_label}] 142 | Zwischensumme: 143 | 144 | [{amount_subtotal}] 145 | 146 | 147 | [{tax_name}] 148 | Steuer: 149 | 150 | [{tax_value}] 151 | 152 | 153 | [{amount_total_label}] 154 | Gesamt: 155 | 156 | [{amount_total}] 157 | 158 | 159 | [{amount_paid_label}] 160 | Bezahlt: 161 | 162 | [{amount_due_label}] 163 | Offener Betrag: 164 | 165 | [{amount_due}] 166 | 167 | 168 | [{terms_label}] 169 | Bedingungen & Hinweise 170 | 171 | [{terms}] 172 | Fred, ich danke Ihnen sehr. Wir schätzen Ihr geschäft wirklich.
    Bitte senden sie zahlungen vor dem fälligkeitsdatum. 173 | 174 | 175 | ### Einstellungen 176 | 177 | # Einer von 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 178 | [date_format] 179 | yyyy-mm-dd 180 | 181 | # Einer von 'left' oder 'right' 182 | [currency_position] 183 | right 184 | 185 | [show_currency] 186 | true 187 | 188 | # Einer von '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 189 | [number_format] 190 | 0.000,00 191 | 192 | [default_columns] 193 | item_row_number,item_description,item_quantity,item_price,item_discount,item_tax,item_line_total 194 | 195 | [default_quantity] 196 | 1 197 | 198 | [default_price] 199 | 0 200 | 201 | [default_discount] 202 | 0 203 | 204 | [default_tax] 205 | 0 206 | 207 | [default_number_rows] 208 | 3 209 | 210 | [auto_calculate_dates] 211 | true 212 | 213 | [load_items] 214 | true 215 | 216 | [invoicebus_fineprint] 217 | true 218 | 219 | [lang] 220 | de 221 | 222 | 223 | ### Artikel (in dieser reihenfolge item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 224 | 225 | [items] 226 | Gefrorene Brontosaurus Ribs@||@2@||@120@||@@||@2 227 | Mammoth Koteletts@||@14@||@175@||@-10@||@5 228 | @||@@||@@||@@||@ 229 | 230 | 231 | ### Kundenspezifische daten (im format field_name@||@field_value) 232 | 233 | # Dokument benutzerdefinierte daten 234 | [document_custom] 235 | 236 | 237 | # Client benutzerdefinierte daten 238 | [client_custom] 239 | 240 | 241 | 242 | ### Logo 243 | 244 | #base64 codierten daten URI von PNG-bild 245 | [{company_logo}] 246 | 247 | 248 | 249 | 250 | #========================================================================================================= 251 | */} 252 | -------------------------------------------------------------------------------- /src/lang/en.txt: -------------------------------------------------------------------------------- 1 | var ib_invoice_data = function(){/* 2 | #========================================================================================================= 3 | 4 | 5 | ### Company data 6 | 7 | [{company_name}] 8 | Dino Store 9 | 10 | [{company_address}] 11 | 227 Cobblestone Road 12 | 13 | [{company_city_zip_state}] 14 | 30000 Bedrock, Cobblestone County 15 | 16 | [{company_phone_fax}] 17 | +555 7 789-1234 18 | 19 | [{company_email_web}] 20 | http://dinostore.bed | hello@dinostore.bed 21 | 22 | [{payment_info1}] 23 | Payment details: 24 | 25 | [{payment_info2}] 26 | ACC:123006705 27 | 28 | [{payment_info3}] 29 | IBAN:US100000060345 30 | 31 | [{payment_info4}] 32 | SWIFT:BOA447 33 | 34 | [{payment_info5}] 35 | 36 | 37 | [{issue_date_label}] 38 | Issue Date: 39 | 40 | [{issue_date}] 41 | 42 | 43 | [{net_term_label}] 44 | Net: 45 | 46 | [{net_term}] 47 | 21 48 | 49 | [{due_date_label}] 50 | Due Date: 51 | 52 | [{due_date}] 53 | 54 | 55 | [{currency_label}] 56 | Currency: 57 | 58 | [{currency}] 59 | USD 60 | 61 | [{po_number_label}] 62 | P.O. # 63 | 64 | [{po_number}] 65 | 1/3-147 66 | 67 | [{bill_to_label}] 68 | Bill to: 69 | 70 | [{client_name}] 71 | Slate Rock and Gravel Company 72 | 73 | [{client_address}] 74 | 222 Rocky Way 75 | 76 | [{client_city_zip_state}] 77 | 30000 Bedrock, Cobblestone County 78 | 79 | [{client_phone_fax}] 80 | +555 7 123-5555 81 | 82 | [{client_email}] 83 | fred@slaterockgravel.bed 84 | 85 | [{client_other}] 86 | Attn: Fred Flintstone 87 | 88 | [{invoice_title}] 89 | INVOICE 90 | 91 | [{invoice_number}] 92 | #1 93 | 94 | 95 | ### Column names 96 | 97 | [{item_row_number_label}] 98 | 99 | 100 | [{item_description_label}] 101 | Item 102 | 103 | [{item_quantity_label}] 104 | Quantity 105 | 106 | [{item_price_label}] 107 | Price 108 | 109 | [{item_discount_label}] 110 | Discount 111 | 112 | [{item_tax_label}] 113 | Tax 114 | 115 | [{item_line_total_label}] 116 | Linetotal 117 | 118 | [{item_row_number}] 119 | 120 | 121 | [{item_description}] 122 | 123 | 124 | [{item_quantity}] 125 | 126 | 127 | [{item_price}] 128 | 129 | 130 | [{item_discount}] 131 | 132 | 133 | [{item_tax}] 134 | 135 | 136 | [{item_line_total}] 137 | 138 | 139 | 140 | ### Summary of totals 141 | 142 | [{amount_subtotal_label}] 143 | Subtotal: 144 | 145 | [{amount_subtotal}] 146 | 147 | 148 | [{tax_name}] 149 | Tax: 150 | 151 | [{tax_value}] 152 | 153 | 154 | [{amount_total_label}] 155 | Total: 156 | 157 | [{amount_total}] 158 | 159 | 160 | [{amount_paid_label}] 161 | Paid: 162 | 163 | [{amount_due_label}] 164 | Amount Due: 165 | 166 | [{amount_due}] 167 | 168 | 169 | [{terms_label}] 170 | Terms & Notes 171 | 172 | [{terms}] 173 | Fred, thank you very much. We really appreciate your business.
    Please send payments before the due date. 174 | 175 | 176 | ### Settings 177 | 178 | # One of 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 179 | [date_format] 180 | mm/dd/yyyy 181 | 182 | # One of 'left' or 'right' 183 | [currency_position] 184 | left 185 | 186 | [show_currency] 187 | true 188 | 189 | # One of '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 190 | [number_format] 191 | 0,000.00 192 | 193 | [default_columns] 194 | item_row_number,item_description,item_quantity,item_price,item_discount,item_tax,item_line_total 195 | 196 | [default_quantity] 197 | 1 198 | 199 | [default_price] 200 | 0 201 | 202 | [default_discount] 203 | 0 204 | 205 | [default_tax] 206 | 0 207 | 208 | [default_number_rows] 209 | 3 210 | 211 | [auto_calculate_dates] 212 | true 213 | 214 | [load_items] 215 | true 216 | 217 | [invoicebus_fineprint] 218 | true 219 | 220 | [lang] 221 | en 222 | 223 | 224 | ### Items (in this order item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 225 | 226 | [items] 227 | Frozen Brontosaurus Ribs@||@2@||@120@||@@||@2 228 | Mammoth Chops@||@14@||@175@||@-10@||@5 229 | @||@@||@@||@@||@ 230 | 231 | 232 | ### Custom data (in format field_name@||@field_value) 233 | 234 | # Document custom data 235 | [document_custom] 236 | 237 | 238 | # Client custom data 239 | [client_custom] 240 | 241 | 242 | 243 | ### Logo 244 | 245 | # base64 encoded data URI of PNG image 246 | [{company_logo}] 247 | 248 | 249 | 250 | 251 | #========================================================================================================= 252 | */} 253 | -------------------------------------------------------------------------------- /src/lang/es.txt: -------------------------------------------------------------------------------- 1 | var ib_invoice_data = function(){/* 2 | #========================================================================================================= 3 | 4 | 5 | ### Datos de la empresa 6 | 7 | [{company_name}] 8 | Dino Store 9 | 10 | [{company_address}] 11 | 227 Cobblestone Road 12 | 13 | [{company_city_zip_state}] 14 | 30000 Bedrock, Cobblestone County 15 | 16 | [{company_phone_fax}] 17 | +555 7 789-1234 18 | 19 | [{company_email_web}] 20 | http://dinostore.bed | hello@dinostore.bed 21 | 22 | [{payment_info1}] 23 | Detalles del pago: 24 | 25 | [{payment_info2}] 26 | ACC:123006705 27 | 28 | [{payment_info3}] 29 | IBAN:US100000060345 30 | 31 | [{payment_info4}] 32 | SWIFT:BOA447 33 | 34 | [{payment_info5}] 35 | 36 | 37 | [{issue_date_label}] 38 | Fecha de emision: 39 | 40 | [{issue_date}] 41 | 42 | 43 | [{net_term_label}] 44 | Neto: 45 | 46 | [{net_term}] 47 | 21 48 | 49 | [{due_date_label}] 50 | Fecha de vencimiento: 51 | 52 | [{due_date}] 53 | 54 | 55 | [{currency_label}] 56 | Moneda: 57 | 58 | [{currency}] 59 | EUR 60 | 61 | [{po_number_label}] 62 | P.O. # 63 | 64 | [{po_number}] 65 | 1/3-147 66 | 67 | [{bill_to_label}] 68 | Cuenta por: 69 | 70 | [{client_name}] 71 | Slate Rock and Gravel Company 72 | 73 | [{client_address}] 74 | 222 Rocky Way 75 | 76 | [{client_city_zip_state}] 77 | 30000 Bedrock, Cobblestone County 78 | 79 | [{client_phone_fax}] 80 | +555 7 123-5555 81 | 82 | [{client_email}] 83 | fred@slaterockgravel.bed 84 | 85 | [{client_other}] 86 | Attn: Fred Flintstone 87 | 88 | [{invoice_title}] 89 | FACTURA 90 | 91 | [{invoice_number}] 92 | #1 93 | 94 | 95 | ### Nombres de las columnas 96 | 97 | [{item_row_number_label}] 98 | 99 | 100 | [{item_description_label}] 101 | Artículo 102 | 103 | [{item_quantity_label}] 104 | Cantidad 105 | 106 | [{item_price_label}] 107 | Precio 108 | 109 | [{item_discount_label}] 110 | Descuento 111 | 112 | [{item_tax_label}] 113 | Impuestas 114 | 115 | [{item_line_total_label}] 116 | Total 117 | 118 | [{item_row_number}] 119 | 120 | 121 | [{item_description}] 122 | 123 | 124 | [{item_quantity}] 125 | 126 | 127 | [{item_price}] 128 | 129 | 130 | [{item_discount}] 131 | 132 | 133 | [{item_tax}] 134 | 135 | 136 | [{item_line_total}] 137 | 138 | 139 | 140 | ### Resumen de los totales 141 | 142 | [{amount_subtotal_label}] 143 | Subtotal: 144 | 145 | [{amount_subtotal}] 146 | 147 | 148 | [{tax_name}] 149 | Impuestas: 150 | 151 | [{tax_value}] 152 | 153 | 154 | [{amount_total_label}] 155 | Total: 156 | 157 | [{amount_total}] 158 | 159 | 160 | [{amount_paid_label}] 161 | Pagado: 162 | 163 | [{amount_due_label}] 164 | Debido: 165 | 166 | [{amount_due}] 167 | 168 | 169 | [{terms_label}] 170 | Condiciones y notas 171 | 172 | [{terms}] 173 | Fred, muchas gracias. Nosotros realmente apreciamos tu negocio.
    Por favor, envía tus pagos antes de la fecha de vencimiento. 174 | 175 | 176 | ### Configuraciones 177 | 178 | # Uno de los siguentes 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 179 | [date_format] 180 | dd/mm/yyyy 181 | 182 | # Uno de 'left' o 'right' 183 | [currency_position] 184 | right 185 | 186 | [show_currency] 187 | true 188 | 189 | # Uno de '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 190 | [number_format] 191 | 0.000,00 192 | 193 | [default_columns] 194 | item_row_number,item_description,item_quantity,item_price,item_discount,item_tax,item_line_total 195 | 196 | [default_quantity] 197 | 1 198 | 199 | [default_price] 200 | 0 201 | 202 | [default_discount] 203 | 0 204 | 205 | [default_tax] 206 | 0 207 | 208 | [default_number_rows] 209 | 3 210 | 211 | [auto_calculate_dates] 212 | true 213 | 214 | [load_items] 215 | true 216 | 217 | [invoicebus_fineprint] 218 | true 219 | 220 | [lang] 221 | es 222 | 223 | 224 | ### Secciones (en este orden item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 225 | 226 | [items] 227 | Congelados Brontosaurios Costillas@||@2@||@120@||@@||@2 228 | Chuletas de Mamut@||@14@||@175@||@-10@||@5 229 | @||@@||@@||@@||@ 230 | 231 | 232 | ### Fecha personalizada (in format field_name@||@field_value) 233 | 234 | # Fecha personalizada del documento 235 | [document_custom] 236 | 237 | 238 | # Fecha personalizada del cliente 239 | [client_custom] 240 | 241 | 242 | ### Logotipo 243 | 244 | # base64 data codificada URI del imagen PNG 245 | [{company_logo}] 246 | 247 | 248 | 249 | 250 | #========================================================================================================= 251 | */} 252 | -------------------------------------------------------------------------------- /src/lang/fr.txt: -------------------------------------------------------------------------------- 1 | var ib_invoice_data = function(){/* 2 | #========================================================================================================= 3 | 4 | 5 | ### Données sur l'entreprise 6 | 7 | [{company_name}] 8 | Dino Store 9 | 10 | [{company_address}] 11 | 227 Cobblestone Road 12 | 13 | [{company_city_zip_state}] 14 | 30000 Bedrock, Cobblestone County 15 | 16 | [{company_phone_fax}] 17 | +555 7 789-1234 18 | 19 | [{company_email_web}] 20 | http://dinostore.bed | hello@dinostore.bed 21 | 22 | [{payment_info1}] 23 | Détails sur le payement: 24 | 25 | [{payment_info2}] 26 | ACC:123006705 27 | 28 | [{payment_info3}] 29 | IBAN:US100000060345 30 | 31 | [{payment_info4}] 32 | SWIFT:BOA447 33 | 34 | [{payment_info5}] 35 | 36 | 37 | [{issue_date_label}] 38 | Date de délivrance: 39 | 40 | [{issue_date}] 41 | 42 | 43 | [{net_term_label}] 44 | Net: 45 | 46 | [{net_term}] 47 | 21 48 | 49 | [{due_date_label}] 50 | Date limite: 51 | 52 | [{due_date}] 53 | 54 | 55 | [{currency_label}] 56 | Monnaie: 57 | 58 | [{currency}] 59 | EUR 60 | 61 | [{po_number_label}] 62 | P.O. # 63 | 64 | [{po_number}] 65 | 1/3-147 66 | 67 | [{bill_to_label}] 68 | Facture pour: 69 | 70 | [{client_name}] 71 | Slate Rock and Gravel Company 72 | 73 | [{client_address}] 74 | 222 Rocky Way 75 | 76 | [{client_city_zip_state}] 77 | 30000 Bedrock, Cobblestone County 78 | 79 | [{client_phone_fax}] 80 | +555 7 123-5555 81 | 82 | [{client_email}] 83 | fred@slaterockgravel.bed 84 | 85 | [{client_other}] 86 | Attn: Fred Flintstone 87 | 88 | [{invoice_title}] 89 | FACTURE 90 | 91 | [{invoice_number}] 92 | #1 93 | 94 | 95 | ### Noms de la colonne 96 | 97 | [{item_row_number_label}] 98 | 99 | 100 | [{item_description_label}] 101 | Article 102 | 103 | [{item_quantity_label}] 104 | Quantité 105 | 106 | [{item_price_label}] 107 | Prix 108 | 109 | [{item_discount_label}] 110 | Réduction 111 | 112 | [{item_tax_label}] 113 | Taxe 114 | 115 | [{item_line_total_label}] 116 | Total 117 | 118 | [{item_row_number}] 119 | 120 | 121 | [{item_description}] 122 | 123 | 124 | [{item_quantity}] 125 | 126 | 127 | [{item_price}] 128 | 129 | 130 | [{item_discount}] 131 | 132 | 133 | [{item_tax}] 134 | 135 | 136 | [{item_line_total}] 137 | 138 | 139 | 140 | ### Sommaire des totals 141 | 142 | [{amount_subtotal_label}] 143 | Total partiel: 144 | 145 | [{amount_subtotal}] 146 | 147 | 148 | [{tax_name}] 149 | Taxe: 150 | 151 | [{tax_value}] 152 | 153 | 154 | [{amount_total_label}] 155 | Total: 156 | 157 | [{amount_total}] 158 | 159 | 160 | [{amount_paid_label}] 161 | Payé: 162 | 163 | [{amount_due_label}] 164 | Montant dû: 165 | 166 | [{amount_due}] 167 | 168 | 169 | [{terms_label}] 170 | Termes & Notes 171 | 172 | [{terms}] 173 | Fred, merci beaucoup. Nous estimons vraiment vos affaires.
    Nous vous prions d'envoyer vos paiement avant la date limite. 174 | 175 | 176 | ### Settings 177 | 178 | # Un des suivants 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 179 | [date_format] 180 | dd-mm-yyyy 181 | 182 | # Un des suivants'left' ou 'right' 183 | [currency_position] 184 | right 185 | 186 | [show_currency] 187 | true 188 | 189 | # Un des suivants '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 190 | [number_format] 191 | 0000,00 192 | 193 | [default_columns] 194 | item_row_number,item_description,item_quantity,item_price,item_discount,item_tax,item_line_total 195 | 196 | [default_quantity] 197 | 1 198 | 199 | [default_price] 200 | 0 201 | 202 | [default_discount] 203 | 0 204 | 205 | [default_tax] 206 | 0 207 | 208 | [default_number_rows] 209 | 3 210 | 211 | [auto_calculate_dates] 212 | true 213 | 214 | [load_items] 215 | true 216 | 217 | [invoicebus_fineprint] 218 | true 219 | 220 | [lang] 221 | fr 222 | 223 | 224 | ### Articles (dans l'ordre qui suit item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 225 | 226 | [items] 227 | Côtes de Brontosaurus@||@2@||@120@||@@||@2 228 | Côtelettes de mammouth@||@14@||@175@||@-10@||@5 229 | @||@@||@@||@@||@ 230 | 231 | 232 | ### Données personnalisées (dans un format field_name@||@field_value) 233 | 234 | # Document données personnalisées 235 | [document_custom] 236 | 237 | 238 | # Client données personnalisées 239 | [client_custom] 240 | 241 | 242 | 243 | ### Logo 244 | 245 | # base64 données encodées URI d'image PNG 246 | [{company_logo}] 247 | 248 | 249 | 250 | 251 | #========================================================================================================= 252 | */} 253 | -------------------------------------------------------------------------------- /src/lang/it.txt: -------------------------------------------------------------------------------- 1 | var ib_invoice_data = function(){/* 2 | #========================================================================================================= 3 | 4 | 5 | ### Dati sull'azienda 6 | 7 | [{company_name}] 8 | Dino Store 9 | 10 | [{company_address}] 11 | 227 Cobblestone Road 12 | 13 | [{company_city_zip_state}] 14 | 30000 Bedrock, Cobblestone County 15 | 16 | [{company_phone_fax}] 17 | +555 7 789-1234 18 | 19 | [{company_email_web}] 20 | http://dinostore.bed | hello@dinostore.bed 21 | 22 | [{payment_info1}] 23 | Dettagli di pagamento: 24 | 25 | [{payment_info2}] 26 | ACC:123006705 27 | 28 | [{payment_info3}] 29 | IBAN:US100000060345 30 | 31 | [{payment_info4}] 32 | SWIFT:BOA447 33 | 34 | [{payment_info5}] 35 | 36 | 37 | [{issue_date_label}] 38 | Data di rilascio: 39 | 40 | [{issue_date}] 41 | 42 | 43 | [{net_term_label}] 44 | Netto: 45 | 46 | [{net_term}] 47 | 21 48 | 49 | [{due_date_label}] 50 | Scadenza: 51 | 52 | [{due_date}] 53 | 54 | 55 | [{currency_label}] 56 | Valuta: 57 | 58 | [{currency}] 59 | EUR 60 | 61 | [{po_number_label}] 62 | P.O. # 63 | 64 | [{po_number}] 65 | 1/3-147 66 | 67 | [{bill_to_label}] 68 | Bolletta per: 69 | 70 | [{client_name}] 71 | Slate Rock and Gravel Company 72 | 73 | [{client_address}] 74 | 222 Rocky Way 75 | 76 | [{client_city_zip_state}] 77 | 30000 Bedrock, Cobblestone County 78 | 79 | [{client_phone_fax}] 80 | +555 7 123-5555 81 | 82 | [{client_email}] 83 | fred@slaterockgravel.bed 84 | 85 | [{client_other}] 86 | Attn: Fred Flintstone 87 | 88 | [{invoice_title}] 89 | FATTURA 90 | 91 | [{invoice_number}] 92 | #1 93 | 94 | 95 | ### Nomi delle colonne 96 | 97 | [{item_row_number_label}] 98 | 99 | 100 | [{item_description_label}] 101 | Articolo 102 | 103 | [{item_quantity_label}] 104 | Quantità 105 | 106 | [{item_price_label}] 107 | Prezzo 108 | 109 | [{item_discount_label}] 110 | Sconto 111 | 112 | [{item_tax_label}] 113 | Tasse 114 | 115 | [{item_line_total_label}] 116 | Totale 117 | 118 | [{item_row_number}] 119 | 120 | 121 | [{item_description}] 122 | 123 | 124 | [{item_quantity}] 125 | 126 | 127 | [{item_price}] 128 | 129 | 130 | [{item_discount}] 131 | 132 | 133 | [{item_tax}] 134 | 135 | 136 | [{item_line_total}] 137 | 138 | 139 | 140 | ### Riassunto dei totali 141 | 142 | [{amount_subtotal_label}] 143 | Subtotali: 144 | 145 | [{amount_subtotal}] 146 | 147 | 148 | [{tax_name}] 149 | Tasse: 150 | 151 | [{tax_value}] 152 | 153 | 154 | [{amount_total_label}] 155 | Totali: 156 | 157 | [{amount_total}] 158 | 159 | 160 | [{amount_paid_label}] 161 | Pagato: 162 | 163 | [{amount_due_label}] 164 | Importo dovuto: 165 | 166 | [{amount_due}] 167 | 168 | 169 | [{terms_label}] 170 | Condizioni e note 171 | 172 | [{terms}] 173 | Fred, grazie mille. Noi veramente apprezziamo il tuo business.
    Per favore, invia i tuoi pagamenti prima della data di scadenza. 174 | 175 | 176 | ### Impostazioni 177 | 178 | # Uno dei seguenti 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 179 | [date_format] 180 | dd/mm/yyyy 181 | 182 | # Uno di 'left' o 'right' 183 | [currency_position] 184 | right 185 | 186 | [show_currency] 187 | true 188 | 189 | # Uno di '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 190 | [number_format] 191 | 0.000,00 192 | 193 | [default_columns] 194 | item_row_number,item_description,item_quantity,item_price,item_discount,item_tax,item_line_total 195 | 196 | [default_quantity] 197 | 1 198 | 199 | [default_price] 200 | 0 201 | 202 | [default_discount] 203 | 0 204 | 205 | [default_tax] 206 | 0 207 | 208 | [default_number_rows] 209 | 3 210 | 211 | [auto_calculate_dates] 212 | true 213 | 214 | [load_items] 215 | true 216 | 217 | [invoicebus_fineprint] 218 | true 219 | 220 | [lang] 221 | it 222 | 223 | 224 | ### Voci (in questo ordine item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 225 | 226 | [items] 227 | Congelati Brontosauro Costole@||@2@||@120@||@@||@2 228 | Chops di Mammoth@||@14@||@175@||@-10@||@5 229 | @||@@||@@||@@||@ 230 | 231 | 232 | ### Data personalizzata (in format field_name@||@field_value) 233 | 234 | # Data personalizzata del documento 235 | [document_custom] 236 | 237 | 238 | # Data personalizzata del cliente 239 | [client_custom] 240 | 241 | 242 | 243 | ### Logo 244 | 245 | # base64 data codificata URI di PNG immagine 246 | [{company_logo}] 247 | 248 | 249 | 250 | 251 | #========================================================================================================= 252 | */} 253 | -------------------------------------------------------------------------------- /src/sass/partials/_bootstrap.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap styles for tooltip, dropdown and condensed table 3 | */ 4 | 5 | /* Tooltip */ 6 | .tooltip { 7 | position: absolute; 8 | z-index: 1070; 9 | display: block; 10 | font-size: 12px; 11 | line-height: 1.4; 12 | visibility: visible; 13 | filter: alpha(opacity=0); 14 | opacity: 0; 15 | } 16 | .tooltip.in { 17 | filter: alpha(opacity=90); 18 | opacity: .9; 19 | } 20 | .tooltip.top { 21 | padding: 5px 0; 22 | margin-top: -3px; 23 | } 24 | .tooltip.right { 25 | padding: 0 5px; 26 | margin-left: 3px; 27 | } 28 | .tooltip.bottom { 29 | padding: 5px 0; 30 | margin-top: 3px; 31 | } 32 | .tooltip.left { 33 | padding: 0 5px; 34 | margin-left: -3px; 35 | } 36 | .tooltip-inner { 37 | max-width: 200px; 38 | padding: 3px 8px; 39 | color: #fff; 40 | text-align: center; 41 | text-decoration: none; 42 | background-color: #000; 43 | border-radius: 4px; 44 | } 45 | .tooltip-arrow { 46 | position: absolute; 47 | width: 0; 48 | height: 0; 49 | border-color: transparent; 50 | border-style: solid; 51 | } 52 | .tooltip.top .tooltip-arrow { 53 | bottom: 0; 54 | left: 50%; 55 | margin-left: -5px; 56 | border-width: 5px 5px 0; 57 | border-top-color: #000; 58 | } 59 | .tooltip.top-left .tooltip-arrow { 60 | bottom: 0; 61 | left: 5px; 62 | border-width: 5px 5px 0; 63 | border-top-color: #000; 64 | } 65 | .tooltip.top-right .tooltip-arrow { 66 | right: 5px; 67 | bottom: 0; 68 | border-width: 5px 5px 0; 69 | border-top-color: #000; 70 | } 71 | .tooltip.right .tooltip-arrow { 72 | top: 50%; 73 | left: 0; 74 | margin-top: -5px; 75 | border-width: 5px 5px 5px 0; 76 | border-right-color: #000; 77 | } 78 | .tooltip.left .tooltip-arrow { 79 | top: 50%; 80 | right: 0; 81 | margin-top: -5px; 82 | border-width: 5px 0 5px 5px; 83 | border-left-color: #000; 84 | } 85 | .tooltip.bottom .tooltip-arrow { 86 | top: 0; 87 | left: 50%; 88 | margin-left: -5px; 89 | border-width: 0 5px 5px; 90 | border-bottom-color: #000; 91 | } 92 | .tooltip.bottom-left .tooltip-arrow { 93 | top: 0; 94 | left: 5px; 95 | border-width: 0 5px 5px; 96 | border-bottom-color: #000; 97 | } 98 | .tooltip.bottom-right .tooltip-arrow { 99 | top: 0; 100 | right: 5px; 101 | border-width: 0 5px 5px; 102 | border-bottom-color: #000; 103 | } 104 | 105 | /* Dropdown */ 106 | .dropdown-menu { 107 | position: absolute; 108 | top: 100%; 109 | left: 0; 110 | z-index: 950; 111 | display: none; 112 | float: left; 113 | min-width: 160px; 114 | padding: 5px 0; 115 | margin: 2px 0 0; 116 | font-size: 14px; 117 | text-align: left; 118 | list-style: none; 119 | background-color: #fff; 120 | -webkit-background-clip: padding-box; 121 | background-clip: padding-box; 122 | border: 1px solid #ccc; 123 | border: 1px solid rgba(0, 0, 0, .15); 124 | border-radius: 4px; 125 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); 126 | -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); 127 | box-shadow: 0 6px 12px rgba(0, 0, 0, .175); 128 | } 129 | .dropdown-menu.pull-right { 130 | right: 0; 131 | left: auto; 132 | } 133 | .dropdown-menu .divider { 134 | height: 1px; 135 | margin: 9px 0; 136 | overflow: hidden; 137 | background-color: #e5e5e5; 138 | } 139 | .dropdown-menu > li > a { 140 | display: block; 141 | padding: 3px 20px; 142 | clear: both; 143 | font-weight: normal; 144 | line-height: 1.42857143; 145 | color: #333; 146 | white-space: nowrap; 147 | } 148 | .dropdown-menu > li > a:hover, 149 | .dropdown-menu > li > a:focus { 150 | color: #262626; 151 | text-decoration: none; 152 | background-color: #f5f5f5; 153 | } 154 | .dropdown-menu > .active > a, 155 | .dropdown-menu > .active > a:hover, 156 | .dropdown-menu > .active > a:focus { 157 | color: #fff; 158 | text-decoration: none; 159 | background-color: #428bca; 160 | outline: 0; 161 | } 162 | .dropdown-menu > .disabled > a, 163 | .dropdown-menu > .disabled > a:hover, 164 | .dropdown-menu > .disabled > a:focus { 165 | color: #777; 166 | } 167 | .dropdown-menu > .disabled > a:hover, 168 | .dropdown-menu > .disabled > a:focus { 169 | text-decoration: none; 170 | cursor: not-allowed; 171 | background-color: transparent; 172 | background-image: none; 173 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 174 | } 175 | 176 | /* Table condensed */ 177 | .table-condensed > thead > tr > th, 178 | .table-condensed > tbody > tr > th, 179 | .table-condensed > tfoot > tr > th, 180 | .table-condensed > thead > tr > td, 181 | .table-condensed > tbody > tr > td, 182 | .table-condensed > tfoot > tr > td { 183 | padding: 5px; 184 | } 185 | 186 | /* Close */ 187 | .close { 188 | float: right; 189 | font-size: 21px; 190 | font-weight: bold; 191 | line-height: 1; 192 | color: #000; 193 | text-shadow: 0 1px 0 #fff; 194 | filter: alpha(opacity=20); 195 | opacity: .2; 196 | } 197 | .close:hover, 198 | .close:focus { 199 | color: #000; 200 | text-decoration: none; 201 | cursor: pointer; 202 | filter: alpha(opacity=50); 203 | opacity: .5; 204 | } 205 | ib-span.close { 206 | -webkit-appearance: none; 207 | padding: 0; 208 | cursor: pointer; 209 | background: transparent; 210 | border: 0; 211 | } 212 | 213 | /* Modal */ 214 | .modal-open { 215 | //overflow: hidden; 216 | } 217 | .modal { 218 | position: fixed; 219 | top: 0; 220 | right: 0; 221 | bottom: 0; 222 | left: 0; 223 | z-index: 1040; 224 | display: none; 225 | overflow: hidden; 226 | -webkit-overflow-scrolling: touch; 227 | outline: 0; 228 | } 229 | .modal.fade .modal-dialog { 230 | -webkit-transition: -webkit-transform .3s ease-out; 231 | -o-transition: -o-transform .3s ease-out; 232 | transition: transform .3s ease-out; 233 | -webkit-transform: translate(0, -25%); 234 | -ms-transform: translate(0, -25%); 235 | -o-transform: translate(0, -25%); 236 | transform: translate(0, -25%); 237 | } 238 | .modal.in .modal-dialog { 239 | -webkit-transform: translate(0, 0); 240 | -ms-transform: translate(0, 0); 241 | -o-transform: translate(0, 0); 242 | transform: translate(0, 0); 243 | } 244 | .modal-open .modal { 245 | overflow-x: hidden; 246 | overflow-y: auto; 247 | } 248 | .modal-dialog { 249 | position: relative; 250 | width: auto; 251 | margin: 10px; 252 | } 253 | .modal-content { 254 | position: relative; 255 | background-color: #fff; 256 | -webkit-background-clip: padding-box; 257 | background-clip: padding-box; 258 | border: 1px solid #999; 259 | border: 1px solid rgba(0, 0, 0, .2); 260 | border-radius: 6px; 261 | outline: 0; 262 | -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); 263 | box-shadow: 0 3px 9px rgba(0, 0, 0, .5); 264 | } 265 | .modal-backdrop { 266 | position: fixed; 267 | top: 0; 268 | right: 0; 269 | bottom: 0; 270 | left: 0; 271 | background-color: #000; 272 | } 273 | .modal-backdrop.fade { 274 | filter: alpha(opacity=0); 275 | opacity: 0; 276 | } 277 | .modal-backdrop.in { 278 | filter: alpha(opacity=50); 279 | opacity: .5; 280 | } 281 | .modal-header { 282 | min-height: 16.42857143px; 283 | padding: 15px; 284 | border-bottom: 1px solid #e5e5e5; 285 | } 286 | .modal-header .close { 287 | margin-top: -2px; 288 | } 289 | .modal-title { 290 | margin: 0; 291 | line-height: 1.42857143; 292 | } 293 | .modal-body { 294 | position: relative; 295 | padding: 15px; 296 | } 297 | .modal-footer { 298 | padding: 15px; 299 | text-align: right; 300 | border-top: 1px solid #e5e5e5; 301 | } 302 | .modal-footer .btn + .btn { 303 | margin-bottom: 0; 304 | margin-left: 5px; 305 | } 306 | .modal-footer .btn-group .btn + .btn { 307 | margin-left: -1px; 308 | } 309 | .modal-footer .btn-block + .btn-block { 310 | margin-left: 0; 311 | } 312 | .modal-scrollbar-measure { 313 | position: absolute; 314 | top: -9999px; 315 | width: 50px; 316 | height: 50px; 317 | overflow: scroll; 318 | } 319 | @media (min-width: 768px) { 320 | .modal-dialog { 321 | width: 600px; 322 | margin: 30px auto; 323 | } 324 | .modal-content { 325 | -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); 326 | box-shadow: 0 5px 15px rgba(0, 0, 0, .5); 327 | } 328 | .modal-sm { 329 | width: 300px; 330 | } 331 | } 332 | @media (min-width: 992px) { 333 | .modal-lg { 334 | width: 900px; 335 | } 336 | } 337 | -------------------------------------------------------------------------------- /src/sass/partials/_datepicker.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Datepicker for Bootstrap 3 | * 4 | * Copyright 2012 Stefan Petre 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | */ 9 | .datepicker { 10 | font:12px normal 'Open Sans', Arial, Sans-serif; 11 | top: 0; 12 | left: 0; 13 | padding: 4px; 14 | margin-top: 5px; 15 | max-width:250px; 16 | -webkit-border-radius: 4px; 17 | -moz-border-radius: 4px; 18 | border-radius: 4px; 19 | /*.dow { 20 | border-top: 1px solid #ddd !important; 21 | }*/ 22 | 23 | } 24 | .datepicker:before { 25 | content: ''; 26 | display: inline-block; 27 | border-left: 7px solid transparent; 28 | border-right: 7px solid transparent; 29 | border-bottom: 7px solid #ccc; 30 | border-bottom-color: #f7f7f7; 31 | border-bottom-color: rgba(0, 0, 0, 0.2); 32 | position: absolute; 33 | top: -7px; 34 | left: 6px; 35 | } 36 | .datepicker:after { 37 | content: ''; 38 | display: inline-block; 39 | border-left: 6px solid transparent; 40 | border-right: 6px solid transparent; 41 | border-bottom: 6px solid #ffffff; 42 | position: absolute; 43 | top: -6px; 44 | left: 7px; 45 | } 46 | .datepicker > div { 47 | display: none; 48 | } 49 | .datepicker table { 50 | width: 100%; 51 | margin: 0; 52 | } 53 | .datepicker td, 54 | .datepicker th { 55 | text-align: center; 56 | width: 20px; 57 | height: 20px; 58 | -webkit-border-radius: 4px; 59 | -moz-border-radius: 4px; 60 | border-radius: 4px; 61 | } 62 | .datepicker td.day:hover { 63 | background: #eeeeee; 64 | cursor: pointer; 65 | } 66 | .datepicker td.day.disabled { 67 | color: #eeeeee; 68 | } 69 | .datepicker td.old, 70 | .datepicker td.new { 71 | color: #999999; 72 | } 73 | .datepicker td.active, 74 | .datepicker td.active:hover { 75 | color: #ffffff; 76 | background-color: #006dcc; 77 | *background-color: #0044cc; 78 | background-image: -moz-linear-gradient(top, #0088cc, #0044cc); 79 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); 80 | background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); 81 | background-image: -o-linear-gradient(top, #0088cc, #0044cc); 82 | background-image: linear-gradient(to bottom, #0088cc, #0044cc); 83 | background-repeat: repeat-x; 84 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); 85 | /* Darken IE7 buttons by default so they stand out more given they won't have borders */ 86 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 87 | border-color: #0044cc #0044cc #002a80; 88 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 89 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 90 | } 91 | .datepicker td.active:hover, 92 | .datepicker td.active:hover:hover, 93 | .datepicker td.active:focus, 94 | .datepicker td.active:hover:focus, 95 | .datepicker td.active:active, 96 | .datepicker td.active:hover:active, 97 | .datepicker td.active.active, 98 | .datepicker td.active:hover.active, 99 | .datepicker td.active.disabled, 100 | .datepicker td.active:hover.disabled, 101 | .datepicker td.active[disabled], 102 | .datepicker td.active:hover[disabled] { 103 | color: #ffffff; 104 | background-color: #0044cc; 105 | *background-color: #003bb3; 106 | } 107 | .datepicker td ib-span { 108 | display: block; 109 | width: 55px; 110 | height: 54px; 111 | line-height: 54px; 112 | float: left; 113 | margin: 2px; 114 | cursor: pointer; 115 | -webkit-border-radius: 4px; 116 | -moz-border-radius: 4px; 117 | border-radius: 4px; 118 | } 119 | .datepicker td ib-span:hover { 120 | background: #eeeeee; 121 | } 122 | .datepicker td ib-span.active { 123 | color: #ffffff; 124 | background-color: #006dcc; 125 | *background-color: #0044cc; 126 | background-image: -moz-linear-gradient(top, #0088cc, #0044cc); 127 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); 128 | background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); 129 | background-image: -o-linear-gradient(top, #0088cc, #0044cc); 130 | background-image: linear-gradient(to bottom, #0088cc, #0044cc); 131 | background-repeat: repeat-x; 132 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); 133 | border-color: #0044cc #0044cc #002a80; 134 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 135 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 136 | } 137 | .datepicker td ib-span.active:hover, 138 | .datepicker td ib-span.active:focus, 139 | .datepicker td ib-span.active:active, 140 | .datepicker td ib-span.active.active, 141 | .datepicker td ib-span.active.disabled, 142 | .datepicker td ib-span.active[disabled] { 143 | color: #ffffff; 144 | background-color: #0044cc; 145 | *background-color: #003bb3; 146 | } 147 | .datepicker td ib-span.old { 148 | color: #999999; 149 | } 150 | .datepicker th.switch { 151 | width: 145px; 152 | } 153 | .datepicker th.next, 154 | .datepicker th.prev { 155 | font-size: 21px; 156 | } 157 | .datepicker thead tr:first-child th { 158 | cursor: pointer; 159 | } 160 | .datepicker thead tr:first-child th:hover { 161 | background: #eeeeee; 162 | } 163 | .input-append.date .add-on i, 164 | .input-prepend.date .add-on i { 165 | display: block; 166 | cursor: pointer; 167 | width: 16px; 168 | height: 16px; 169 | } 170 | -------------------------------------------------------------------------------- /src/sass/partials/_invoice.print.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Print styles 3 | */ 4 | @import "compass/css3"; 5 | 6 | @media print { 7 | @page 8 | { 9 | size:A4; /* Set A4 format to be default one */ 10 | margin:0; /* This affects the margin in the printer settings (ignored by Safari) */ 11 | } 12 | 13 | html { 14 | background: none !important; 15 | border: none; 16 | margin: 0; 17 | padding: 0; 18 | } 19 | 20 | body 21 | { 22 | background: none !important; 23 | margin:0 !important; /* This affects the margin on the content before sending to printer */ 24 | width:820px !important; /* With fixed width most of the cross browsers printing issues are solved */ 25 | @include box-shadow(none !important); 26 | -webkit-print-color-adjust:exact !important; 27 | } 28 | 29 | [contenteditable="true"] { 30 | outline:none !important; 31 | } 32 | 33 | .ib_editable_outline { 34 | outline:none !important; 35 | background: transparent; 36 | } 37 | 38 | .ib_invoicebus_fineprint { 39 | display: block; 40 | margin-top:-60px; 41 | } 42 | 43 | /* Hide all this elements for printing */ 44 | .ib_drop_zone, 45 | .ib_offline, 46 | .ib_invoice_commands_wrap, 47 | .ib_invoicebus_love, 48 | .ib_remove_logo_overlay, 49 | .ib_remove_logo, 50 | .ib_row_commands, 51 | .ib_add_new_row_link, 52 | .ib_show_hide_columns_link, 53 | .ib_show_hide_columns, 54 | .ib_number_settings, 55 | .ib_date_format, 56 | .tooltip, 57 | .datepicker, 58 | .typeahead 59 | { 60 | display:none !important; 61 | } 62 | 63 | input { 64 | &::-webkit-input-placeholder, &:-moz-placeholder { 65 | color:transparent !important; 66 | } 67 | } 68 | 69 | textarea { 70 | &::-webkit-input-placeholder, &:-moz-placeholder { 71 | color:transparent !important; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/template/data.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Data and settings for the company 3 | * 4 | * How to properly enter your data: 5 | * Be sure when entering your information to enclose that data with double quotes. When entering numbers they 6 | * don't need to be enclosed with quotes, in general the sample data below should be used as general guide on 7 | * how to properly enter your data. And if you have double (or single) quotes in your data (like My "Awesome" Company) 8 | * than you should use something we call escaping special characters with the backslash sign (\) so the final 9 | * company name will be "My \"Awesome\" Company". 10 | */ 11 | 12 | var ib_invoice_data = { 13 | "{company_logo}" : "", // base64 encoded data URI of PNG image 14 | "{company_name}" : "Dino Store", 15 | "{company_address}" : "227 Cobblestone Road", 16 | "{company_city_zip_state}": "30000 Bedrock, Cobblestone County", 17 | "{company_phone_fax}" : "+555 7 789-1234", 18 | "{company_email_web}" : "http://dinostore.bed | hello@dinostore.bed", 19 | "{payment_info1}" : "Payment details:", 20 | "{payment_info2}" : "ACC:123006705", 21 | "{payment_info3}" : "IBAN:US100000060345", 22 | "{payment_info4}" : "SWIFT:BOA447", 23 | "{payment_info5}" : "", 24 | "{issue_date_label}" : "Issue Date:", 25 | "{issue_date}" : "", 26 | "{net_term_label}" : "Net:", 27 | "{net_term}" : 21, 28 | "{due_date_label}" : "Due Date:", 29 | "{due_date}" : "", 30 | "{currency_label}" : "Currency:", 31 | "{currency}" : "USD", 32 | "{po_number_label}" : "P.O. #", 33 | "{po_number}" : "1/3-147", 34 | "{bill_to_label}" : "Bill to:", 35 | "{client_name}" : "Slate Rock and Gravel Company", 36 | "{client_address}" : "222 Rocky Way", 37 | "{client_city_zip_state}" : "30000 Bedrock, Cobblestone County", 38 | "{client_phone_fax}" : "+555 7 123-5555", 39 | "{client_email}" : "fred@slaterockgravel.bed", 40 | "{client_other}" : "Attn: Fred Flintstone", 41 | "{invoice_title}" : "INVOICE", 42 | "{invoice_number}" : "#1", 43 | "{item_row_number_label}" : "", 44 | "{item_description_label}": "Item", 45 | "{item_quantity_label}" : "Quantity", 46 | "{item_price_label}" : "Price", 47 | "{item_discount_label}" : "Discount", 48 | "{item_tax_label}" : "Tax", 49 | "{item_line_total_label}" : "Linetotal", 50 | "{item_row_number}" : "", 51 | "{item_description}" : "", 52 | "{item_quantity}" : "", 53 | "{item_price}" : "", 54 | "{item_discount}" : "", 55 | "{item_tax}" : "", 56 | "{item_line_total}" : "", 57 | "{amount_subtotal_label}" : "Subtotal:", 58 | "{amount_subtotal}" : "", 59 | "{tax_name}" : "Tax:", 60 | "{tax_value}" : "", 61 | "{amount_total_label}" : "Total:", 62 | "{amount_total}" : "", 63 | "{amount_paid_label}" : "Paid:", 64 | "{amount_due_label}" : "Amount Due:", 65 | "{amount_due}" : "", 66 | "{terms_label}" : "Terms & Notes", 67 | "{terms}" : "Fred, thank you very much. We really appreciate your business.
    Please send payments before the due date.", 68 | 69 | // Settings 70 | "date_format" : "mm/dd/yyyy", // One of 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 71 | "currency_position" : "left", // One of 'left' or 'right' 72 | "number_format" : "0,000.00", // One of '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 73 | "default_columns" : ["item_row_number", "item_description", "item_quantity", "item_price", "item_discount", "item_tax", "item_line_total"], 74 | "default_quantity" : "1", 75 | "default_price" : "0", 76 | "default_discount" : "0", 77 | "default_tax" : "0", 78 | "default_number_rows" : 3, 79 | "auto_calculate_dates" : true, 80 | "load_items" : true, 81 | "invoicebus_fineprint" : true, 82 | 83 | // Items 84 | "items": [ 85 | { 86 | "item_description" : "Frozen Brontosaurus Ribs", 87 | "item_quantity" : "2", 88 | "item_price" : "120", 89 | "item_discount" : "", 90 | "item_tax" : "2" 91 | }, 92 | { 93 | "item_description" : "Mammoth Chops", 94 | "item_quantity" : "14", 95 | "item_price" : "175", 96 | "item_discount" : "-10", 97 | "item_tax" : "5" 98 | }, 99 | { 100 | "item_description" : "", 101 | "item_quantity" : "", 102 | "item_price" : "", 103 | "item_discount" : "", 104 | "item_tax" : "" 105 | } 106 | ] 107 | }; 108 | -------------------------------------------------------------------------------- /src/template/data.txt: -------------------------------------------------------------------------------- 1 | var ib_invoice_data = function(){/* 2 | #========================================================================================================= 3 | 4 | 5 | ### Company data 6 | 7 | [{company_name}] 8 | Dino Store 9 | 10 | [{company_address}] 11 | 227 Cobblestone Road 12 | 13 | [{company_city_zip_state}] 14 | 30000 Bedrock, Cobblestone County 15 | 16 | [{company_phone_fax}] 17 | +555 7 789-1234 18 | 19 | [{company_email_web}] 20 | http://dinostore.bed | hello@dinostore.bed 21 | 22 | [{payment_info1}] 23 | Payment details: 24 | 25 | [{payment_info2}] 26 | ACC:123006705 27 | 28 | [{payment_info3}] 29 | IBAN:US100000060345 30 | 31 | [{payment_info4}] 32 | SWIFT:BOA447 33 | 34 | [{payment_info5}] 35 | 36 | 37 | [{issue_date_label}] 38 | Issue Date: 39 | 40 | [{issue_date}] 41 | 42 | 43 | [{net_term_label}] 44 | Net: 45 | 46 | [{net_term}] 47 | 21 48 | 49 | [{due_date_label}] 50 | Due Date: 51 | 52 | [{due_date}] 53 | 54 | 55 | [{currency_label}] 56 | Currency: 57 | 58 | [{currency}] 59 | USD 60 | 61 | [{po_number_label}] 62 | P.O. # 63 | 64 | [{po_number}] 65 | 1/3-147 66 | 67 | [{bill_to_label}] 68 | Bill to: 69 | 70 | [{client_name}] 71 | Slate Rock and Gravel Company 72 | 73 | [{client_address}] 74 | 222 Rocky Way 75 | 76 | [{client_city_zip_state}] 77 | 30000 Bedrock, Cobblestone County 78 | 79 | [{client_phone_fax}] 80 | +555 7 123-5555 81 | 82 | [{client_email}] 83 | fred@slaterockgravel.bed 84 | 85 | [{client_other}] 86 | Attn: Fred Flintstone 87 | 88 | [{invoice_title}] 89 | INVOICE 90 | 91 | [{invoice_number}] 92 | #1 93 | 94 | [{item_row_number_label}] 95 | 96 | 97 | [{item_description_label}] 98 | Item 99 | 100 | [{item_quantity_label}] 101 | Quantity 102 | 103 | [{item_price_label}] 104 | Price 105 | 106 | [{item_discount_label}] 107 | Discount 108 | 109 | [{item_tax_label}] 110 | Tax 111 | 112 | [{item_line_total_label}] 113 | Linetotal 114 | 115 | [{item_row_number}] 116 | 117 | 118 | [{item_description}] 119 | 120 | 121 | [{item_quantity}] 122 | 123 | 124 | [{item_price}] 125 | 126 | 127 | [{item_discount}] 128 | 129 | 130 | [{item_tax}] 131 | 132 | 133 | [{item_line_total}] 134 | 135 | 136 | [{amount_subtotal_label}] 137 | Subtotal: 138 | 139 | [{amount_subtotal}] 140 | 141 | 142 | [{tax_name}] 143 | Tax: 144 | 145 | [{tax_value}] 146 | 147 | 148 | [{amount_total_label}] 149 | Total: 150 | 151 | [{amount_total}] 152 | 153 | 154 | [{amount_paid_label}] 155 | Paid: 156 | 157 | [{amount_due_label}] 158 | Amount Due: 159 | 160 | [{amount_due}] 161 | 162 | 163 | [{terms_label}] 164 | Terms & Notes 165 | 166 | [{terms}] 167 | Fred, thank you very much. We really appreciate your business.
    Please send payments before the due date. 168 | 169 | 170 | ### Settings 171 | 172 | # One of 'dd/mm/yyyy', 'dd-mm-yyyy', 'dd.mm.yyyy', 'mm/dd/yyyy', 'mm-dd-yyyy', 'mm.dd.yyyy', 'yyyy mm dd', 'yyyy-mm-dd', 'yyyy.mm.dd' 173 | [date_format] 174 | mm/dd/yyyy 175 | 176 | # One of 'left' or 'right' 177 | [currency_position] 178 | left 179 | 180 | [show_currency] 181 | true 182 | 183 | # One of '0,000.00', '0 000.00', '0000.00', '0.000,00', '0 000,00', '0000,00' 184 | [number_format] 185 | 0,000.00 186 | 187 | [default_columns] 188 | item_row_number,item_description,item_quantity,item_price,item_discount,item_tax,item_line_total 189 | 190 | [default_quantity] 191 | 1 192 | 193 | [default_price] 194 | 0 195 | 196 | [default_discount] 197 | 0 198 | 199 | [default_tax] 200 | 0 201 | 202 | [default_number_rows] 203 | 3 204 | 205 | [auto_calculate_dates] 206 | true 207 | 208 | [load_items] 209 | true 210 | 211 | [invoicebus_fineprint] 212 | true 213 | 214 | 215 | ### Items (in this order item_description@||@item_quantity@||@item_price@||@item_discount@||@item_tax) 216 | 217 | [items] 218 | Frozen Brontosaurus Ribs@||@2@||@120@||@@||@2 219 | Mammoth Chops@||@14@||@175@||@-10@||@5 220 | @||@@||@@||@@||@ 221 | 222 | 223 | ### Custom data (in format field_name@||@field_value) 224 | 225 | # Document custom data 226 | [document_custom] 227 | 228 | 229 | # Client custom data 230 | [client_custom] 231 | 232 | 233 | 234 | ### Logo 235 | 236 | #base64 encoded data URI of PNG image 237 | [{company_logo}] 238 | 239 | 240 | 241 | 242 | #========================================================================================================= 243 | */} 244 | -------------------------------------------------------------------------------- /src/template/mobile.scss: -------------------------------------------------------------------------------- 1 | // Make the template responsive 2 | 3 | @media only screen and (max-width: 865px) { 4 | #memo { 5 | 6 | .company-info { 7 | width: auto; 8 | } 9 | 10 | .payment-info { 11 | float: none; 12 | clear: both; 13 | text-align: left; 14 | padding-top: 15px; 15 | width: auto; 16 | 17 | div { 18 | display: inline-block; 19 | margin-bottom: 0; 20 | margin-right:3px; 21 | } 22 | } 23 | } 24 | } 25 | 26 | @media only screen and (max-width: 800px) { 27 | #items { 28 | 29 | table { 30 | tr:after { 31 | content: ''; 32 | display: block; 33 | border-top: 1px solid #888; 34 | } 35 | 36 | th { 37 | display: none !important; 38 | } 39 | 40 | td { 41 | display: block; 42 | width: auto; 43 | text-align: left; 44 | 45 | // make the row column collapsed 46 | &:first-child { 47 | width: 0 !important; 48 | height: 0 !important; 49 | padding: 0 !important; 50 | border: 0 !important; 51 | text-indent: -9999px; 52 | } 53 | } 54 | } 55 | } 56 | 57 | #sums { 58 | float:none; 59 | margin-top:30px; 60 | page-break-inside: avoid; 61 | 62 | table { 63 | width: 100%; 64 | 65 | tr { 66 | th, td { 67 | min-width:initial; 68 | width: 50%; 69 | } 70 | } 71 | } 72 | } 73 | 74 | .show-mobile { 75 | display: inline !important; 76 | } 77 | } 78 | 79 | @media only screen and (max-width: 730px) { 80 | #invoice-info { 81 | float: none; 82 | width: auto; 83 | 84 | > div { 85 | width: 48%; 86 | } 87 | } 88 | 89 | #client-info { 90 | float: none; 91 | width: auto; 92 | } 93 | } 94 | 95 | @media only screen and (max-width: 600px) { 96 | #memo { 97 | .logo { 98 | float: none; 99 | margin-right: 0; 100 | } 101 | 102 | .company-info { 103 | float: none; 104 | padding-top: 15px; 105 | width: auto; 106 | } 107 | 108 | .payment-info { 109 | 110 | div { 111 | display: block; 112 | margin-bottom: 3px; 113 | margin-right: 0; 114 | } 115 | } 116 | } 117 | } 118 | 119 | @media only screen and (max-width: 380px) { 120 | #invoice-info { 121 | > div { 122 | width: 45%; 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/template/print.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This print.css file is used for generating preview images for the templates. 3 | * It should be loaded at the end of the html to be able to override the styles. 4 | */ 5 | 6 | @page 7 | { 8 | size:A4; /* auto is the initial value */ 9 | margin:0; /* this affects the margin in the printer settings */ 10 | } 11 | 12 | html { 13 | background: none !important; 14 | border: none; 15 | margin: 0; 16 | padding: 0; 17 | } 18 | 19 | body 20 | { 21 | background: none !important; 22 | margin:0 !important; /* this affects the margin on the content before sending to printer */ 23 | width:820px !important; 24 | box-shadow: none !important; 25 | -moz-box-shadow: none !important; 26 | -webkit-box-shadow: none !important; 27 | -webkit-print-color-adjust:exact !important; 28 | } 29 | 30 | [contenteditable="true"] { 31 | outline:none !important; 32 | } 33 | 34 | .ib_editable_outline { 35 | outline:none !important; 36 | background: transparent; 37 | } 38 | 39 | /* Hide all this elements for printing */ 40 | .ib_drop_zone, 41 | .ib_offline, 42 | .ib_invoice_commands_wrap, 43 | .ib_invoicebus_love, 44 | .ib_remove_logo_overlay, 45 | .ib_remove_logo, 46 | .ib_row_commands, 47 | .ib_add_new_row_link, 48 | .ib_show_hide_columns_link, 49 | .ib_show_hide_columns, 50 | .ib_number_settings, 51 | .ib_date_format, 52 | .ib_invoicebus_fineprint, 53 | .tooltip, 54 | .datepicker, 55 | .typeahead 56 | { 57 | display:none !important; 58 | } 59 | -------------------------------------------------------------------------------- /src/template/template.html: -------------------------------------------------------------------------------- 1 | 2 | @@TPL_NOTE 3 | 4 | 5 | 6 | Onyx 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
    22 |
    23 | 26 | 27 |
    28 |
    {company_name}
    29 |
    {company_address}
    30 |
    {company_city_zip_state}
    31 |
    {company_phone_fax}
    32 |
    {company_email_web}
    33 |
    34 | 35 |
    36 |
    {payment_info1}
    37 |
    {payment_info2}
    38 |
    {payment_info3}
    39 |
    {payment_info4}
    40 |
    {payment_info5}
    41 |
    42 | 43 |
    44 | 45 |
    46 | 47 |
    48 |
    49 | {issue_date_label} 50 | {net_term_label} 51 | {due_date_label} 52 | {currency_label} 53 | {po_number_label} 54 |
    55 | 56 |
    57 | {issue_date} 58 | {net_term} 59 | {due_date} 60 | {currency} 61 | {po_number} 62 |
    63 |
    64 | 65 |
    66 | {bill_to_label} 67 |
    68 | {client_name} 69 |
    70 | 71 |
    72 | {client_address} 73 |
    74 | 75 |
    76 | {client_city_zip_state} 77 |
    78 | 79 |
    80 | {client_phone_fax} 81 |
    82 | 83 |
    84 | {client_email} 85 |
    86 | 87 |
    88 | {client_other} 89 |
    90 |
    91 | 92 |
    93 | 94 |
    95 | 96 | {invoice_title} 97 | {invoice_number} 98 | 99 |
    100 | 101 |
    102 | 103 |
    104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |
    {item_row_number_label} {item_description_label}{item_quantity_label}{item_price_label}{item_discount_label}{item_tax_label}{item_line_total_label}
    {item_row_number} {item_description_label} {item_description}{item_quantity_label} {item_quantity}{item_price_label} {item_price}{item_discount_label} {item_discount}{item_tax_label} {item_tax}{item_line_total_label} {item_line_total}
    128 | 129 |
    130 | 131 |
    132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 |
    {amount_subtotal_label}{amount_subtotal}
    {tax_name}{tax_value}
    {amount_total_label}{amount_total}
    {amount_paid_label}{amount_paid}
    {amount_due_label}{amount_due}
    162 | 163 |
    164 | 165 |
    166 | 167 |
    168 | 169 | {terms_label} 170 |
    {terms}
    171 | 172 |
    173 |
    174 | 175 | @@SCRIPT 176 | 177 | 178 | -------------------------------------------------------------------------------- /src/template/template.scss: -------------------------------------------------------------------------------- 1 | /* Reset styles */ 2 | @import "compass/reset", "compass/css3"; 3 | 4 | 5 | /* Invoice styles */ 6 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700&subset=cyrillic,cyrillic-ext,latin,greek-ext,greek,latin-ext,vietnamese"); 7 | 8 | /** 9 | * DON'T override any styles for the and tags, as this may break the layout. 10 | * Instead wrap everything in one main
    element where you may change 11 | * something like the font or the background of the invoice 12 | */ 13 | html, body { 14 | /* MOVE ALONG, NOTHING TO CHANGE HERE! */ 15 | } 16 | 17 | /** 18 | * IMPORTANT NOTICE: DON'T USE '!important' otherwise this may lead to broken print layout. 19 | * Some browsers may require '!important' in oder to work properly but be careful with it. 20 | */ 21 | 22 | // Import the theme 23 | @import "themes/onyx"; // Onyx is default theme for Invoicebus 24 | 25 | .clearfix { 26 | display:block; 27 | clear:both; 28 | } 29 | 30 | #container { 31 | font: normal 13px/1.4em 'Open Sans', Sans-serif; 32 | margin:0 auto; 33 | padding:40px; 34 | min-height: 1078px; 35 | } 36 | 37 | #memo { 38 | .logo { 39 | float:left; 40 | margin-right:20px; 41 | 42 | img { 43 | width:150px; 44 | height:100px; 45 | } 46 | } 47 | 48 | .company-info { 49 | float:left; 50 | width: 400px; 51 | max-width: 100%; 52 | 53 | > div:first-child { 54 | font-weight:bold; 55 | font-size:20px; 56 | } 57 | 58 | div { 59 | margin-bottom:3px; 60 | } 61 | } 62 | 63 | .payment-info { 64 | float:right; 65 | text-align:right; 66 | width: 165px; 67 | max-width: 100%; 68 | 69 | div { 70 | margin-bottom:3px; 71 | min-width: 20px; 72 | } 73 | } 74 | 75 | &:after { 76 | content:''; 77 | display:block; 78 | clear:both; 79 | } 80 | } 81 | 82 | .memo-line { 83 | margin-top:30px; 84 | border-bottom:1px solid $line-color; 85 | } 86 | 87 | #invoice-info { 88 | float:left; 89 | margin-top:50px; 90 | width: 300px; 91 | max-width: 100%; 92 | 93 | > div { 94 | float: left; 95 | 96 | > span { 97 | display:block; 98 | min-width:100px; 99 | min-height:18px; 100 | margin-bottom:3px; 101 | } 102 | 103 | &:last-child { 104 | margin-left: 10px; 105 | text-align:right; 106 | } 107 | } 108 | 109 | &:after { 110 | content:''; 111 | display:block; 112 | clear:both; 113 | } 114 | } 115 | 116 | #client-info { 117 | float:right; 118 | margin-top:30px; 119 | width: 300px; 120 | max-width: 100%; 121 | 122 | > div { 123 | margin-bottom:3px; 124 | } 125 | 126 | span { 127 | display:block; 128 | } 129 | 130 | > span { 131 | font-weight:bold; 132 | } 133 | } 134 | 135 | #invoice-title-number { 136 | text-align:center; 137 | font-size:20px; 138 | font-weight:bold; 139 | margin:50px 0 20px 0; 140 | 141 | #title { 142 | margin-right:5px; 143 | text-align:right; 144 | } 145 | 146 | #number { 147 | margin-left:5px; 148 | text-align:left; 149 | } 150 | } 151 | 152 | table { 153 | table-layout:fixed; 154 | 155 | th, td { 156 | vertical-align:top; 157 | word-break: keep-all; 158 | word-wrap: break-word; 159 | } 160 | } 161 | 162 | #items { 163 | 164 | .first-cell { 165 | width:18px; 166 | text-align:right; 167 | } 168 | 169 | table { 170 | border-collapse:separate; 171 | width:100%; 172 | 173 | tr:nth-child(odd) { 174 | background: $alternate-row-background; 175 | } 176 | 177 | th { 178 | font-weight:bold; 179 | color:$table-header-color; 180 | background:$table-header-background; 181 | padding:12px 10px; 182 | text-align:right; 183 | 184 | // Row number column 185 | &:first-child { 186 | @extend .first-cell; 187 | } 188 | 189 | // Description column 190 | &:nth-child(2) { 191 | width:30%; 192 | text-align:left; 193 | } 194 | 195 | // Line total column 196 | &:last-child { 197 | text-align:right; 198 | } 199 | } 200 | 201 | td { 202 | &:first-child { 203 | @extend .first-cell; 204 | text-align:left; 205 | } 206 | 207 | &:nth-child(2) { 208 | text-align:left; 209 | } 210 | 211 | &:empty:after { 212 | content: ''; 213 | display: block; 214 | min-height: 18px; 215 | } 216 | 217 | border-bottom: 1px solid $line-color; 218 | border-top: 1px solid #fff; 219 | padding:15px 10px; 220 | text-align:right; 221 | } 222 | 223 | span { 224 | display: inline-block; 225 | min-width: 20px; 226 | } 227 | 228 | } 229 | } 230 | 231 | #sums { 232 | float:right; 233 | margin-top:30px; 234 | page-break-inside: avoid; 235 | 236 | table { 237 | 238 | tr { 239 | th, td { 240 | min-width:100px; 241 | padding:10px; 242 | text-align:right; 243 | } 244 | 245 | th { 246 | text-align:left; 247 | padding-right:25px; 248 | } 249 | 250 | &.amount-total { 251 | th { 252 | text-transform: uppercase; 253 | } 254 | 255 | th, td { 256 | font-weight:bold; 257 | border-top:1px solid $line-color; 258 | } 259 | } 260 | 261 | &:last-child 262 | { 263 | th, td { 264 | color:$table-header-color; 265 | background:$table-header-background; 266 | font-weight:bold; 267 | } 268 | } 269 | } 270 | } 271 | } 272 | 273 | #terms { 274 | margin-top:100px; 275 | page-break-inside: avoid; 276 | 277 | > span { 278 | font-weight:bold; 279 | } 280 | 281 | > div { 282 | margin-top:10px; 283 | min-height:70px; 284 | } 285 | } 286 | 287 | .show-mobile { 288 | display: none !important; 289 | } 290 | 291 | /** 292 | * If the printed invoice is not looking as expected you may tune up 293 | * the print styles (you can use !important to override styles) 294 | */ 295 | @media print { 296 | /* Here goes your print styles */ 297 | } 298 | -------------------------------------------------------------------------------- /src/template/themes/_alice.scss: -------------------------------------------------------------------------------- 1 | // Color Variables 2 | 3 | $table-header-color: #000; 4 | $table-header-background: #e8f3fa; 5 | $line-color: #eef2f4; 6 | $alternate-row-background: #f8fbfd; 7 | -------------------------------------------------------------------------------- /src/template/themes/_cananista.scss: -------------------------------------------------------------------------------- 1 | // Color Variables 2 | 3 | $table-header-color: #000; 4 | $table-header-background: #e6fda9; 5 | $line-color: #eefacf; 6 | $alternate-row-background: #f8fdeb; 7 | -------------------------------------------------------------------------------- /src/template/themes/_elegance.scss: -------------------------------------------------------------------------------- 1 | // Color Variables 2 | 3 | $table-header-color: #000; 4 | $table-header-background: #e8e7e8; 5 | $line-color: #e2e2e2; 6 | $alternate-row-background: #fafafa; 7 | -------------------------------------------------------------------------------- /src/template/themes/_modesta.scss: -------------------------------------------------------------------------------- 1 | // Color Variables 2 | 3 | $table-header-color: #000; 4 | $table-header-background: #dee8da; 5 | $line-color: #e3eddf; 6 | $alternate-row-background: #f8fbfd; 7 | -------------------------------------------------------------------------------- /src/template/themes/_morelo.scss: -------------------------------------------------------------------------------- 1 | // Color Variables 2 | 3 | $table-header-color: #fff; 4 | $table-header-background: #775a5a; 5 | $line-color: #f1e8e8; 6 | $alternate-row-background: #fef9f9; 7 | -------------------------------------------------------------------------------- /src/template/themes/_onyx.scss: -------------------------------------------------------------------------------- 1 | // Color Variables 2 | 3 | $table-header-color: #fff; 4 | $table-header-background: #4b4f52; 5 | $line-color: #e2e2e2; 6 | $alternate-row-background: #fafafa; 7 | --------------------------------------------------------------------------------