<commit_before>define([
    'jquery',
    'underscore',
    'backbone',
    'collections/uploads',
    'views/fileselect',
    'app',
    'text!templates/runworkflow.html'
], function ($, _, Backbone, Uploads, FileSelectView, app, runWorkflowTpl) {
    var RunWorkflowView = Backbone.View.extend({
        el: '#run-modal',
        template: _.template(runWorkflowTpl),

        render: function () {
            $('#run-modal-title').html(this.model.get('title'));
            $('#run-modal-body').html(this.template(this.model.toJSON()));

            this.$('.fileinput').each(function () {
                var uploads = new Uploads();
                uploads.url = jsRoutes.controllers.Users.listUploads(app.session.get('uid')).url;

                var fileSelectView = new FileSelectView({fieldName: $(this).attr('id'), collection: uploads});
                $(this).html(fileSelectView.el);
            });

            $('#run-workflow').submit(function (event) {
                event.preventDefault();

                //grab all form data
                var formData = new FormData($(this)[0]);

                $.ajax({
                    url: $(this).attr('action'),
                    type: 'POST',
                    data: formData,
                    async: false,
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function (data) {
                        $('.progress').hide();
                    }
                });

                return this;
            });

            $('#run-modal').on('hidden.bs.modal', function (e) {
                app.router.navigate("#", {trigger: true});
            });

            $('#run-btn').on('click', function (e) {

                $('#run-modal').on('hidden.bs.modal', function (e) {
                    app.router.navigate("status", {trigger: true});
                });

                $('.progress').show();
                $('#run-workflow').submit();
                $('#run-modal').modal('toggle');

            });

            $('#run-modal').modal({show: true});

            // TODO: fix autocomplete and add support for file upload selection
            /*$('#inputfile').on("change", function(){

             var myfile = $('#inputfile input')[0].files[0];

             console.log(myfile);

             Papa.parse(myfile, {
             preview: 1,
             complete: function(results) {
             var header = results.data[0];
             console.log(header);

             $('#tokenfield').tokenfield({
             autocomplete: {
             source: header,
             delay: 100,
             },
             showAutocompleteOnFocus: true
             });
             }
             });
             });*/

            //this.$el.html(this.template(this.model.toJSON()));
        }
    });

    return RunWorkflowView;
});<commit_msg>Fixing intermittent bug that submits a workflow run twice<commit_after>define([
    'jquery',
    'underscore',
    'backbone',
    'collections/uploads',
    'views/fileselect',
    'app',
    'text!templates/runworkflow.html'
], function ($, _, Backbone, Uploads, FileSelectView, app, runWorkflowTpl) {
    var RunWorkflowView = Backbone.View.extend({
        el: '#run-modal',
        template: _.template(runWorkflowTpl),

        events: {
            'submit #run-workflow': 'runWorkflow'
        },

        render: function () {
            $('#run-modal-title').html(this.model.get('title'));
            $('#run-modal-body').html(this.template(this.model.toJSON()));

            this.$('.fileinput').each(function () {
                var uploads = new Uploads();
                uploads.url = jsRoutes.controllers.Users.listUploads(app.session.get('uid')).url;

                var fileSelectView = new FileSelectView({fieldName: $(this).attr('id'), collection: uploads});
                $(this).html(fileSelectView.el);
            });

            // TODO: refactor these as events in backbone
            $('#run-modal').on('hidden.bs.modal', function (e) {
                app.router.navigate("#", {trigger: true});
            });

            $('#run-btn').on('click', function (e) {

                $('#run-modal').on('hidden.bs.modal', function (e) {
                    app.router.navigate("status", {trigger: true});
                });

                $('.progress').show();
                $('#run-workflow').submit();
                $('#run-modal').modal('toggle');

            });

            $('#run-modal').modal({show: true});

            // TODO: fix autocomplete and add support for file upload selection
            /*$('#inputfile').on("change", function(){

             var myfile = $('#inputfile input')[0].files[0];

             console.log(myfile);

             Papa.parse(myfile, {
             preview: 1,
             complete: function(results) {
             var header = results.data[0];
             console.log(header);

             $('#tokenfield').tokenfield({
             autocomplete: {
             source: header,
             delay: 100,
             },
             showAutocompleteOnFocus: true
             });
             }
             });
             });*/

            //this.$el.html(this.template(this.model.toJSON()));
        },

        runWorkflow: function (event) {
            console.log("submit");

            event.preventDefault();

            //grab all form data
            var formData = new FormData(event.target);

            var name = this.model.get('name');
            console.log(name);

            $.ajax({
                url: jsRoutes.controllers.Workflows.runWorkflow(name).url,
                type: 'POST',
                data: formData,
                async: false,
                cache: false,
                contentType: false,
                processData: false,
                success: function (data) {
                    $('.progress').hide();
                }
            });

            return this;
        }
    });

    return RunWorkflowView;
});<|endoftext|>


