From f5cff060bc74fc0c18a70e111f3ed4fb8a5f2a91 Mon Sep 17 00:00:00 2001
From: "Luke \"Jared\" Bennett" <lbennett@gitlab.com>
Date: Fri, 1 Jul 2016 03:18:52 +0100
Subject: [PATCH] Started on abuse reports message truncation

---
 .../javascripts/abuse_reports.js.coffee       |  26 +++
 app/assets/javascripts/dispatcher.js          |   3 +
 app/assets/javascripts/dispatcher.js.coffee   | 173 ++++++++++++++++++
 app/assets/stylesheets/pages/admin.scss       |   8 +-
 4 files changed, 209 insertions(+), 1 deletion(-)
 create mode 100644 app/assets/javascripts/abuse_reports.js.coffee
 create mode 100644 app/assets/javascripts/dispatcher.js.coffee

diff --git a/app/assets/javascripts/abuse_reports.js.coffee b/app/assets/javascripts/abuse_reports.js.coffee
new file mode 100644
index 00000000000..de768b12ef9
--- /dev/null
+++ b/app/assets/javascripts/abuse_reports.js.coffee
@@ -0,0 +1,26 @@
+class @AbuseReports
+  MAX_MESSAGE_LENGTH = 300
+  MESSAGE_CELL_SELECTOR = 'table tbody tr td:nth-child(3)'
+
+  constructor: ->
+    $(MESSAGE_CELL_SELECTOR).each @truncateLongMessage
+    $(document).on 'click', "#{MESSAGE_CELL_SELECTOR}", @toggleMessageTruncation
+
+  truncateLongMessage: ->
+    messageCellElement = $(this)
+    reportMessage = messageCellElement.text()
+    if reportMessage.length > MAX_MESSAGE_LENGTH
+      messageCellElement.attr 'data-original-message', reportMessage
+      messageCellElement.attr 'data-message-truncated', 'true'
+      messageCellElement.text "#{reportMessage.substr 0, MAX_MESSAGE_LENGTH}..."
+
+  toggleMessageTruncation: ->
+    messageCellElement = $(this)
+    originalMessage = messageCellElement.attr 'data-original-message'
+    return if not originalMessage
+    if messageCellElement.attr('data-message-truncated') is 'true'
+      messageCellElement.attr 'data-message-truncated', 'false'
+      messageCellElement.text originalMessage
+    else
+      messageCellElement.attr 'data-message-truncated', 'true'
+      messageCellElement.text "#{originalMessage.substr 0, MAX_MESSAGE_LENGTH}..."
diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js
index 3946e861976..0606287f35b 100644
--- a/app/assets/javascripts/dispatcher.js
+++ b/app/assets/javascripts/dispatcher.js
@@ -192,6 +192,9 @@
                 case 'edit':
                   new Labels();
               }
