diff --git a/.editorconfig b/.editorconfig
index 08b79078..7715ae28 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -13,3 +13,6 @@ insert_final_newline = false
[*.scss]
indent_size = 2
+
+[*.html]
+indent_size = 2
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index c14505d7..be3320fd 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -3,8 +3,7 @@
## Work on `dev`
Any merge request should be created from and issued to the `dev` branch.
-## dist files
-Keep it simple, don't commit any files in the `dist` directory, I build these files only before a release.
+Do not add the `dist` files to your pull request. The directory is ignored for a reason: it is generated and pushed only when doing a release on `master`.
## Core vs Plugins
I want to keep the core clean of extra (and certainly awesome) functionalities. That includes, but is not limited to, export/import plugins, visual aids, etc.
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index a9007708..7a8c011b 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -3,4 +3,4 @@
- Please search in the [documentation](http://querybuilder.js.org) before asking.
- Any issue without enough details won't get any answer and will be closed.
- Help requests must be exhaustive, precise and come with some code explaining the need (use Markdown code highlight).
-- Bug reports must come with a simple test case, preferably on jsFiddle, Plunker, etc. (QueryBuilder is available on [jsDelivr](https://www.jsdelivr.com/projects/jquery.query-builder) to be used on such platforms).
+- Bug reports must come with a simple test case, preferably on jsFiddle, Plunker, etc. (QueryBuilder is available on [jsDelivr](https://cdn.jsdelivr.net/npm/jQuery-QueryBuilder/dist/) and [unpkg](https://unpkg.com/jQuery-QueryBuilder/dist/) to be used on such platforms).
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 10019485..1131297f 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -2,7 +2,6 @@
- [ ] I read the [guidelines for contributing](https://github.com/mistic100/jQuery-QueryBuilder/blob/master/.github/CONTRIBUTING.md)
- [ ] I created my branch from `dev` and I am issuing the PR to `dev`
-- [ ] I **didn't** commited files in the `dist` directory
-- [ ] Unit tests are OK
+- [ ] I didn't pushed the `dist` directory
- [ ] If it's a new feature, I added the necessary unit tests
- [ ] If it's a new language, I filled the `__locale` and `__author` fields
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 00000000..0648b398
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,21 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: actions/setup-node@v3
+ with:
+ node-version: '16'
+ cache: 'yarn'
+
+ - name: build
+ run: |
+ yarn install
+ yarn build
diff --git a/.gitignore b/.gitignore
index d675f018..a50c5eea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
-bower_components
node_modules
+dist
+doc
.sass-cache
-.coverage-results
.idea
*.iml
+package-lock.json
diff --git a/.jscsrc b/.jscsrc
deleted file mode 100644
index ce1e5220..00000000
--- a/.jscsrc
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "preset": "idiomatic",
- "validateIndentation": 4,
- "requireCamelCaseOrUpperCaseIdentifiers": false,
- "disallowKeywordsOnNewLine": [],
- "requireKeywordsOnNewLine": [
- "else"
- ],
- "requirePaddingNewLinesAfterBlocks": false,
- "safeContextKeyword": "self",
- "disallowMultipleLineStrings": false,
- "requirePaddingNewLinesBeforeLineComments": false,
- "requireSpaceBeforeBinaryOperators": [
- "=", "+", "-", "*", "/", "%",
- "<<", ">>", ">>>", "&", "|", "^",
- "&&", "||",
- "===", "==", ">=", "<=", "<", ">", "!=", "!=="
- ],
- "requireDotNotation": false,
- "requireSpacesInsideBrackets": false,
- "requireSpacesInsideParentheses": false,
- "maximumLineLength": null,
- "maximumNumberOfLines": null,
- "validateQuoteMarks": {
- "mark": "'",
- "escape": true
- },
- "requireCurlyBraces": [
- "for",
- "while",
- "do",
- "try",
- "catch"
- ],
- "requireEarlyReturn": false,
- "validateCommentPosition": false
-}
\ No newline at end of file
diff --git a/.jsdoc.json b/.jsdoc.json
new file mode 100644
index 00000000..d8a3fd67
--- /dev/null
+++ b/.jsdoc.json
@@ -0,0 +1,39 @@
+{
+ "opts": {
+ "private": false,
+ "template": "node_modules/foodoc/template",
+ "readme": "build/jsdoc.md"
+ },
+ "plugins": [
+ "plugins/markdown"
+ ],
+ "templates": {
+ "systemName": "jQuery QueryBuilder API",
+ "systemSummary": "jQuery plugin for user friendly query/filter creator",
+ "systemColor": "#004482",
+ "copyright": "Licensed under MIT License, documentation under CC BY 3.0.",
+ "includeDate": false,
+ "inverseNav": false,
+ "cleverLinks": true,
+ "sort": "longname, version, since",
+ "analytics": {
+ "ua": "UA-28192323-3",
+ "domain": "auto"
+ },
+ "navMembers": [
+ {"kind": "class", "title": "Classes", "summary": "All documented classes."},
+ {"kind": "external", "title": "Externals", "summary": "All documented external members."},
+ {"kind": "global", "title": "Globals", "summary": "All documented globals."},
+ {"kind": "mixin", "title": "Mixins", "summary": "All documented mixins."},
+ {"kind": "interface", "title": "Interfaces", "summary": "All documented interfaces."},
+ {"kind": "module", "title": "Modules", "summary": "All documented modules."},
+ {"kind": "event", "title": "Events", "summary": "All documented events."},
+ {"kind": "namespace", "title": "Namespaces", "summary": "All documented namespaces."},
+ {"kind": "tutorial", "title": "Tutorials", "summary": "All available tutorials."}
+ ],
+ "scripts": [
+ "https://cdnjs.cloudflare.com/ajax/libs/trianglify/1.0.1/trianglify.min.js",
+ "js/custom.js"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index 518111a8..00000000
--- a/.jshintrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "-W069": true, // accesses to "regional" in language files
- "multistr": true
-}
\ No newline at end of file
diff --git a/.scss-lint.yml b/.scss-lint.yml
deleted file mode 100644
index db8d4f79..00000000
--- a/.scss-lint.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-linters:
- PropertySortOrder:
- enabled: false
-
- SingleLinePerSelector:
- enabled: false
-
- SelectorDepth:
- max_depth: 4
-
- NestingDepth:
- max_depth: 4
-
- HexLength:
- enabled: false
-
- HexNotation:
- style: uppercase
-
- Shorthand:
- allowed_shorthands: [1, 2, 4]
-
- QualifyingElement:
- enabled: false
-
- ImportantRule:
- enabled: false
-
- VendorPrefix:
- exclude:
- - src/scss/_mixins.scss
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 59e0af84..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-language: node_js
-node_js:
- - "5"
-before_install:
- - gem install sass
- - gem install scss_lint -v 0.49.0
- - npm install -g grunt-cli
- - npm install -g bower
-before_script:
- - bower install
-after_success: grunt coveralls
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 36ab0d62..00000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,625 +0,0 @@
-var deepmerge = require('deepmerge');
-
-module.exports = function(grunt) {
- require('time-grunt')(grunt);
- require('jit-grunt')(grunt, {
- scsslint: 'grunt-scss-lint'
- });
-
- grunt.util.linefeed = '\n';
-
- function removeJshint(src) {
- return src
- .replace(/\/\*jshint [a-z:]+ \*\/\r?\n\r?\n?/g, '')
- .replace(/\/\*jshint -[EWI]{1}[0-9]{3} \*\/\r?\n\r?\n?/g, '');
- }
-
- function process_lang(file, src, wrapper) {
- var lang = file.split(/[\/\.]/)[2];
- var content = JSON.parse(src);
- wrapper = wrapper || ['', ''];
-
- grunt.config.set('lang_locale', content.__locale || lang);
- grunt.config.set('lang_author', content.__author);
- var header = grunt.template.process('<%= langBanner %>');
-
- loaded_plugins.forEach(function(p) {
- var plugin_file = 'src/plugins/' + p + '/i18n/' + lang + '.json';
-
- if (grunt.file.exists(plugin_file)) {
- content = deepmerge(content, grunt.file.readJSON(plugin_file));
- }
- });
-
- return header
- + '\n\n'
- + wrapper[0]
- + 'QueryBuilder.regional[\'' + lang + '\'] = '
- + JSON.stringify(content, null, 2)
- + ';\n\n'
- + 'QueryBuilder.defaults({ lang_code: \'' + lang + '\' });'
- + wrapper[1];
- }
-
-
- var all_plugins = {},
- all_langs = {},
- loaded_plugins = [],
- loaded_langs = [],
- js_core_files = [
- 'src/main.js',
- 'src/defaults.js',
- 'src/core.js',
- 'src/public.js',
- 'src/data.js',
- 'src/template.js',
- 'src/model.js',
- 'src/utils.js',
- 'src/jquery.js'
- ],
- js_files_to_load = js_core_files.slice(),
- all_js_files = js_core_files.slice(),
- js_files_for_standalone = [
- 'bower_components/jquery-extendext/jQuery.extendext.js',
- 'bower_components/doT/doT.js',
- 'dist/js/query-builder.js'
- ];
-
-
- (function() {
- // list available plugins and languages
- grunt.file.expand('src/plugins/**/plugin.js')
- .forEach(function(f) {
- var n = f.split('/')[2];
- all_plugins[n] = f;
- });
-
- grunt.file.expand('src/i18n/*.json')
- .forEach(function(f) {
- var n = f.split(/[\/\.]/)[2];
- all_langs[n] = f;
- });
-
- // fill all js files
- for (var p in all_plugins) {
- all_js_files.push(all_plugins[p]);
- }
-
- // parse 'plugins' parameter
- var arg_plugins = grunt.option('plugins');
- if (typeof arg_plugins === 'string') {
- arg_plugins.replace(/ /g, '').split(',').forEach(function(p) {
- if (all_plugins[p]) {
- js_files_to_load.push(all_plugins[p]);
- loaded_plugins.push(p);
- }
- else {
- grunt.fail.warn('Plugin ' + p + ' unknown');
- }
- });
- }
- else if (arg_plugins === undefined) {
- for (var p in all_plugins) {
- js_files_to_load.push(all_plugins[p]);
- loaded_plugins.push(p);
- }
- }
-
- // default language
- js_files_to_load.push('.temp/i18n/en.js');
- loaded_langs.push('en');
-
- // parse 'lang' parameter
- var arg_langs = grunt.option('languages');
- if (typeof arg_langs === 'string') {
- arg_langs.replace(/ /g, '').split(',').forEach(function(l) {
- if (all_langs[l]) {
- if (l !== 'en') {
- js_files_to_load.push(all_langs[l].replace(/^src/, '.temp').replace(/json$/, 'js'));
- loaded_langs.push(l);
- }
- }
- else {
- grunt.fail.warn('Language ' + l + ' unknown');
- }
- });
- }
- }());
-
-
- grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
-
- banner:
- '/*!\n' +
- ' * jQuery QueryBuilder <%= pkg.version %>\n' +
- ' * Copyright 2014-<%= grunt.template.today("yyyy") %> Damien "Mistic" Sorel (http://www.strangeplanet.fr)\n' +
- ' * Licensed under MIT (http://opensource.org/licenses/MIT)\n' +
- ' */',
-
- langBanner:
- '/*!\n' +
- ' * jQuery QueryBuilder <%= pkg.version %>\n' +
- ' * Locale: <%= lang_locale %>\n' +
- '<% if (lang_author) { %> * Author: <%= lang_author %>\n<% } %>' +
- ' * Licensed under MIT (http://opensource.org/licenses/MIT)\n' +
- ' */',
-
- // serve folder content
- connect: {
- dev: {
- options: {
- host: '0.0.0.0',
- port: 9000,
- livereload: true
- }
- }
- },
-
- // watchers
- watch: {
- options: {
- livereload: true
- },
- js: {
- files: ['src/*.js', 'src/plugins/**/plugin.js'],
- tasks: ['build_js']
- },
- css: {
- files: ['src/scss/*.scss', 'src/plugins/**/plugin.scss'],
- tasks: ['build_css']
- },
- lang: {
- files: ['src/i18n/*.json', 'src/plugins/**/i18n/*.json'],
- tasks: ['build_lang']
- },
- example: {
- files: ['examples/**'],
- tasks: []
- }
- },
-
- // open example
- open: {
- dev: {
- path: 'http://localhost:<%= connect.dev.options.port%>/examples/index.html'
- }
- },
-
- // copy SASS files
- copy: {
- sass_core: {
- files: [{
- expand: true,
- flatten: true,
- src: ['src/scss/*.scss'],
- dest: 'dist/scss'
- }]
- },
- sass_plugins: {
- files: loaded_plugins.map(function(name) {
- return {
- src: 'src/plugins/' + name + '/plugin.scss',
- dest: 'dist/scss/plugins/' + name + '.scss'
- };
- })
- }
- },
-
- concat: {
- // concat all JS
- js: {
- src: js_files_to_load,
- dest: 'dist/js/query-builder.js',
- options: {
- stripBanners: false,
- separator: '\n\n',
- process: function(src) {
- return removeJshint(src).replace(/\r\n/g, '\n');
- }
- }
- },
- // create standalone version
- js_standalone: {
- src: js_files_for_standalone,
- dest: 'dist/js/query-builder.standalone.js',
- options: {
- stripBanners: false,
- separator: '\n\n',
- process: function(src, file) {
- var name = file.match(/([^\/]+?).js$/)[1];
-
- return removeJshint(src)
- .replace(/\r\n/g, '\n')
- .replace(/define\((.*?)\);/, 'define(\'' + name + '\', $1);');
- }
- }
- },
- // compile language files with AMD wrapper
- lang: {
- files: Object.keys(all_langs).map(function(name) {
- return {
- src: 'src/i18n/' + name + '.json',
- dest: 'dist/i18n/query-builder.' + name + '.js'
- };
- }),
- options: {
- process: function(src, file) {
- var wrapper = grunt.file.read('src/i18n/.wrapper.js').replace(/\r\n/g, '\n').split(/@@js\n/);
- return process_lang(file, src, wrapper);
- }
- }
- },
- // compile language files without wrapper
- lang_temp: {
- files: Object.keys(all_langs).map(function(name) {
- return {
- src: 'src/i18n/' + name + '.json',
- dest: '.temp/i18n/' + name + '.js'
- };
- }),
- options: {
- process: function(src, file) {
- return process_lang(file, src);
- }
- }
- },
- // add banner to CSS files
- css: {
- options: {
- banner: '<%= banner %>\n\n',
- },
- files: [{
- expand: true,
- src: ['dist/css/*.css', 'dist/scss/*.scss'],
- dest: ''
- }]
- }
- },
-
- wrap: {
- // add AMD wrapper and banner
- js: {
- src: ['dist/js/query-builder.js'],
- dest: '',
- options: {
- separator: '',
- wrapper: function() {
- var wrapper = grunt.file.read('src/.wrapper.js').replace(/\r\n/g, '\n').split(/@@js\n/);
-
- if (loaded_plugins.length) {
- wrapper[0] = '// Plugins: ' + loaded_plugins.join(', ') + '\n' + wrapper[0];
- }
- if (loaded_langs.length) {
- wrapper[0] = '// Languages: ' + loaded_langs.join(', ') + '\n' + wrapper[0];
- }
- wrapper[0] = grunt.template.process('<%= banner %>\n\n') + wrapper[0];
-
- return wrapper;
- }
- }
- },
- // add plugins SASS imports
- sass: {
- src: ['dist/scss/default.scss'],
- dest: '',
- options: {
- separator: '',
- wrapper: function() {
- return ['', loaded_plugins.reduce(function(wrapper, name) {
- if (grunt.file.exists('dist/scss/plugins/' + name + '.scss')) {
- wrapper += '\n@import \'plugins/' + name + '\';';
- }
- return wrapper;
- }, '\n')];
- }
- }
- }
- },
-
- // parse scss
- sass: {
- options: {
- sourcemap: 'none',
- style: 'expanded'
- },
- dist: {
- files: [{
- expand: true,
- flatten: true,
- src: ['dist/scss/*.scss'],
- dest: 'dist/css',
- ext: '.css',
- rename: function(dest, src) {
- return dest + '/query-builder.' + src;
- }
- }]
- }
- },
-
- // compress js
- uglify: {
- options: {
- banner: '<%= banner %>\n\n',
- mangle: { except: ['$'] }
- },
- dist: {
- files: [{
- expand: true,
- flatten: true,
- src: ['dist/js/*.js', '!dist/js/*.min.js'],
- dest: 'dist/js',
- ext: '.min.js',
- extDot: 'last'
- }]
- }
- },
-
- // compress css
- cssmin: {
- dist: {
- files: [{
- expand: true,
- flatten: true,
- src: ['dist/css/*.css', '!dist/css/*.min.css'],
- dest: 'dist/css',
- ext: '.min.css',
- extDot: 'last'
- }]
- }
- },
-
- // clean build dir
- clean: {
- temp: ['.temp']
- },
-
- // jshint tests
- jshint: {
- lib: {
- options: {
- jshintrc: '.jshintrc'
- },
- src: js_files_to_load
- }
- },
-
- // jscs tests
- jscs: {
- lib: {
- options: {
- config: '.jscsrc'
- },
- src: js_files_to_load
- }
- },
-
- // scss tests
- scsslint: {
- lib: {
- options: {
- colorizeOutput: true,
- config: '.scss-lint.yml'
- },
- src: ['src/**/*.scss']
- }
- },
-
- // inject all source files and test modules in the test file
- 'string-replace': {
- test: {
- src: 'tests/index.html',
- dest: 'tests/index.html',
- options: {
- replacements: [{
- pattern: /()(?:[\s\S]*)()/m,
- replacement: function(match, m1, m2) {
- var scripts = '\n';
-
- js_core_files.forEach(function(file) {
- scripts += '\n';
- });
-
- scripts += '\n';
-
- for (var p in all_plugins) {
- scripts += '\n';
- }
-
- return m1 + scripts + m2;
- }
- }, {
- pattern: /()(?:[\s\S]*)()/m,
- replacement: function(match, m1, m2) {
- var scripts = '\n';
-
- grunt.file.expand('tests/*.module.js').forEach(function(file) {
- scripts += '\n';
- });
-
- return m1 + scripts + m2;
- }
- }]
- }
- }
- },
-
- // qunit test suite
- qunit: {
- all: {
- options: {
- urls: ['tests/index.html?coverage=true'],
- noGlobals: true
- }
- }
- },
-
- // save LCOV files
- qunit_blanket_lcov: {
- all: {
- files: [{
- expand: true,
- src: ['src/*.js', 'src/plugins/**/plugin.js']
- }],
- options: {
- dest: '.coverage-results/all.lcov'
- }
- }
- },
-
- // coveralls data
- coveralls: {
- options: {
- force: true
- },
- all: {
- src: '.coverage-results/all.lcov',
- }
- }
- });
-
-
- // list the triggers and changes
- grunt.registerTask('describe_triggers', 'List QueryBuilder triggers.', function() {
- var triggers = {};
- var total = 0;
-
- for (var f in all_js_files) {
- grunt.file.read(all_js_files[f]).split(/\r?\n/).forEach(function(line, i) {
- var matches = /(e = )?(?:this|that)\.(trigger|change)\('(\w+)'([^)]*)\);/.exec(line);
- if (matches !== null) {
- triggers[matches[3]] = {
- name: matches[3],
- type: matches[2],
- file: all_js_files[f],
- line: i,
- args: matches[4].slice(2),
- prevent: !!matches[1]
- };
-
- total++;
- }
- });
- }
-
- grunt.log.write('\n');
-
- for (var t in triggers) {
- grunt.log.write(t['cyan'] + ' ' + triggers[t].type['magenta']);
- if (triggers[t].prevent) grunt.log.write(' (*)'['yellow']);
- grunt.log.write('\n');
- grunt.log.writeln(' ' + (triggers[t].file + ':' + triggers[t].line)['red'] + ' ' + triggers[t].args);
- grunt.log.write('\n');
- }
-
- grunt.log.writeln((total + ' Triggers in QueryBuilder.')['cyan']['bold']);
- });
-
- // list all possible thrown errors
- grunt.registerTask('describe_errors', 'List QueryBuilder errors.', function() {
- var errors = {};
- var total = 0;
-
- for (var f in all_js_files) {
- grunt.file.read(all_js_files[f]).split(/\r?\n/).forEach(function(line, i) {
- var matches = /Utils\.error\('(\w+)', '([^)]+)'([^)]*)\);/.exec(line);
- if (matches !== null) {
- (errors[matches[1]] = errors[matches[1]] || []).push({
- type: matches[1],
- message: matches[2],
- file: all_js_files[f],
- line: i,
- args: matches[3].slice(2).split(', ')
- });
-
- total++;
- }
- });
- }
-
- grunt.log.write('\n');
-
- for (var e in errors) {
- grunt.log.writeln((e + 'Error')['cyan']);
- errors[e].forEach(function(error) {
- var message = error.message.replace(/{([0-9]+)}/g, function(m, i) {
- return error.args[parseInt(i)]['yellow'];
- });
- grunt.log.writeln(' ' + (error.file + ':' + error.line)['red']);
- grunt.log.writeln(' ' + message);
- });
- grunt.log.write('\n');
- }
-
- grunt.log.writeln((total + ' Errors in QueryBuilder.')['cyan']['bold']);
- });
-
- // display available modules
- grunt.registerTask('list_modules', 'List QueryBuilder plugins and languages.', function() {
- grunt.log.writeln('\nAvailable QueryBuilder plugins:\n');
-
- for (var p in all_plugins) {
- grunt.log.write(p['cyan']);
-
- if (grunt.file.exists(all_plugins[p].replace(/js$/, 'scss'))) {
- grunt.log.write(' + CSS');
- }
-
- grunt.log.write('\n');
- }
-
- grunt.log.writeln('\nAvailable QueryBuilder languages:\n');
-
- for (var l in all_langs) {
- if (l !== 'en') {
- grunt.log.writeln(l['cyan']);
- }
- }
- });
-
-
- grunt.registerTask('build_js', [
- 'concat:lang_temp',
- 'concat:js',
- 'wrap:js',
- 'concat:js_standalone',
- 'uglify',
- 'clean:temp'
- ]);
-
- grunt.registerTask('build_css', [
- 'copy:sass_core',
- 'copy:sass_plugins',
- 'wrap:sass',
- 'sass',
- 'cssmin',
- 'concat:css'
- ]);
-
- grunt.registerTask('build_lang', [
- 'concat:lang'
- ]);
-
- grunt.registerTask('default', [
- 'build_lang',
- 'build_js',
- 'build_css'
- ]);
-
- grunt.registerTask('test', [
- 'jshint',
- 'jscs',
- 'scsslint',
- 'default',
- 'string-replace:test',
- 'qunit_blanket_lcov',
- 'qunit'
- ]);
-
- grunt.registerTask('serve', [
- 'default',
- 'open',
- 'connect',
- 'watch'
- ]);
-};
diff --git a/LICENSE b/LICENSE
index 99070e3d..2558fa6a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2014-2015 Damien Sorel
+Copyright (c) 2014-2018 Damien Sorel
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
diff --git a/README.md b/README.md
index bd337f35..f0fd8ab7 100644
--- a/README.md
+++ b/README.md
@@ -1,71 +1,61 @@
# jQuery QueryBuilder
-[](http://querybuilder.js.org)
-[](http://www.jsdelivr.com/projects/jquery.query-builder)
-[](https://travis-ci.org/mistic100/jQuery-QueryBuilder)
-[](https://coveralls.io/r/mistic100/jQuery-QueryBuilder)
+[](https://www.npmjs.com/package/jQuery-QueryBuilder)
+[](https://www.jsdelivr.com/package/npm/jQuery-QueryBuilder)
+[](https://github.com/mistic100/jQuery-QueryBuilder/actions)
+[](https://gitlocalize.com/repo/5259/whole_project?utm_source=badge)
jQuery plugin offering an simple interface to create complex queries.
-[](http://querybuilder.js.org)
+[](https://querybuilder.js.org)
+
+
## Documentation
-http://querybuilder.js.org
+[querybuilder.js.org](https://querybuilder.js.org)
-### Dependencies
- * jQuery >= 1.10
- * Bootstrap >= 3.1 (CSS only)
- * [jQuery.extendext](https://github.com/mistic100/jQuery.extendext)
- * [doT.js](http://olado.github.io/doT) (@master until the author decide to publish a new version)
- * [MomentJS](http://momentjs.com) (optional, for Date/Time validation)
- * Other Bootstrap/jQuery plugins used by plugins
-($.extendext and doT.js are directly included in the [standalone](https://github.com/mistic100/jQuery-QueryBuilder/blob/master/dist/js/query-builder.standalone.js) file)
-### Browser support
- * Internet Explorer >= 9
- * All other recent browsers
+## Install
-### Build
+#### Manually
-#### Prerequisites
+[Download the latest release](https://github.com/mistic100/jQuery-QueryBuilder/releases)
- * NodeJS + NPM: `apt-get install nodejs-legacy npm`
- * Ruby Dev: `apt-get install ruby-dev`
- * Grunt CLI: `npm install -g grunt-cli`
- * Bower: `npm install -g bower`
- * SASS: `gem install sass`
+#### With npm
-#### Run
+```bash
+$ npm install jQuery-QueryBuilder
+```
-Install Node and Bower dependencies `npm install & bower install` then run `grunt` in the root directory to generate production files inside `dist`.
+#### Via CDN
-#### Options
+jQuery-QueryBuilder is available on [jsDelivr](https://www.jsdelivr.com/package/npm/jQuery-QueryBuilder).
+### Dependencies
+ * [jQuery 3](https://jquery.com)
+ * [Bootstrap 5](https://getbootstrap.com/docs/5.3/) CSS and bundle.js which includes `Popper` for tooltips and popovers
+ * [Bootstrap Icons](https://icons.getbootstrap.com/)
+ * [jQuery.extendext](https://github.com/mistic100/jQuery.extendext)
+ * [MomentJS](https://momentjs.com) (optional, for Date/Time validation)
+ * [SQL Parser](https://github.com/mistic100/sql-parser) (optional, for SQL methods)
+ * Other Bootstrap/jQuery plugins used by plugins
-You can choose which plugins to include with `--plugins` :
-```bash
-# include "sql-support" and "mongodb-support" plugins
-grunt --plugins=sql-support,mongodb-support
+($.extendext is directly included in the [standalone](https://github.com/mistic100/jQuery-QueryBuilder/blob/master/dist/js/query-builder.standalone.js) file)
-# disable all plugins
-grunt --plugins=false
-```
-All plugins are included by default.
-You can also include language files with `--languages` :
-```bash
-# include French & Italian translation
-grunt --languages=fr,it
-```
-#### Other commands
+## Developement
+
+Install Node dependencies with `npm install`.
+
+#### Build
+
+Run `npm run build` in the root directory to generate production files inside `dist`.
+
+#### Serve
+
+Run `npm run serve` to open the example page with automatic build and livereload.
- * `grunt test` to run jshint/jscs/scsslint and the QUnit test suite.
- * `grunt list_modules` to get the list of available plugins and languages.
- * `grunt describe_triggers` to get the list of all triggers.
- * `grunt describe_errors` to get the list of all fatal errors.
- * `grunt watch` to automatically build the library when modifying the source files.
-### Inspiration
- * [Knockout Query Builder](http://kindohm.github.io/knockout-query-builder/)
- * [jui_filter_rules](http://www.pontikis.net/labs/jui_filter_rules/)
+## License
+This library is available under the MIT license.
diff --git a/bower.json b/bower.json
deleted file mode 100644
index 797dcac2..00000000
--- a/bower.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "jQuery-QueryBuilder",
- "authors": [
- {
- "name": "Damien \"Mistic\" Sorel",
- "email": "contact@git.strangeplanet.fr",
- "homepage": "http://www.strangeplanet.fr"
- }
- ],
- "description": "jQuery plugin for user friendly query/filter creator",
- "main": [
- "dist/js/query-builder.js",
- "dist/css/query-builder.default.css"
- ],
- "dependencies": {
- "jquery": ">= 1.9.0",
- "bootstrap": ">= 3.1.0",
- "moment": ">= 2.6.0",
- "jquery-extendext": ">= 0.1.2",
- "doT": "master"
- },
- "devDependencies": {
- "blanket": "^1.1.0",
- "qunit": "^1.23.0",
- "bootstrap-select": "^1.10.0",
- "bootbox": "^4.4.0",
- "awesome-bootstrap-checkbox": "^0.3.0",
- "sql-parser": "^1.0.0",
- "bind-polyfill": "~1.0.0",
- "interact": "^1.2.6"
- },
- "keywords": [
- "jquery",
- "query",
- "builder",
- "filter"
- ],
- "license": "MIT",
- "homepage": "https://github.com/mistic100/jQuery-QueryBuilder",
- "repository": {
- "type": "git",
- "url": "git://github.com/mistic100/jQuery-QueryBuilder.git"
- },
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src",
- "tests",
- "composer.json",
- "package.json",
- "Gruntfile.js",
- "CONTRIBUTING.md"
- ]
-}
diff --git a/build/dist.mjs b/build/dist.mjs
new file mode 100644
index 00000000..e413853b
--- /dev/null
+++ b/build/dist.mjs
@@ -0,0 +1,210 @@
+import fs from 'fs';
+import path from 'path';
+import { globSync } from 'glob';
+import * as sass from 'sass';
+import pkg from '../package.json' assert { type: 'json' };
+
+const DEV = process.argv[2] === '--dev';
+
+const DIST = 'dist/';
+
+const CORE_JS = [
+ 'src/main.js',
+ 'src/defaults.js',
+ 'src/plugins.js',
+ 'src/core.js',
+ 'src/public.js',
+ 'src/data.js',
+ 'src/template.js',
+ 'src/utils.js',
+ 'src/model.js',
+ 'src/jquery.js',
+];
+
+const CORE_SASS = [
+ 'src/scss/dark.scss',
+ 'src/scss/default.scss',
+];
+
+const STANDALONE_JS = {
+ 'jquery-extendext': 'node_modules/jquery-extendext/jquery-extendext.js',
+ 'query-builder': `${DIST}js/query-builder.js`,
+};
+
+const BANNER = () => `/*!
+ * jQuery QueryBuilder ${pkg.version}
+ * Copyright 2014-${new Date().getFullYear()} Damien "Mistic" Sorel (http://www.strangeplanet.fr)
+ * Licensed under MIT (https://opensource.org/licenses/MIT)
+ */`;
+
+const LANG_BANNER = (locale, author) => `/*!
+ * jQuery QueryBuilder ${pkg.version}
+ * Locale: ${locale}
+ * Author: ${author}
+ * Licensed under MIT (https://opensource.org/licenses/MIT)
+ */`;
+
+const ALL_PLUGINS_JS = glob('src/plugins/*/plugin.js')
+ .sort()
+ .reduce((all, p) => {
+ const n = p.split('/')[2];
+ all[n] = p;
+ return all;
+ }, {});
+
+const ALL_PLUGINS_SASS = glob('src/plugins/*/plugin.scss')
+ .sort()
+ .reduce((all, p) => {
+ const n = p.split('/')[2];
+ all[n] = p;
+ return all;
+ }, {});
+
+const ALL_LANGS = glob('src/i18n/*.json')
+ .map(p => p.split(/[\/\.]/)[2])
+ .sort();
+
+function glob(pattern) {
+ return globSync(pattern)
+ .map(p => p.split(path.sep).join('/'));
+}
+
+/**
+ * Build lang files
+ */
+function buildLangs() {
+ const wrapper = fs.readFileSync('src/i18n/.wrapper.js', { encoding: 'utf8' })
+ .split('@@js\n');
+
+ ALL_LANGS.forEach(lang => {
+ const outpath = `${DIST}i18n/query-builder.${lang}.js`;
+ console.log(`LANG ${lang} (${outpath})`);
+ fs.writeFileSync(outpath, getLang(lang, wrapper));
+ });
+}
+
+/**
+ * Get the content of a single lang
+ */
+function getLang(lang, wrapper = ['', '']) {
+ const corepath = `src/i18n/${lang}.json`;
+ const content = JSON.parse(fs.readFileSync(corepath, { encoding: 'utf8' }));
+
+ Object.keys(ALL_PLUGINS_JS).forEach(plugin => {
+ const pluginpath = `src/plugins/${plugin}/i18n/${lang}.json`;
+ try {
+ const plugincontent = JSON.parse(fs.readFileSync(pluginpath, { encoding: 'utf8' }));
+ Object.assign(content, plugincontent);
+ } catch { }
+ });
+
+ return LANG_BANNER(content.__locale || lang, content.__author || '')
+ + '\n\n'
+ + wrapper[0]
+ + `QueryBuilder.regional['${lang}'] = `
+ + JSON.stringify(content, null, 2)
+ + ';\n\n'
+ + `QueryBuilder.defaults({ lang_code: '${lang}' });`
+ + wrapper[1];
+}
+
+/**
+ * Build main JS file
+ */
+function buildMain() {
+ const wrapper = fs.readFileSync('src/.wrapper.js', { encoding: 'utf8' })
+ .split('@@js\n');
+
+ const files_to_load = [
+ ...CORE_JS,
+ ...Object.values(ALL_PLUGINS_JS),
+ ];
+
+ const output = BANNER()
+ + '\n\n'
+ + wrapper[0]
+ + files_to_load.map(f => fs.readFileSync(f, { encoding: 'utf8' })).join('\n\n')
+ + '\n\n'
+ + getLang('en')
+ + wrapper[1];
+
+ const outpath = `${DIST}js/query-builder.js`;
+ console.log(`MAIN (${outpath})`);
+ fs.writeFileSync(outpath, output);
+}
+
+/**
+ * Build standalone JS file
+ */
+function buildStandalone() {
+ const output = Object.entries(STANDALONE_JS)
+ .map(([name, file]) => {
+ return fs.readFileSync(file, { encoding: 'utf8' })
+ .replace(/define\((.*?)\);/, `define('${name}', $1);`);
+ })
+ .join('\n\n');
+
+ const outpath = `${DIST}js/query-builder.standalone.js`;
+ console.log(`STANDALONE (${outpath})`);
+ fs.writeFileSync(outpath, output);
+}
+
+/**
+ * Copy SASS files
+ */
+function copySass() {
+ Object.entries(ALL_PLUGINS_SASS).forEach(([plugin, path]) => {
+ const outpath = `${DIST}scss/plugins/${plugin}.scss`;
+ console.log(`SASS ${plugin} (${path})`);
+ fs.copyFileSync(path, outpath);
+ });
+
+ CORE_SASS.forEach(path => {
+ const name = path.split('/').pop();
+
+ const content = fs.readFileSync(path, { encoding: 'utf8' });
+
+ let output = BANNER()
+ + '\n'
+ + content;
+ if (name === 'default.scss') {
+ output += '\n'
+ + Object.keys(ALL_PLUGINS_SASS).map(p => `@import "plugins/${p}";`).join('\n');
+ }
+
+ const outpath = `${DIST}scss/${name}`;
+ console.log(`SASS (${path})`);
+ fs.writeFileSync(outpath, output);
+ });
+}
+
+/**
+ * Build CSS files
+ */
+function buildCss() {
+ CORE_SASS.forEach(p => {
+ const path = p.replace('src/', DIST);
+ const name = path.split('/').pop();
+
+ const output = sass.compile(path);
+
+ const outpath = `${DIST}css/query-builder.${name.split('.').shift()}.css`;
+ console.log(`CSS (${path})`);
+ fs.writeFileSync(outpath, output.css);
+ });
+}
+
+if (!DEV) {
+ fs.rmSync(DIST, { recursive: true, force: true });
+}
+fs.mkdirSync(DIST + 'css', { recursive: true });
+fs.mkdirSync(DIST + 'i18n', { recursive: true });
+fs.mkdirSync(DIST + 'js', { recursive: true });
+fs.mkdirSync(DIST + 'scss', { recursive: true });
+fs.mkdirSync(DIST + 'scss/plugins', { recursive: true });
+
+buildLangs();
+buildMain();
+buildStandalone();
+copySass();
+buildCss();
diff --git a/build/jsdoc.js b/build/jsdoc.js
new file mode 100644
index 00000000..edbad8d4
--- /dev/null
+++ b/build/jsdoc.js
@@ -0,0 +1,12 @@
+(function() {
+ var header = $('.page-header');
+ var pattern = Trianglify({
+ width: window.screen.width | header.outerWidth(),
+ height: header.outerHeight(),
+ cell_size: 90,
+ seed: 'jQuery QueryBuilder',
+ x_colors: ['#0074d9', '#001224']
+ });
+
+ header.css('background-image', 'url(' + pattern.png() + ')');
+}());
diff --git a/build/jsdoc.md b/build/jsdoc.md
new file mode 100644
index 00000000..e329af92
--- /dev/null
+++ b/build/jsdoc.md
@@ -0,0 +1,11 @@
+# [Main documentation](..)
+
+# Entry point: [$.fn.QueryBuilder](external-_jQuery.fn_.html)
+
+# [QueryBuilder](QueryBuilder.html)
+
+# [Rule](Rule.html) & [Group](Group.html)
+
+# [Events](list_event.html)
+
+# [Plugins](module-plugins.html)
diff --git a/build/liveserver.mjs b/build/liveserver.mjs
new file mode 100644
index 00000000..3d60e23c
--- /dev/null
+++ b/build/liveserver.mjs
@@ -0,0 +1,20 @@
+import liveServer from 'alive-server';
+import path from 'path';
+
+const rootDir = process.cwd();
+
+const EXAMPLES_DIR = 'examples';
+const DIST_DIR = 'dist';
+
+liveServer.start({
+ open: true,
+ root: path.join(rootDir, EXAMPLES_DIR),
+ watch: [
+ path.join(rootDir, EXAMPLES_DIR),
+ path.join(rootDir, DIST_DIR),
+ ],
+ mount: [
+ ['/node_modules', path.join(rootDir, 'node_modules')],
+ ['/dist', path.join(rootDir, DIST_DIR)],
+ ],
+});
diff --git a/composer.json b/composer.json
deleted file mode 100644
index 09831111..00000000
--- a/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "mistic100/jquery-querybuilder",
- "version": "2.4.0",
- "authors": [{
- "name": "Damien \"Mistic\" Sorel",
- "email": "contact@git.strangeplanet.fr",
- "homepage": "http://www.strangeplanet.fr"
- }],
- "description": "jQuery plugin for user friendly query/filter creator",
- "require": {
- "components/jquery": ">=1.9.0",
- "moment/moment": ">=2.6.0",
- "twbs/bootstrap": ">=3.1.0"
- },
- "keywords": [
- "jquery",
- "query",
- "builder",
- "filter"
- ],
- "license": "MIT",
- "homepage": "https://github.com/mistic100/jQuery-QueryBuilder",
- "support": {
- "issues": "https://github.com/mistic100/jQuery-QueryBuilder/issues"
- }
-}
diff --git a/dist/css/query-builder.dark.css b/dist/css/query-builder.dark.css
deleted file mode 100644
index ce3fe2ec..00000000
--- a/dist/css/query-builder.dark.css
+++ /dev/null
@@ -1,133 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-.query-builder .rules-group-container, .query-builder .rule-container, .query-builder .rule-placeholder {
- position: relative;
- margin: 4px 0;
- border-radius: 5px;
- padding: 5px;
- border: 1px solid #111;
- background: rgba(40, 40, 40, 0.9);
-}
-
-.query-builder .rule-container .rule-filter-container,
-.query-builder .rule-container .rule-operator-container,
-.query-builder .rule-container .rule-value-container, .query-builder .error-container, .query-builder .drag-handle {
- display: inline-block;
- margin: 0 5px 0 0;
- vertical-align: middle;
-}
-
-.query-builder .rules-group-container {
- padding: 10px;
- padding-bottom: 6px;
- border: 1px solid #00164A;
- background: rgba(50, 70, 80, 0.5);
-}
-.query-builder .rules-group-header {
- margin-bottom: 10px;
-}
-.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active),
-.query-builder .rules-group-header .group-conditions input[name$=_cond] {
- display: none;
-}
-.query-builder .rules-group-header .group-conditions .btn.readonly {
- border-radius: 3px;
-}
-.query-builder .rules-list {
- list-style: none;
- padding: 0 0 0 15px;
- margin: 0;
-}
-.query-builder .rule-value-container {
- border-left: 1px solid #DDD;
- padding-left: 5px;
-}
-.query-builder .rule-value-container label {
- margin-bottom: 0;
- font-weight: normal;
-}
-.query-builder .rule-value-container label.block {
- display: block;
-}
-.query-builder .rule-value-container select, .query-builder .rule-value-container input[type=text], .query-builder .rule-value-container input[type=number] {
- padding: 1px;
-}
-.query-builder .error-container {
- display: none;
- cursor: help;
- color: #F00;
-}
-.query-builder .has-error {
- background-color: #322;
- border-color: #800;
-}
-.query-builder .has-error .error-container {
- display: inline-block !important;
-}
-.query-builder .rules-list > *::before, .query-builder .rules-list > *::after {
- content: '';
- position: absolute;
- left: -10px;
- width: 10px;
- height: calc(50% + 4px);
- border-color: #222;
- border-style: solid;
-}
-.query-builder .rules-list > *::before {
- top: -4px;
- border-width: 0 0 2px 2px;
-}
-.query-builder .rules-list > *::after {
- top: 50%;
- border-width: 0 0 0 2px;
-}
-.query-builder .rules-list > *:first-child::before {
- top: -12px;
- height: calc(50% + 14px);
-}
-.query-builder .rules-list > *:last-child::before {
- border-radius: 0 0 0 4px;
-}
-.query-builder .rules-list > *:last-child::after {
- display: none;
-}
-
-.query-builder .error-container + .tooltip .tooltip-inner {
- color: #F22 !important;
-}
-
-.query-builder p.filter-description {
- margin: 5px 0 0 0;
- background: rgba(0, 170, 255, 0.2);
- border: 1px solid #346F7B;
- color: #AAD1E4;
- border-radius: 5px;
- padding: 2.5px 5px;
- font-size: .8em;
-}
-
-.query-builder .rules-group-header [data-invert] {
- margin-left: 5px;
-}
-
-.query-builder .drag-handle {
- cursor: move;
- vertical-align: middle;
- margin-left: 5px;
-}
-.query-builder .dragging {
- position: fixed;
- opacity: .5;
- z-index: 100;
-}
-.query-builder .dragging::before, .query-builder .dragging::after {
- display: none;
-}
-.query-builder .rule-placeholder {
- border: 1px dashed #BBB;
- opacity: .7;
-}
diff --git a/dist/css/query-builder.dark.min.css b/dist/css/query-builder.dark.min.css
deleted file mode 100644
index c78aba9b..00000000
--- a/dist/css/query-builder.dark.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-.query-builder .rule-container,.query-builder .rule-placeholder,.query-builder .rules-group-container{position:relative;margin:4px 0;border-radius:5px;padding:5px;border:1px solid #111;background:rgba(40,40,40,.9)}.query-builder .drag-handle,.query-builder .error-container,.query-builder .rule-container .rule-filter-container,.query-builder .rule-container .rule-operator-container,.query-builder .rule-container .rule-value-container{display:inline-block;margin:0 5px 0 0;vertical-align:middle}.query-builder .rules-group-container{padding:10px 10px 6px;border:1px solid #00164A;background:rgba(50,70,80,.5)}.query-builder .rules-group-header{margin-bottom:10px}.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active),.query-builder .rules-group-header .group-conditions input[name$=_cond]{display:none}.query-builder .rules-group-header .group-conditions .btn.readonly{border-radius:3px}.query-builder .rules-list{list-style:none;padding:0 0 0 15px;margin:0}.query-builder .rule-value-container{border-left:1px solid #DDD;padding-left:5px}.query-builder .rule-value-container label{margin-bottom:0;font-weight:400}.query-builder .rule-value-container label.block{display:block}.query-builder .rule-value-container input[type=number],.query-builder .rule-value-container input[type=text],.query-builder .rule-value-container select{padding:1px}.query-builder .error-container{display:none;cursor:help;color:red}.query-builder .has-error{background-color:#322;border-color:#800}.query-builder .has-error .error-container{display:inline-block!important}.query-builder .dragging::after,.query-builder .dragging::before,.query-builder .rules-list>:last-child::after{display:none}.query-builder .rules-list>::after,.query-builder .rules-list>::before{content:'';position:absolute;left:-10px;width:10px;height:calc(50% + 4px);border-color:#222;border-style:solid}.query-builder .rules-list>::before{top:-4px;border-width:0 0 2px 2px}.query-builder .rules-list>::after{top:50%;border-width:0 0 0 2px}.query-builder .rules-list>:first-child::before{top:-12px;height:calc(50% + 14px)}.query-builder .rules-list>:last-child::before{border-radius:0 0 0 4px}.query-builder .error-container+.tooltip .tooltip-inner{color:#F22!important}.query-builder p.filter-description{margin:5px 0 0;background:rgba(0,170,255,.2);border:1px solid #346F7B;color:#AAD1E4;border-radius:5px;padding:2.5px 5px;font-size:.8em}.query-builder .rules-group-header [data-invert]{margin-left:5px}.query-builder .drag-handle{cursor:move;vertical-align:middle;margin-left:5px}.query-builder .dragging{position:fixed;opacity:.5;z-index:100}.query-builder .rule-placeholder{border:1px dashed #BBB;opacity:.7}
\ No newline at end of file
diff --git a/dist/css/query-builder.default.css b/dist/css/query-builder.default.css
deleted file mode 100644
index d9a62da3..00000000
--- a/dist/css/query-builder.default.css
+++ /dev/null
@@ -1,133 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-.query-builder .rules-group-container, .query-builder .rule-container, .query-builder .rule-placeholder {
- position: relative;
- margin: 4px 0;
- border-radius: 5px;
- padding: 5px;
- border: 1px solid #EEE;
- background: rgba(255, 255, 255, 0.9);
-}
-
-.query-builder .rule-container .rule-filter-container,
-.query-builder .rule-container .rule-operator-container,
-.query-builder .rule-container .rule-value-container, .query-builder .error-container, .query-builder .drag-handle {
- display: inline-block;
- margin: 0 5px 0 0;
- vertical-align: middle;
-}
-
-.query-builder .rules-group-container {
- padding: 10px;
- padding-bottom: 6px;
- border: 1px solid #DCC896;
- background: rgba(250, 240, 210, 0.5);
-}
-.query-builder .rules-group-header {
- margin-bottom: 10px;
-}
-.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active),
-.query-builder .rules-group-header .group-conditions input[name$=_cond] {
- display: none;
-}
-.query-builder .rules-group-header .group-conditions .btn.readonly {
- border-radius: 3px;
-}
-.query-builder .rules-list {
- list-style: none;
- padding: 0 0 0 15px;
- margin: 0;
-}
-.query-builder .rule-value-container {
- border-left: 1px solid #DDD;
- padding-left: 5px;
-}
-.query-builder .rule-value-container label {
- margin-bottom: 0;
- font-weight: normal;
-}
-.query-builder .rule-value-container label.block {
- display: block;
-}
-.query-builder .rule-value-container select, .query-builder .rule-value-container input[type=text], .query-builder .rule-value-container input[type=number] {
- padding: 1px;
-}
-.query-builder .error-container {
- display: none;
- cursor: help;
- color: #F00;
-}
-.query-builder .has-error {
- background-color: #FDD;
- border-color: #F99;
-}
-.query-builder .has-error .error-container {
- display: inline-block !important;
-}
-.query-builder .rules-list > *::before, .query-builder .rules-list > *::after {
- content: '';
- position: absolute;
- left: -10px;
- width: 10px;
- height: calc(50% + 4px);
- border-color: #CCC;
- border-style: solid;
-}
-.query-builder .rules-list > *::before {
- top: -4px;
- border-width: 0 0 2px 2px;
-}
-.query-builder .rules-list > *::after {
- top: 50%;
- border-width: 0 0 0 2px;
-}
-.query-builder .rules-list > *:first-child::before {
- top: -12px;
- height: calc(50% + 14px);
-}
-.query-builder .rules-list > *:last-child::before {
- border-radius: 0 0 0 4px;
-}
-.query-builder .rules-list > *:last-child::after {
- display: none;
-}
-
-.query-builder .error-container + .tooltip .tooltip-inner {
- color: #F99 !important;
-}
-
-.query-builder p.filter-description {
- margin: 5px 0 0 0;
- background: #D9EDF7;
- border: 1px solid #BCE8F1;
- color: #31708F;
- border-radius: 5px;
- padding: 2.5px 5px;
- font-size: .8em;
-}
-
-.query-builder .rules-group-header [data-invert] {
- margin-left: 5px;
-}
-
-.query-builder .drag-handle {
- cursor: move;
- vertical-align: middle;
- margin-left: 5px;
-}
-.query-builder .dragging {
- position: fixed;
- opacity: .5;
- z-index: 100;
-}
-.query-builder .dragging::before, .query-builder .dragging::after {
- display: none;
-}
-.query-builder .rule-placeholder {
- border: 1px dashed #BBB;
- opacity: .7;
-}
diff --git a/dist/css/query-builder.default.min.css b/dist/css/query-builder.default.min.css
deleted file mode 100644
index 1671be14..00000000
--- a/dist/css/query-builder.default.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-.query-builder .rule-container,.query-builder .rule-placeholder,.query-builder .rules-group-container{position:relative;margin:4px 0;border-radius:5px;padding:5px;border:1px solid #EEE;background:rgba(255,255,255,.9)}.query-builder .drag-handle,.query-builder .error-container,.query-builder .rule-container .rule-filter-container,.query-builder .rule-container .rule-operator-container,.query-builder .rule-container .rule-value-container{display:inline-block;margin:0 5px 0 0;vertical-align:middle}.query-builder .rules-group-container{padding:10px 10px 6px;border:1px solid #DCC896;background:rgba(250,240,210,.5)}.query-builder .rules-group-header{margin-bottom:10px}.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active),.query-builder .rules-group-header .group-conditions input[name$=_cond]{display:none}.query-builder .rules-group-header .group-conditions .btn.readonly{border-radius:3px}.query-builder .rules-list{list-style:none;padding:0 0 0 15px;margin:0}.query-builder .rule-value-container{border-left:1px solid #DDD;padding-left:5px}.query-builder .rule-value-container label{margin-bottom:0;font-weight:400}.query-builder .rule-value-container label.block{display:block}.query-builder .rule-value-container input[type=number],.query-builder .rule-value-container input[type=text],.query-builder .rule-value-container select{padding:1px}.query-builder .error-container{display:none;cursor:help;color:red}.query-builder .has-error{background-color:#FDD;border-color:#F99}.query-builder .has-error .error-container{display:inline-block!important}.query-builder .dragging::after,.query-builder .dragging::before,.query-builder .rules-list>:last-child::after{display:none}.query-builder .rules-list>::after,.query-builder .rules-list>::before{content:'';position:absolute;left:-10px;width:10px;height:calc(50% + 4px);border-color:#CCC;border-style:solid}.query-builder .rules-list>::before{top:-4px;border-width:0 0 2px 2px}.query-builder .rules-list>::after{top:50%;border-width:0 0 0 2px}.query-builder .rules-list>:first-child::before{top:-12px;height:calc(50% + 14px)}.query-builder .rules-list>:last-child::before{border-radius:0 0 0 4px}.query-builder .error-container+.tooltip .tooltip-inner{color:#F99!important}.query-builder p.filter-description{margin:5px 0 0;background:#D9EDF7;border:1px solid #BCE8F1;color:#31708F;border-radius:5px;padding:2.5px 5px;font-size:.8em}.query-builder .rules-group-header [data-invert]{margin-left:5px}.query-builder .drag-handle{cursor:move;vertical-align:middle;margin-left:5px}.query-builder .dragging{position:fixed;opacity:.5;z-index:100}.query-builder .rule-placeholder{border:1px dashed #BBB;opacity:.7}
\ No newline at end of file
diff --git a/dist/i18n/query-builder.ar.js b/dist/i18n/query-builder.ar.js
deleted file mode 100644
index 32e033c8..00000000
--- a/dist/i18n/query-builder.ar.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Arabic (ar)
- * Author: Mohamed YOUNES, https://github.com/MedYOUNES
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['ar'] = {
- "__locale": "Arabic (ar)",
- "__author": "Mohamed YOUNES, https://github.com/MedYOUNES",
- "add_rule": "إضافة حُكم",
- "add_group": "إضافة زُمْرَة",
- "delete_rule": "حذف",
- "delete_group": "حذف",
- "conditions": {
- "AND": "و",
- "OR": "أو"
- },
- "operators": {
- "equal": "يساوي",
- "not_equal": "غير مساوٍ",
- "in": "في",
- "not_in": "ليس في",
- "less": "أقل من",
- "less_or_equal": "أصغر أو مساو",
- "greater": "أكبر",
- "greater_or_equal": "أكبر أو مساو",
- "between": "محصور بين",
- "not_between": "غير محصور بين",
- "begins_with": "يبدأ بـ",
- "not_begins_with": "لا يبدأ بـ",
- "contains": "يحتوي على",
- "not_contains": "لا يحتوي على",
- "ends_with": "ينتهي بـ",
- "not_ends_with": "لا ينتهي بـ",
- "is_empty": "فارغ",
- "is_not_empty": "غير فارغ",
- "is_null": "صفر",
- "is_not_null": "ليس صفرا"
- },
- "errors": {
- "no_filter": "لم تحدد أي مرشح",
- "empty_group": "الزمرة فارغة",
- "radio_empty": "لم تحدد أي قيمة",
- "checkbox_empty": "لم تحدد أي قيمة",
- "select_empty": "لم تحدد أي قيمة",
- "string_empty": "النص فارغ",
- "string_exceed_min_length": "النص دون الأدنى المسموح به",
- "string_exceed_max_length": "النص فوق الأقصى المسموح به",
- "string_invalid_format": "تركيبة غير صحيحة",
- "number_nan": "ليس عددا",
- "number_not_integer": "ليس عددا صحيحا",
- "number_not_double": "ليس عددا كسريا",
- "number_exceed_min": "العدد أصغر من الأدنى المسموح به",
- "number_exceed_max": "العدد أكبر من الأقصى المسموح به",
- "number_wrong_step": "أخطأت في حساب مضاعفات العدد",
- "datetime_empty": "لم تحدد التاريخ",
- "datetime_invalid": "صيغة التاريخ غير صحيحة",
- "datetime_exceed_min": "التاريخ دون الأدنى المسموح به",
- "datetime_exceed_max": "التاريخ أكبر من الأقصى المسموح به",
- "boolean_not_valid": "ليست قيمة منطقية ثنائية",
- "operator_not_multiple": "العامل ليس متعدد القيَم"
- },
- "invert": "قَلْبُ"
-};
-
-QueryBuilder.defaults({ lang_code: 'ar' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.az.js b/dist/i18n/query-builder.az.js
deleted file mode 100644
index 2e01f04e..00000000
--- a/dist/i18n/query-builder.az.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Azerbaijan (az)
- * Author: Megaplan, mborisv
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['az'] = {
- "__locale": "Azerbaijan (az)",
- "__author": "Megaplan, mborisv ",
- "add_rule": "Əlavə etmək",
- "add_group": "Qrup əlavə etmək",
- "delete_rule": "Silmək",
- "delete_group": "Silmək",
- "conditions": {
- "AND": "VƏ",
- "OR": "VƏ YA"
- },
- "operators": {
- "equal": "bərabərdir",
- "not_equal": "bərabər deyil",
- "in": "qeyd edilmişlərdən",
- "not_in": "qeyd olunmamışlardan",
- "less": "daha az",
- "less_or_equal": "daha az və ya bərabər",
- "greater": "daha çox",
- "greater_or_equal": "daha çox və ya bərabər",
- "between": "arasında",
- "begins_with": "başlayır",
- "not_begins_with": "başlamır",
- "contains": "ibarətdir",
- "not_contains": "yoxdur",
- "ends_with": "başa çatır",
- "not_ends_with": "başa çatmır",
- "is_empty": "boş sətir",
- "is_not_empty": "boş olmayan sətir",
- "is_null": "boşdur",
- "is_not_null": "boş deyil"
- },
- "errors": {
- "no_filter": "Filterlər seçilməyib",
- "empty_group": "Qrup boşdur",
- "radio_empty": "Məna seçilməyib",
- "checkbox_empty": "Məna seçilməyib",
- "select_empty": "Məna seçilməyib",
- "string_empty": "Doldurulmayıb",
- "string_exceed_min_length": "{0} daha çox simvol olmalıdır",
- "string_exceed_max_length": "{0} daha az simvol olmalıdır",
- "string_invalid_format": "Yanlış format ({0})",
- "number_nan": "Rəqəm deyil",
- "number_not_integer": "Rəqəm deyil",
- "number_not_double": "Rəqəm deyil",
- "number_exceed_min": "{0} daha çox olmalıdır",
- "number_exceed_max": "{0} daha az olmalıdır",
- "number_wrong_step": "{0} bölünən olmalıdır",
- "datetime_empty": "Doldurulmayıb",
- "datetime_invalid": "Yanlış tarix formatı ({0})",
- "datetime_exceed_min": "{0} sonra olmalıdır",
- "datetime_exceed_max": "{0} əvvəl olmalıdır",
- "boolean_not_valid": "Loqik olmayan",
- "operator_not_multiple": "{0} operatoru çoxlu məna daşımır"
- },
- "invert": "invert"
-};
-
-QueryBuilder.defaults({ lang_code: 'az' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.bg.js b/dist/i18n/query-builder.bg.js
deleted file mode 100644
index a3c39105..00000000
--- a/dist/i18n/query-builder.bg.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Bulgarian (bg)
- * Author: Valentin Hristov
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['bg'] = {
- "__locale": "Bulgarian (bg)",
- "__author": "Valentin Hristov",
- "add_rule": "Добави правило",
- "add_group": "Добави група",
- "delete_rule": "Изтрий",
- "delete_group": "Изтрий",
- "conditions": {
- "AND": "И",
- "OR": "ИЛИ"
- },
- "operators": {
- "equal": "равно",
- "not_equal": "различно",
- "in": "в",
- "not_in": "не е в",
- "less": "по-малко",
- "less_or_equal": "по-малко или равно",
- "greater": "по-голям",
- "greater_or_equal": "по-голям или равно",
- "between": "между",
- "not_between": "не е между",
- "begins_with": "започва с",
- "not_begins_with": "не започва с",
- "contains": "съдържа",
- "not_contains": "не съдържа",
- "ends_with": "завършва с",
- "not_ends_with": "не завършва с",
- "is_empty": "е празно",
- "is_not_empty": "не е празно",
- "is_null": "е нищо",
- "is_not_null": "различно от нищо"
- },
- "errors": {
- "no_filter": "Не е избран филтър",
- "empty_group": "Групата е празна",
- "radio_empty": "Не е селектирана стойност",
- "checkbox_empty": "Не е селектирана стойност",
- "select_empty": "Не е селектирана стойност",
- "string_empty": "Празна стойност",
- "string_exceed_min_length": "Необходимо е да съдържа поне {0} символа",
- "string_exceed_max_length": "Необходимо е да съдържа повече от {0} символа",
- "string_invalid_format": "Невалиден формат ({0})",
- "number_nan": "Не е число",
- "number_not_integer": "Не е цяло число",
- "number_not_double": "Не е реално число",
- "number_exceed_min": "Трябва да е по-голямо от {0}",
- "number_exceed_max": "Трябва да е по-малко от {0}",
- "number_wrong_step": "Трябва да е кратно на {0}",
- "datetime_empty": "Празна стойност",
- "datetime_invalid": "Невалиден формат на дата ({0})",
- "datetime_exceed_min": "Трябва да е след {0}",
- "datetime_exceed_max": "Трябва да е преди {0}",
- "boolean_not_valid": "Не е булева",
- "operator_not_multiple": "Оператора {0} не може да приеме множество стойности"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'bg' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.cs.js b/dist/i18n/query-builder.cs.js
deleted file mode 100644
index dfc5366d..00000000
--- a/dist/i18n/query-builder.cs.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Čeština (cs)
- * Author: Megaplan, mborisv
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['cs'] = {
- "__locale": "Čeština (cs)",
- "__author": "Megaplan, mborisv ",
- "add_rule": "Přidat",
- "add_group": "Přidat skupinu",
- "delete_rule": "Odstranit",
- "delete_group": "Odstranit skupinu",
- "conditions": {
- "AND": "I",
- "OR": "NEBO"
- },
- "operators": {
- "equal": "stejně",
- "not_equal": "liší se",
- "in": "z uvedených",
- "not_in": "ne z uvedených",
- "less": "méně",
- "less_or_equal": "méně nebo stejně",
- "greater": "více",
- "greater_or_equal": "více nebo stejně",
- "between": "mezi",
- "begins_with": "začíná z",
- "not_begins_with": "nezačíná z",
- "contains": "obsahuje",
- "not_contains": "neobsahuje",
- "ends_with": "končí na",
- "not_ends_with": "nekončí na",
- "is_empty": "prázdný řádek",
- "is_not_empty": "neprázdný řádek",
- "is_null": "prázdno",
- "is_not_null": "plno"
- },
- "errors": {
- "no_filter": "není vybraný filtr",
- "empty_group": "prázdná skupina",
- "radio_empty": "Není udaná hodnota",
- "checkbox_empty": "Není udaná hodnota",
- "select_empty": "Není udaná hodnota",
- "string_empty": "Nevyplněno",
- "string_exceed_min_length": "Musí obsahovat více {0} symbolů",
- "string_exceed_max_length": "Musí obsahovat méně {0} symbolů",
- "string_invalid_format": "Nesprávný formát ({0})",
- "number_nan": "Žádné číslo",
- "number_not_integer": "Žádné číslo",
- "number_not_double": "Žádné číslo",
- "number_exceed_min": "Musí být více {0}",
- "number_exceed_max": "Musí být méně {0}",
- "number_wrong_step": "Musí být násobkem {0}",
- "datetime_empty": "Nevyplněno",
- "datetime_invalid": "Nesprávný formát datumu ({0})",
- "datetime_exceed_min": "Musí být po {0}",
- "datetime_exceed_max": "Musí být do {0}",
- "boolean_not_valid": "Nelogické",
- "operator_not_multiple": "Operátor {0} nepodporuje mnoho hodnot"
- },
- "invert": "invertní"
-};
-
-QueryBuilder.defaults({ lang_code: 'cs' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.da.js b/dist/i18n/query-builder.da.js
deleted file mode 100644
index 548bfbf9..00000000
--- a/dist/i18n/query-builder.da.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Danish (da)
- * Author: Jna Borup Coyle, github@coyle.dk
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['da'] = {
- "__locale": "Danish (da)",
- "__author": "Jna Borup Coyle, github@coyle.dk",
- "add_rule": "Tilføj regel",
- "add_group": "Tilføj gruppe",
- "delete_rule": "Slet regel",
- "delete_group": "Slet gruppe",
- "conditions": {
- "AND": "OG",
- "OR": "ELLER"
- },
- "condition_and": "OG",
- "condition_or": "ELLER",
- "operators": {
- "equal": "lig med",
- "not_equal": "ikke lige med",
- "in": "i",
- "not_in": "ikke i",
- "less": "mindre",
- "less_or_equal": "mindre eller lig med",
- "greater": "større",
- "greater_or_equal": "større eller lig med",
- "begins_with": "begynder med",
- "not_begins_with": "begynder ikke med",
- "contains": "indeholder",
- "not_contains": "indeholder ikke",
- "ends_with": "slutter med",
- "not_ends_with": "slutter ikke med",
- "is_empty": "er tom",
- "is_not_empty": "er ikke tom",
- "is_null": "er null",
- "is_not_null": "er ikke null"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'da' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.de.js b/dist/i18n/query-builder.de.js
deleted file mode 100644
index b96d88b1..00000000
--- a/dist/i18n/query-builder.de.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: German (de)
- * Author: "raimu"
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['de'] = {
- "__locale": "German (de)",
- "__author": "\"raimu\"",
- "add_rule": "neue Regel",
- "add_group": "neue Gruppe",
- "delete_rule": "löschen",
- "delete_group": "löschen",
- "conditions": {
- "AND": "UND",
- "OR": "ODER"
- },
- "operators": {
- "equal": "gleich",
- "not_equal": "ungleich",
- "in": "in",
- "not_in": "nicht in",
- "less": "kleiner",
- "less_or_equal": "kleiner gleich",
- "greater": "größer",
- "greater_or_equal": "größer gleich",
- "between": "zwischen",
- "not_between": "nicht zwischen",
- "begins_with": "beginnt mit",
- "not_begins_with": "beginnt nicht mit",
- "contains": "enthält",
- "not_contains": "enthält nicht",
- "ends_with": "endet mit",
- "not_ends_with": "endet nicht mit",
- "is_empty": "ist leer",
- "is_not_empty": "ist nicht leer",
- "is_null": "ist null",
- "is_not_null": "ist nicht null"
- },
- "errors": {
- "no_filter": "Kein Filter ausgewählt",
- "empty_group": "Die Gruppe ist leer",
- "radio_empty": "Kein Wert ausgewählt",
- "checkbox_empty": "Kein Wert ausgewählt",
- "select_empty": "Kein Wert ausgewählt",
- "string_empty": "Leerer Wert",
- "string_exceed_min_length": "Muss mindestens {0} Zeichen enthalten",
- "string_exceed_max_length": "Darf nicht mehr als {0} Zeichen enthalten",
- "string_invalid_format": "Ungültiges Format ({0})",
- "number_nan": "Keine Zahl",
- "number_not_integer": "Keine Ganzzahl",
- "number_not_double": "Keine Dezimalzahl",
- "number_exceed_min": "Muss größer als {0} sein",
- "number_exceed_max": "Muss kleiner als {0} sein",
- "number_wrong_step": "Muss ein Vielfaches von {0} sein",
- "datetime_invalid": "Ungültiges Datumsformat ({0})",
- "datetime_exceed_min": "Muss nach dem {0} sein",
- "datetime_exceed_max": "Muss vor dem {0} sein"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'de' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.el.js b/dist/i18n/query-builder.el.js
deleted file mode 100644
index 117da92d..00000000
--- a/dist/i18n/query-builder.el.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Greek (el)
- * Author: Stelios Patsatzis, https://www.linkedin.com/in/stelios-patsatzis-89841561
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['el'] = {
- "__locale": "Greek (el)",
- "__author": "Stelios Patsatzis, https://www.linkedin.com/in/stelios-patsatzis-89841561",
- "add_rule": "Προσθήκη Συνθήκης",
- "add_group": "Προσθήκη Ομάδας",
- "delete_rule": "Διαγραφή",
- "delete_group": "Διαγραφή",
- "conditions": {
- "AND": "Λογικό ΚΑΙ",
- "OR": "Λογικό Η"
- },
- "operators": {
- "equal": "Ισούται με",
- "not_equal": "Διάφορο από ",
- "in": "Περιέχει",
- "not_in": "Δεν Περιέχει",
- "less": "Λιγότερο από",
- "less_or_equal": "Λιγότερο ή Ίσο",
- "greater": "Μεγαλύτερο από",
- "greater_or_equal": "Μεγαλύτερο ή Ίσο",
- "between": "Μεταξύ",
- "not_between": "Εκτός",
- "begins_with": "Αρχίζει με",
- "not_begins_with": "Δεν αρχίζει με",
- "contains": "Περιέχει",
- "not_contains": "Δεν περιέχει",
- "ends_with": "Τελειώνει σε",
- "not_ends_with": "Δεν τελειώνει σε",
- "is_empty": "Είναι άδειο",
- "is_not_empty": "Δεν είναι άδειο",
- "is_null": "Είναι NULL",
- "is_not_null": "Δεν είναι NULL"
- },
- "errors": {
- "no_filter": "Χωρίς φίλτρα",
- "empty_group": "Άδεια ομάδα",
- "radio_empty": "Χωρίς τιμή",
- "checkbox_empty": "Χωρίς τιμή",
- "select_empty": "Χωρίς τιμή",
- "string_empty": "Χωρίς τιμή",
- "string_exceed_min_length": "Ελάχιστο όριο {0} χαρακτήρων",
- "string_exceed_max_length": "Μέγιστο όριο {0} χαρακτήρων",
- "string_invalid_format": "Λανθασμένη μορφή ({0})",
- "number_nan": "Δεν είναι αριθμός",
- "number_not_integer": "Δεν είναι ακέραιος αριθμός",
- "number_not_double": "Δεν είναι πραγματικός αριθμός",
- "number_exceed_min": "Πρέπει να είναι μεγαλύτερο απο {0}",
- "number_exceed_max": "Πρέπει να είναι μικρότερο απο {0}",
- "number_wrong_step": "Πρέπει να είναι πολλαπλάσιο του {0}",
- "datetime_empty": "Χωρίς τιμή",
- "datetime_invalid": "Λανθασμένη μορφή ημερομηνίας ({0})",
- "datetime_exceed_min": "Νεότερο από {0}",
- "datetime_exceed_max": "Παλαιότερο από {0}",
- "boolean_not_valid": "Δεν είναι BOOLEAN",
- "operator_not_multiple": "Η συνθήκη {0} δεν μπορεί να δεχθεί πολλαπλές τιμές"
- },
- "invert": "Εναλλαγή"
-};
-
-QueryBuilder.defaults({ lang_code: 'el' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.en.js b/dist/i18n/query-builder.en.js
deleted file mode 100644
index ce0bfd4c..00000000
--- a/dist/i18n/query-builder.en.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: English (en)
- * Author: Damien "Mistic" Sorel, http://www.strangeplanet.fr
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['en'] = {
- "__locale": "English (en)",
- "__author": "Damien \"Mistic\" Sorel, http://www.strangeplanet.fr",
- "add_rule": "Add rule",
- "add_group": "Add group",
- "delete_rule": "Delete",
- "delete_group": "Delete",
- "conditions": {
- "AND": "AND",
- "OR": "OR"
- },
- "operators": {
- "equal": "equal",
- "not_equal": "not equal",
- "in": "in",
- "not_in": "not in",
- "less": "less",
- "less_or_equal": "less or equal",
- "greater": "greater",
- "greater_or_equal": "greater or equal",
- "between": "between",
- "not_between": "not between",
- "begins_with": "begins with",
- "not_begins_with": "doesn't begin with",
- "contains": "contains",
- "not_contains": "doesn't contain",
- "ends_with": "ends with",
- "not_ends_with": "doesn't end with",
- "is_empty": "is empty",
- "is_not_empty": "is not empty",
- "is_null": "is null",
- "is_not_null": "is not null"
- },
- "errors": {
- "no_filter": "No filter selected",
- "empty_group": "The group is empty",
- "radio_empty": "No value selected",
- "checkbox_empty": "No value selected",
- "select_empty": "No value selected",
- "string_empty": "Empty value",
- "string_exceed_min_length": "Must contain at least {0} characters",
- "string_exceed_max_length": "Must not contain more than {0} characters",
- "string_invalid_format": "Invalid format ({0})",
- "number_nan": "Not a number",
- "number_not_integer": "Not an integer",
- "number_not_double": "Not a real number",
- "number_exceed_min": "Must be greater than {0}",
- "number_exceed_max": "Must be lower than {0}",
- "number_wrong_step": "Must be a multiple of {0}",
- "datetime_empty": "Empty value",
- "datetime_invalid": "Invalid date format ({0})",
- "datetime_exceed_min": "Must be after {0}",
- "datetime_exceed_max": "Must be before {0}",
- "boolean_not_valid": "Not a boolean",
- "operator_not_multiple": "Operator {0} cannot accept multiple values"
- },
- "invert": "Invert",
- "NOT": "NOT"
-};
-
-QueryBuilder.defaults({ lang_code: 'en' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.es.js b/dist/i18n/query-builder.es.js
deleted file mode 100644
index 19a3d1e7..00000000
--- a/dist/i18n/query-builder.es.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Spanish (es)
- * Author: "pyarza", "kddlb"
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['es'] = {
- "__locale": "Spanish (es)",
- "__author": "\"pyarza\", \"kddlb\"",
- "add_rule": "Añadir regla",
- "add_group": "Añadir grupo",
- "delete_rule": "Borrar",
- "delete_group": "Borrar",
- "conditions": {
- "AND": "Y",
- "OR": "O"
- },
- "operators": {
- "equal": "igual",
- "not_equal": "distinto",
- "in": "en",
- "not_in": "no en",
- "less": "menor",
- "less_or_equal": "menor o igual",
- "greater": "mayor",
- "greater_or_equal": "mayor o igual",
- "between": "entre",
- "begins_with": "empieza por",
- "not_begins_with": "no empieza por",
- "contains": "contiene",
- "not_contains": "no contiene",
- "ends_with": "acaba con",
- "not_ends_with": "no acaba con",
- "is_empty": "está vacío",
- "is_not_empty": "no está vacío",
- "is_null": "es nulo",
- "is_not_null": "no es nulo"
- },
- "errors": {
- "no_filter": "No se ha seleccionado ningún filtro",
- "empty_group": "El grupo está vacío",
- "radio_empty": "Ningún valor seleccionado",
- "checkbox_empty": "Ningún valor seleccionado",
- "select_empty": "Ningún valor seleccionado",
- "string_empty": "Cadena vacía",
- "string_exceed_min_length": "Debe contener al menos {0} caracteres",
- "string_exceed_max_length": "No debe contener más de {0} caracteres",
- "string_invalid_format": "Formato inválido ({0})",
- "number_nan": "No es un número",
- "number_not_integer": "No es un número entero",
- "number_not_double": "No es un número real",
- "number_exceed_min": "Debe ser mayor que {0}",
- "number_exceed_max": "Debe ser menor que {0}",
- "number_wrong_step": "Debe ser múltiplo de {0}",
- "datetime_invalid": "Formato de fecha inválido ({0})",
- "datetime_exceed_min": "Debe ser posterior a {0}",
- "datetime_exceed_max": "Debe ser anterior a {0}"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'es' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.fa-IR.js b/dist/i18n/query-builder.fa-IR.js
deleted file mode 100644
index 420dc1e6..00000000
--- a/dist/i18n/query-builder.fa-IR.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Farsi (fa-ir)
- * Author: Behzad Sedighzade, behzad.sedighzade@gmail.com
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['fa-IR'] = {
- "__locale": "Farsi (fa-ir)",
- "__author": "Behzad Sedighzade, behzad.sedighzade@gmail.com",
- "add_rule": "افزودن قاعده",
- "add_group": "افزودن گروه",
- "delete_rule": "حذف قاعده",
- "delete_group": "حذف گروه",
- "conditions": {
- "AND": "و",
- "OR": "یا"
- },
- "operators": {
- "equal": "برابر با",
- "not_equal": "مخالف",
- "in": "شامل مجموعه شود",
- "not_in": "شامل مجموعه نشود",
- "less": "کمتر از",
- "less_or_equal": "کمتر یا مساوی با",
- "greater": "بزرگتر از",
- "greater_or_equal": "بزرگتر یا مساوی با",
- "between": "مابین",
- "begins_with": "شروع شود با",
- "not_begins_with": "شروع نشود با",
- "contains": "شامل شود",
- "not_contains": "شامل نشود",
- "ends_with": "خاتمه یابد با",
- "not_ends_with": "خاتمه نیابد با",
- "is_empty": "خالی باشد",
- "is_not_empty": "خالی نباشد",
- "is_null": "باشد ( null ) پوچ",
- "is_not_null": "نباشد( null ) پوچ "
- },
- "errors": {
- "no_filter": "هیچ قاعده ای انتخاب نشده است",
- "empty_group": "گروه خالی است",
- "radio_empty": "مقداری انتخاب نشده است",
- "checkbox_empty": "مقداری انتخاب نشده است",
- "select_empty": "مقداری انتخاب نشده است",
- "string_empty": "مقدار متنی خالی است",
- "string_exceed_min_length": "رشته حداقل باید {0} عدد حرف داشته باشد",
- "string_exceed_max_length": "رشته حداکثر {0} عدد حرف می تواند قبول کند",
- "string_invalid_format": "قالب رشته {0} نامعتبر ست",
- "number_nan": "عدد وارد کنید",
- "number_not_integer": "مقدار صحیح وارد کنید",
- "number_not_double": "مقدار اعشاری وارد کنید",
- "number_exceed_min": "باید از {0} بزرگتر باشد",
- "number_exceed_max": "باید از {0} کمتر باشد",
- "number_wrong_step": "باید مضربی از {0} باشد",
- "datetime_empty": "مقدار تاریخ خالی وارد شده!",
- "datetime_invalid": "قالب تاریخ ( {0} ) اشتباه است",
- "datetime_exceed_min": "باید بعد از {0} باشد",
- "datetime_exceed_max": "باید قبل از {0} باشد",
- "boolean_not_valid": "مقدار دودویی وارد کنید",
- "operator_not_multiple": "اپراتور {0} نمی تواند چند مقدار قبول کند"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'fa-IR' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.fr.js b/dist/i18n/query-builder.fr.js
deleted file mode 100644
index 407882f7..00000000
--- a/dist/i18n/query-builder.fr.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: French (fr)
- * Author: Damien "Mistic" Sorel, http://www.strangeplanet.fr
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['fr'] = {
- "__locale": "French (fr)",
- "__author": "Damien \"Mistic\" Sorel, http://www.strangeplanet.fr",
- "add_rule": "Ajouter une règle",
- "add_group": "Ajouter un groupe",
- "delete_rule": "Supprimer",
- "delete_group": "Supprimer",
- "conditions": {
- "AND": "ET",
- "OR": "OU"
- },
- "operators": {
- "equal": "égal",
- "not_equal": "non égal",
- "in": "dans",
- "not_in": "pas dans",
- "less": "inférieur",
- "less_or_equal": "inférieur ou égal",
- "greater": "supérieur",
- "greater_or_equal": "supérieur ou égal",
- "between": "est entre",
- "not_between": "n'est pas entre",
- "begins_with": "commence par",
- "not_begins_with": "ne commence pas par",
- "contains": "contient",
- "not_contains": "ne contient pas",
- "ends_with": "finit par",
- "not_ends_with": "ne finit pas par",
- "is_empty": "est vide",
- "is_not_empty": "n'est pas vide",
- "is_null": "est nul",
- "is_not_null": "n'est pas nul"
- },
- "errors": {
- "no_filter": "Aucun filtre sélectionné",
- "empty_group": "Le groupe est vide",
- "radio_empty": "Pas de valeur selectionnée",
- "checkbox_empty": "Pas de valeur selectionnée",
- "select_empty": "Pas de valeur selectionnée",
- "string_empty": "Valeur vide",
- "string_exceed_min_length": "Doit contenir au moins {0} caractères",
- "string_exceed_max_length": "Ne doit pas contenir plus de {0} caractères",
- "string_invalid_format": "Format invalide ({0})",
- "number_nan": "N'est pas un nombre",
- "number_not_integer": "N'est pas un entier",
- "number_not_double": "N'est pas un nombre réel",
- "number_exceed_min": "Doit être plus grand que {0}",
- "number_exceed_max": "Doit être plus petit que {0}",
- "number_wrong_step": "Doit être un multiple de {0}",
- "datetime_empty": "Valeur vide",
- "datetime_invalid": "Fomat de date invalide ({0})",
- "datetime_exceed_min": "Doit être après {0}",
- "datetime_exceed_max": "Doit être avant {0}",
- "boolean_not_valid": "N'est pas un booléen",
- "operator_not_multiple": "L'opérateur {0} ne peut utiliser plusieurs valeurs"
- },
- "invert": "Inverser",
- "NOT": "NON"
-};
-
-QueryBuilder.defaults({ lang_code: 'fr' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.it.js b/dist/i18n/query-builder.it.js
deleted file mode 100644
index bdd6c33f..00000000
--- a/dist/i18n/query-builder.it.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Italian (it)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['it'] = {
- "__locale": "Italian (it)",
- "add_rule": "Aggiungi regola",
- "add_group": "Aggiungi gruppo",
- "delete_rule": "Elimina",
- "delete_group": "Elimina",
- "conditions": {
- "AND": "E",
- "OR": "O"
- },
- "operators": {
- "equal": "uguale",
- "not_equal": "non uguale",
- "in": "in",
- "not_in": "non in",
- "less": "minore",
- "less_or_equal": "minore o uguale",
- "greater": "maggiore",
- "greater_or_equal": "maggiore o uguale",
- "begins_with": "inizia con",
- "not_begins_with": "non inizia con",
- "contains": "contiene",
- "not_contains": "non contiene",
- "ends_with": "finisce con",
- "not_ends_with": "non finisce con",
- "is_empty": "è vuoto",
- "is_not_empty": "non è vuoto",
- "is_null": "è nullo",
- "is_not_null": "non è nullo"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'it' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.nl.js b/dist/i18n/query-builder.nl.js
deleted file mode 100644
index 6106473a..00000000
--- a/dist/i18n/query-builder.nl.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Dutch (nl)
- * Author: "Roywcm"
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['nl'] = {
- "__locale": "Dutch (nl)",
- "__author": "\"Roywcm\"",
- "add_rule": "Nieuwe regel",
- "add_group": "Nieuwe groep",
- "delete_rule": "Verwijder",
- "delete_group": "Verwijder",
- "conditions": {
- "AND": "EN",
- "OR": "OF"
- },
- "operators": {
- "equal": "gelijk",
- "not_equal": "niet gelijk",
- "in": "in",
- "not_in": "niet in",
- "less": "minder",
- "less_or_equal": "minder of gelijk",
- "greater": "groter",
- "greater_or_equal": "groter of gelijk",
- "between": "tussen",
- "begins_with": "begint met",
- "not_begins_with": "begint niet met",
- "contains": "bevat",
- "not_contains": "bevat niet",
- "ends_with": "eindigt met",
- "not_ends_with": "eindigt niet met",
- "is_empty": "is leeg",
- "is_not_empty": "is niet leeg",
- "is_null": "is null",
- "is_not_null": "is niet null"
- },
- "errors": {
- "no_filter": "Geen filter geselecteerd",
- "empty_group": "De groep is leeg",
- "radio_empty": "Geen waarde geselecteerd",
- "checkbox_empty": "Geen waarde geselecteerd",
- "select_empty": "Geen waarde geselecteerd",
- "string_empty": "Lege waarde",
- "string_exceed_min_length": "Dient minstens {0} karakters te bevatten",
- "string_exceed_max_length": "Dient niet meer dan {0} karakters te bevatten",
- "string_invalid_format": "Ongeldig format ({0})",
- "number_nan": "Niet een nummer",
- "number_not_integer": "Geen geheel getal",
- "number_not_double": "Geen echt nummer",
- "number_exceed_min": "Dient groter te zijn dan {0}",
- "number_exceed_max": "Dient lager te zijn dan {0}",
- "number_wrong_step": "Dient een veelvoud te zijn van {0}",
- "datetime_invalid": "Ongeldige datumformat ({0})",
- "datetime_exceed_min": "Dient na {0}",
- "datetime_exceed_max": "Dient voor {0}"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'nl' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.no.js b/dist/i18n/query-builder.no.js
deleted file mode 100644
index 131c1354..00000000
--- a/dist/i18n/query-builder.no.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Norwegian (no)
- * Author: Jna Borup Coyle, github@coyle.dk
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['no'] = {
- "__locale": "Norwegian (no)",
- "__author": "Jna Borup Coyle, github@coyle.dk",
- "add_rule": "Legg til regel",
- "add_group": "Legg til gruppe",
- "delete_rule": "Slett regel",
- "delete_group": "Slett gruppe",
- "conditions": {
- "AND": "OG",
- "OR": "ELLER"
- },
- "operators": {
- "equal": "er lik",
- "not_equal": "er ikke lik",
- "in": "finnes i",
- "not_in": "finnes ikke i",
- "less": "er mindre enn",
- "less_or_equal": "er mindre eller lik",
- "greater": "er større enn",
- "greater_or_equal": "er større eller lik",
- "begins_with": "begynner med",
- "not_begins_with": "begynner ikke med",
- "contains": "inneholder",
- "not_contains": "inneholder ikke",
- "ends_with": "slutter med",
- "not_ends_with": "slutter ikke med",
- "is_empty": "er tom",
- "is_not_empty": "er ikke tom",
- "is_null": "er null",
- "is_not_null": "er ikke null"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'no' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.pl.js b/dist/i18n/query-builder.pl.js
deleted file mode 100644
index 076d7782..00000000
--- a/dist/i18n/query-builder.pl.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Polish (pl)
- * Author: Artur Smolarek
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['pl'] = {
- "__locale": "Polish (pl)",
- "__author": "Artur Smolarek",
- "add_rule": "Dodaj regułę",
- "add_group": "Dodaj grupę",
- "delete_rule": "Usuń",
- "delete_group": "Usuń",
- "conditions": {
- "AND": "AND",
- "OR": "OR"
- },
- "operators": {
- "equal": "równa się",
- "not_equal": "jest różne od",
- "in": "zawiera",
- "not_in": "nie zawiera",
- "less": "mniejsze",
- "less_or_equal": "mniejsze lub równe",
- "greater": "większe",
- "greater_or_equal": "większe lub równe",
- "between": "pomiędzy",
- "not_between": "nie jest pomiędzy",
- "begins_with": "rozpoczyna się od",
- "not_begins_with": "nie rozpoczyna się od",
- "contains": "zawiera",
- "not_contains": "nie zawiera",
- "ends_with": "kończy się na",
- "not_ends_with": "nie kończy się na",
- "is_empty": "jest puste",
- "is_not_empty": "nie jest puste",
- "is_null": "jest niezdefiniowane",
- "is_not_null": "nie jest niezdefiniowane"
- },
- "errors": {
- "no_filter": "Nie wybrano żadnego filtra",
- "empty_group": "Grupa jest pusta",
- "radio_empty": "Nie wybrano wartości",
- "checkbox_empty": "Nie wybrano wartości",
- "select_empty": "Nie wybrano wartości",
- "string_empty": "Nie wpisano wartości",
- "string_exceed_min_length": "Minimalna długość to {0} znaków",
- "string_exceed_max_length": "Maksymalna długość to {0} znaków",
- "string_invalid_format": "Nieprawidłowy format ({0})",
- "number_nan": "To nie jest liczba",
- "number_not_integer": "To nie jest liczba całkowita",
- "number_not_double": "To nie jest liczba rzeczywista",
- "number_exceed_min": "Musi być większe niż {0}",
- "number_exceed_max": "Musi być mniejsze niż {0}",
- "number_wrong_step": "Musi być wielokrotnością {0}",
- "datetime_empty": "Nie wybrano wartości",
- "datetime_invalid": "Nieprawidłowy format daty ({0})",
- "datetime_exceed_min": "Musi być po {0}",
- "datetime_exceed_max": "Musi być przed {0}",
- "boolean_not_valid": "Niepoprawna wartość logiczna",
- "operator_not_multiple": "Operator {0} nie przyjmuje wielu wartości"
- },
- "invert": "Odwróć"
-};
-
-QueryBuilder.defaults({ lang_code: 'pl' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.pt-BR.js b/dist/i18n/query-builder.pt-BR.js
deleted file mode 100644
index f7294de1..00000000
--- a/dist/i18n/query-builder.pt-BR.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Brazilian Portuguese (pr-BR)
- * Author: Leandro Gehlen, leandrogehlen@gmail.com; Marcos Ferretti, marcosvferretti@gmail.com
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['pt-BR'] = {
- "__locale": "Brazilian Portuguese (pr-BR)",
- "__author": "Leandro Gehlen, leandrogehlen@gmail.com; Marcos Ferretti, marcosvferretti@gmail.com",
- "add_rule": "Nova Regra",
- "add_group": "Novo Grupo",
- "delete_rule": "Excluir",
- "delete_group": "Excluir",
- "conditions": {
- "AND": "E",
- "OR": "OU"
- },
- "operators": {
- "equal": "Igual",
- "not_equal": "Diferente",
- "in": "Contido",
- "not_in": "Não contido",
- "less": "Menor",
- "less_or_equal": "Menor ou igual",
- "greater": "Maior",
- "greater_or_equal": "Maior ou igual",
- "between": "Entre",
- "not_between": "Não entre",
- "begins_with": "Iniciando com",
- "not_begins_with": "Não iniciando com",
- "contains": "Contém",
- "not_contains": "Não contém",
- "ends_with": "Terminando com",
- "not_ends_with": "Terminando sem",
- "is_empty": "É vazio",
- "is_not_empty": "Não é vazio",
- "is_null": "É nulo",
- "is_not_null": "Não é nulo"
- },
- "errors": {
- "no_filter": "Nenhum filtro selecionado",
- "empty_group": "O grupo está vazio",
- "radio_empty": "Nenhum valor selecionado",
- "checkbox_empty": "Nenhum valor selecionado",
- "select_empty": "Nenhum valor selecionado",
- "string_empty": "Valor vazio",
- "string_exceed_min_length": "É necessário conter pelo menos {0} caracteres",
- "string_exceed_max_length": "É necessário conter mais de {0} caracteres",
- "string_invalid_format": "Formato inválido ({0})",
- "number_nan": "Não é um número",
- "number_not_integer": "Não é um número inteiro",
- "number_not_double": "Não é um número real",
- "number_exceed_min": "É necessário ser maior que {0}",
- "number_exceed_max": "É necessário ser menor que {0}",
- "number_wrong_step": "É necessário ser múltiplo de {0}",
- "datetime_invalid": "Formato de data inválido ({0})",
- "datetime_exceed_min": "É necessário ser superior a {0}",
- "datetime_exceed_max": "É necessário ser inferior a {0}",
- "datetime_empty": "Nenhuma data selecionada",
- "boolean_not_valid": "Não é um valor booleano",
- "operator_not_multiple": "O operador {0} não aceita valores múltiplos"
- },
- "invert": "Inverter"
-};
-
-QueryBuilder.defaults({ lang_code: 'pt-BR' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.pt-PT.js b/dist/i18n/query-builder.pt-PT.js
deleted file mode 100644
index 904a896a..00000000
--- a/dist/i18n/query-builder.pt-PT.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Portuguese (pt-PT)
- * Author: Miguel Guerreiro, migas.csi@gmail.com
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['pt-PT'] = {
- "__locale": "Portuguese (pt-PT)",
- "__author": "Miguel Guerreiro, migas.csi@gmail.com",
- "add_rule": "Nova Regra",
- "add_group": "Novo Grupo",
- "delete_rule": "Excluir",
- "delete_group": "Excluir",
- "conditions": {
- "AND": "E",
- "OR": "OU"
- },
- "operators": {
- "equal": "Igual a",
- "not_equal": "Diferente de",
- "in": "Contido",
- "not_in": "Não contido",
- "less": "Menor que",
- "less_or_equal": "Menor ou igual a",
- "greater": "Maior que",
- "greater_or_equal": "Maior ou igual que",
- "between": "Entre",
- "begins_with": "Começar por",
- "not_begins_with": "Não a começar por",
- "contains": "Contém",
- "not_contains": "Não contém",
- "ends_with": "Terminando com",
- "not_ends_with": "Terminando sem",
- "is_empty": "É vazio",
- "is_not_empty": "Não é vazio",
- "is_null": "É nulo",
- "is_not_null": "Não é nulo"
- },
- "errors": {
- "no_filter": "Nenhum filtro selecionado",
- "empty_group": "O grupo está vazio",
- "radio_empty": "Nenhum valor selecionado",
- "checkbox_empty": "Nenhum valor selecionado",
- "select_empty": "Nenhum valor selecionado",
- "string_empty": "Valor vazio",
- "string_exceed_min_length": "É necessário conter pelo menos {0} caracteres",
- "string_exceed_max_length": "É necessário conter mais de {0} caracteres",
- "string_invalid_format": "Formato inválido ({0})",
- "number_nan": "Não é um número",
- "number_not_integer": "Não é um número inteiro",
- "number_not_double": "Não é um número real",
- "number_exceed_min": "É necessário ser maior que {0}",
- "number_exceed_max": "É necessário ser menor que {0}",
- "number_wrong_step": "É necessário ser múltiplo de {0}",
- "datetime_invalid": "Formato de data inválido ({0})",
- "datetime_exceed_min": "É necessário ser superior a {0}",
- "datetime_exceed_max": "É necessário ser inferior a {0}"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'pt-PT' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.ro.js b/dist/i18n/query-builder.ro.js
deleted file mode 100644
index a52b4381..00000000
--- a/dist/i18n/query-builder.ro.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Romanian (ro)
- * Author: ArianServ
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['ro'] = {
- "__locale": "Romanian (ro)",
- "__author": "ArianServ",
- "add_rule": "Adaugă regulă",
- "add_group": "Adaugă grup",
- "delete_rule": "Şterge",
- "delete_group": "Şterge",
- "conditions": {
- "AND": "ŞI",
- "OR": "SAU"
- },
- "operators": {
- "equal": "egal",
- "not_equal": "diferit",
- "in": "în",
- "not_in": "nu în",
- "less": "mai puţin",
- "less_or_equal": "mai puţin sau egal",
- "greater": "mai mare",
- "greater_or_equal": "mai mare sau egal",
- "begins_with": "începe cu",
- "not_begins_with": "nu începe cu",
- "contains": "conţine",
- "not_contains": "nu conţine",
- "ends_with": "se termină cu",
- "not_ends_with": "nu se termină cu",
- "is_empty": "este gol",
- "is_not_empty": "nu este gol",
- "is_null": "e nul",
- "is_not_null": "nu e nul"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'ro' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.ru.js b/dist/i18n/query-builder.ru.js
deleted file mode 100644
index 20d61cb5..00000000
--- a/dist/i18n/query-builder.ru.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Russian (ru)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['ru'] = {
- "__locale": "Russian (ru)",
- "add_rule": "Добавить",
- "add_group": "Добавить группу",
- "delete_rule": "Удалить",
- "delete_group": "Удалить",
- "conditions": {
- "AND": "И",
- "OR": "ИЛИ"
- },
- "operators": {
- "equal": "равно",
- "not_equal": "не равно",
- "in": "из указанных",
- "not_in": "не из указанных",
- "less": "меньше",
- "less_or_equal": "меньше или равно",
- "greater": "больше",
- "greater_or_equal": "больше или равно",
- "between": "между",
- "begins_with": "начинается с",
- "not_begins_with": "не начинается с",
- "contains": "содержит",
- "not_contains": "не содержит",
- "ends_with": "оканчивается на",
- "not_ends_with": "не оканчивается на",
- "is_empty": "пустая строка",
- "is_not_empty": "не пустая строка",
- "is_null": "пусто",
- "is_not_null": "не пусто"
- },
- "errors": {
- "no_filter": "Фильтр не выбран",
- "empty_group": "Группа пуста",
- "radio_empty": "Не выбранно значение",
- "checkbox_empty": "Не выбранно значение",
- "select_empty": "Не выбранно значение",
- "string_empty": "Не заполненно",
- "string_exceed_min_length": "Должен содержать больше {0} символов",
- "string_exceed_max_length": "Должен содержать меньше {0} символов",
- "string_invalid_format": "Неверный формат ({0})",
- "number_nan": "Не число",
- "number_not_integer": "Не число",
- "number_not_double": "Не число",
- "number_exceed_min": "Должно быть больше {0}",
- "number_exceed_max": "Должно быть меньше, чем {0}",
- "number_wrong_step": "Должно быть кратно {0}",
- "datetime_empty": "Не заполненно",
- "datetime_invalid": "Неверный формат даты ({0})",
- "datetime_exceed_min": "Должно быть, после {0}",
- "datetime_exceed_max": "Должно быть, до {0}",
- "boolean_not_valid": "Не логическое",
- "operator_not_multiple": "Оператор {0} не поддерживает много значений"
- },
- "invert": "Инвертировать"
-};
-
-QueryBuilder.defaults({ lang_code: 'ru' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.sq.js b/dist/i18n/query-builder.sq.js
deleted file mode 100644
index e6ac08be..00000000
--- a/dist/i18n/query-builder.sq.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Albanian (sq)
- * Author: Tomor Pupovci
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['sq'] = {
- "__locale": "Albanian (sq)",
- "__author": "Tomor Pupovci",
- "add_rule": "Shto rregull",
- "add_group": "Shto grup",
- "delete_rule": "Fshij",
- "delete_group": "Fshij",
- "conditions": {
- "AND": "DHE",
- "OR": "OSE"
- },
- "operators": {
- "equal": "barabartë",
- "not_equal": "e ndryshme prej",
- "in": "në",
- "not_in": "jo në",
- "less": "më e vogël",
- "less_or_equal": "më e vogël ose e barabartë me",
- "greater": "më e madhe",
- "greater_or_equal": "më e madhe ose e barabartë",
- "between": "në mes",
- "begins_with": "fillon me",
- "not_begins_with": "nuk fillon me",
- "contains": "përmban",
- "not_contains": "nuk përmban",
- "ends_with": "mbaron me",
- "not_ends_with": "nuk mbaron me",
- "is_empty": "është e zbrazët",
- "is_not_empty": "nuk është e zbrazët",
- "is_null": "është null",
- "is_not_null": "nuk është null"
- },
- "errors": {
- "no_filter": "Nuk ka filter të zgjedhur",
- "empty_group": "Grupi është i zbrazët",
- "radio_empty": "Nuk ka vlerë të zgjedhur",
- "checkbox_empty": "Nuk ka vlerë të zgjedhur",
- "select_empty": "Nuk ka vlerë të zgjedhur",
- "string_empty": "Vlerë e zbrazët",
- "string_exceed_min_length": "Duhet të përmbajë së paku {0} karaktere",
- "string_exceed_max_length": "Nuk duhet të përmbajë më shumë se {0} karaktere",
- "string_invalid_format": "Format i pasaktë ({0})",
- "number_nan": "Nuk është numër",
- "number_not_integer": "Nuk është numër i plotë",
- "number_not_double": "Nuk është numër me presje",
- "number_exceed_min": "Duhet të jetë më i madh se {0}",
- "number_exceed_max": "Duhet të jetë më i vogël se {0}",
- "number_wrong_step": "Duhet të jetë shumëfish i {0}",
- "datetime_empty": "Vlerë e zbrazët",
- "datetime_invalid": "Format i pasaktë i datës ({0})",
- "datetime_exceed_min": "Duhet të jetë pas {0}",
- "datetime_exceed_max": "Duhet të jetë para {0}",
- "boolean_not_valid": "Nuk është boolean",
- "operator_not_multiple": "Operatori {0} nuk mund të pranojë vlera të shumëfishta"
- }
-};
-
-QueryBuilder.defaults({ lang_code: 'sq' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.tr.js b/dist/i18n/query-builder.tr.js
deleted file mode 100644
index 74740c58..00000000
--- a/dist/i18n/query-builder.tr.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Turkish (tr)
- * Author: Aykut Alpgiray Ateş
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['tr'] = {
- "__locale": "Turkish (tr)",
- "__author": "Aykut Alpgiray Ateş",
- "add_rule": "Kural Ekle",
- "add_group": "Grup Ekle",
- "delete_rule": "Sil",
- "delete_group": "Sil",
- "conditions": {
- "AND": "Ve",
- "OR": "Veya"
- },
- "operators": {
- "equal": "eşit",
- "not_equal": "eşit değil",
- "in": "içinde",
- "not_in": "içinde değil",
- "less": "küçük",
- "less_or_equal": "küçük veya eşit",
- "greater": "büyük",
- "greater_or_equal": "büyük veya eşit",
- "between": "arasında",
- "not_between": "arasında değil",
- "begins_with": "ile başlayan",
- "not_begins_with": "ile başlamayan",
- "contains": "içeren",
- "not_contains": "içermeyen",
- "ends_with": "ile biten",
- "not_ends_with": "ile bitmeyen",
- "is_empty": "boş ise",
- "is_not_empty": "boş değil ise",
- "is_null": "var ise",
- "is_not_null": "yok ise"
- },
- "errors": {
- "no_filter": "Bir filtre seçili değil",
- "empty_group": "Grup bir eleman içermiyor",
- "radio_empty": "seçim yapılmalı",
- "checkbox_empty": "seçim yapılmalı",
- "select_empty": "seçim yapılmalı",
- "string_empty": "Bir metin girilmeli",
- "string_exceed_min_length": "En az {0} karakter girilmeli",
- "string_exceed_max_length": "En fazla {0} karakter girilebilir",
- "string_invalid_format": "Uyumsuz format ({0})",
- "number_nan": "Sayı değil",
- "number_not_integer": "Tam sayı değilr",
- "number_not_double": "Ondalıklı sayı değil",
- "number_exceed_min": "Sayı {0}'den/dan daha büyük olmalı",
- "number_exceed_max": "Sayı {0}'den/dan daha küçük olmalı",
- "number_wrong_step": "{0} veya katı olmalı",
- "datetime_empty": "Tarih Seçilmemiş",
- "datetime_invalid": "Uygun olmayan tarih formatı ({0})",
- "datetime_exceed_min": "{0} Tarihinden daha sonrası olmalı.",
- "datetime_exceed_max": "{0} Tarihinden daha öncesi olmalı.",
- "boolean_not_valid": "Değer Doğru/Yanlış(bool) olmalı",
- "operator_not_multiple": "Operatör {0} birden fazla değer kabul etmiyor"
- },
- "invert": "Ters Çevir"
-};
-
-QueryBuilder.defaults({ lang_code: 'tr' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.ua.js b/dist/i18n/query-builder.ua.js
deleted file mode 100644
index 96360901..00000000
--- a/dist/i18n/query-builder.ua.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Ukrainian (ua)
- * Author: Megaplan, mborisv
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['ua'] = {
- "__locale": "Ukrainian (ua)",
- "__author": "Megaplan, mborisv ",
- "add_rule": "Додати",
- "add_group": "Додати групу",
- "delete_rule": "Видалити",
- "delete_group": "Видалити",
- "conditions": {
- "AND": "І",
- "OR": "АБО"
- },
- "operators": {
- "equal": "дорівнює",
- "not_equal": "не дорівнює",
- "in": "з вказаних",
- "not_in": "не з вказаних",
- "less": "менше",
- "less_or_equal": "менше або дорівнюж",
- "greater": "більше",
- "greater_or_equal": "більше або дорівнює",
- "between": "між",
- "begins_with": "починається з",
- "not_begins_with": "не починається з",
- "contains": "містить",
- "not_contains": "не містить",
- "ends_with": "закінчується на",
- "not_ends_with": "не не закінчується на",
- "is_empty": "порожній рядок",
- "is_not_empty": "не порожній рядок",
- "is_null": "порожньо",
- "is_not_null": "не порожньо"
- },
- "errors": {
- "no_filter": "Фільтр не вибраний",
- "empty_group": "Група порожня",
- "radio_empty": "Значення не вибрано",
- "checkbox_empty": "Значення не вибрано",
- "select_empty": "Значення не вибрано",
- "string_empty": "Не заповнено",
- "string_exceed_min_length": "Повинен містити більше {0} символів",
- "string_exceed_max_length": "Повинен містити менше {0} символів",
- "string_invalid_format": "Невірний формат ({0})",
- "number_nan": "Не число",
- "number_not_integer": "Не число",
- "number_not_double": "Не число",
- "number_exceed_min": "Повинне бути більше {0}",
- "number_exceed_max": "Повинне бути менше, ніж {0}",
- "number_wrong_step": "Повинне бути кратне {0}",
- "datetime_empty": "Не заповнено",
- "datetime_invalid": "Невірний формат дати ({0})",
- "datetime_exceed_min": "Повинне бути, після {0}",
- "datetime_exceed_max": "Повинне бути, до {0}",
- "boolean_not_valid": "Не логічне",
- "operator_not_multiple": "Оператор {0} не підтримує багато значень"
- },
- "invert": "інвертувати"
-};
-
-QueryBuilder.defaults({ lang_code: 'ua' });
-}));
\ No newline at end of file
diff --git a/dist/i18n/query-builder.zh-CN.js b/dist/i18n/query-builder.zh-CN.js
deleted file mode 100644
index 765e19e6..00000000
--- a/dist/i18n/query-builder.zh-CN.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Locale: Simplified Chinese (zh_CN)
- * Author: shadowwind, shatteredwindgo@gmail.com
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'query-builder'], factory);
- }
- else {
- factory(root.jQuery);
- }
-}(this, function($) {
-"use strict";
-
-var QueryBuilder = $.fn.queryBuilder;
-
-QueryBuilder.regional['zh-CN'] = {
- "__locale": "Simplified Chinese (zh_CN)",
- "__author": "shadowwind, shatteredwindgo@gmail.com",
- "add_rule": "添加规则",
- "add_group": "添加组",
- "delete_rule": "删除",
- "delete_group": "删除组",
- "conditions": {
- "AND": "和",
- "OR": "或"
- },
- "operators": {
- "equal": "等于",
- "not_equal": "不等于",
- "in": "在...之內",
- "not_in": "不在...之內",
- "less": "小于",
- "less_or_equal": "小于或等于",
- "greater": "大于",
- "greater_or_equal": "大于或等于",
- "between": "在...之间",
- "not_between": "不在...之间",
- "begins_with": "以...开始",
- "not_begins_with": "不以...开始",
- "contains": "包含以下内容",
- "not_contains": "不包含以下内容",
- "ends_with": "以...结束",
- "not_ends_with": "不以...结束",
- "is_empty": "为空",
- "is_not_empty": "不为空",
- "is_null": "为 null",
- "is_not_null": "不为 null"
- },
- "errors": {
- "no_filter": "没有选择过滤器",
- "empty_group": "该组为空",
- "radio_empty": "没有选中项",
- "checkbox_empty": "没有选中项",
- "select_empty": "没有选中项",
- "string_empty": "没有输入值",
- "string_exceed_min_length": "必须至少包含{0}个字符",
- "string_exceed_max_length": "必须不超过{0}个字符",
- "string_invalid_format": "无效格式({0})",
- "number_nan": "值不是数字",
- "number_not_integer": "不是整数",
- "number_not_double": "不是浮点数",
- "number_exceed_min": "必须大于{0}",
- "number_exceed_max": "必须小于{0}",
- "number_wrong_step": "必须是{0}的倍数",
- "datetime_empty": "值为空",
- "datetime_invalid": "不是有效日期({0})",
- "datetime_exceed_min": "必须在{0}之后",
- "datetime_exceed_max": "必须在{0}之前",
- "boolean_not_valid": "不是布尔值",
- "operator_not_multiple": "选项{0}无法接受多个值"
- },
- "invert": "倒置"
-};
-
-QueryBuilder.defaults({ lang_code: 'zh-CN' });
-}));
\ No newline at end of file
diff --git a/dist/js/query-builder.js b/dist/js/query-builder.js
deleted file mode 100644
index ffbb2e74..00000000
--- a/dist/js/query-builder.js
+++ /dev/null
@@ -1,4641 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.4.0
- * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-// Languages: en
-// Plugins: bt-checkbox, bt-selectpicker, bt-tooltip-errors, change-filters, filter-description, invert, mongodb-support, not-group, sortable, sql-support, unique-filter
-(function(root, factory) {
- if (typeof define == 'function' && define.amd) {
- define(['jquery', 'doT', 'jQuery.extendext'], factory);
- }
- else {
- factory(root.jQuery, root.doT);
- }
-}(this, function($, doT) {
-"use strict";
-
-// CLASS DEFINITION
-// ===============================
-var QueryBuilder = function($el, options) {
- this.init($el, options);
-};
-
-
-// EVENTS SYSTEM
-// ===============================
-$.extend(QueryBuilder.prototype, {
- change: function(type, value) {
- var event = new $.Event(this.tojQueryEvent(type, true), {
- builder: this,
- value: value
- });
-
- this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 2));
-
- return event.value;
- },
-
- trigger: function(type) {
- var event = new $.Event(this.tojQueryEvent(type), {
- builder: this
- });
-
- this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 1));
-
- return event;
- },
-
- on: function(type, cb) {
- this.$el.on(this.tojQueryEvent(type), cb);
- return this;
- },
-
- off: function(type, cb) {
- this.$el.off(this.tojQueryEvent(type), cb);
- return this;
- },
-
- once: function(type, cb) {
- this.$el.one(this.tojQueryEvent(type), cb);
- return this;
- },
-
- tojQueryEvent: function(name, filter) {
- return name.split(' ').map(function(type) {
- return type + '.queryBuilder' + (filter ? '.filter' : '');
- }).join(' ');
- }
-});
-
-
-// PLUGINS SYSTEM
-// ===============================
-QueryBuilder.plugins = {};
-
-/**
- * Get or extend the default configuration
- * @param options {object,optional} new configuration, leave undefined to get the default config
- * @return {undefined|object} nothing or configuration object (copy)
- */
-QueryBuilder.defaults = function(options) {
- if (typeof options == 'object') {
- $.extendext(true, 'replace', QueryBuilder.DEFAULTS, options);
- }
- else if (typeof options == 'string') {
- if (typeof QueryBuilder.DEFAULTS[options] == 'object') {
- return $.extend(true, {}, QueryBuilder.DEFAULTS[options]);
- }
- else {
- return QueryBuilder.DEFAULTS[options];
- }
- }
- else {
- return $.extend(true, {}, QueryBuilder.DEFAULTS);
- }
-};
-
-/**
- * Define a new plugin
- * @param {string}
- * @param {function}
- * @param {object,optional} default configuration
- */
-QueryBuilder.define = function(name, fct, def) {
- QueryBuilder.plugins[name] = {
- fct: fct,
- def: def || {}
- };
-};
-
-/**
- * Add new methods
- * @param {object}
- */
-QueryBuilder.extend = function(methods) {
- $.extend(QueryBuilder.prototype, methods);
-};
-
-/**
- * Init plugins for an instance
- * @throws ConfigError
- */
-QueryBuilder.prototype.initPlugins = function() {
- if (!this.plugins) {
- return;
- }
-
- if ($.isArray(this.plugins)) {
- var tmp = {};
- this.plugins.forEach(function(plugin) {
- tmp[plugin] = null;
- });
- this.plugins = tmp;
- }
-
- Object.keys(this.plugins).forEach(function(plugin) {
- if (plugin in QueryBuilder.plugins) {
- this.plugins[plugin] = $.extend(true, {},
- QueryBuilder.plugins[plugin].def,
- this.plugins[plugin] || {}
- );
-
- QueryBuilder.plugins[plugin].fct.call(this, this.plugins[plugin]);
- }
- else {
- Utils.error('Config', 'Unable to find plugin "{0}"', plugin);
- }
- }, this);
-};
-
-
-/**
- * Allowed types and their internal representation
- */
-QueryBuilder.types = {
- 'string': 'string',
- 'integer': 'number',
- 'double': 'number',
- 'date': 'datetime',
- 'time': 'datetime',
- 'datetime': 'datetime',
- 'boolean': 'boolean'
-};
-
-/**
- * Allowed inputs
- */
-QueryBuilder.inputs = [
- 'text',
- 'textarea',
- 'radio',
- 'checkbox',
- 'select'
-];
-
-/**
- * Runtime modifiable options with `setOptions` method
- */
-QueryBuilder.modifiable_options = [
- 'display_errors',
- 'allow_groups',
- 'allow_empty',
- 'default_condition',
- 'default_filter'
-];
-
-/**
- * CSS selectors for common components
- */
-var Selectors = QueryBuilder.selectors = {
- group_container: '.rules-group-container',
- rule_container: '.rule-container',
- filter_container: '.rule-filter-container',
- operator_container: '.rule-operator-container',
- value_container: '.rule-value-container',
- error_container: '.error-container',
- condition_container: '.rules-group-header .group-conditions',
-
- rule_header: '.rule-header',
- group_header: '.rules-group-header',
- group_actions: '.group-actions',
- rule_actions: '.rule-actions',
-
- rules_list: '.rules-group-body>.rules-list',
-
- group_condition: '.rules-group-header [name$=_cond]',
- rule_filter: '.rule-filter-container [name$=_filter]',
- rule_operator: '.rule-operator-container [name$=_operator]',
- rule_value: '.rule-value-container [name*=_value_]',
-
- add_rule: '[data-add=rule]',
- delete_rule: '[data-delete=rule]',
- add_group: '[data-add=group]',
- delete_group: '[data-delete=group]'
-};
-
-/**
- * Template strings (see `template.js`)
- */
-QueryBuilder.templates = {};
-
-/**
- * Localized strings (see `i18n/`)
- */
-QueryBuilder.regional = {};
-
-/**
- * Default operators
- */
-QueryBuilder.OPERATORS = {
- equal: { type: 'equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] },
- not_equal: { type: 'not_equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] },
- in: { type: 'in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] },
- not_in: { type: 'not_in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] },
- less: { type: 'less', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] },
- less_or_equal: { type: 'less_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] },
- greater: { type: 'greater', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] },
- greater_or_equal: { type: 'greater_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] },
- between: { type: 'between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] },
- not_between: { type: 'not_between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] },
- begins_with: { type: 'begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] },
- not_begins_with: { type: 'not_begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] },
- contains: { type: 'contains', nb_inputs: 1, multiple: false, apply_to: ['string'] },
- not_contains: { type: 'not_contains', nb_inputs: 1, multiple: false, apply_to: ['string'] },
- ends_with: { type: 'ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] },
- not_ends_with: { type: 'not_ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] },
- is_empty: { type: 'is_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] },
- is_not_empty: { type: 'is_not_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] },
- is_null: { type: 'is_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] },
- is_not_null: { type: 'is_not_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }
-};
-
-/**
- * Default configuration
- */
-QueryBuilder.DEFAULTS = {
- filters: [],
- plugins: [],
-
- sort_filters: false,
- display_errors: true,
- allow_groups: -1,
- allow_empty: false,
- conditions: ['AND', 'OR'],
- default_condition: 'AND',
- inputs_separator: ' , ',
- select_placeholder: '------',
- display_empty_filter: true,
- default_filter: null,
- optgroups: {},
-
- default_rule_flags: {
- filter_readonly: false,
- operator_readonly: false,
- value_readonly: false,
- no_delete: false
- },
-
- default_group_flags: {
- condition_readonly: false,
- no_add_rule: false,
- no_add_group: false,
- no_delete: false
- },
-
- templates: {
- group: null,
- rule: null,
- filterSelect: null,
- operatorSelect: null
- },
-
- lang_code: 'en',
- lang: {},
-
- operators: [
- 'equal',
- 'not_equal',
- 'in',
- 'not_in',
- 'less',
- 'less_or_equal',
- 'greater',
- 'greater_or_equal',
- 'between',
- 'not_between',
- 'begins_with',
- 'not_begins_with',
- 'contains',
- 'not_contains',
- 'ends_with',
- 'not_ends_with',
- 'is_empty',
- 'is_not_empty',
- 'is_null',
- 'is_not_null'
- ],
-
- icons: {
- add_group: 'glyphicon glyphicon-plus-sign',
- add_rule: 'glyphicon glyphicon-plus',
- remove_group: 'glyphicon glyphicon-remove',
- remove_rule: 'glyphicon glyphicon-remove',
- error: 'glyphicon glyphicon-warning-sign'
- }
-};
-
-
-/**
- * Init the builder
- */
-QueryBuilder.prototype.init = function($el, options) {
- $el[0].queryBuilder = this;
- this.$el = $el;
-
- // PROPERTIES
- this.settings = $.extendext(true, 'replace', {}, QueryBuilder.DEFAULTS, options);
- this.model = new Model();
- this.status = {
- group_id: 0,
- rule_id: 0,
- generated_id: false,
- has_optgroup: false,
- has_operator_oprgroup: false,
- id: null,
- updating_value: false
- };
-
- // "allow_groups" can be boolean or int
- if (this.settings.allow_groups === false) {
- this.settings.allow_groups = 0;
- }
- else if (this.settings.allow_groups === true) {
- this.settings.allow_groups = -1;
- }
-
- // SETTINGS SHORTCUTS
- this.filters = this.settings.filters;
- this.icons = this.settings.icons;
- this.operators = this.settings.operators;
- this.templates = this.settings.templates;
- this.plugins = this.settings.plugins;
-
- // translations : english << 'lang_code' << custom
- if (QueryBuilder.regional['en'] === undefined) {
- Utils.error('Config', '"i18n/en.js" not loaded.');
- }
- this.lang = $.extendext(true, 'replace', {}, QueryBuilder.regional['en'], QueryBuilder.regional[this.settings.lang_code], this.settings.lang);
-
- // init templates
- Object.keys(this.templates).forEach(function(tpl) {
- if (!this.templates[tpl]) {
- this.templates[tpl] = QueryBuilder.templates[tpl];
- }
- if (typeof this.templates[tpl] == 'string') {
- this.templates[tpl] = doT.template(this.templates[tpl]);
- }
- }, this);
-
- // ensure we have a container id
- if (!this.$el.attr('id')) {
- this.$el.attr('id', 'qb_' + Math.floor(Math.random() * 99999));
- this.status.generated_id = true;
- }
- this.status.id = this.$el.attr('id');
-
- // INIT
- this.$el.addClass('query-builder form-inline');
-
- this.filters = this.checkFilters(this.filters);
- this.operators = this.checkOperators(this.operators);
- this.bindEvents();
- this.initPlugins();
-
- this.trigger('afterInit');
-
- if (options.rules) {
- this.setRules(options.rules);
- delete this.settings.rules;
- }
- else {
- this.setRoot(true);
- }
-};
-
-/**
- * Checks the configuration of each filter
- * @throws ConfigError
- */
-QueryBuilder.prototype.checkFilters = function(filters) {
- var definedFilters = [];
-
- if (!filters || filters.length === 0) {
- Utils.error('Config', 'Missing filters list');
- }
-
- filters.forEach(function(filter, i) {
- if (!filter.id) {
- Utils.error('Config', 'Missing filter {0} id', i);
- }
- if (definedFilters.indexOf(filter.id) != -1) {
- Utils.error('Config', 'Filter "{0}" already defined', filter.id);
- }
- definedFilters.push(filter.id);
-
- if (!filter.type) {
- filter.type = 'string';
- }
- else if (!QueryBuilder.types[filter.type]) {
- Utils.error('Config', 'Invalid type "{0}"', filter.type);
- }
-
- if (!filter.input) {
- filter.input = 'text';
- }
- else if (typeof filter.input != 'function' && QueryBuilder.inputs.indexOf(filter.input) == -1) {
- Utils.error('Config', 'Invalid input "{0}"', filter.input);
- }
-
- if (filter.operators) {
- filter.operators.forEach(function(operator) {
- if (typeof operator != 'string') {
- Utils.error('Config', 'Filter operators must be global operators types (string)');
- }
- });
- }
-
- if (!filter.field) {
- filter.field = filter.id;
- }
- if (!filter.label) {
- filter.label = filter.field;
- }
-
- if (!filter.optgroup) {
- filter.optgroup = null;
- }
- else {
- this.status.has_optgroup = true;
-
- // register optgroup if needed
- if (!this.settings.optgroups[filter.optgroup]) {
- this.settings.optgroups[filter.optgroup] = filter.optgroup;
- }
- }
-
- switch (filter.input) {
- case 'radio': case 'checkbox':
- if (!filter.values || filter.values.length < 1) {
- Utils.error('Config', 'Missing filter "{0}" values', filter.id);
- }
- break;
-
- case 'select':
- if (filter.placeholder) {
- if (filter.placeholder_value === undefined) {
- filter.placeholder_value = -1;
- }
- Utils.iterateOptions(filter.values, function(key) {
- if (key == filter.placeholder_value) {
- Utils.error('Config', 'Placeholder of filter "{0}" overlaps with one of its values', filter.id);
- }
- });
- }
- break;
- }
- }, this);
-
- if (this.settings.sort_filters) {
- if (typeof this.settings.sort_filters == 'function') {
- filters.sort(this.settings.sort_filters);
- }
- else {
- var self = this;
- filters.sort(function(a, b) {
- return self.translateLabel(a.label).localeCompare(self.translateLabel(b.label));
- });
- }
- }
-
- if (this.status.has_optgroup) {
- filters = Utils.groupSort(filters, 'optgroup');
- }
-
- return filters;
-};
-
-/**
- * Checks the configuration of each operator
- * @throws ConfigError
- */
-QueryBuilder.prototype.checkOperators = function(operators) {
- var definedOperators = [];
-
- operators.forEach(function(operator, i) {
- if (typeof operator == 'string') {
- if (!QueryBuilder.OPERATORS[operator]) {
- Utils.error('Config', 'Unknown operator "{0}"', operator);
- }
-
- operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator]);
- }
- else {
- if (!operator.type) {
- Utils.error('Config', 'Missing "type" for operator {0}', i);
- }
-
- if (QueryBuilder.OPERATORS[operator.type]) {
- operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator.type], operator);
- }
-
- if (operator.nb_inputs === undefined || operator.apply_to === undefined) {
- Utils.error('Config', 'Missing "nb_inputs" and/or "apply_to" for operator "{0}"', operator.type);
- }
- }
-
- if (definedOperators.indexOf(operator.type) != -1) {
- Utils.error('Config', 'Operator "{0}" already defined', operator.type);
- }
- definedOperators.push(operator.type);
-
- if (!operator.optgroup) {
- operator.optgroup = null;
- }
- else {
- this.status.has_operator_optgroup = true;
-
- // register optgroup if needed
- if (!this.settings.optgroups[operator.optgroup]) {
- this.settings.optgroups[operator.optgroup] = operator.optgroup;
- }
- }
- }, this);
-
- if (this.status.has_operator_optgroup) {
- operators = Utils.groupSort(operators, 'optgroup');
- }
-
- return operators;
-};
-
-/**
- * Add all events listeners
- */
-QueryBuilder.prototype.bindEvents = function() {
- var self = this;
-
- // group condition change
- this.$el.on('change.queryBuilder', Selectors.group_condition, function() {
- if ($(this).is(':checked')) {
- var $group = $(this).closest(Selectors.group_container);
- Model($group).condition = $(this).val();
- }
- });
-
- // rule filter change
- this.$el.on('change.queryBuilder', Selectors.rule_filter, function() {
- var $rule = $(this).closest(Selectors.rule_container);
- Model($rule).filter = self.getFilterById($(this).val());
- });
-
- // rule operator change
- this.$el.on('change.queryBuilder', Selectors.rule_operator, function() {
- var $rule = $(this).closest(Selectors.rule_container);
- Model($rule).operator = self.getOperatorByType($(this).val());
- });
-
- // add rule button
- this.$el.on('click.queryBuilder', Selectors.add_rule, function() {
- var $group = $(this).closest(Selectors.group_container);
- self.addRule(Model($group));
- });
-
- // delete rule button
- this.$el.on('click.queryBuilder', Selectors.delete_rule, function() {
- var $rule = $(this).closest(Selectors.rule_container);
- self.deleteRule(Model($rule));
- });
-
- if (this.settings.allow_groups !== 0) {
- // add group button
- this.$el.on('click.queryBuilder', Selectors.add_group, function() {
- var $group = $(this).closest(Selectors.group_container);
- self.addGroup(Model($group));
- });
-
- // delete group button
- this.$el.on('click.queryBuilder', Selectors.delete_group, function() {
- var $group = $(this).closest(Selectors.group_container);
- self.deleteGroup(Model($group));
- });
- }
-
- // model events
- this.model.on({
- 'drop': function(e, node) {
- node.$el.remove();
- self.refreshGroupsConditions();
- },
- 'add': function(e, node, index) {
- if (index === 0) {
- node.$el.prependTo(node.parent.$el.find('>' + Selectors.rules_list));
- }
- else {
- node.$el.insertAfter(node.parent.rules[index - 1].$el);
- }
- self.refreshGroupsConditions();
- },
- 'move': function(e, node, group, index) {
- node.$el.detach();
-
- if (index === 0) {
- node.$el.prependTo(group.$el.find('>' + Selectors.rules_list));
- }
- else {
- node.$el.insertAfter(group.rules[index - 1].$el);
- }
- self.refreshGroupsConditions();
- },
- 'update': function(e, node, field, value, oldValue) {
- if (node instanceof Rule) {
- switch (field) {
- case 'error':
- self.displayError(node);
- break;
-
- case 'flags':
- self.applyRuleFlags(node);
- break;
-
- case 'filter':
- self.updateRuleFilter(node, oldValue);
- break;
-
- case 'operator':
- self.updateRuleOperator(node, oldValue);
- break;
-
- case 'value':
- self.updateRuleValue(node);
- break;
- }
- }
- else {
- switch (field) {
- case 'error':
- self.displayError(node);
- break;
-
- case 'flags':
- self.applyGroupFlags(node);
- break;
-
- case 'condition':
- self.updateGroupCondition(node);
- break;
- }
- }
- }
- });
-};
-
-/**
- * Create the root group
- * @param addRule {bool,optional} add a default empty rule
- * @param data {mixed,optional} group custom data
- * @param flags {object,optional} flags to apply to the group
- * @return group {Root}
- */
-QueryBuilder.prototype.setRoot = function(addRule, data, flags) {
- addRule = (addRule === undefined || addRule === true);
-
- var group_id = this.nextGroupId();
- var $group = $(this.getGroupTemplate(group_id, 1));
-
- this.$el.append($group);
- this.model.root = new Group(null, $group);
- this.model.root.model = this.model;
-
- this.model.root.data = data;
- this.model.root.flags = $.extend({}, this.settings.default_group_flags, flags);
-
- this.trigger('afterAddGroup', this.model.root);
-
- this.model.root.condition = this.settings.default_condition;
-
- if (addRule) {
- this.addRule(this.model.root);
- }
-
- return this.model.root;
-};
-
-/**
- * Add a new group
- * @param parent {Group}
- * @param addRule {bool,optional} add a default empty rule
- * @param data {mixed,optional} group custom data
- * @param flags {object,optional} flags to apply to the group
- * @return group {Group}
- */
-QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) {
- addRule = (addRule === undefined || addRule === true);
-
- var level = parent.level + 1;
-
- var e = this.trigger('beforeAddGroup', parent, addRule, level);
- if (e.isDefaultPrevented()) {
- return null;
- }
-
- var group_id = this.nextGroupId();
- var $group = $(this.getGroupTemplate(group_id, level));
- var model = parent.addGroup($group);
-
- model.data = data;
- model.flags = $.extend({}, this.settings.default_group_flags, flags);
-
- this.trigger('afterAddGroup', model);
-
- model.condition = this.settings.default_condition;
-
- if (addRule) {
- this.addRule(model);
- }
-
- return model;
-};
-
-/**
- * Tries to delete a group. The group is not deleted if at least one rule is no_delete.
- * @param group {Group}
- * @return {boolean} true if the group has been deleted
- */
-QueryBuilder.prototype.deleteGroup = function(group) {
- if (group.isRoot()) {
- return false;
- }
-
- var e = this.trigger('beforeDeleteGroup', group);
- if (e.isDefaultPrevented()) {
- return false;
- }
-
- var del = true;
-
- group.each('reverse', function(rule) {
- del&= this.deleteRule(rule);
- }, function(group) {
- del&= this.deleteGroup(group);
- }, this);
-
- if (del) {
- group.drop();
- this.trigger('afterDeleteGroup');
- }
-
- return del;
-};
-
-/**
- * Changes the condition of a group
- * @param group {Group}
- */
-QueryBuilder.prototype.updateGroupCondition = function(group) {
- group.$el.find('>' + Selectors.group_condition).each(function() {
- var $this = $(this);
- $this.prop('checked', $this.val() === group.condition);
- $this.parent().toggleClass('active', $this.val() === group.condition);
- });
-
- this.trigger('afterUpdateGroupCondition', group);
-};
-
-/**
- * Update visibility of conditions based on number of rules inside each group
- */
-QueryBuilder.prototype.refreshGroupsConditions = function() {
- (function walk(group) {
- if (!group.flags || (group.flags && !group.flags.condition_readonly)) {
- group.$el.find('>' + Selectors.group_condition).prop('disabled', group.rules.length <= 1)
- .parent().toggleClass('disabled', group.rules.length <= 1);
- }
-
- group.each(function(rule) {}, function(group) {
- walk(group);
- }, this);
- }(this.model.root));
-};
-
-/**
- * Add a new rule
- * @param parent {Group}
- * @param data {mixed,optional} rule custom data
- * @param flags {object,optional} flags to apply to the rule
- * @return rule {Rule}
- */
-QueryBuilder.prototype.addRule = function(parent, data, flags) {
- var e = this.trigger('beforeAddRule', parent);
- if (e.isDefaultPrevented()) {
- return null;
- }
-
- var rule_id = this.nextRuleId();
- var $rule = $(this.getRuleTemplate(rule_id));
- var model = parent.addRule($rule);
-
- if (data !== undefined) {
- model.data = data;
- }
-
- model.flags = $.extend({}, this.settings.default_rule_flags, flags);
-
- this.trigger('afterAddRule', model);
-
- this.createRuleFilters(model);
-
- if (this.settings.default_filter || !this.settings.display_empty_filter) {
- model.filter = this.change('getDefaultFilter',
- this.getFilterById(this.settings.default_filter || this.filters[0].id),
- model
- );
- }
-
- return model;
-};
-
-/**
- * Delete a rule.
- * @param rule {Rule}
- * @return {boolean} true if the rule has been deleted
- */
-QueryBuilder.prototype.deleteRule = function(rule) {
- if (rule.flags.no_delete) {
- return false;
- }
-
- var e = this.trigger('beforeDeleteRule', rule);
- if (e.isDefaultPrevented()) {
- return false;
- }
-
- rule.drop();
-
- this.trigger('afterDeleteRule');
-
- return true;
-};
-
-/**
- * Create the filters