<commit_before>app.controller('MainController', ['$scope', '$http', '$location', 'errorService', function($scope, $http, $location, errorService){

    $scope.checker = function() {
      $http.get('/users/check').success(function(response){
        console.log(response);
        if (response === 1){

        }
        else{
          $location.path('/landing');
          $('#indexHeader').hide();
        }
      });
    }

    $scope.checker();

// landing page....

// @@@@@@@@@@@@@@@@@@
// Errors
// @@@@@@@@@@@@@@@@@@
  //
  $scope.displayError = errorService.callError

// watch for the error property to get set then run this...
  $scope.$watch('displayError.friendError', function(newValue, oldValue){

    if(newValue){
      $('#ErrorHandle').delay(2000).fadeTo('slow', 0)

      setTimeout(function(){
        $('#ErrorHandle').remove()
        $scope.displayError.friendError = undefined
        $scope.displayError.friendErrorBox = undefined
      },2400);
    }
  })
  // $scope.pay.id = $routeParams.bet_object.id
  // get route for bets collections
  // explicitly showing all info in bets expression
  $scope.bets={'active' : [], 'inverse_active' : [], 'inactive':[], 'inverse_inactive' : [], 'outstanding': [], 'inverse_outstanding': []}
  $scope.getallbets = function(){ $http.get('/bets').success(function(response){

      //collect active bets that user created
      for(var i = 0; i < response.bets[0].length; i++){
        if (response.bets[0][i].status === 'active'){
          $scope.bets.active.push(response.bets[0][i])
        }
      }

      //collect active bets where user is friend
      for(var i = 0; i < response.bets[1].length; i++){
        if (response.bets[1][i].status === 'active'){
          $scope.bets.inverse_active.push(response.bets[1][i])
        }
      }

      //collect inactive bets where user created
      for(var i = 0; i < response.bets[0].length; i++){
        if (response.bets[0][i].status === 'inactive'){
          $scope.bets.inactive.push(response.bets[0][i])
        }
      }

      //collect inactive bets where user is friend
      for(var i = 0; i < response.bets[1].length; i++){
        if (response.bets[1][i].status === 'inactive'){
          $scope.bets.inverse_inactive.push(response.bets[1][i])
        }
      }

      //collect outstanding bets where user created
      for(var i = 0; i < response.bets[0].length; i++){
        if (response.bets[0][i].status === 'outstanding'){
          $scope.bets.outstanding.push(response.bets[0][i])
        }
      }

      //collect outstanding bets where user is friend
      for(var i = 0; i < response.bets[1].length; i++){
        if (response.bets[1][i].status === 'outstanding'){
          $scope.bets.inverse_outstanding.push(response.bets[1][i])
        }
      }

  //collection of all bets
      $scope.bets.all = response;

  })};

  $scope.getallbets();

  //post route to create new bet
  $scope.newBet = {}
  $scope.post = function(){
    // console.log($scope.newBet)
    var newbetcopy = angular.copy($scope.newBet)
    // Need a success and fail callback
    $http.post('/bets', newbetcopy).then(function successCallback(response){
      $location.path('/#/profile/inactive')
    }, function errorCallback(response){

      // call service and save var inside it....
      errorService.setError("Friend Not Found")
      //redirect to home page if error....

      $location.path('/#/')

    });
  };

  // bet creator votes, buttons hide
  $scope.declareWinnerUser = function(id, winner) {
    var voteField = $(event.target).closest('div');
    voteField.hide();
    $http.put('/bets/' + id, {user_vote: winner})
  }

  // bet friend votes, buttons hide
  $scope.declareWinnerFriend = function(id, winner, $event) {
      var voteField = $(event.target).closest('div');
      voteField.hide();
      $http.put('/bets/' + id, {friend_vote: winner}).success(function(response){
    })
  }

// goes to accept bet route on server and hides buttons
  $scope.accept_bet = function(bet_id){
    $http.put('/bets/' + bet_id + '/accept');
    $(event.target).parent().parent().parent().hide();
  }

  // goes to decline bet route on server and hides buttons
  $scope.decline_bet = function(bet_id){
    $http.put('/bets/' + bet_id + '/decline');
    $(event.target).parent().parent().parent().hide();
  }

  //win checker
  $scope.winchecker = function(bet) {
    if(bet.winner == $scope.bets.all.bets[2]){
      return true
    }
    else {
      return false
    }
  }

  // send payment after clicking "pay"
  $scope.youpaynowcreator = function(bet){
    var pay = confirm('Pay: $'+ bet.bet_amount + ' to '+ bet.creator +'?')
    if (pay === true){
      $http.put('/bets/' + bet.id + '/pay');
      $(event.target).parent().parent().parent().hide();
    }
  }

  $scope.youpaynowreciever = function(bet){
    var pay = confirm('Pay: $'+ bet.bet_amount + ' to '+ bet.reciever +'?')
    if (pay === true){
      $http.put('/bets/' + bet.id + '/pay');
      $(event.target).parent().parent().parent().hide();
    }
  }

  $scope.selectFriend = function() {
    $scope.newBet.reciever = $(event.target).val();
    $('#fuzzy-list').hide();
  }

  $scope.getFriends = function() {
    $http.get('bets/new').success(function(response) {
      $scope.friends = response.bets
      })
  }

  // PUT JQUERY INSIDE CONTROLLER CALL IN IMMEDIATLLY...
  // JQUERY UI--SLIDER
    $scope.initJqueryUi = function(){
    // Slider on login page...
        $( "#slider" ).slider({
          range: "max",
          min: 0,
          max: 5,
          step: 0.25,
          slide: function( event, ui ) {
            $( "#homeBetAmount" ).text( "$" + ui.value);
            $scope.newBet.bet_amount = String(ui.value)
          }
        }); //end of slider

      // JQUERY UI--DATEPICKER
         $( "#datepicker" ).datepicker({
            minDate: 0,
            dateFormat: 'dd/mm/yy'
          }) //end of dp
    } // END OF initJquery

    // call ui function
    $scope.initJqueryUi();

    // $scope.landing = (function(){

// hide show tabs based on url...
// run regardless..

   // });

}]) // end of controller...
<commit_msg>fix errorService injection<commit_after>app.controller('MainController', ['$scope', '$http', '$location', 'errorService', function($scope, $http, $location, errorService){

    $scope.checker = function() {
      $http.get('/users/check').success(function(response){
        console.log(response);
        if (response === "1"){

        }
        else{
          $location.path('/landing');
          $('#indexHeader').hide();
        }
      });
    }

    $scope.checker();

// landing page....

// @@@@@@@@@@@@@@@@@@
// Errors
// @@@@@@@@@@@@@@@@@@
  //
  $scope.displayError = errorService.callError

// watch for the error property to get set then run this...
  $scope.$watch('displayError.friendError', function(newValue, oldValue){

    if(newValue){
      $('#ErrorHandle').delay(2000).fadeTo('slow', 0)

      setTimeout(function(){
        $('#ErrorHandle').remove()
        $scope.displayError.friendError = undefined
        $scope.displayError.friendErrorBox = undefined
      },2400);
    }
  })
  // $scope.pay.id = $routeParams.bet_object.id
  // get route for bets collections
  // explicitly showing all info in bets expression
  $scope.bets={'active' : [], 'inverse_active' : [], 'inactive':[], 'inverse_inactive' : [], 'outstanding': [], 'inverse_outstanding': []}
  $scope.getallbets = function(){ $http.get('/bets').success(function(response){

      //collect active bets that user created
      for(var i = 0; i < response.bets[0].length; i++){
        if (response.bets[0][i].status === 'active'){
          $scope.bets.active.push(response.bets[0][i])
        }
      }

      //collect active bets where user is friend
      for(var i = 0; i < response.bets[1].length; i++){
        if (response.bets[1][i].status === 'active'){
          $scope.bets.inverse_active.push(response.bets[1][i])
        }
      }

      //collect inactive bets where user created
      for(var i = 0; i < response.bets[0].length; i++){
        if (response.bets[0][i].status === 'inactive'){
          $scope.bets.inactive.push(response.bets[0][i])
        }
      }

      //collect inactive bets where user is friend
      for(var i = 0; i < response.bets[1].length; i++){
        if (response.bets[1][i].status === 'inactive'){
          $scope.bets.inverse_inactive.push(response.bets[1][i])
        }
      }

      //collect outstanding bets where user created
      for(var i = 0; i < response.bets[0].length; i++){
        if (response.bets[0][i].status === 'outstanding'){
          $scope.bets.outstanding.push(response.bets[0][i])
        }
      }

      //collect outstanding bets where user is friend
      for(var i = 0; i < response.bets[1].length; i++){
        if (response.bets[1][i].status === 'outstanding'){
          $scope.bets.inverse_outstanding.push(response.bets[1][i])
        }
      }

  //collection of all bets
      $scope.bets.all = response;

  })};

  $scope.getallbets();

  //post route to create new bet
  $scope.newBet = {}
  $scope.post = function(){
    // console.log($scope.newBet)
    var newbetcopy = angular.copy($scope.newBet)
    // Need a success and fail callback
    $http.post('/bets', newbetcopy).then(function successCallback(response){
      $location.path('/#/profile/inactive')
    }, function errorCallback(response){

      // call service and save var inside it....
      errorService.setError("Friend Not Found")
      //redirect to home page if error....

      $location.path('/#/')

    });
  };

  // bet creator votes, buttons hide
  $scope.declareWinnerUser = function(id, winner) {
    var voteField = $(event.target).closest('div');
    voteField.hide();
    $http.put('/bets/' + id, {user_vote: winner})
  }

  // bet friend votes, buttons hide
  $scope.declareWinnerFriend = function(id, winner, $event) {
      var voteField = $(event.target).closest('div');
      voteField.hide();
      $http.put('/bets/' + id, {friend_vote: winner}).success(function(response){
    })
  }

// goes to accept bet route on server and hides buttons
  $scope.accept_bet = function(bet_id){
    $http.put('/bets/' + bet_id + '/accept');
    $(event.target).parent().parent().parent().hide();
  }

  // goes to decline bet route on server and hides buttons
  $scope.decline_bet = function(bet_id){
    $http.put('/bets/' + bet_id + '/decline');
    $(event.target).parent().parent().parent().hide();
  }

  //win checker
  $scope.winchecker = function(bet) {
    if(bet.winner == $scope.bets.all.bets[2]){
      return true
    }
    else {
      return false
    }
  }

  // send payment after clicking "pay"
  $scope.youpaynowcreator = function(bet){
    var pay = confirm('Pay: $'+ bet.bet_amount + ' to '+ bet.creator +'?')
    if (pay === true){
      $http.put('/bets/' + bet.id + '/pay');
      $(event.target).parent().parent().parent().hide();
    }
  }

  $scope.youpaynowreciever = function(bet){
    var pay = confirm('Pay: $'+ bet.bet_amount + ' to '+ bet.reciever +'?')
    if (pay === true){
      $http.put('/bets/' + bet.id + '/pay');
      $(event.target).parent().parent().parent().hide();
    }
  }

  $scope.selectFriend = function() {
    $scope.newBet.reciever = $(event.target).val();
    $('#fuzzy-list').hide();
  }

  $scope.getFriends = function() {
    $http.get('bets/new').success(function(response) {
      $scope.friends = response.bets
      })
  }

  // PUT JQUERY INSIDE CONTROLLER CALL IN IMMEDIATLLY...
  // JQUERY UI--SLIDER
    $scope.initJqueryUi = function(){
    // Slider on login page...
        $( "#slider" ).slider({
          range: "max",
          min: 0,
          max: 5,
          step: 0.25,
          slide: function( event, ui ) {
            $( "#homeBetAmount" ).text( "$" + ui.value);
            $scope.newBet.bet_amount = String(ui.value)
          }
        }); //end of slider

      // JQUERY UI--DATEPICKER
         $( "#datepicker" ).datepicker({
            minDate: 0,
            dateFormat: 'dd/mm/yy'
          }) //end of dp
    } // END OF initJquery

    // call ui function
    $scope.initJqueryUi();

    // $scope.landing = (function(){

// hide show tabs based on url...
// run regardless..

   // });

}]) // end of controller...
<|endoftext|>


