123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- var App = require('app');
- var validator = require('utils/validator');
- App.GridFilterObject = Em.Object.extend({
- checked:false
- });
- App.GridFilter = Em.View.extend({
- tagName:"ul",
- classNames:['filter'],
- templateName:require('templates/common/grid/filter'),
- attributeBindings:['style'],
- getHeader:function () {
- return this.get('header')
- },
- filters:function () {
- return this.get('header._filters');
- }.property('header._filters')
- });
- App.GridHeader = Em.View.extend({
- templateName:require('templates/common/grid/header'),
- tagName:'th',
- filterable:true,
- showFilter:false,
- getGrid:function () {
- return this.get('grid');
- },
- _filters:[],
- doFilter:function () {
- console.log(this.get('grid'));
- },
- toggleFilter:function () {
- this.set('showFilter', 1 - this.get('showFilter'));
- },
- applyFilter:function () {
- console.warn('APPLYING FILTERS');
- var filters = this.get('_filters');
- var filterValues = [];
- $.each(filters, function(){
- if(this.get('checked')) {
- filterValues.push(this.get('value'));
- }
- });
- var grid = this.get('grid');
- grid.addFilters(this.get('name'), filterValues);
- this.set('showFilter', false);
- },
- init:function () {
- this._super();
- if (!this.get('_filters').length) {
- this.filterValues();
- var thisHeader = this;
- this.set('filter', App.GridFilter.extend({ header:thisHeader }));
- }
- },
- filterValues:function () {
- var gridFilters = this.get('grid._filters');
- if (gridFilters && gridFilters[this.get('name')]) {
- var filters = this.get('grid._filters')[this.get('name')];
- // there should be something like filter preparing
- var newFilters = [];
- $.each(filters, function (i, v) {
- newFilters.push(App.GridFilterObject.create({label:v, value:v}));
- });
- this.set('_filters', newFilters);
- }
- }.observes('grid._filters')
- });
- App.GridRow = Em.View.extend({
- tagName:'tr',
- init:function (options) {
- var object = this.get('object');
- var grid = this.get('grid');
- var fieldNames = grid.get('fieldNames');
- var template = '';
- if (fieldNames) {
- $.each(grid.get('fieldNames'), function (i, field) {
- template += "<td>" + object.get(field) + "</td>";
- });
- this.set('template', Em.Handlebars.compile(template));
- }
- return this._super();
- }
- });
- App.GridPage = Em.Object.extend({
- activeClass:function () {
- return this.get('active') ? "active" : "";
- }.property('active'),
- active:function () {
- return parseInt(this.get('number')) == parseInt(this.get('pager.grid.currentPage'));
- }.property('pager.grid.currentPage')
- });
- App.GridPager = Em.View.extend({
- pages:[],
- templateName:require('templates/common/grid/pager'),
- classNames:['pagination'],
- activatePrevPage:function () {
- var current = this.get('grid.currentPage');
- if (current > 1) this.set('grid.currentPage', current - 1);
- },
- activateNextPage:function () {
- var current = this.get('grid.currentPage');
- if (current < this.get('pages').length) this.set('grid.currentPage', current + 1);
- },
- prevPageDisabled:function () {
- return this.get('grid.currentPage') > 1 ? false : "disabled";
- }.property('grid.currentPage'),
- nextPageDisabled:function () {
- return this.get('grid.currentPage') < this.get('pages').length ? false : "disabled";
- }.property('grid.currentPage'),
- init:function () {
- this._super();
- this.clearPages();
- this.pushPages();
- },
- activatePage:function (event) {
- var page = event.context;
- this.get('grid').set('currentPage', parseInt(event.context.get('number')));
- },
- clearPages:function () {
- this.set('pages', []);
- },
- pushPages:function () {
- var thisPager = this;
- var pages = this.get('grid._pager.pages');
- $.each(pages, function () {
- var thisNumber = this;
- thisPager.get('pages').push(App.GridPage.create({
- number:thisNumber,
- pager:thisPager
- }));
- })
- }.observes('grid._pager')
- });
- App.Grid = Em.View.extend({
- _columns:{}, // not used
- _filters:{}, // prepared filters from data values
- _pager:{pages:[1, 2, 3, 4, 5]}, // observed by pager to config it
- _collection:{className:false, staticOptions:{}}, // collection config
- currentPage:1,
- fieldNames:[],
- appliedFilters:{},
- filteredArray:[],
- columns:[],
- collection:[],
- initComleted:false,
- rows:[],
- templateName:require('templates/main/admin/audit'),
- init:function () {
- console.warn(" Grid INIT ");
- this._super();
- this.prepareColumns(); // should be the 1
- this.prepareCollection();
- this.preparePager();
- },
- preparePager:function () {
- // this.set('pager', App.GridPager.extend({ grid:this })); ask to hide
- },
- addFilters: function(field, values){
- var filters = this.get('appliedFilters');
- filters[field] = values;
- var collection = this.get('_collection.className');
- collection = collection.find();
- var arrayCollection = collection.filter(function(data) {
- var oneFilterFail = false;
- $.each(filters, function(fieldname, values){
- if(values.length && values.indexOf(data.get(fieldname)) == -1) {
- return oneFilterFail = true;
- }
- });
- return !oneFilterFail;
- });
- this.set('filteredArray', arrayCollection);
- },
- prepareCollection:function () {
- if (validator.empty(this.get('_collection.className'))) {
- throw "_collection.className field is not defined";
- }
- var collection = this.get('_collection.className');
- this.set('collection', collection.find(this.get('_collection.staticOptions')));
- },
- addColumn:function (options) {
- options.grid = this;
- if (validator.empty(options.name)) {
- throw "define column name";
- }
- if (this.get('_columns.' + options.name)) {
- throw "column with this '" + options.name + "' already exists";
- }
- var field = App.GridHeader.extend(options);
- this.columns.push(field);
- if (field.filterable || 1) { // .filterable - field not working :(
- this.fieldNames.push(options.name);
- }
- },
- clearColumns:function () {
- this.set('_columns', {});
- this.set('columns', []);
- this.set('fieldNames', []);
- },
- prepareColumns:function () {
- this.clearColumns();
- },
- prepareFilters:function () {
- var thisGrid = this;
- var collection = this.get('collection');
- var fieldNames = this.get('fieldNames');
- var options = {};
- if (collection && collection.content) {
- collection.forEach(function (object, i) {
- $.each(fieldNames, function (j, field) {
- if (!options[field]) {
- options[field] = [];
- }
- var filter = object.get(field);
- if (options[field].indexOf(filter) == -1) {
- options[field].push(filter);
- }
- });
- });
- thisGrid.set('_filters', options);
- }
- }.observes('collection.length'),
- clearRows:function () {
- this.set('rows', [])
- },
- prepareRows:function () {
- var collection = this.get('collection');
- var thisGrid = this;
- this.clearRows();
- console.warn("PREPARE ROWS LEN:", collection.get('length'));
- var i=1;
- if (collection && collection.content) {
- collection.forEach(function (object, i) {
- var row = App.GridRow.extend({grid:thisGrid, object:object});
- thisGrid.rows.push(row);
- });
- }
- }.observes('collection.length'),
- filteredRows:function () {
- var collection = this.get('filteredArray');
- var thisGrid = this;
- this.clearRows();
- collection.forEach(function (object) {
- var row = App.GridRow.extend({grid:thisGrid, object:object});
- thisGrid.rows.push(row);
- });
- }.observes('filteredArray')
- });
|