diff --git a/build.ps1 b/build.ps1 index 873c4d0c1..718e91d2d 100644 --- a/build.ps1 +++ b/build.ps1 @@ -133,9 +133,11 @@ Function RunGrunt() Invoke-Expression 'npm install' CheckExitCode - Invoke-Expression ('node ' + $gruntPath + ' packagerjs') + Invoke-Expression ('node ' + $gruntPath + ' packagerjs') -ErrorAction Continue -Verbose CheckExitCode + Remove-Item $outputFolder\UI\build.txt -ErrorAction Continue + Write-Host "##teamcity[progressFinish 'Running Grunt']" } diff --git a/src/UI/JsLibraries/backbone.backgrid.filter.js b/src/UI/JsLibraries/backbone.backgrid.filter.js deleted file mode 100644 index abc95a386..000000000 --- a/src/UI/JsLibraries/backbone.backgrid.filter.js +++ /dev/null @@ -1,365 +0,0 @@ -/* - backgrid-filter - http://github.com/wyuenho/backgrid - - Copyright (c) 2013 Jimmy Yuen Ho Wong and contributors - Licensed under the MIT @license. -*/ - -(function ($, _, Backbone, Backgrid, lunr) { - - "use strict"; - - /** - ServerSideFilter is a search form widget that submits a query to the server - for filtering the current collection. - - @class Backgrid.Extension.ServerSideFilter - */ - var ServerSideFilter = Backgrid.Extension.ServerSideFilter = Backbone.View.extend({ - - /** @property */ - tagName: "form", - - /** @property */ - className: "backgrid-filter form-search", - - /** @property {function(Object, ?Object=): string} template */ - template: _.template('
placeholder="<%- placeholder %>" <% } %> name="<%- name %>" />×
'), - - /** @property */ - events: { - "click .close": "clear", - "submit": "search" - }, - - /** @property {string} [name='q'] Query key */ - name: "q", - - /** @property The HTML5 placeholder to appear beneath the search box. */ - placeholder: null, - - /** - @param {Object} options - @param {Backbone.Collection} options.collection - @param {String} [options.name] - @param {String} [options.placeholder] - */ - initialize: function (options) { - Backgrid.requireOptions(options, ["collection"]); - Backbone.View.prototype.initialize.apply(this, arguments); - this.name = options.name || this.name; - this.placeholder = options.placeholder || this.placeholder; - - var collection = this.collection, self = this; - if (Backbone.PageableCollection && - collection instanceof Backbone.PageableCollection && - collection.mode == "server") { - collection.queryParams[this.name] = function () { - return self.$el.find("input[type=text]").val(); - }; - } - }, - - /** - Upon search form submission, this event handler constructs a query - parameter object and pass it to Collection#fetch for server-side - filtering. - */ - search: function (e) { - if (e) e.preventDefault(); - var data = {}; - data[this.name] = this.$el.find("input[type=text]").val(); - this.collection.fetch({data: data}); - }, - - /** - Event handler for the close button. Clears the search box and refetch the - collection. - */ - clear: function (e) { - if (e) e.preventDefault(); - this.$("input[type=text]").val(null); - this.collection.fetch(); - }, - - /** - Renders a search form with a text box, optionally with a placeholder and - a preset value if supplied during initialization. - */ - render: function () { - this.$el.empty().append(this.template({ - name: this.name, - placeholder: this.placeholder, - value: this.value - })); - this.delegateEvents(); - return this; - } - - }); - - /** - ClientSideFilter is a search form widget that searches a collection for - model matches against a query on the client side. The exact matching - algorithm can be overriden by subclasses. - - @class Backgrid.Extension.ClientSideFilter - @extends Backgrid.Extension.ServerSideFilter - */ - var ClientSideFilter = Backgrid.Extension.ClientSideFilter = ServerSideFilter.extend({ - - /** @property */ - events: { - "click .close": function (e) { - e.preventDefault(); - this.clear(); - }, - "change input[type=text]": "search", - "keyup input[type=text]": "search", - "submit": function (e) { - e.preventDefault(); - this.search(); - } - }, - - /** - @property {?Array.} A list of model field names to search - for matches. If null, all of the fields will be searched. - */ - fields: null, - - /** - @property wait The time in milliseconds to wait since for since the last - change to the search box's value before searching. This value can be - adjusted depending on how often the search box is used and how large the - search index is. - */ - wait: 149, - - /** - Debounces the #search and #clear methods and makes a copy of the given - collection for searching. - - @param {Object} options - @param {Backbone.Collection} options.collection - @param {String} [options.placeholder] - @param {String} [options.fields] - @param {String} [options.wait=149] - */ - initialize: function (options) { - ServerSideFilter.prototype.initialize.apply(this, arguments); - - this.fields = options.fields || this.fields; - this.wait = options.wait || this.wait; - - this._debounceMethods(["search", "clear"]); - - var collection = this.collection; - var shadowCollection = this.shadowCollection = collection.clone(); - shadowCollection.url = collection.url; - shadowCollection.sync = collection.sync; - shadowCollection.parse = collection.parse; - - this.listenTo(collection, "add", function (model, collection, options) { - shadowCollection.add(model, options); - }); - this.listenTo(collection, "remove", function (model, collection, options) { - shadowCollection.remove(model, options); - }); - this.listenTo(collection, "sort reset", function (collection, options) { - options = _.extend({reindex: true}, options || {}); - if (options.reindex) shadowCollection.reset(collection.models); - }); - }, - - _debounceMethods: function (methodNames) { - if (_.isString(methodNames)) methodNames = [methodNames]; - - this.undelegateEvents(); - - for (var i = 0, l = methodNames.length; i < l; i++) { - var methodName = methodNames[i]; - var method = this[methodName]; - this[methodName] = _.debounce(method, this.wait); - } - - this.delegateEvents(); - }, - - /** - This default implementation takes a query string and returns a matcher - function that looks for matches in the model's #fields or all of its - fields if #fields is null, for any of the words in the query - case-insensitively. - - Subclasses overriding this method must take care to conform to the - signature of the matcher function. In addition, when the matcher function - is called, its context will be bound to this ClientSideFilter object so - it has access to the filter's attributes and methods. - - @param {string} query The search query in the search box. - @return {function(Backbone.Model):boolean} A matching function. - */ - makeMatcher: function (query) { - var regexp = new RegExp(query.trim().split(/\W/).join("|"), "i"); - return function (model) { - var keys = this.fields || model.keys(); - for (var i = 0, l = keys.length; i < l; i++) { - if (regexp.test(model.get(keys[i]) + "")) return true; - } - return false; - }; - }, - - /** - Takes the query from the search box, constructs a matcher with it and - loops through collection looking for matches. Reset the given collection - when all the matches have been found. - */ - search: function () { - var matcher = _.bind(this.makeMatcher(this.$("input[type=text]").val()), this); - this.collection.reset(this.shadowCollection.filter(matcher), {reindex: false}); - }, - - /** - Clears the search box and reset the collection to its original. - */ - clear: function () { - this.$("input[type=text]").val(null); - this.collection.reset(this.shadowCollection.models, {reindex: false}); - } - - }); - - /** - LunrFilter is a ClientSideFilter that uses [lunrjs](http://lunrjs.com/) to - index the text fields of each model for a collection, and performs - full-text searching. - - @class Backgrid.Extension.LunrFilter - @extends Backgrid.Extension.ClientSideFilter - */ - Backgrid.Extension.LunrFilter = ClientSideFilter.extend({ - - /** - @property {string} [ref="id"]`lunrjs` document reference attribute name. - */ - ref: "id", - - /** - @property {Object} fields A hash of `lunrjs` index field names and boost - value. Unlike ClientSideFilter#fields, LunrFilter#fields is _required_ to - initialize the index. - */ - fields: null, - - /** - Indexes the underlying collection on construction. The index will refresh - when the underlying collection is reset. If any model is added, removed - or if any indexed fields of any models has changed, the index will be - updated. - - @param {Object} options - @param {Backbone.Collection} options.collection - @param {String} [options.placeholder] - @param {string} [options.ref] `lunrjs` document reference attribute name. - @param {Object} [options.fields] A hash of `lunrjs` index field names and - boost value. - @param {number} [options.wait] - */ - initialize: function (options) { - ClientSideFilter.prototype.initialize.apply(this, arguments); - - this.ref = options.ref || this.ref; - - var collection = this.collection; - this.listenTo(collection, "add", this.addToIndex); - this.listenTo(collection, "remove", this.removeFromIndex); - this.listenTo(collection, "reset", this.resetIndex); - this.listenTo(collection, "change", this.updateIndex); - - this.resetIndex(collection); - }, - - /** - Reindex the collection. If `options.reindex` is `false`, this method is a - no-op. - - @param {Backbone.Collection} collection - @param {Object} [options] - @param {boolean} [options.reindex=true] - */ - resetIndex: function (collection, options) { - options = _.extend({reindex: true}, options || {}); - - if (options.reindex) { - var self = this; - this.index = lunr(function () { - _.each(self.fields, function (boost, fieldName) { - this.field(fieldName, boost); - this.ref(self.ref); - }, this); - }); - - collection.each(function (model) { - this.addToIndex(model); - }, this); - } - }, - - /** - Adds the given model to the index. - - @param {Backbone.Model} model - */ - addToIndex: function (model) { - var index = this.index; - var doc = model.toJSON(); - if (index.documentStore.has(doc[this.ref])) index.update(doc); - else index.add(doc); - }, - - /** - Removes the given model from the index. - - @param {Backbone.Model} model - */ - removeFromIndex: function (model) { - var index = this.index; - var doc = model.toJSON(); - if (index.documentStore.has(doc[this.ref])) index.remove(doc); - }, - - /** - Updates the index for the given model. - - @param {Backbone.Model} model - */ - updateIndex: function (model) { - var changed = model.changedAttributes(); - if (changed && !_.isEmpty(_.intersection(_.keys(this.fields), - _.keys(changed)))) { - this.index.update(model.toJSON()); - } - }, - - /** - Takes the query from the search box and performs a full-text search on - the client-side. The search result is returned by resetting the - underlying collection to the models after interrogating the index for the - query answer. - */ - search: function () { - var searchResults = this.index.search(this.$("input[type=text]").val()); - var models = []; - for (var i = 0; i < searchResults.length; i++) { - var result = searchResults[i]; - models.push(this.shadowCollection.get(result.ref)); - } - this.collection.reset(models, {reindex: false}); - } - - }); - -}(jQuery, _, Backbone, Backgrid, lunr)); diff --git a/src/UI/JsLibraries/backbone.shortcuts.js b/src/UI/JsLibraries/backbone.shortcuts.js deleted file mode 100644 index 9552e69d3..000000000 --- a/src/UI/JsLibraries/backbone.shortcuts.js +++ /dev/null @@ -1,40 +0,0 @@ -(function() { - var Shortcuts; - - Shortcuts = function(options) { - this.cid = _.uniqueId("backbone.shortcuts"); - this.initialize.apply(this, arguments); - return this.delegateShortcuts(); - }; - - _.extend(Shortcuts.prototype, Backbone.Events, { - initialize: function() {}, - delegateShortcuts: function() { - var callback, match, method, scope, shortcut, shortcutKey, _ref, _results; - if (!this.shortcuts) return; - _ref = this.shortcuts; - _results = []; - for (shortcut in _ref) { - callback = _ref[shortcut]; - if (!_.isFunction(callback)){ - method = this[callback]; - if (!method) throw new Error("Method " + callback + " does not exist"); - } - else { - method = callback; - } - match = shortcut.match(/^(\S+)\s*(.*)$/); - shortcutKey = match[1]; - scope = match[2] === "" ? "all" : match[2]; - method = _.bind(method, this); - _results.push(key(shortcutKey, scope, method)); - } - return _results; - } - }); - - Backbone.Shortcuts = Shortcuts; - - Backbone.Shortcuts.extend = Backbone.View.extend; - -}).call(this);