<commit_before>Nightlife.controller("mainController", function($scope, $http, auth, $location, $window) {
    $scope.getBusiness = function() {
        $http.get('/api/yelp/'+$scope.city)
            .success(function(data) {
                $scope.venues = data.map(function(venue) {
                    $http.get("/api/venues/"+venue.name)
                        .success(function(venueDB) {
                            if(venueDB.length) {
                                venue.going = venueDB[0].going;
                            } else {
                                venue.going = 0;
                            };
                        })
                        .error(function(err) {
                            console.log("Error: " + err);
                        });
                    return venue;
                });
            })
            .error(function(err) {
                console.log(err);
            });
    };

    $scope.addGoing = function(venue) {
        if(auth.isLoggedIn()) {
            var user = {
                username: auth.currentUser(),
                venue: venue.name
            }

            $http.get('/api/venues/' + venue.name)
                .success(function(data) {
                    if(data.length) {
                        $http.get('/api/user/get/venues/'+auth.currentUser())
                            .success(function(venues) {
                                if(venues.indexOf(venue.name) !== -1) {
                                    venue.going -= 1;
                                    $http.post('/api/venues/up', venue, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function(venueDB) {
                                            console.log(venueDB);
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err)
                                        });
                                    $http.post('/api/user/rem/venue', user, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function() {
                                            console.log("Success!");
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err);
                                        });
                                } else {
                                    venue.going += 1;
                                    $http.post('/api/venues/up', venue, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function(venueDB) {
                                            console.log(venueDB);
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err)
                                        });
                                    $http.post('/api/user/add/venue', user, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function() {
                                            console.log("Success!");
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err);
                                        });
                                }
                            })
                            .error(function(err) {
                                console.log("Error: " + err);
                            });
                    } else {
                        venue.going += 1;
                        $http.post('/api/venues/create', venue, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                            .success(function() {
                                console.log("Success!");
                            })
                            .error(function(err) {
                                console.log("Error: " + err);
                            });
                        $http.post('/api/user/add/venue', user, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                            .success(function() {
                                console.log("Success!");
                            })
                            .error(function(err) {
                                console.log("Error: " + err);
                            });
                    }
                })
                .error(function(err) {
                    console.log("Error: " + err);
                });

        } else {
            $location.path('/login');
        }
    };
});<commit_msg>added logout link<commit_after>Nightlife.controller("mainController", function($scope, $http, auth, $location, $window) {

    $scope.logOut     = auth.logOut;
    $scope.isLoggedIn = auth.isLoggedIn();
    $scope.getBusiness = function() {
        $http.get('/api/yelp/'+$scope.city)
            .success(function(data) {
                $scope.venues = data.map(function(venue) {
                    $http.get("/api/venues/"+venue.name)
                        .success(function(venueDB) {
                            if(venueDB.length) {
                                venue.going = venueDB[0].going;
                            } else {
                                venue.going = 0;
                            };
                        })
                        .error(function(err) {
                            console.log("Error: " + err);
                        });
                    return venue;
                });
            })
            .error(function(err) {
                console.log(err);
            });
    };

    $scope.addGoing = function(venue) {
        if(auth.isLoggedIn()) {
            var user = {
                username: auth.currentUser(),
                venue: venue.name
            }

            $http.get('/api/venues/' + venue.name)
                .success(function(data) {
                    if(data.length) {
                        $http.get('/api/user/get/venues/'+auth.currentUser())
                            .success(function(venues) {
                                if(venues.indexOf(venue.name) !== -1) {
                                    venue.going -= 1;
                                    $http.post('/api/venues/up', venue, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function(venueDB) {
                                            console.log(venueDB);
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err)
                                        });
                                    $http.post('/api/user/rem/venue', user, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function() {
                                            console.log("Success!");
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err);
                                        });
                                } else {
                                    venue.going += 1;
                                    $http.post('/api/venues/up', venue, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function(venueDB) {
                                            console.log(venueDB);
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err)
                                        });
                                    $http.post('/api/user/add/venue', user, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                                        .success(function() {
                                            console.log("Success!");
                                        })
                                        .error(function(err) {
                                            console.log("Error: " + err);
                                        });
                                }
                            })
                            .error(function(err) {
                                console.log("Error: " + err);
                            });
                    } else {
                        venue.going += 1;
                        $http.post('/api/venues/create', venue, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                            .success(function() {
                                console.log("Success!");
                            })
                            .error(function(err) {
                                console.log("Error: " + err);
                            });
                        $http.post('/api/user/add/venue', user, {headers:{Authorization: 'Bearer '+auth.getToken()}})
                            .success(function() {
                                console.log("Success!");
                            })
                            .error(function(err) {
                                console.log("Error: " + err);
                            });
                    }
                })
                .error(function(err) {
                    console.log("Error: " + err);
                });

        } else {
            $location.path('/login');
        }
    };
});<|endoftext|>


<commit_before>/**
 * @author Mat Groves http://matgroves.com/
 */

 /**
 *
 * @class Strip
 * @extends DisplayObjectContainer
 * @constructor
 * @param texture {Texture} The texture to use
 * @param width {Number} the width
 * @param height {Number} the height
 *
 */
PIXI.Strip = function(texture)
{
    PIXI.DisplayObjectContainer.call( this );

    /**
     * The texture of the strip
     *
     * @property texture
     * @type Texture
     */
    this.texture = texture;

    // set up the main bits..
    this.uvs = new PIXI.Float32Array([0, 1,
                                      1, 1,
                                      1, 0,
                                      0, 1]);

    this.vertices = new PIXI.Float32Array([0, 0,
                                            100, 0,
                                            100, 100,
                                            0, 100]);

    this.colors = new PIXI.Float32Array([1, 1, 1, 1]);

    this.indices = new PIXI.Uint16Array([0, 1, 2, 3]);

    /**
     * Whether the strip is dirty or not
     *
     * @property dirty
     * @type Boolean
     */
    this.dirty = true;

    /**
     * The blend mode to be applied to the sprite. Set to PIXI.blendModes.NORMAL to remove any blend mode.
     *
     * @property blendMode
     * @type Number
     * @default PIXI.blendModes.NORMAL;
     */
    this.blendMode = PIXI.blendModes.NORMAL;

    /**
     * if you need a padding, not yet implemented
     *
     * @property padding
     * @type Number
     */
    this.padding = 0;
     // NYI, TODO padding ?

    this.drawMode = PIXI.Strip.DrawModes.TRIANGLE_STRIP;

};

// constructor
PIXI.Strip.prototype = Object.create(PIXI.DisplayObjectContainer.prototype);
PIXI.Strip.prototype.constructor = PIXI.Strip;

PIXI.Strip.prototype._renderWebGL = function(renderSession)
{
    // if the sprite is not visible or the alpha is 0 then no need to render this element
    if(!this.visible || this.alpha <= 0)return;
    // render triangle strip..

    renderSession.spriteBatch.stop();

    // init! init!
    if(!this._vertexBuffer)this._initWebGL(renderSession);

    renderSession.shaderManager.setShader(renderSession.shaderManager.stripShader);

    this._renderStrip(renderSession);

    ///renderSession.shaderManager.activateDefaultShader();

    renderSession.spriteBatch.start();

    //TODO check culling
};

