Skip to content
Snippets Groups Projects
Commit d27edd08 authored by Cam Saul's avatar Cam Saul
Browse files

Merge branch 'master' into defendpoint_annotations

parents bdfae5d4 6f37628b
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,8 @@ var basePath = 'resources/frontend_client/app/';
var SRC = {
css: [basePath + 'css/**/*.css', basePath + 'components/**/*.css'],
jsx: [basePath + 'query_builder/*.js']
jsx: [basePath + 'query_builder/*.js'],
appJS: [basePath + '**/*.js', '!' + basePath + 'bower_components/**/*.js', '!' + basePath + 'dist/*.js', '!' + basePath + 'query_builder/*.js', '!' + basePath + '/test/**/*.js']
};
var DEST = {
......@@ -41,16 +42,21 @@ gulp.task('jsx', function () {
return gulp.src(SRC.jsx)
.pipe(concat('query_builder.js'))
.pipe(react())
.pipe(gulp.dest(DEST.js))
})
.pipe(gulp.dest(DEST.js));
});
gulp.task('build-js', function () {
return gulp.src(SRC.appJS)
.pipe(concat('app.js'))
.pipe(gulp.dest(DEST.js));
});
gulp.task('watch', function(){
gulp.watch(SRC.css, ['css']);
gulp.watch(SRC.jsx, ['jsx']);
gulp.watch(SRC.appJS, ['build-js']);
});
gulp.task('build', ['css', 'jsx', 'build-js']);
gulp.task('build', ['css', 'jsx']);
gulp.task('default', ['build','watch', 'jsx']);
gulp.task('default', ['build', 'watch']);
......@@ -1462,6 +1462,9 @@ CardControllers.controller('CardDetailNew', [
}
},
getDownloadLink: function () {
return '/api/meta/dataset/csv/?query=' + encodeURIComponent(JSON.stringify($scope.model.card.dataset_query));
},
cleanFilters: function (dataset_query) {
var filters = dataset_query.query.filter,
cleanFilters = [];
......
......@@ -115,7 +115,8 @@ var QueryBuilder = React.createClass({
});
var saver,
result;
result,
download;
if(this.props.model.result) {
saver = (
<Saver
......@@ -133,7 +134,10 @@ var QueryBuilder = React.createClass({
result={this.props.model.result}
setDisplay={this.props.model.setDisplay.bind(this.props.model)}
/>
)
);
download = (
<a className="ActionButton inline-block mr1" href={this.props.model.getDownloadLink()} target="_blank">Download data</a>
);
}
......@@ -187,6 +191,7 @@ var QueryBuilder = React.createClass({
<div className="ActionBar">
{saver}
{download}
</div>
</div>
)
......
......@@ -165,16 +165,16 @@
<!-- JS INCLUDES -->
<script src="/app/bower_components/react/react-with-addons.js"></script>
<script src="/app/bower_components/react-onclickoutside/index.js"></script>
<script src="/app/bower_components/moment/min/moment.min.js"></script>
<script src="/app/bower_components/tether/tether.min.js"></script>
<script src="/app/bower_components/react-date-picker/react-datepicker.js"></script>
<!-- vendor js -->
<script src="/app/bower_components/react/react-with-addons.min.js"></script>
<script src="/app/bower_components/react-onclickoutside/index.js"></script>
<script src="/app/bower_components/moment/min/moment.min.js"></script>
<script src="/app/bower_components/tether/tether.min.js"></script>
<script src="/app/bower_components/react-date-picker/react-datepicker.js"></script>
<script src="/app/dist/query_builder.js" type="text/javascript"></script>
<script src="/app/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/app/bower_components/underscore/underscore.js"></script>
<script src="/app/bower_components/underscore/underscore-min.js"></script>
<script src="/app/bower_components/fastclick/lib/fastclick.js"></script>
<script src="/app/bower_components/angular-route/angular-route.min.js"></script>
......@@ -182,16 +182,16 @@
<script src="/app/bower_components/angular-cookies/angular-cookies.min.js"></script>
<script src="/app/bower_components/angular-animate/angular-animate.min.js"></script>
<script src="/app/bower_components/angular-sanitize/angular-sanitize.min.js"></script>
<script src="/app/bower_components/angular-xeditable/dist/js/xeditable.js"></script>
<script src="/app/bower_components/angular-xeditable/dist/js/xeditable.min.js"></script>
<script src="/app/bower_components/angular-cookie/angular-cookie.min.js"></script>
<script src="/app/bower_components/javascript-detect-element-resize/detect-element-resize.js"></script>
<script src="/app/bower_components/angular-gridster/src/angular-gridster.js"></script>
<script src="/app/bower_components/angular-gridster/dist/angular-gridster.min.js"></script>
<script src="/app/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
<script src="/app/bower_components/angular-http-auth/src/http-auth-interceptor.js"></script>
<script src="/app/bower_components/ace-builds/src-min-noconflict/ace.js"></script>
<script src="/app/bower_components/ace-builds/src-min-noconflict/mode-sql.js"></script>
<script src="/app/bower_components/ace-builds/src-min-noconflict/ext-language_tools.js"></script>
<script src="/app/bower_components/angular-ui-ace/ui-ace.js"></script>
<script src="/app/bower_components/angular-ui-ace/ui-ace.min.js"></script>
<script src="/app/bower_components/angularytics/dist/angularytics.min.js"></script>
<script src="/app/bower_components/ng-sortable/dist/ng-sortable.min.js"></script>
<script src="/app/bower_components/angular-readable-time/angular-readable-time.min.js"></script>
......@@ -202,83 +202,9 @@
<script src="/app/js/google_maps.js"></script>
<!-- global app -->
<script src="/app/app.js"></script>
<script src="/app/services.js"></script>
<script src="/app/controllers.js"></script>
<script src="/app/filters.js"></script>
<script src="/app/directives.js"></script>
<script src="/app/auth/auth.module.js"></script>
<script src="/app/auth/auth.controllers.js"></script>
<!-- components and shared bits -->
<script src="/app/annotation/annotation.services.js"></script>
<script src="/app/annotation/annotation.directives.js"></script>
<script src="/app/metabase/metabase.services.js"></script>
<script src="/app/components/components.module.js"></script>
<script src="/app/components/core_nav/core_nav.js"></script>
<script src="/app/components/workspace/workspace.js"></script>
<script src="/app/components/icons/icons.js"></script>
<!-- superadmin section -->
<script src="/app/superadmin/index/index.module.js"></script>
<script src="/app/superadmin/index/index.controllers.js"></script>
<script src="/app/superadmin/index/index.services.js"></script>
<script src="/app/superadmin/organization/organization.module.js"></script>
<script src="/app/superadmin/organization/organization.controllers.js"></script>
<!-- admin section -->
<script src="/app/admin/admin.controllers.js"></script>
<script src="/app/admin/databases/databases.module.js"></script>
<script src="/app/admin/databases/databases.controllers.js"></script>
<script src="/app/admin/datasets/datasets.module.js"></script>
<script src="/app/admin/datasets/datasets.controllers.js"></script>
<script src="/app/admin/datasets/datasets.directives.js"></script>
<script src="/app/admin/emailreport/emailreport.module.js"></script>
<script src="/app/admin/emailreport/emailreport.controllers.js"></script>
<script src="/app/admin/emailreport/emailreport.services.js"></script>
<script src="/app/admin/people/people.module.js"></script>
<script src="/app/admin/people/people.controllers.js"></script>
<script src="/app/admin/people/people.directives.js"></script>
<script src="/app/admin/query/query.module.js"></script>
<script src="/app/admin/query/query.controllers.js"></script>
<script src="/app/admin/query/query.services.js"></script>
<script src="/app/admin/annotation/annotation.module.js"></script>
<script src="/app/admin/annotation/annotation.controllers.js"></script>
<script src="/app/admin/search/search.module.js"></script>
<script src="/app/admin/search/search.controllers.js"></script>
<!-- main app -->
<script src="/app/card/card.module.js"></script>
<script src="/app/card/card.controllers.js"></script>
<script src="/app/card/card.services.js"></script>
<script src="/app/card/card.directives.js"></script>
<script src="/app/card/card.charting.js"></script>
<script src="/app/dashboard/dashboard.module.js"></script>
<script src="/app/dashboard/dashboard.controllers.js"></script>
<script src="/app/dashboard/dashboard.services.js"></script>
<script src="/app/dashboard/dashboard.directives.js"></script>
<script src="/app/explore/explore.module.js"></script>
<script src="/app/explore/explore.controllers.js"></script>
<script src="/app/explore/explore.directives.js"></script>
<script src="/app/explore/explore.services.js"></script>
<script src="/app/user/user.module.js"></script>
<script src="/app/user/user.controllers.js"></script>
<script src="/app/user/user.directives.js"></script>
<script src="/app/search/search.module.js"></script>
<script src="/app/search/search.controllers.js"></script>
<script src="/app/search/search.services.js"></script>
<!-- custom shtuff: be wary -->
<script src="/app/operator/operator.module.js"></script>
<script src="/app/operator/operator.controllers.js"></script>
<script src="/app/operator/operator.services.js"></script>
<script src="/app/reserve/reserve.module.js"></script>
<script src="/app/reserve/reserve.controllers.js"></script>
<script src="/app/reserve/reserve.services.js"></script>
<!-- dist app -->
<script src="/app/dist/app.js"></script>
<script src="/app/dist/query_builder.js" type="text/javascript"></script>
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
<script>
......
......@@ -149,3 +149,13 @@
false
(boolean (re-matches #"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
(clojure.string/lower-case v)))))
(defn rpartial
"Like `partial`, but applies additional args *before* BOUND-ARGS.
Inspired by [`-rpartial` from dash.el](https://github.com/magnars/dash.el#-rpartial-fn-rest-args)
((partial - 5) 8) -> (- 5 8) -> -3
((rpartial - 5) 8) -> (- 8 5) -> 3"
[f & bound-args]
(fn [& args]
(apply f (concat args bound-args))))
......@@ -12,21 +12,21 @@
;; [name last_login]
(defonce ^:private users
[["Justin Ho" (timestamp 2014 4 1 1 30)]
["David Baden" (timestamp 2014 12 5 7 15)]
["Roberto Sanabria" (timestamp 2014 11 6 8 15)]
["Noah Sidman-Gale" (timestamp 2014 1 1 0 30)]
["Cam Saül" (timestamp 2014 10 3 10 30)]
["Kyle Doherty" (timestamp 2014 8 2 5 30)]
["Anshu Agarwal" (timestamp 2014 8 2 2 30)]
["Kiah Buchner" (timestamp 2014 2 1 2 15)]
["Adam Stocker" (timestamp 2014 4 3 2 30)]
["Allen Gilliland" (timestamp 2014 7 3 12 30)]
["Christina Crosetti" (timestamp 2014 11 1)]
["Sameer Al-Sakran" (timestamp 2014 7 2 18 30)]
["Daniel Wiesenthal" (timestamp 2014 8 1 3 30)]
["Douglas Graves" (timestamp 2014 10 3 6 45)]
["RoveLine Ibañez" (timestamp 2014 8 1 5 45)]])
[["Plato Yeshua" (timestamp 2014 4 1 1 30)]
["Felipinho Asklepios" (timestamp 2014 12 5 7 15)]
["Kaneonuskatew Eiran" (timestamp 2014 11 6 8 15)]
["Simcha Yan" (timestamp 2014 1 1 0 30)]
["Quentin Sören" (timestamp 2014 10 3 10 30)]
["Shad Ferdynand" (timestamp 2014 8 2 5 30)]
["Conchúr Tihomir" (timestamp 2014 8 2 2 30)]
["Szymon Theutrich" (timestamp 2014 2 1 2 15)]
["Nils Gotam" (timestamp 2014 4 3 2 30)]
["Frans Hevel" (timestamp 2014 7 3 12 30)]
["Spiros Teofil" (timestamp 2014 11 1)]
["Kfir Caj" (timestamp 2014 7 2 18 30)]
["Dwight Gresham" (timestamp 2014 8 1 3 30)]
["Broen Olujimi" (timestamp 2014 10 3 6 45)]
["Rüstem Hebel" (timestamp 2014 8 1 5 45)]])
;; name
(defonce ^:private categories
......
......@@ -28,3 +28,12 @@
:a 100
:b (+ 100 (:a <>))
:c (+ 100 (:b <>))))
;;; tests for RPARTIAL
(expect 3
((rpartial - 5) 8))
(expect -7
((rpartial - 5 10) 8))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment