From 5458134f5e02d377d50ca2fcabe80a75215273c3 Mon Sep 17 00:00:00 2001
From: Chris Rebert <code@rebertia.com>
Date: Thu, 27 Mar 2014 22:07:20 -0700
Subject: [PATCH] Add Gist & Customizer URLs to customized files & config.json

Fixes #9951
Fixes #12865
---
 Gruntfile.js                      |  3 +++
 docs/assets/js/_src/customizer.js | 36 ++++++++++++++++++++-----------
 2 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/Gruntfile.js b/Gruntfile.js
index 78f77a763e..925368e527 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -78,6 +78,9 @@ module.exports = function (grunt) {
         src: '<%= jshint.test.src %>'
       },
       assets: {
+        options: {
+          requireCamelCaseOrUpperCaseIdentifiers: null
+        },
         src: '<%= jshint.assets.src %>'
       }
     },
diff --git a/docs/assets/js/_src/customizer.js b/docs/assets/js/_src/customizer.js
index cee3c5766d..ea7cf7f6f5 100644
--- a/docs/assets/js/_src/customizer.js
+++ b/docs/assets/js/_src/customizer.js
@@ -43,7 +43,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
     return match && decodeURIComponent(match[1].replace(/\+/g, ' '))
   }
 
-  function createGist(configJson) {
+  function createGist(configJson, callback) {
     var data = {
       description: 'Bootstrap Customizer Config',
       'public': true,
@@ -61,10 +61,13 @@ window.onload = function () { // wait for load in a dumb way because B-0
     })
     .success(function (result) {
       var origin = window.location.protocol + '//' + window.location.host
-      history.replaceState(false, document.title, origin + window.location.pathname + '?id=' + result.id)
+      var newUrl = origin + window.location.pathname + '?id=' + result.id
+      history.replaceState(false, document.title, newUrl)
+      callback(result.html_url, newUrl)
     })
     .error(function (err) {
       showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err)
+      callback('<none>', '<none>')
     })
   }
 
@@ -221,7 +224,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
     })
   }
 
-  function generateCSS() {
+  function generateCSS(preamble) {
     var oneChecked = false
     var lessFileIncludes = {}
     $('#less-section input').each(function() {
@@ -242,8 +245,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
         $(this).val() && (vars[$(this).prev().text()] = $(this).val())
       })
 
-    var bsLessSource    = generateLESS('bootstrap.less', lessFileIncludes, vars)
-    var themeLessSource = generateLESS('theme.less',     lessFileIncludes, vars)
+    var bsLessSource    = preamble + generateLESS('bootstrap.less', lessFileIncludes, vars)
+    var themeLessSource = preamble + generateLESS('theme.less',     lessFileIncludes, vars)
 
     try {
       compileLESS(bsLessSource, 'bootstrap', result)
@@ -255,7 +258,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
     return result
   }
 
-  function generateJavascript() {
+  function generateJavascript(preamble) {
     var $checked = $('#plugin-section input:checked')
     if (!$checked.length) return false
 
@@ -265,8 +268,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
       .join('\n')
 
     return {
-      'bootstrap.js': js,
-      'bootstrap.min.js': cw + uglify(js)
+      'bootstrap.js': preamble + js,
+      'bootstrap.min.js': preamble + cw + uglify(js)
     }
   }
 
@@ -322,10 +325,19 @@ window.onload = function () { // wait for load in a dumb way because B-0
 
     $compileBtn.attr('disabled', 'disabled')
 
-    generateZip(generateCSS(), generateJavascript(), generateFonts(), configJson, function (blob) {
-      $compileBtn.removeAttr('disabled')
-      saveAs(blob, 'bootstrap.zip')
-      createGist(configJson)
+    createGist(configJson, function (gistUrl, customizerUrl) {
+      configData.customizerUrl = customizerUrl
+      configJson = JSON.stringify(configData, null, 2)
+
+      var preamble = '/*!\n' +
+        ' * Generated using the Bootstrap Customizer (' + customizerUrl + ')\n' +
+        ' * Config saved to config.json and ' + gistUrl + '\n' +
+        ' */\n'
+
+      generateZip(generateCSS(preamble), generateJavascript(preamble), generateFonts(), configJson, function (blob) {
+        $compileBtn.removeAttr('disabled')
+        saveAs(blob, 'bootstrap.zip')
+      })
     })
   });
 
-- 
GitLab