PIXI.Strip.prototype._initWebGL = function(renderSession)
{
    // build the strip!
    var gl = renderSession.gl;

    this._vertexBuffer = gl.createBuffer();
    this._indexBuffer = gl.createBuffer();
    this._uvBuffer = gl.createBuffer();
    this._colorBuffer = gl.createBuffer();

    gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
    gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW);

    gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer);
    gl.bufferData(gl.ARRAY_BUFFER,  this.uvs, gl.STATIC_DRAW);

    gl.bindBuffer(gl.ARRAY_BUFFER, this._colorBuffer);
    gl.bufferData(gl.ARRAY_BUFFER, this.colors, gl.STATIC_DRAW);

    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);
};

PIXI.Strip.prototype._renderStrip = function(renderSession)
{
    var gl = renderSession.gl;
    var projection = renderSession.projection,
        offset = renderSession.offset,
        shader = renderSession.shaderManager.stripShader;

    var drawMode = this.drawMode === PIXI.Strip.DrawModes.TRIANGLE_STRIP ? gl.TRIANGLE_STRIP : gl.TRIANGLES;

    // gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real);

    renderSession.blendModeManager.setBlendMode(this.blendMode);

    // set uniforms
    gl.uniformMatrix3fv(shader.translationMatrix, false, this.worldTransform.toArray(true));
    gl.uniform2f(shader.projectionVector, projection.x, -projection.y);
    gl.uniform2f(shader.offsetVector, -offset.x, -offset.y);
    gl.uniform1f(shader.alpha, this.worldAlpha);

    if(!this.dirty)
    {

        gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices);
        gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);

        // update the uvs
        gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer);
        gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);

        gl.activeTexture(gl.TEXTURE0);

        // check if a texture is dirty..
        if(this.texture.baseTexture._dirty[gl.id])
        {
            renderSession.renderer.updateTexture(this.texture.baseTexture);
        }
        else
        {
            // bind the current texture
            gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]);
        }

        // dont need to upload!
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);

    }
    else
    {

        this.dirty = false;
        gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.STATIC_DRAW);
        gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);

        // update the uvs
        gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW);
        gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);

        gl.activeTexture(gl.TEXTURE0);

        // check if a texture is dirty..
        if(this.texture.baseTexture._dirty[gl.id])
        {
            renderSession.renderer.updateTexture(this.texture.baseTexture);
        }
        else
        {
            gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]);
        }

        // dont need to upload!
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);

    }
    //console.log(gl.TRIANGLE_STRIP)
    //
    //
    gl.drawElements(drawMode, this.indices.length, gl.UNSIGNED_SHORT, 0);

};

PIXI.Strip.prototype._renderCanvas = function(renderSession)
{
    var context = renderSession.context;

    var transform = this.worldTransform;

    if (renderSession.roundPixels)
    {
        context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx | 0, transform.ty | 0);
    }
    else
    {
        context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty);
    }

    if (this.drawMode === PIXI.Strip.DrawModes.TRIANGLE_STRIP)
    {
        this._renderCanvasTriangleStrip(context);
    }
    else
    {
        this._renderCanvasTriangles(context);
    }
};

PIXI.Strip.prototype._renderCanvasTriangleStrip = function(context)
{
    // draw triangles!!
    var vertices = this.vertices;
    var uvs = this.uvs;

    var length = vertices.length / 2;
    this.count++;

    for (var i = 0; i < length - 2; i++) {
        // draw some triangles!
        var index = i * 2;
        this._renderCanvasDrawTriangle(context, vertices, uvs, index, (index + 2), (index + 4));
    }
};

PIXI.Strip.prototype._renderCanvasTriangles = function(context)
{
    // draw triangles!!
    var vertices = this.vertices;
    var uvs = this.uvs;
    var indices = this.indices;

    var length = indices.length;
    this.count++;

    for (var i = 0; i < length; i += 3) {
        // draw some triangles!
        var index0 = indices[i] * 2, index1 = indices[i + 1] * 2, index2 = indices[i + 2] * 2;
        this._renderCanvasDrawTriangle(context, vertices, uvs, index0, index1, index2);
    }
};

PIXI.Strip.prototype._renderCanvasDrawTriangle = function(context, vertices, uvs, index0, index1, index2)
{
    var textureSource = this.texture.baseTexture.source;
    var textureWidth = this.texture.width;
    var textureHeight = this.texture.height;

    var x0 = vertices[index0], x1 = vertices[index1], x2 = vertices[index2];
    var y0 = vertices[index0 + 1], y1 = vertices[index1 + 1], y2 = vertices[index2 + 1];

    var u0 = uvs[index0] * textureWidth, u1 = uvs[index1] * textureWidth, u2 = uvs[index2] * textureWidth;
    var v0 = uvs[index0 + 1] * textureHeight, v1 = uvs[index1 + 1] * textureHeight, v2 = uvs[index2 + 1] * textureHeight;

    if (this.padding > 0) {
        var padding = this.padding;
        var centerX = (x0 + x1 + x2) / 3;
        var centerY = (y0 + y1 + y2) / 3;

        var normX = x0 - centerX;
        var normY = y0 - centerY;

        var dist = Math.sqrt(normX * normX + normY * normY);
        x0 = centerX + (normX / dist) * (dist + padding);
        y0 = centerY + (normY / dist) * (dist + padding);

        //

        normX = x1 - centerX;
        normY = y1 - centerY;

        dist = Math.sqrt(normX * normX + normY * normY);
        x1 = centerX + (normX / dist) * (dist + padding);
        y1 = centerY + (normY / dist) * (dist + padding);

        normX = x2 - centerX;
        normY = y2 - centerY;

        dist = Math.sqrt(normX * normX + normY * normY);
        x2 = centerX + (normX / dist) * (dist + padding);
        y2 = centerY + (normY / dist) * (dist + padding);
    }

    context.save();
    context.beginPath();

    context.moveTo(x0, y0);
    context.lineTo(x1, y1);
    context.lineTo(x2, y2);

    context.closePath();

    context.clip();

    // Compute matrix transform
    var delta =  (u0 * v1)      + (v0 * u2)      + (u1 * v2)      - (v1 * u2)      - (v0 * u1)      - (u0 * v2);
    var deltaA = (x0 * v1)      + (v0 * x2)      + (x1 * v2)      - (v1 * x2)      - (v0 * x1)      - (x0 * v2);
    var deltaB = (u0 * x1)      + (x0 * u2)      + (u1 * x2)      - (x1 * u2)      - (x0 * u1)      - (u0 * x2);
    var deltaC = (u0 * v1 * x2) + (v0 * x1 * u2) + (x0 * u1 * v2) - (x0 * v1 * u2) - (v0 * u1 * x2) - (u0 * x1 * v2);
    var deltaD = (y0 * v1)      + (v0 * y2)      + (y1 * v2)      - (v1 * y2)      - (v0 * y1)      - (y0 * v2);
    var deltaE = (u0 * y1)      + (y0 * u2)      + (u1 * y2)      - (y1 * u2)      - (y0 * u1)      - (u0 * y2);
    var deltaF = (u0 * v1 * y2) + (v0 * y1 * u2) + (y0 * u1 * v2) - (y0 * v1 * u2) - (v0 * u1 * y2) - (u0 * y1 * v2);

    context.transform(deltaA / delta, deltaD / delta,
        deltaB / delta, deltaE / delta,
        deltaC / delta, deltaF / delta);

    context.drawImage(textureSource, 0, 0);
    context.restore();
};

/**
 * Renders a flat strip
 *
 * @method renderStripFlat
 * @param strip {Strip} The Strip to render
 * @private
 */
