<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">define([
  'app',
  'services/v3/object/track/gqlTrackService',
], function(app) {
  var accform = function(
    $rootScope,
    $mdDialog,
    $timeout,
    gqlTrackService,
    beatstarsDataServices,
    playerAPI,
    windowHelper,
    imageHelper,
    localSession
  ) {
    return {
      restrict: 'EA',
      scope: {
        accformData: '=accformData',
        accformParams: '=accformParams'
      },
      link: function(scope, element, attrs) {
        $rootScope.billing_address = $rootScope.credentials = $rootScope.faves = null
        $rootScope.accLoaded = false

        var formTimeout = null

        var alertMessage = ''
        var alertTitle = ''
        var alertCtrl = function(scope) {
          scope.alertTitle = alertTitle
          scope.alertMessage = alertMessage
          scope.cancel = function() {
            $mdDialog.cancel()
          }
        }

        alertCtrl.$inject = ['$scope']
        var alertDialog = function(msg, title) {
          alertTitle = typeof title !== 'undefined' ? title : ''
          alertMessage = msg

          $mdDialog.show({
            controller: alertCtrl,
            templateUrl: createTemplatePath('dialog/alert'),
            parent: angular.element(document.body),
            clickOutsideToClose: true
          })
        }

        switch (attrs.accform) {
          case 'accountLyricsOpen':
            $rootScope.accLoaded = true
            element.bind('click', accountLyricsOpen)
            break

          case 'accountLyricsClose':
            element.bind('click', accountLyricsClose)
            break

          case 'accountLyrics':
            accountLyrics()
            break

          case 'accountLyricsPadForm':
            element.bind('submit', accountLyricsPadForm)
            break

          case 'accountLyricsRestart':
            $rootScope.accLoaded = true
            element.bind('click', accountLyricsRestart)
            break

          case 'accountLyricsPadFormInput':
            accountLyricsPadFormInput()
            break

          case 'accountLyricsPadFormButton':
            $rootScope.accLoaded = true
            element.bind('click', accountLyricsPadFormButton)
            break

          case 'accountLyricsDownload':
            $rootScope.retrievingLyrics = false
            $rootScope.accLoaded = true
            element.bind('click', accountLyricsDownload)
            break

          case 'accountLyricsPrint':
            $rootScope.retrievingLyrics = false
            $rootScope.accLoaded = true
            element.bind('click', accountLyricsPrint)
            break

          case 'userLikeTrackTag':
            element.bind('click', userLikeTrackTag)
            break

          case 'userAddTrackTag':
            element.bind('submit', userAddTrackTag)
            break

          case 'userLikeComment':
            element.bind('click', shouldShowLogin)
            break

          case 'userDislikeComment':
            element.bind('click', shouldShowLogin)
            break

          case 'rhymeSearch':
            rhymeSearch()
            break

          default:
            $rootScope.accLoaded = true
            break
        }

        function accountLyricsOpen() {
          var artwork = scope.accformParams.lyric_artwork

          imageHelper
            .getImageGradient(artwork || !!playerAPI.Player.currentTrack ? playerAPI.Player.currentTrack.artwork.sizes.mini : null, 160, 160, 'lyricsDialog')
            .then(function(gradient) {
              $rootScope.lyricsDialogGradient = gradient
            })

          windowHelper.lockScroll()
          $rootScope.showLyricPad = true
          $rootScope.hideLyricPad = false
          $rootScope.noReloadOnLogin = true

          var lyricId = 0
          var trackId = 0

          if (typeof scope.accformParams.lyric_id !== 'undefined') {
            lyricId = scope.accformParams.lyric_id
          }

          if (typeof scope.accformParams.track_id !== 'undefined') {
            trackId = scope.accformParams.track_id
          }

          $rootScope.accLoaded = false
          $rootScope.retrievingLyrics = true
          if (document.getElementById('lyric-pad-content')) {
            var lyricPadMain = document.getElementById('lyric-pad')
            var lyricPad = document.getElementById('lyric-pad-content')
            lyricPad.style.height = window.innerHeight - 89 + 'px'
            lyricPadMain.style.height = window.innerHeight - 89 + 'px'
            window.onresize = function() {
              lyricPad.style.height = window.innerHeight - 89 + 'px'
              lyricPadMain.style.height = window.innerHeight - 89 + 'px'
            }
          }

          beatstarsDataServices
            .get('me/lyrics', `lyric_id=${lyricId}&amp;track_id=${trackId}&amp;musician_id=${appSettings.appId}`)
            .then(function(rawData) {
              if (typeof rawData.lyrics !== 'undefined') {
                $rootScope.lyrics = rawData.lyrics
                $rootScope.lyrics_versions = rawData.lyrics_versions
                $rootScope.accLoaded = true
                playerAPI.Player.settings.loopEnabled = true
                loadTrackV3(trackId)
              } else {
                beatstarsDataServices
                  .get('track', `id=${trackId}&amp;fields=details,licenses`)
                  .then(function(resData) {
                    if (typeof resData !== 'undefined') {
                      $rootScope.lyrics = {
                        lyric_id: 0,
                        details: {
                          title: 'Lyrics for ' + resData.details.title,
                          lyrics: '\n\n'
                        },
                        track: resData
                      }
                      loadTrackV3(trackId)
                      playerAPI.Player.settings.loopEnabled = true
                    }
                    $rootScope.accLoaded = true
                  })
              }
              $rootScope.retrievingLyrics = false
            })
        }

        function accountLyricsClose() {
          windowHelper.unlockScroll()
          $rootScope.showLyricPad = false
          $rootScope.hideLyricPad = true
          $rootScope.noReloadOnLogin = false

          $rootScope.lyrics = null
          $rootScope.lyrics_versions = null
          $rootScope.$apply()
        }

        function accountLyrics() {
          $rootScope.retrievingLyrics = true
          beatstarsDataServices
            .get('me/lyrics', `musician_id=${appSettings.appId}`)
            .then(function(rawData) {
              if (typeof rawData.lyrics !== 'undefined') {
                $rootScope.lyrics_list = rawData.lyrics
              }
              $rootScope.retrievingLyrics = false
              $rootScope.accLoaded = true
            })
        }

        function accountLyricsPadForm(event) {
          event.preventDefault()
          $timeout.cancel(formTimeout)
          $rootScope.autoSavingForm = true

          beatstarsDataServices
            .post('me/lyrics', `musician_id=${appSettings.appId}`, {
                lyric_id: scope.accformData.lyric_id,
                track_id: scope.accformData.track.track_id,
                title: scope.accformData.details.title,
                lyrics: scope.accformData.details.lyrics
              })
            .then(function(rawData) {
              if (typeof rawData.lyrics_id !== 'undefined') {
                $rootScope.lyrics.lyric_id = rawData.lyrics_id
                $rootScope.lyrics.details.last_modified = rawData.last_updated
                $rootScope.lyrics_versions = rawData.lyrics_versions
              }
              $rootScope.autoSavingForm = false
            })
        }

        function accountLyricsRestart() {
          $rootScope.lyrics.lyric_id = 0
          $rootScope.lyrics.details.lyrics = '\n\n\n'
          document.getElementById('lyrics_title').select()
        }

        function accountLyricsPadFormInput() {
          element.bind('keydown', function() {
            $timeout.cancel(formTimeout)
          })
          element.bind('keyup', function() {
            $timeout.cancel(formTimeout)
            formTimeout = $timeout(function() {
              document.getElementById('lyricPadFormTrigger').click()
            }, 1000)
          })
        }

        function accountLyricsPadFormButton() {
          $timeout.cancel(formTimeout)
          document.getElementById('lyricPadFormTrigger').click()
        }

        function accountLyricsDownload(event) {
          event.preventDefault()

          var lyricId = ''
          if ($rootScope.showLyricPad) {
            lyricId = $rootScope.lyrics.lyric_id
          } else {
            lyricId = scope.accformData.lyric_id
          }

          beatstarsDataServices
            .post('me/lyrics_download', `musician_id=${appSettings.appId}&amp;lyric_id=${lyricId}`)
            .then(function(rawData) {
              if (typeof rawData.download_url !== 'undefined') {
                location.href =
                  rawData.download_url +
                  '&amp;BEATSTARS_UUID=' +
                  localSession.getClientUuid()
              } else {
                alertDialog(rawData.message)
              }
            })
        }

        function accountLyricsPrint(event) {
          event.preventDefault()
          var childWindow = window.open('', 'childWindow', 'location=yes, menubar=yes, toolbar=yes')
          childWindow.document.open()
          childWindow.document.write('&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;')
          childWindow.document.write(
            'Track Url: https://bsta.rs/' +
              $rootScope.lyrics.track.details.propage_short_uri +
              '&lt;br /&gt;&lt;br /&gt;'
          )
          childWindow.document.write(
            $rootScope.lyrics.details.title + '&lt;br /&gt;&lt;br /&gt;'
          )
          childWindow.document.write(
            $rootScope.lyrics.details.lyrics.replace(/\n/gi, '&lt;br&gt;')
          )
          childWindow.document.write('&lt;/body&gt;&lt;/html&gt;')
          childWindow.print()
          childWindow.document.close()
          childWindow.close()
        }

        function userLikeTrackTag() {
          if ($rootScope.authStatus) {
            beatstarsDataServices.post(
              'tags/track',
              'musician_id=' +
                appSettings.appId +
                '&amp;' +
                scope.accformParams +
                '&amp;action=vote',
              {},
              true
            ).then(function(rawData) {
              if (rawData.status) {
                $rootScope.$broadcast(
                  'trackTagsLike:success',
                  rawData.response.data
                )
              } else {
                $rootScope.$broadcast('trackTags:failed', rawData.response.data)
              }
            })
          } else {
            $rootScope.showLogin()
          }
        }

        function userAddTrackTag(event) {
          event.preventDefault()
          $rootScope.tagAddError = ''
          if ($rootScope.authStatus) {
            beatstarsDataServices
              .post('tags/track', `musician_id=${appSettings.appId}&amp;${scope.accformParams}&amp;action=endorse`, scope.accformData, true).then(function(rawData) {
              if (rawData.status) {
                alertDialog(rawData.response.data.message, 'Suggest a Tag')
                scope.accformData = {}
                $rootScope.$broadcast('trackTags:success', rawData.response.data)
              } else {
                $rootScope.tagAddError = rawData.response.data.message
                $rootScope.$broadcast('trackTagsAdd:failed', rawData.response.data)
              }
            })
          } else {
            $rootScope.showLogin()
          }
        }

        function shouldShowLogin(event) {
          event.preventDefault()
          if (!$rootScope.authStatus) {
            $rootScope.showLogin()
          }
        }

        function rhymeSearch() {
          $rootScope.accLoaded = true
          element.bind('keydown', function() {
            $timeout.cancel(formTimeout)
          })

          element.bind('keyup', function() {
            $timeout.cancel(formTimeout)
            $rootScope.findingRyhmes = true
            formTimeout = $timeout(function() {
              beatstarsDataServices
                .get('rhyme', `search_key=${scope.accformData}`)
                .then(function(rawData) {
                  if (typeof rawData.list !== 'undefined') {
                    $rootScope.rhymes = rawData.list
                  } else {
                    $rootScope.rhymes =
                      'Unable to find any Rhymes matching your Search Keyword'
                  }
                  $rootScope.findingRyhmes = false
                })
            }, 1000)
          })
        }

        function loadTrackV3(trackId) {
          gqlTrackService
            .get(trackId + '')
            .then(function(res) {
              $rootScope.lyrics.trackV3 = res.data.track
            })
        }
      }
    }
  }

  accform.$inject = [
    '$rootScope',
    '$mdDialog',
    '$timeout',
    'gqlTrackService',
    'beatstarsDataServices',
    'playerAPI',
    'windowHelper',
    'imageHelper',
    'localSession'
  ]
  app.directive('accform', accform)
})
</pre></body></html>