+            case 'abuse_reports':
+              new AbuseReports();
+              break;
           }
           break;
         case 'dashboard':
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee
new file mode 100644
index 00000000000..7711f66bb91
--- /dev/null
+++ b/app/assets/javascripts/dispatcher.js.coffee
@@ -0,0 +1,173 @@
+$ ->
+  new Dispatcher()
+
+class Dispatcher
+  constructor: () ->
+    @initSearch()
+    @initPageScripts()
+
+  initPageScripts: ->
+    page = $('body').attr('data-page')
+
+    unless page
+      return false
+
+    path = page.split(':')
+    shortcut_handler = null
+    switch page
+      when 'projects:issues:index'
+        Issuable.init()
+        new IssuableBulkActions()
+        shortcut_handler = new ShortcutsNavigation()
+      when 'projects:issues:show'
+        new Issue()
+        shortcut_handler = new ShortcutsIssuable()
+        new ZenMode()
+      when 'projects:milestones:show', 'groups:milestones:show', 'dashboard:milestones:show'
+        new Milestone()
+      when 'dashboard:todos:index'
+        new Todos()
+      when 'projects:milestones:new', 'projects:milestones:edit'
+        new ZenMode()
+        new DueDateSelect()
+        new GLForm($('.milestone-form'))
+      when 'groups:milestones:new'
+        new ZenMode()
+      when 'projects:compare:show'
+        new Diff()
+      when 'projects:issues:new','projects:issues:edit'
+        shortcut_handler = new ShortcutsNavigation()
+        new GLForm($('.issue-form'))
+        new IssuableForm($('.issue-form'))
+      when 'projects:merge_requests:new', 'projects:merge_requests:edit'
+        new Diff()
+        shortcut_handler = new ShortcutsNavigation()
+        new GLForm($('.merge-request-form'))
+        new IssuableForm($('.merge-request-form'))
+      when 'projects:tags:new'
+        new ZenMode()
+        new GLForm($('.tag-form'))
+      when 'projects:releases:edit'
+        new ZenMode()
+        new GLForm($('.release-form'))
+      when 'projects:merge_requests:show'
+        new Diff()
+        shortcut_handler = new ShortcutsIssuable(true)
+        new ZenMode()
+        new MergedButtons()
+      when 'projects:merge_requests:commits', 'projects:merge_requests:builds'
+        new MergedButtons()
+      when "projects:merge_requests:diffs"
+        new Diff()
+        new ZenMode()
+        new MergedButtons()
+      when 'projects:merge_requests:index'
+        shortcut_handler = new ShortcutsNavigation()
+        Issuable.init()
+      when 'dashboard:activity'
+        new Activities()
+      when 'dashboard:projects:starred'
+        new Activities()
+      when 'projects:commit:show'
+        new Commit()
+        new Diff()
+        new ZenMode()
+        shortcut_handler = new ShortcutsNavigation()
+      when 'projects:commits:show', 'projects:activity'
+        shortcut_handler = new ShortcutsNavigation()
+      when 'projects:show'
+        shortcut_handler = new ShortcutsNavigation()
+
+        new NotificationsForm()
+        new TreeView() if $('#tree-slider').length
+      when 'groups:activity'
+        new Activities()
+      when 'groups:show'
+        shortcut_handler = new ShortcutsNavigation()
+        new NotificationsForm()
+        new NotificationsDropdown()
+      when 'groups:group_members:index'
+        new GroupMembers()
+        new UsersSelect()
+      when 'projects:project_members:index'
+        new ProjectMembers()
+        new UsersSelect()
+      when 'groups:new', 'groups:edit', 'admin:groups:edit', 'admin:groups:new'
+        new GroupAvatar()
+      when 'projects:tree:show'
+        shortcut_handler = new ShortcutsNavigation()
+        new TreeView()
+      when 'projects:find_file:show'
+        shortcut_handler = true
+      when 'projects:blob:show', 'projects:blame:show'
+        new LineHighlighter()
+        shortcut_handler = new ShortcutsNavigation()
+        new ShortcutsBlob true
+      when 'projects:labels:new', 'projects:labels:edit'
+        new Labels()
+      when 'projects:labels:index'
+        new LabelManager() if $('.prioritized-labels').length
+      when 'projects:network:show'
+        # Ensure we don't create a particular shortcut handler here. This is
+        # already created, where the network graph is created.
+        shortcut_handler = true
+      when 'projects:forks:new'
+        new ProjectFork()
+      when 'projects:artifacts:browse'
+        new BuildArtifacts()
+      when 'projects:group_links:index'
+        new GroupsSelect()
+      when 'search:show'
+        new Search()
+
+    switch path.first()
+      when 'admin'
+        new Admin()
+        switch path[1]
+          when 'groups'
+            new UsersSelect()
+          when 'projects'
+            new NamespaceSelects()
+          when 'abuse_reports'
+            new AbuseReports()
+      when 'dashboard', 'root'
+        shortcut_handler = new ShortcutsDashboardNavigation()
+      when 'profiles'
+        new NotificationsForm()
+        new NotificationsDropdown()
+      when 'projects'
+        new Project()
+        new ProjectAvatar()
+        switch path[1]
+          when 'compare'
+            new CompareAutocomplete()
+          when 'edit'
+            shortcut_handler = new ShortcutsNavigation()
+            new ProjectNew()
+          when 'new'
+            new ProjectNew()
+          when 'show'
+            new ProjectNew()
+            new ProjectShow()
+            new NotificationsDropdown()
+          when 'wikis'
+            new Wikis()
+            shortcut_handler = new ShortcutsNavigation()
+            new ZenMode()
+            new GLForm($('.wiki-form'))
+          when 'snippets'
+            shortcut_handler = new ShortcutsNavigation()
+            new ZenMode() if path[2] == 'show'
+          when 'labels', 'graphs', 'compare', 'pipelines', 'forks', \
+          'milestones', 'project_members', 'deploy_keys', 'builds', \
+          'hooks', 'services', 'protected_branches'
+            shortcut_handler = new ShortcutsNavigation()
+
+    # If we haven't installed a custom shortcut handler, install the default one
+    if not shortcut_handler
+      new Shortcuts()
+
+  initSearch: ->
+
+    # Only when search form is present
+    new SearchAutocomplete() if $('.search').length
diff --git a/app/assets/stylesheets/pages/admin.scss b/app/assets/stylesheets/pages/admin.scss
index 5607239d92d..9220ddd67c0 100644
--- a/app/assets/stylesheets/pages/admin.scss
+++ b/app/assets/stylesheets/pages/admin.scss
@@ -72,7 +72,6 @@
   margin-bottom: 20px;
 }
 
-
 // Users List
 
 .users-list {
@@ -98,3 +97,10 @@
     }
   }
 }
+
+table.abuse-reports tbody tr td {
+  vertical-align: top;
+  &:nth-child(5) {
+    min-width: 220px;
+  }
+}
-- 
GitLab