PIXI.Strip.prototype.renderStripFlat = function(strip)
{
    var context = this.context;
    var vertices = strip.vertices;

    var length = vertices.length/2;
    this.count++;

    context.beginPath();
    for (var i=1; i < length-2; i++)
    {
        // draw some triangles!
        var index = i*2;

        var x0 = vertices[index],   x1 = vertices[index+2], x2 = vertices[index+4];
        var y0 = vertices[index+1], y1 = vertices[index+3], y2 = vertices[index+5];

        context.moveTo(x0, y0);
        context.lineTo(x1, y1);
        context.lineTo(x2, y2);
    }

    context.fillStyle = '#FF0000';
    context.fill();
    context.closePath();
};

/*
PIXI.Strip.prototype.setTexture = function(texture)
{
    //TODO SET THE TEXTURES
    //TODO VISIBILITY

    // stop current texture
    this.texture = texture;
    this.width   = texture.frame.width;
    this.height  = texture.frame.height;
    this.updateFrame = true;
};
*/

/**
 * When the texture is updated, this event will fire to update the scale and frame
 *
 * @method onTextureUpdate
 * @param event
 * @private
 */

PIXI.Strip.prototype.onTextureUpdate = function()
{
    this.updateFrame = true;
};

/**
 * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account.
 *
 * @method getBounds
 * @param matrix {Matrix} the transformation matrix of the sprite
 * @return {Rectangle} the framing rectangle
 */
PIXI.Strip.prototype.getBounds = function(matrix)
{
    var worldTransform = matrix || this.worldTransform ;

    var a = worldTransform.a;
    var b = worldTransform.b;
    var c = worldTransform.c;
    var d = worldTransform.d;
    var tx = worldTransform.tx;
    var ty = worldTransform.ty;

    var maxX = -Infinity;
    var maxY = -Infinity;

    var minX = Infinity;
    var minY = Infinity;

    var vertices = this.vertices;
    for (var i = 0, n = vertices.length; i < n; i += 2)
    {
        var rawX = vertices[i], rawY = vertices[i + 1];
        var x = (a * rawX) + (c * rawY) + tx;
        var y = (d * rawY) + (b * rawX) + ty;

        minX = x < minX ? x : minX;
        minY = y < minY ? y : minY;

        maxX = x > maxX ? x : maxX;
        maxY = y > maxY ? y : maxY;
    }

    if (minX === -Infinity || maxY === Infinity)
    {
        return PIXI.EmptyRectangle;
    }

    var bounds = this._bounds;

    bounds.x = minX;
    bounds.width = maxX - minX;

    bounds.y = minY;
    bounds.height = maxY - minY;

    // store a reference so that if this function gets called again in the render cycle we do not have to recalculate
    this._currentBounds = bounds;

    return bounds;
};

/**
 * Different drawing buffer modes supported
 *
 * @property
 * @type {{TRIANGLE_STRIP: number, TRIANGLES: number}}
 * @static
 */
PIXI.Strip.DrawModes = {
    TRIANGLE_STRIP: 0,
    TRIANGLES: 1
};
<commit_msg>-[HOUSEKEEPING] Removed extra space.<commit_after>/**
 * @author Mat Groves http://matgroves.com/
 */

 /**
 *
 * @class Strip
 * @extends DisplayObjectContainer
 * @constructor
 * @param texture {Texture} The texture to use
 * @param width {Number} the width
 * @param height {Number} the height
 *
 */
PIXI.Strip = function(texture)
{
    PIXI.DisplayObjectContainer.call( this );

    /**
     * The texture of the strip
     *
     * @property texture
     * @type Texture
     */
    this.texture = texture;

    // set up the main bits..
    this.uvs = new PIXI.Float32Array([0, 1,
                                      1, 1,
                                      1, 0,
                                      0, 1]);

    this.vertices = new PIXI.Float32Array([0, 0,
                                            100, 0,
                                            100, 100,
                                            0, 100]);

    this.colors = new PIXI.Float32Array([1, 1, 1, 1]);

    this.indices = new PIXI.Uint16Array([0, 1, 2, 3]);

    /**
     * Whether the strip is dirty or not
     *
     * @property dirty
     * @type Boolean
     */
    this.dirty = true;

    /**
     * The blend mode to be applied to the sprite. Set to PIXI.blendModes.NORMAL to remove any blend mode.
     *
     * @property blendMode
     * @type Number
     * @default PIXI.blendModes.NORMAL;
     */
    this.blendMode = PIXI.blendModes.NORMAL;

    /**
     * if you need a padding, not yet implemented
     *
     * @property padding
     * @type Number
     */
    this.padding = 0;
     // NYI, TODO padding ?

    this.drawMode = PIXI.Strip.DrawModes.TRIANGLE_STRIP;

};

// constructor
PIXI.Strip.prototype = Object.create(PIXI.DisplayObjectContainer.prototype);
PIXI.Strip.prototype.constructor = PIXI.Strip;

PIXI.Strip.prototype._renderWebGL = function(renderSession)
{
    // if the sprite is not visible or the alpha is 0 then no need to render this element
    if(!this.visible || this.alpha <= 0)return;
    // render triangle strip..

    renderSession.spriteBatch.stop();

    // init! init!
    if(!this._vertexBuffer)this._initWebGL(renderSession);

    renderSession.shaderManager.setShader(renderSession.shaderManager.stripShader);

    this._renderStrip(renderSession);

    ///renderSession.shaderManager.activateDefaultShader();

    renderSession.spriteBatch.start();

    //TODO check culling
};

PIXI.Strip.prototype._initWebGL = function(renderSession)
{
    // build the strip!
    var gl = renderSession.gl;

    this._vertexBuffer = gl.createBuffer();
    this._indexBuffer = gl.createBuffer();
    this._uvBuffer = gl.createBuffer();
    this._colorBuffer = gl.createBuffer();

    gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
    gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW);

    gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer);
    gl.bufferData(gl.ARRAY_BUFFER,  this.uvs, gl.STATIC_DRAW);

    gl.bindBuffer(gl.ARRAY_BUFFER, this._colorBuffer);
    gl.bufferData(gl.ARRAY_BUFFER, this.colors, gl.STATIC_DRAW);

    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);
};

PIXI.Strip.prototype._renderStrip = function(renderSession)
{
    var gl = renderSession.gl;
    var projection = renderSession.projection,
        offset = renderSession.offset,
        shader = renderSession.shaderManager.stripShader;

    var drawMode = this.drawMode === PIXI.Strip.DrawModes.TRIANGLE_STRIP ? gl.TRIANGLE_STRIP : gl.TRIANGLES;

    // gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real);

    renderSession.blendModeManager.setBlendMode(this.blendMode);

    // set uniforms
    gl.uniformMatrix3fv(shader.translationMatrix, false, this.worldTransform.toArray(true));
    gl.uniform2f(shader.projectionVector, projection.x, -projection.y);
    gl.uniform2f(shader.offsetVector, -offset.x, -offset.y);
    gl.uniform1f(shader.alpha, this.worldAlpha);

    if(!this.dirty)
    {

        gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices);
        gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);

        // update the uvs
        gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer);
        gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);

        gl.activeTexture(gl.TEXTURE0);

        // check if a texture is dirty..
        if(this.texture.baseTexture._dirty[gl.id])
        {
            renderSession.renderer.updateTexture(this.texture.baseTexture);
        }
        else
        {
            // bind the current texture
            gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]);
        }

        // dont need to upload!
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);

    }
    else
    {

        this.dirty = false;
        gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.STATIC_DRAW);
        gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);

        // update the uvs
        gl.bindBuffer(gl.ARRAY_BUFFER, this._uvBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, this.uvs, gl.STATIC_DRAW);
        gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);

        gl.activeTexture(gl.TEXTURE0);

        // check if a texture is dirty..
        if(this.texture.baseTexture._dirty[gl.id])
        {
            renderSession.renderer.updateTexture(this.texture.baseTexture);
        }
        else
        {
            gl.bindTexture(gl.TEXTURE_2D, this.texture.baseTexture._glTextures[gl.id]);
        }

        // dont need to upload!
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);

    }
    //console.log(gl.TRIANGLE_STRIP)
    //
    //
    gl.drawElements(drawMode, this.indices.length, gl.UNSIGNED_SHORT, 0);

};

