diff --git a/src/coffee/controllers/timerCtrl.coffee b/src/coffee/controllers/timerCtrl.coffee index 8fd7afc..4eef7d3 100644 --- a/src/coffee/controllers/timerCtrl.coffee +++ b/src/coffee/controllers/timerCtrl.coffee @@ -29,6 +29,8 @@ timeTracker.controller 'TimerCtrl', ($scope, $timeout, Redmine, Project, Ticket, $scope.typeaheadOptions = { highlight: true, minLength: 0 } # jquery-timepicker options $scope.timePickerOptions = null + # keyword which inputted on search form. + $scope.searchKeyword = null # mode state objects auto = pomodoro = manual = null # Application options @@ -45,6 +47,7 @@ timeTracker.controller 'TimerCtrl', ($scope, $timeout, Redmine, Project, Ticket, pomodoro = new Pomodoro() manual = new Manual() $scope.mode = auto + $scope.word = DataAdapter.searchKeyword Option.onChanged('stepTime', initializePicker) @@ -114,12 +117,12 @@ timeTracker.controller 'TimerCtrl', ($scope, $timeout, Redmine, Project, Ticket, Workaround for restore selected state on switching view. ### restoreSelected = () -> - return if not DataAdapter.selectedTicket - tmpTicket = DataAdapter.selectedTicket - tmpActivity = DataAdapter.selectedActivity + return if not DataAdapter.searchKeyword.ticket + tmpTicket = DataAdapter.searchKeyword.ticket + tmpActivity = DataAdapter.searchKeyword.activity $timeout () -> - DataAdapter.selectedTicket = tmpTicket - DataAdapter.selectedActivity = tmpActivity + DataAdapter.searchKeyword.ticket = tmpTicket + DataAdapter.searchKeyword.activity = tmpActivity , SWITCHING_TIME / 2 diff --git a/src/coffee/services/dataAdapter.coffee b/src/coffee/services/dataAdapter.coffee index d723b1d..6b2a818 100644 --- a/src/coffee/services/dataAdapter.coffee +++ b/src/coffee/services/dataAdapter.coffee @@ -14,7 +14,7 @@ timeTracker.factory("DataAdapter", (Analytics, EventDispatcher, Const, Option, L ###* # @property account - # @type AccountModel + # @type {AccountModel} ### @account = {} @@ -49,6 +49,38 @@ timeTracker.factory("DataAdapter", (Analytics, EventDispatcher, Const, Option, L @statuses = [] + ###* + Class representing the search word entered. + @class SearchKeyword + ### + class SearchKeyword + + constructor: (@data) -> + + ###* + Selected Ticket Model or inputted search word. + @type {TicketModel|String} + ### + _ticket: null + @property 'ticket', + get: -> return @_ticket + set: (val) -> + @_ticket = val + if val is null or !!val.id # not String + @data.selectedTicket = val + + ###* + Selected Activity Model or inputted search word. + @type {ActivityModel|String} + ### + _activity: null + @property 'activity', + get: -> return @_activity + set: (val) -> + @_activity = val + if val is null or !!val.id + @data.selectedActivity = val + ###* Adapter class for GUI and data models. @class DataAdapter @@ -72,6 +104,7 @@ timeTracker.factory("DataAdapter", (Analytics, EventDispatcher, Const, Option, L # @constructor ### constructor: () -> + @searchKeyword = new SearchKeyword(@) @_bindDataModelGetter() Option.onChanged "isProjectStarEnable", () => @_updateStarredProjects() @@ -157,8 +190,9 @@ timeTracker.factory("DataAdapter", (Analytics, EventDispatcher, Const, Option, L set: (n) -> return if @_selectedTicket is n @_selectedTicket = n + @searchKeyword._ticket = n @_activities.set @_data[n.url].activities if n and @_data[n.url] - @_selectedActivity = @_activities[0] + @selectedActivity = @_activities[0] @fireEvent(@SELECTED_TICKET_CHANGED, @, n) Log.debug("selectedTicket set: " + n?.text) Log.debug("selectedActivity set: " + @_selectedActivity?.name) @@ -167,7 +201,9 @@ timeTracker.factory("DataAdapter", (Analytics, EventDispatcher, Const, Option, L _selectedActivity: null @property 'selectedActivity', get: -> @_selectedActivity - set: (n) -> @_selectedActivity = n + set: (n) -> + @_selectedActivity = n + @searchKeyword._activity = n # selected query. _selectedQuery: null @@ -345,7 +381,7 @@ timeTracker.factory("DataAdapter", (Analytics, EventDispatcher, Const, Option, L @_data[url].activities = activities if @selectedTicket and @selectedTicket.url is url @_activities.set activities - @_selectedActivity = activities[0] + @selectedActivity = activities[0] Log.debug("setActivities: #{url}") ###* diff --git a/src/jade/_auto.jade b/src/jade/_auto.jade index 823bab3..926fb03 100644 --- a/src/jade/_auto.jade +++ b/src/jade/_auto.jade @@ -15,8 +15,8 @@ form(action='#', method='POST', name='time_entry') input.sfTypeahead.form-control.input-sm(type="text" options="typeaheadOptions" datasets="ticketData" - ng-model="data.selectedTicket" - ng-click="data.selectedTicket = null" + ng-model="word.ticket" + ng-click="word.ticket = null" placeholder='Select issue...') i.fa.fa-angle-down @@ -38,8 +38,8 @@ form(action='#', method='POST', name='time_entry') input.sfTypeahead.form-control.input-sm(type="text" options="typeaheadOptions" datasets="activityData" - ng-model="data.selectedActivity" - ng-click="data.selectedActivity = null" + ng-model="word.activity" + ng-click="word.activity = null" placeholder='Select activity...') i.fa.fa-angle-down diff --git a/src/jade/_manual.jade b/src/jade/_manual.jade index f859c9f..3ae506e 100644 --- a/src/jade/_manual.jade +++ b/src/jade/_manual.jade @@ -15,8 +15,8 @@ form(action='#', method='POST', name='time_entry') input.sfTypeahead.form-control.input-sm(type="text" options="typeaheadOptions" datasets="ticketData" - ng-model="data.selectedTicket" - ng-click="data.selectedTicket = null" + ng-model="word.ticket" + ng-click="word.ticket = null" placeholder='Select issue...') i.fa.fa-angle-down @@ -30,8 +30,8 @@ form(action='#', method='POST', name='time_entry') input.sfTypeahead.form-control.input-sm(type="text" options="typeaheadOptions" datasets="activityData" - ng-model="data.selectedActivity" - ng-click="data.selectedActivity = null" + ng-model="word.activity" + ng-click="word.activity = null" placeholder='Select activity...') i.fa.fa-angle-down diff --git a/src/jade/_pomodoro.jade b/src/jade/_pomodoro.jade index 32af0d7..6f3ffb6 100644 --- a/src/jade/_pomodoro.jade +++ b/src/jade/_pomodoro.jade @@ -16,8 +16,8 @@ form(action='#', method='POST', name='time_entry') input.sfTypeahead.form-control.input-sm(type="text" options="typeaheadOptions" datasets="ticketData" - ng-model="data.selectedTicket" - ng-click="data.selectedTicket = null" + ng-model="word.ticket" + ng-click="word.ticket = null" placeholder='Select issue...') i.fa.fa-angle-down @@ -40,8 +40,8 @@ form(action='#', method='POST', name='time_entry') input.sfTypeahead.form-control.input-sm(type="text" options="typeaheadOptions" datasets="activityData" - ng-model="data.selectedActivity" - ng-click="data.selectedActivity = null" + ng-model="word.activity" + ng-click="word.activity = null" placeholder='Select activity...') i.fa.fa-angle-down