text: define([
      "underscore",
      "settings",
      "utils",
      "classes/Provider",
      "helpers/tumblrHelper"
  ], function(_, settings, utils, Provider, tumblrHelper) {
  
      var tumblrProvider = new Provider("tumblr", "Tumblr");
      tumblrProvider.publishPreferencesInputIds = [
          "tumblr-hostname"
      ];
  
      tumblrProvider.publish = function(publishAttributes, frontMatter, title, content, callback) {
          var labelList = publishAttributes.tags || [];
          if(frontMatter) {
              frontMatter.tags !== undefined && (labelList = frontMatter.tags);
          }
          _.isString(labelList) && (labelList = _.compact(labelList.split(/[\s,]/)));
          
          // Deduce format from publishAttributes/template
          var format = (function() {
              if(publishAttributes.format == 'html') {
                  return 'html';
              }
              if(publishAttributes.format == 'template') {
                  var template = publishAttributes.customTmpl || settings.template;
                  if(template.indexOf("documentHTML") !== -1) {
                      return 'html';
                  }
              }
              return 'markdown';
          })();
          
          var state = (frontMatter && frontMatter.published === false) ? 'draft' : 'published';
          var date = frontMatter && frontMatter.date;
          tumblrHelper.upload(publishAttributes.blogHostname, publishAttributes.postId, labelList.join(','), format, state, date, title, content, function(error, postId) {
              if(error) {
                  callback(error);
                  return;
              }
              publishAttributes.postId = postId;
              callback();
          });
      };
  
      tumblrProvider.newPublishAttributes = function(event) {
          var publishAttributes = {};
          publishAttributes.blogHostname = utils.getInputTextValue("#input-publish-tumblr-hostname", event, /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/);
          publishAttributes.postId = utils.getInputTextValue("#input-publish-postid");
          if(event.isPropagationStopped()) {
              return undefined;
          }
          return publishAttributes;
      };
  
      return tumblrProvider;
  });