PIXI.Strip.prototype._renderCanvas = function(renderSession)
{
    var context = renderSession.context;

    var transform = this.worldTransform;

    if (renderSession.roundPixels)
    {
        context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx | 0, transform.ty | 0);
    }
    else
    {
        context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty);
    }

    if (this.drawMode === PIXI.Strip.DrawModes.TRIANGLE_STRIP)
    {
        this._renderCanvasTriangleStrip(context);
    }
    else
    {
        this._renderCanvasTriangles(context);
    }
};

PIXI.Strip.prototype._renderCanvasTriangleStrip = function(context)
{
    // draw triangles!!
    var vertices = this.vertices;
    var uvs = this.uvs;

    var length = vertices.length / 2;
    this.count++;

    for (var i = 0; i < length - 2; i++) {
        // draw some triangles!
        var index = i * 2;
        this._renderCanvasDrawTriangle(context, vertices, uvs, index, (index + 2), (index + 4));
    }
};

PIXI.Strip.prototype._renderCanvasTriangles = function(context)
{
    // draw triangles!!
    var vertices = this.vertices;
    var uvs = this.uvs;
    var indices = this.indices;

    var length = indices.length;
    this.count++;

    for (var i = 0; i < length; i += 3) {
        // draw some triangles!
        var index0 = indices[i] * 2, index1 = indices[i + 1] * 2, index2 = indices[i + 2] * 2;
        this._renderCanvasDrawTriangle(context, vertices, uvs, index0, index1, index2);
    }
};

PIXI.Strip.prototype._renderCanvasDrawTriangle = function(context, vertices, uvs, index0, index1, index2)
{
    var textureSource = this.texture.baseTexture.source;
    var textureWidth = this.texture.width;
    var textureHeight = this.texture.height;

    var x0 = vertices[index0], x1 = vertices[index1], x2 = vertices[index2];
    var y0 = vertices[index0 + 1], y1 = vertices[index1 + 1], y2 = vertices[index2 + 1];

    var u0 = uvs[index0] * textureWidth, u1 = uvs[index1] * textureWidth, u2 = uvs[index2] * textureWidth;
    var v0 = uvs[index0 + 1] * textureHeight, v1 = uvs[index1 + 1] * textureHeight, v2 = uvs[index2 + 1] * textureHeight;

    if (this.padding > 0) {
        var padding = this.padding;
        var centerX = (x0 + x1 + x2) / 3;
        var centerY = (y0 + y1 + y2) / 3;

        var normX = x0 - centerX;
        var normY = y0 - centerY;

        var dist = Math.sqrt(normX * normX + normY * normY);
        x0 = centerX + (normX / dist) * (dist + padding);
        y0 = centerY + (normY / dist) * (dist + padding);

        //

        normX = x1 - centerX;
        normY = y1 - centerY;

        dist = Math.sqrt(normX * normX + normY * normY);
        x1 = centerX + (normX / dist) * (dist + padding);
        y1 = centerY + (normY / dist) * (dist + padding);

        normX = x2 - centerX;
        normY = y2 - centerY;

        dist = Math.sqrt(normX * normX + normY * normY);
        x2 = centerX + (normX / dist) * (dist + padding);
        y2 = centerY + (normY / dist) * (dist + padding);
    }

    context.save();
    context.beginPath();

    context.moveTo(x0, y0);
    context.lineTo(x1, y1);
    context.lineTo(x2, y2);

    context.closePath();

    context.clip();

    // Compute matrix transform
    var delta =  (u0 * v1)      + (v0 * u2)      + (u1 * v2)      - (v1 * u2)      - (v0 * u1)      - (u0 * v2);
    var deltaA = (x0 * v1)      + (v0 * x2)      + (x1 * v2)      - (v1 * x2)      - (v0 * x1)      - (x0 * v2);
    var deltaB = (u0 * x1)      + (x0 * u2)      + (u1 * x2)      - (x1 * u2)      - (x0 * u1)      - (u0 * x2);
    var deltaC = (u0 * v1 * x2) + (v0 * x1 * u2) + (x0 * u1 * v2) - (x0 * v1 * u2) - (v0 * u1 * x2) - (u0 * x1 * v2);
    var deltaD = (y0 * v1)      + (v0 * y2)      + (y1 * v2)      - (v1 * y2)      - (v0 * y1)      - (y0 * v2);
    var deltaE = (u0 * y1)      + (y0 * u2)      + (u1 * y2)      - (y1 * u2)      - (y0 * u1)      - (u0 * y2);
    var deltaF = (u0 * v1 * y2) + (v0 * y1 * u2) + (y0 * u1 * v2) - (y0 * v1 * u2) - (v0 * u1 * y2) - (u0 * y1 * v2);

    context.transform(deltaA / delta, deltaD / delta,
        deltaB / delta, deltaE / delta,
        deltaC / delta, deltaF / delta);

    context.drawImage(textureSource, 0, 0);
    context.restore();
};

/**
 * Renders a flat strip
 *
 * @method renderStripFlat
 * @param strip {Strip} The Strip to render
 * @private
 */
PIXI.Strip.prototype.renderStripFlat = function(strip)
{
    var context = this.context;
    var vertices = strip.vertices;

    var length = vertices.length/2;
    this.count++;

    context.beginPath();
    for (var i=1; i < length-2; i++)
    {
        // draw some triangles!
        var index = i*2;

        var x0 = vertices[index],   x1 = vertices[index+2], x2 = vertices[index+4];
        var y0 = vertices[index+1], y1 = vertices[index+3], y2 = vertices[index+5];

        context.moveTo(x0, y0);
        context.lineTo(x1, y1);
        context.lineTo(x2, y2);
    }

    context.fillStyle = '#FF0000';
    context.fill();
    context.closePath();
};

/*
PIXI.Strip.prototype.setTexture = function(texture)
{
    //TODO SET THE TEXTURES
    //TODO VISIBILITY

    // stop current texture
    this.texture = texture;
    this.width   = texture.frame.width;
    this.height  = texture.frame.height;
    this.updateFrame = true;
};
*/

/**
 * When the texture is updated, this event will fire to update the scale and frame
 *
 * @method onTextureUpdate
 * @param event
 * @private
 */

PIXI.Strip.prototype.onTextureUpdate = function()
{
    this.updateFrame = true;
};

/**
 * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account.
 *
 * @method getBounds
 * @param matrix {Matrix} the transformation matrix of the sprite
 * @return {Rectangle} the framing rectangle
 */
PIXI.Strip.prototype.getBounds = function(matrix)
{
    var worldTransform = matrix || this.worldTransform;

    var a = worldTransform.a;
    var b = worldTransform.b;
    var c = worldTransform.c;
    var d = worldTransform.d;
    var tx = worldTransform.tx;
    var ty = worldTransform.ty;

    var maxX = -Infinity;
    var maxY = -Infinity;

    var minX = Infinity;
    var minY = Infinity;

    var vertices = this.vertices;
    for (var i = 0, n = vertices.length; i < n; i += 2)
    {
        var rawX = vertices[i], rawY = vertices[i + 1];
        var x = (a * rawX) + (c * rawY) + tx;
        var y = (d * rawY) + (b * rawX) + ty;

        minX = x < minX ? x : minX;
        minY = y < minY ? y : minY;

        maxX = x > maxX ? x : maxX;
        maxY = y > maxY ? y : maxY;
    }

    if (minX === -Infinity || maxY === Infinity)
    {
        return PIXI.EmptyRectangle;
    }

    var bounds = this._bounds;

    bounds.x = minX;
    bounds.width = maxX - minX;

    bounds.y = minY;
    bounds.height = maxY - minY;

    // store a reference so that if this function gets called again in the render cycle we do not have to recalculate
    this._currentBounds = bounds;

    return bounds;
};

/**
 * Different drawing buffer modes supported
 *
 * @property
 * @type {{TRIANGLE_STRIP: number, TRIANGLES: number}}
 * @static
 */
PIXI.Strip.DrawModes = {
    TRIANGLE_STRIP: 0,
    TRIANGLES: 1
};
<|endoftext|>


<commit_before>Vue.component("ola-bola", {
    template: "
Hello World
"
});
new Vue({
    el: 'body',
    data: {
        show: false,
        submit: false,
        error: false,
        finals: false,
        select: ['String', 'date', 'longText', 'integer', 'biginteger', 'boolean', 'float'],
        selected: '0',
        baseUrl: baseUrl,
        OneToMany: scaffoldList,
        attributes: [],
        OneToManyRows: 0,
        rows: 0,
        table: '',
        OneToManyData: [],
        OneToManyBool: false
    },
    methods: {
        increment: function() {
            this.error = false;
            this.rows += 1;
        },
        decrement: function() {
            if (this.rows == 0 && this.OneToManyRows == 0) {
                this.error = true;
            } else {
                if (this.OneToManyRows != 0) {
                    this.OneToManyRows -= 1;
                    return;
                }
                this.rows -= 1;
            }
        },
        addOneToMany: function() {
            this.OneToManyRows += 1;
            this.OneToManyBool = true;
        },
        getAttr: function(index) {
            console.log(index);
            this.selected = $('#tbl').val();
            console.log(this.baseUrl + '/scaffold/getAttributes/' + this.selected);
            $.getJSON(this.baseUrl + '/scaffold/getAttributes/' + this.selected, function(response) {
                this.attributes = response

                this.table = this.selected;

            }.bind(this));
        },

        getOnData: function(index)
        {
            var onData = $('#on').val();
            console.log(onData);
            this.OneToManyData.push({table: this.table},{onData: onData});
            console.log(this.OneToManyData);
        }
    }
})<commit_msg>update script<commit_after>new Vue({
    el: 'body',
    data: {
        show: false,
        submit: false,
        error: false,
        finals: false,
        select: ['String', 'date', 'longText', 'integer', 'biginteger', 'boolean', 'float'],
        selected: '0',
        baseUrl: baseUrl,
        OneToMany: scaffoldList,
        attributes: [],
        OneToManyRows: 0,
        rows: 0,
        table: '',
        OneToManyData: [],
        OneToManyBool: false
    },
    methods: {
        increment: function() {
            this.error = false;
            this.rows += 1;
        },
        decrement: function() {
            if (this.rows == 0 && this.OneToManyRows == 0) {
                this.error = true;
            } else {
                if (this.OneToManyRows != 0) {
                    this.OneToManyRows -= 1;
                    return;
                }
                this.rows -= 1;
            }
        },
        addOneToMany: function() {
            this.OneToManyRows += 1;
            this.OneToManyBool = true;
        },
        getAttr: function(index) {
            console.log(index);
            this.selected = $('#tbl').val();
            console.log(this.baseUrl + '/scaffold/getAttributes/' + this.selected);
            $.getJSON(this.baseUrl + '/scaffold/getAttributes/' + this.selected, function(response) {
                this.attributes = response

                this.table = this.selected;

            }.bind(this));
        },

        getOnData: function(index)
        {
            var onData = $('#on').val();

            console.log(onData);

            this.OneToManyData.push({table: this.table , onData: onData});

            console.log(this.OneToManyData);
        }
    }
})<|endoftext|>


<commit_before>/* Copyright (c) 2012-2014 The TagSpaces Authors. All rights reserved.
 * Use of this source code is governed by a AGPL3 license that
 * can be found in the LICENSE file. */
define(function(require, exports, module) {
"use strict";

exports.defaultSettings = {
	"appName": "@@APPNAME",
	"appVersion": "@@VERSION",
    "appBuild": "@@BUILD",
    "appBuildID": "@@BID",
	"settingsVersion": 2,
	"newTextFileContent": "Text file created with TagSpaces!",
    "newHTMLFileContent": "<title>Created with TagSpaces!</title>Feel free to change this text...",
	"newMDFileContent": '#Markdown file created with TagSpaces!',
	"showUnixHiddenEntries": false,
	"checkForUpdates": true,
    "lastOpenedDirectory": "",
	"tagspacesList": [@@DEFAULTLOCATIONS],
    "extensionsPath": "ext",
    "prefixTagContainer": "",
    "tagDelimiter": " ",
    "calculateTags": false,
    "isWindowMaximized": false,
    "lastOpenedLocation": "",
    "ootbPerspectives": [@@DEFAULTPERSPECTIVES],
    "ootbViewers": [ "viewerBrowser", "viewerMD", "viewerImage", "viewerPDF", "editorText", "viewerText", "editorODF"  ],
    "ootbEditors": [ "editorHTML", "editorText", "editorODF" ],
    "perspectives": [
        { "id": "perspectiveList" }, // ID should be equal to the directory name where the extension is located
        { "id": "perspectiveGrid" }// ID should be equal to the directory name where the extension is located
    ],
    "supportedFileTypes": [
        { "type": "jpg",	"viewer": "viewerImage",     "editor": "false" },
        { "type": "jpeg", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "gif", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "png", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "svg", 	"viewer": "viewerBrowser",   "editor": "editorText" },
        { "type": "pdf", 	"viewer": "@@PDFVIEWER",	 "editor": "false" },
        { "type": "html", 	"viewer": "viewerBrowser",   "editor": "editorHTML" },
        { "type": "htm", 	"viewer": "viewerBrowser",   "editor": "editorHTML" },
        { "type": "xhtml", 	"viewer": "viewerBrowser",   "editor": "editorText" },
        { "type": "mht", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mhtml", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "odt",    "viewer": "editorODF",       "editor": "false" },
        { "type": "ods",    "viewer": "editorODF",       "editor": "false" },
        { "type": "odp",    "viewer": "editorODF",       "editor": "false" },
        { "type": "odg",    "viewer": "editorODF",       "editor": "false" },
        { "type": "txt", 	"viewer": "viewerBrowser",   "editor": "editorText" },
        { "type": "xml", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "js", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "json",   "viewer": "editorText",      "editor": "editorText" },
        { "type": "url",    "viewer": "editorText",      "editor": "editorText" },
        { "type": "css", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "h", 		"viewer": "editorText",      "editor": "editorText" },
        { "type": "c", 		"viewer": "editorText",      "editor": "editorText" },
        { "type": "clj", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "coffee", "viewer": "editorText",      "editor": "editorText" },
        { "type": "cpp", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "cs", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "groovy", "viewer": "editorText",      "editor": "editorText" },
        { "type": "haxe", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "java", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "jsm", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "less", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "lua", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "ml", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "mli", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "pl", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "php", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "py", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "rb", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "sh", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "sql", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "mkd", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "mdwn", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "markdown","viewer": "viewerMD",       "editor": "editorText" },
        { "type": "mdown", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "md", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "avi", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "ogg", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "ogv", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "oga", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "ogx", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "spx", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "opus", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mp3", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mp4", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "m4p", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "wav", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "wave", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "webm", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "m4v", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "m4a", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mov", 	"viewer": "viewerBrowser",   "editor": "false" }
    ],
	"tagGroups": [
		{
		    "title":"Common Tags",
		    "isFolder": "true",
		    "key":"OTB",
		    "expand": "true",
		    "children":[
		        {
		            "title":"book",
		            "type":"plain",
		        },
		        {
		            "title":"paper",
		            "type":"plain",
		        }
		    ]
		},
		{
		    "title":"Getting Things Done",
		    "isFolder": "true",
		    "key":"GTD",
		    "expand": "true",
		    "children":[
		        {
		            "title":"done",
		            "type":"plain"
		        },
		        {
		            "title":"next",
		            "type":"plain"
		        },
		        {
		            "title":"maybe",
		            "type":"plain"
		        },
		        {
		            "title":"waiting",
		            "type":"plain"
		        }
		    ]
		},
        {
            "title": "Smart Tags",
            "key": "SMR",
            "expanded": true,
            "children": [
                {
                    "type":          "smart",
                    "title":         "now",
                    "functionality": "now",
                    "desciption":    "Adds the current date and time as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "today",
                    "functionality": "today",
                    "desciption":    "Adds the current date as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "tomorrow",
                    "functionality": "tomorrow",
                    "desciption":    "Adds tomorrow's date as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "yesterday",
                    "functionality": "yesterday",
                    "desciption":    "Adds the date of yesterday as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "month",
                    "functionality": "currentMonth",
                    "desciption":    "Adds the current year and month as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "year",
                    "functionality": "currentYear",
                    "desciption":    "Adds the current year as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
           /*     {
                    "type":          "smart",
                    "title":         "here",
                    "functionality": "here",
                    "desciption":    "Adds the current location as tag",
                    "color":         "#ff7537",
                    "textcolor":     "#ffffff"
                },*/
            ]
        },
        {
            "title": "Priorities",
            "key": "PRI",
            "expanded": true,
            "children": [
                {
                    "type": "plain",
                    "title": "high",
                    "color": "#ff7537",
                    "textcolor": "#ffffff"
                },
                {
                    "type": "plain",
                    "title": "medium",
                    "color": "#ffad46",
                    "textcolor": "#ffffff"
                },
                {
                    "type": "plain",
                    "title": "low",
                    "color": "#7bd148",
                    "textcolor": "#ffffff"
                }
            ]
        },
        {
            "title": "Tags in Perspective",
            "key": "CTG",
            "expanded": true,
            "children": []
        }
	]
};

});<commit_msg>adding webp as supported image format<commit_after>/* Copyright (c) 2012-2014 The TagSpaces Authors. All rights reserved.
 * Use of this source code is governed by a AGPL3 license that
 * can be found in the LICENSE file. */
define(function(require, exports, module) {
"use strict";

exports.defaultSettings = {
	"appName": "@@APPNAME",
	"appVersion": "@@VERSION",
    "appBuild": "@@BUILD",
    "appBuildID": "@@BID",
	"settingsVersion": 2,
	"newTextFileContent": "Text file created with TagSpaces!",
    "newHTMLFileContent": "<title>Created with TagSpaces!</title>Feel free to change this text...",
	"newMDFileContent": '#Markdown file created with TagSpaces!',
	"showUnixHiddenEntries": false,
	"checkForUpdates": true,
    "lastOpenedDirectory": "",
	"tagspacesList": [@@DEFAULTLOCATIONS],
    "extensionsPath": "ext",
    "prefixTagContainer": "",
    "tagDelimiter": " ",
    "calculateTags": false,
    "isWindowMaximized": false,
    "lastOpenedLocation": "",
    "ootbPerspectives": [@@DEFAULTPERSPECTIVES],
    "ootbViewers": [ "viewerBrowser", "viewerMD", "viewerImage", "viewerPDF", "editorText", "viewerText", "editorODF"  ],
    "ootbEditors": [ "editorHTML", "editorText", "editorODF" ],
    "perspectives": [
        { "id": "perspectiveList" }, // ID should be equal to the directory name where the extension is located
        { "id": "perspectiveGrid" }// ID should be equal to the directory name where the extension is located
    ],
    "supportedFileTypes": [
        { "type": "jpg",	"viewer": "viewerImage",     "editor": "false" },
        { "type": "jpeg", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "gif", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "png", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "webp", 	"viewer": "viewerImage",     "editor": "false" },
        { "type": "svg", 	"viewer": "viewerBrowser",   "editor": "editorText" },
        { "type": "pdf", 	"viewer": "@@PDFVIEWER",	 "editor": "false" },
        { "type": "html", 	"viewer": "viewerBrowser",   "editor": "editorHTML" },
        { "type": "htm", 	"viewer": "viewerBrowser",   "editor": "editorHTML" },
        { "type": "xhtml", 	"viewer": "viewerBrowser",   "editor": "editorText" },
        { "type": "mht", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mhtml", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "odt",    "viewer": "editorODF",       "editor": "false" },
        { "type": "ods",    "viewer": "editorODF",       "editor": "false" },
        { "type": "odp",    "viewer": "editorODF",       "editor": "false" },
        { "type": "odg",    "viewer": "editorODF",       "editor": "false" },
        { "type": "txt", 	"viewer": "viewerBrowser",   "editor": "editorText" },
        { "type": "xml", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "js", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "json",   "viewer": "editorText",      "editor": "editorText" },
        { "type": "url",    "viewer": "editorText",      "editor": "editorText" },
        { "type": "css", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "h", 		"viewer": "editorText",      "editor": "editorText" },
        { "type": "c", 		"viewer": "editorText",      "editor": "editorText" },
        { "type": "clj", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "coffee", "viewer": "editorText",      "editor": "editorText" },
        { "type": "cpp", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "cs", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "groovy", "viewer": "editorText",      "editor": "editorText" },
        { "type": "haxe", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "java", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "jsm", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "less", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "lua", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "ml", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "mli", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "pl", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "php", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "py", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "rb", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "sh", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "sql", 	"viewer": "editorText",      "editor": "editorText" },
        { "type": "mkd", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "mdwn", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "markdown","viewer": "viewerMD",       "editor": "editorText" },
        { "type": "mdown", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "md", 	"viewer": "viewerMD",        "editor": "editorText" },
        { "type": "avi", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "ogg", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "ogv", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "oga", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "ogx", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "spx", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "opus", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mp3", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mp4", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "m4p", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "wav", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "wave", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "webm", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "m4v", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "m4a", 	"viewer": "viewerBrowser",   "editor": "false" },
        { "type": "mov", 	"viewer": "viewerBrowser",   "editor": "false" }
    ],
	"tagGroups": [
		{
		    "title":"Common Tags",
		    "isFolder": "true",
		    "key":"OTB",
		    "expand": "true",
		    "children":[
		        {
		            "title":"book",
		            "type":"plain",
		        },
		        {
		            "title":"paper",
		            "type":"plain",
		        }
		    ]
		},
		{
		    "title":"Getting Things Done",
		    "isFolder": "true",
		    "key":"GTD",
		    "expand": "true",
		    "children":[
		        {
		            "title":"done",
		            "type":"plain"
		        },
		        {
		            "title":"next",
		            "type":"plain"
		        },
		        {
		            "title":"maybe",
		            "type":"plain"
		        },
		        {
		            "title":"waiting",
		            "type":"plain"
		        }
		    ]
		},
        {
            "title": "Smart Tags",
            "key": "SMR",
            "expanded": true,
            "children": [
                {
                    "type":          "smart",
                    "title":         "now",
                    "functionality": "now",
                    "desciption":    "Adds the current date and time as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "today",
                    "functionality": "today",
                    "desciption":    "Adds the current date as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "tomorrow",
                    "functionality": "tomorrow",
                    "desciption":    "Adds tomorrow's date as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "yesterday",
                    "functionality": "yesterday",
                    "desciption":    "Adds the date of yesterday as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "month",
                    "functionality": "currentMonth",
                    "desciption":    "Adds the current year and month as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
                {
                    "type":          "smart",
                    "title":         "year",
                    "functionality": "currentYear",
                    "desciption":    "Adds the current year as tag",
                    "color":         "#4986e7",
                    "textcolor":     "#ffffff"
                },
           /*     {
                    "type":          "smart",
                    "title":         "here",
                    "functionality": "here",
                    "desciption":    "Adds the current location as tag",
                    "color":         "#ff7537",
                    "textcolor":     "#ffffff"
                },*/
            ]
        },
        {
            "title": "Priorities",
            "key": "PRI",
            "expanded": true,
            "children": [
                {
                    "type": "plain",
                    "title": "high",
                    "color": "#ff7537",
                    "textcolor": "#ffffff"
                },
                {
                    "type": "plain",
                    "title": "medium",
                    "color": "#ffad46",
                    "textcolor": "#ffffff"
                },
                {
                    "type": "plain",
                    "title": "low",
                    "color": "#7bd148",
                    "textcolor": "#ffffff"
                }
            ]
        },
        {
            "title": "Tags in Perspective",
            "key": "CTG",
            "expanded": true,
            "children": []
        }
	]
};

});<|endoftext|>