You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/09/21 10:15:37 UTC

[26/70] [abbrv] [partial] jena git commit: JENA-1597: separate jena-fuseki-webapp module

http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/pivot.min.js.map
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/pivot.min.js.map b/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/pivot.min.js.map
deleted file mode 100644
index 5847bec..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/pivot.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["/source/pivot.coffee"],"names":[],"mappings":"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","file":"pivot.min.js","sourcesContent":["call
 WithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery\n        \ncallWithJQuery ($) ->\n\n    ###\n    Utilities\n    ###\n\n    addSeparators = (nStr, thousandsSep, decimalSep) ->\n        nStr += ''\n        x = nStr.split('.')\n        x1 = x[0]\n        x2 = if x.length > 1 then  decimalSep + x[1] else ''\n        rgx = /(\\d+)(\\d{3})/\n        x1 = x1.replace(rgx, '$1' + thousandsSep + '$2') while rgx.test(x1)\n        return x1 + x2\n\n    numberFormat = (opts) ->\n        defaults = \n            digitsAfterDecimal: 2, scaler: 1, \n            thousandsSep: \",\", decimalSep: \".\"\n            prefix: \"\", suffix: \"\"\n            showZero: false\n        opts = $.extend defaults, opts\n        (x) ->\n        
     return \"\" if isNaN(x) or not isFinite(x)\n            return \"\" if x == 0 and not opts.showZero\n            result = addSeparators (opts.scaler*x).toFixed(opts.digitsAfterDecimal), opts.thousandsSep, opts.decimalSep\n            return \"\"+opts.prefix+result+opts.suffix\n\n    #aggregator templates default to US number formatting but this is overrideable\n    usFmt = numberFormat()\n    usFmtInt = numberFormat(digitsAfterDecimal: 0)\n    usFmtPct = numberFormat(digitsAfterDecimal:1, scaler: 100, suffix: \"%\")\n\n    aggregatorTemplates =\n        count: (formatter=usFmtInt) -> () -> (data, rowKey, colKey) ->\n            count: 0\n            push:  -> @count++\n            value: -> @count\n            format: formatter\n\n        countUnique: (formatter=usFmtInt) -> ([attr]) -> (data, rowKey, colKey) ->\n            uniq: []\n            push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq\n            value: -> @uniq.length\n            format: forma
 tter\n            numInputs: if attr? then 0 else 1\n\n        listUnique: (sep) -> ([attr]) -> (data, rowKey, colKey)  ->\n            uniq: []\n            push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq\n            value: -> @uniq.join sep\n            format: (x) -> x\n            numInputs: if attr? then 0 else 1\n\n        sum: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            sum: 0\n            push: (record) -> @sum += parseFloat(record[attr]) if not isNaN parseFloat(record[attr])\n            value: -> @sum\n            format: formatter\n            numInputs: if attr? then 0 else 1\n\n        average:  (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            sum: 0\n            len: 0\n            push: (record) ->\n                if not isNaN parseFloat(record[attr])\n                    @sum += parseFloat(record[attr])\n                    @len++\n            value: -> @sum/@len\n            format: formatt
 er\n            numInputs: if attr? then 0 else 1\n\n        sumOverSum: (formatter=usFmt) -> ([num, denom]) -> (data, rowKey, colKey) ->\n            sumNum: 0\n            sumDenom: 0\n            push: (record) ->\n                @sumNum   += parseFloat(record[num])   if not isNaN parseFloat(record[num])\n                @sumDenom += parseFloat(record[denom]) if not isNaN parseFloat(record[denom])\n            value: -> @sumNum/@sumDenom\n            format: formatter\n            numInputs: if num? and denom? then 0 else 2\n\n        sumOverSumBound80: (upper=true, formatter=usFmt) -> ([num, denom]) -> (data, rowKey, colKey) ->\n            sumNum: 0\n            sumDenom: 0\n            push: (record) ->\n                @sumNum   += parseFloat(record[num])   if not isNaN parseFloat(record[num])\n                @sumDenom += parseFloat(record[denom]) if not isNaN parseFloat(record[denom])\n            value: ->\n                sign = if upper then 1 else -1\n                (
 0.821187207574908/@sumDenom + @sumNum/@sumDenom + 1.2815515655446004*sign*\n                    Math.sqrt(0.410593603787454/ (@sumDenom*@sumDenom) + (@sumNum*(1 - @sumNum/ @sumDenom))/ (@sumDenom*@sumDenom)))/\n                    (1 + 1.642374415149816/@sumDenom)\n            format: formatter\n            numInputs: if num? and denom? then 0 else 2\n\n        fractionOf: (wrapped, type=\"total\", formatter=usFmtPct) -> (x...) -> (data, rowKey, colKey) ->\n            selector: {total:[[],[]],row:[rowKey,[]],col:[[],colKey]}[type]\n            inner: wrapped(x...)(data, rowKey, colKey)\n            push: (record) -> @inner.push record\n            format: formatter\n            value: -> @inner.value() / data.getAggregator(@selector...).inner.value()\n            numInputs: wrapped(x...)().numInputs\n\n    #default aggregators & renderers use US naming and number formatting\n    aggregators = do (tpl = aggregatorTemplates) -> \n        \"Count\":                tpl.count(usFmtInt)\
 n        \"Count Unique Values\":  tpl.countUnique(usFmtInt)\n        \"List Unique Values\":   tpl.listUnique(\", \")\n        \"Sum\":                  tpl.sum(usFmt)\n        \"Integer Sum\":          tpl.sum(usFmtInt)\n        \"Average\":              tpl.average(usFmt)\n        \"Sum over Sum\":         tpl.sumOverSum(usFmt)\n        \"80% Upper Bound\":      tpl.sumOverSumBound80(true, usFmt)\n        \"80% Lower Bound\":      tpl.sumOverSumBound80(false, usFmt)\n        \"Sum as Fraction of Total\":     tpl.fractionOf(tpl.sum(),   \"total\", usFmtPct)\n        \"Sum as Fraction of Rows\":      tpl.fractionOf(tpl.sum(),   \"row\",   usFmtPct)\n        \"Sum as Fraction of Columns\":   tpl.fractionOf(tpl.sum(),   \"col\",   usFmtPct)\n        \"Count as Fraction of Total\":   tpl.fractionOf(tpl.count(), \"total\", usFmtPct)\n        \"Count as Fraction of Rows\":    tpl.fractionOf(tpl.count(), \"row\",   usFmtPct)\n        \"Count as Fraction of Columns\": tpl.fractionOf(tpl.c
 ount(), \"col\",   usFmtPct)\n\n    renderers =\n        \"Table\":          (pvtData, opts) ->   pivotTableRenderer(pvtData, opts)\n        \"Table Barchart\": (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).barchart()\n        \"Heatmap\":        (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).heatmap()\n        \"Row Heatmap\":    (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).heatmap(\"rowheatmap\")\n        \"Col Heatmap\":    (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).heatmap(\"colheatmap\")\n\n    locales = \n        en: \n            aggregators: aggregators\n            renderers: renderers\n            localeStrings: \n                renderError: \"An error occurred rendering the PivotTable results.\"\n                computeError: \"An error occurred computing the PivotTable results.\"\n                uiRenderError: \"An error occurred rendering the PivotTable UI.\"\n                selectAll: \"Select All\"\n                selectN
 one: \"Select None\"\n                tooMany: \"(too many to list)\"\n                filterResults: \"Filter results\"\n                totals: \"Totals\" #for table renderer\n                vs: \"vs\" #for gchart renderer\n                by: \"by\" #for gchart renderer\n\n    #dateFormat deriver l10n requires month and day names to be passed in directly\n    mthNamesEn = [\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n    dayNamesEn = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]\n    zeroPad = (number) -> (\"0\"+number).substr(-2,2)\n\n    derivers =\n        bin: (col, binWidth) -> (record) -> record[col] - record[col] % binWidth\n        dateFormat: (col, formatString, mthNames=mthNamesEn, dayNames=dayNamesEn) ->\n            (record) -> #thanks http://stackoverflow.com/a/12213072/112871\n                date = new Date(Date.parse(record[col]))\n                if isNaN(date) then return \"\"\n                for
 matString.replace /%(.)/g, (m, p) ->\n                    switch p\n                        when \"y\" then date.getFullYear()\n                        when \"m\" then zeroPad(date.getMonth()+1)\n                        when \"n\" then mthNames[date.getMonth()]\n                        when \"d\" then zeroPad(date.getDate())\n                        when \"w\" then dayNames[date.getDay()]\n                        when \"x\" then date.getDay()\n                        when \"H\" then zeroPad(date.getHours())\n                        when \"M\" then zeroPad(date.getMinutes())\n                        when \"S\" then zeroPad(date.getSeconds())\n                        else \"%\" + p\n\n    naturalSort = (as, bs) => #thanks http://stackoverflow.com/a/4373421/112871\n        rx = /(\\d+)|(\\D+)/g\n        rd = /\\d/\n        rz = /^0/\n        if typeof as is \"number\" or typeof bs is \"number\"\n            return 1  if isNaN(as)\n            return -1  if isNaN(bs)\n            return
  as - bs\n        a = String(as).toLowerCase()\n        b = String(bs).toLowerCase()\n        return 0  if a is b\n        return (if a > b then 1 else -1)  unless rd.test(a) and rd.test(b)\n        a = a.match(rx)\n        b = b.match(rx)\n        while a.length and b.length\n            a1 = a.shift()\n            b1 = b.shift()\n            if a1 isnt b1\n                if rd.test(a1) and rd.test(b1)\n                    return a1.replace(rz, \".0\") - b1.replace(rz, \".0\")\n                else\n                    return (if a1 > b1 then 1 else -1)\n        a.length - b.length\n\n    #expose these to the outside world\n    $.pivotUtilities = {aggregatorTemplates, aggregators, renderers, derivers, locales,\n        naturalSort, numberFormat}\n\n    ###\n    Data Model class\n    ###\n\n    class PivotData\n        constructor: (input, opts) ->\n            @aggregator = opts.aggregator\n            @aggregatorName = opts.aggregatorName\n            @colAttrs = opts.cols\n     
        @rowAttrs = opts.rows\n            @valAttrs = opts.vals\n            @tree = {}\n            @rowKeys = []\n            @colKeys = []\n            @rowTotals = {}\n            @colTotals = {}\n            @allTotal = @aggregator(this, [], [])\n            @sorted = false\n\n            # iterate through input, accumulating data for cells\n            PivotData.forEachRecord input, opts.derivedAttributes, (record) =>\n                @processRecord(record) if opts.filter(record)\n\n        #can handle arrays or jQuery selections of tables\n        @forEachRecord = (input, derivedAttributes, f) ->\n            if $.isEmptyObject derivedAttributes\n                addRecord = f\n            else\n                addRecord = (record) -> \n                    record[k] = v(record) ? record[k] for k, v of derivedAttributes\n                    f(record)\n\n            #if it's a function, have it call us back\n            if $.isFunction(input)\n                input(addRecord)\n 
            else if $.isArray(input)\n                if $.isArray(input[0]) #array of arrays\n                    for own i, compactRecord of input when i > 0\n                        record = {}\n                        record[k] = compactRecord[j] for own j, k of input[0]\n                        addRecord(record)\n                else #array of objects\n                    addRecord(record) for record in input\n            else if input instanceof jQuery\n                tblCols = []\n                $(\"thead > tr > th\", input).each (i) -> tblCols.push $(this).text()\n                $(\"tbody > tr\", input).each (i) ->\n                    record = {}\n                    $(\"td\", this).each (j) -> record[tblCols[j]] = $(this).text()\n                    addRecord(record)\n            else\n                throw new Error(\"unknown input format\")\n\n        #converts to [{attr:val, attr:val},{attr:val, attr:val}] using method above\n        @convertToArray = (input) ->\n    
         result = []\n            PivotData.forEachRecord input, {}, (record) -> result.push record\n            return result\n\n        natSort: (as, bs) => naturalSort(as, bs)\n\n        arrSort: (a,b) => @natSort a.join(), b.join()\n\n        sortKeys: () =>\n            if not @sorted\n                @rowKeys.sort @arrSort\n                @colKeys.sort @arrSort\n            @sorted = true\n\n        getColKeys: () =>\n            @sortKeys()\n            return @colKeys\n\n        getRowKeys: () =>\n            @sortKeys()\n            return @rowKeys\n\n        processRecord: (record) -> #this code is called in a tight loop\n            colKey = []\n            rowKey = []\n            colKey.push record[x] ? \"null\" for x in @colAttrs \n            rowKey.push record[x] ? \"null\" for x in @rowAttrs\n            flatRowKey = rowKey.join(String.fromCharCode(0))\n            flatColKey = colKey.join(String.fromCharCode(0))\n\n            @allTotal.push record\n\n            i
 f rowKey.length != 0\n                if not @rowTotals[flatRowKey]\n                    @rowKeys.push rowKey\n                    @rowTotals[flatRowKey] = @aggregator(this, rowKey, [])\n                @rowTotals[flatRowKey].push record\n\n            if colKey.length != 0\n                if not @colTotals[flatColKey]\n                    @colKeys.push colKey\n                    @colTotals[flatColKey] = @aggregator(this, [], colKey)\n                @colTotals[flatColKey].push record\n\n            if colKey.length != 0 and rowKey.length != 0\n                if not @tree[flatRowKey]\n                    @tree[flatRowKey] = {}\n                if not @tree[flatRowKey][flatColKey]\n                    @tree[flatRowKey][flatColKey] = @aggregator(this, rowKey, colKey)\n                @tree[flatRowKey][flatColKey].push record\n\n        getAggregator: (rowKey, colKey) =>\n            flatRowKey = rowKey.join(String.fromCharCode(0))\n            flatColKey = colKey.join(String.fromCh
 arCode(0))\n            if rowKey.length == 0 and colKey.length == 0\n                agg = @allTotal\n            else if rowKey.length == 0\n                agg = @colTotals[flatColKey]\n            else if colKey.length == 0\n                agg = @rowTotals[flatRowKey]\n            else\n                agg = @tree[flatRowKey][flatColKey]\n            return agg ? {value: (-> null), format: -> \"\"}\n\n    ###\n    Default Renderer for hierarchical table layout\n    ###\n\n    pivotTableRenderer = (pivotData, opts) ->\n\n        defaults =\n            localeStrings:\n                totals: \"Totals\"\n\n        opts = $.extend defaults, opts\n\n        colAttrs = pivotData.colAttrs\n        rowAttrs = pivotData.rowAttrs\n        rowKeys = pivotData.getRowKeys()\n        colKeys = pivotData.getColKeys()\n\n        #now actually build the output\n        result = document.createElement(\"table\")\n        result.className = \"pvtTable\"\n\n        #helper function for setting ro
 w/col-span in pivotTableRenderer\n        spanSize = (arr, i, j) ->\n            if i != 0\n                noDraw = true\n                for x in [0..j]\n                    if arr[i-1][x] != arr[i][x]\n                        noDraw = false\n                if noDraw\n                  return -1 #do not draw cell\n            len = 0\n            while i+len < arr.length\n                stop = false\n                for x in [0..j]\n                    stop = true if arr[i][x] != arr[i+len][x]\n                break if stop\n                len++\n            return len\n\n        #the first few rows are for col headers\n        for own j, c of colAttrs\n            tr = document.createElement(\"tr\")\n            if parseInt(j) == 0 and rowAttrs.length != 0\n                th = document.createElement(\"th\")\n                th.setAttribute(\"colspan\", rowAttrs.length)\n                th.setAttribute(\"rowspan\", colAttrs.length)\n                tr.appendChild th\n         
    th = document.createElement(\"th\")\n            th.className = \"pvtAxisLabel\"\n            th.textContent = c\n            tr.appendChild th\n            for own i, colKey of colKeys\n                x = spanSize(colKeys, parseInt(i), parseInt(j))\n                if x != -1\n                    th = document.createElement(\"th\")\n                    th.className = \"pvtColLabel\"\n                    th.textContent = colKey[j]\n                    th.setAttribute(\"colspan\", x)\n                    if parseInt(j) == colAttrs.length-1 and rowAttrs.length != 0\n                        th.setAttribute(\"rowspan\", 2)\n                    tr.appendChild th\n            if parseInt(j) == 0\n                th = document.createElement(\"th\")\n                th.className = \"pvtTotalLabel\"\n                th.innerHTML = opts.localeStrings.totals\n                th.setAttribute(\"rowspan\", colAttrs.length + (if rowAttrs.length ==0 then 0 else 1))\n                tr.appendChi
 ld th\n            result.appendChild tr\n\n        #then a row for row header headers\n        if rowAttrs.length !=0\n            tr = document.createElement(\"tr\")\n            for own i, r of rowAttrs\n                th = document.createElement(\"th\")\n                th.className = \"pvtAxisLabel\"\n                th.textContent = r\n                tr.appendChild th \n            th = document.createElement(\"th\")\n            if colAttrs.length ==0\n                th.className = \"pvtTotalLabel\"\n                th.innerHTML = opts.localeStrings.totals\n            tr.appendChild th\n            result.appendChild tr\n\n        #now the actual data rows, with their row headers and totals\n        for own i, rowKey of rowKeys\n            tr = document.createElement(\"tr\")\n            for own j, txt of rowKey\n                x = spanSize(rowKeys, parseInt(i), parseInt(j))\n                if x != -1\n                    th = document.createElement(\"th\")\n          
           th.className = \"pvtRowLabel\"\n                    th.textContent = txt\n                    th.setAttribute(\"rowspan\", x)\n                    if parseInt(j) == rowAttrs.length-1 and colAttrs.length !=0\n                        th.setAttribute(\"colspan\",2)\n                    tr.appendChild th\n            for own j, colKey of colKeys #this is the tight loop\n                aggregator = pivotData.getAggregator(rowKey, colKey)\n                val = aggregator.value()\n                td = document.createElement(\"td\")\n                td.className = \"pvtVal row#{i} col#{j}\"\n                td.innerHTML = aggregator.format(val)\n                td.setAttribute(\"data-value\", val)\n                tr.appendChild td\n\n            totalAggregator = pivotData.getAggregator(rowKey, [])\n            val = totalAggregator.value()\n            td = document.createElement(\"td\")\n            td.className = \"pvtTotal rowTotal\"\n            td.innerHTML = totalAggrega
 tor.format(val)\n            td.setAttribute(\"data-value\", val)\n            td.setAttribute(\"data-for\", \"row\"+i)\n            tr.appendChild td\n            result.appendChild tr\n\n        #finally, the row for col totals, and a grand total\n        tr = document.createElement(\"tr\")\n        th = document.createElement(\"th\")\n        th.className = \"pvtTotalLabel\"\n        th.innerHTML = opts.localeStrings.totals\n        th.setAttribute(\"colspan\", rowAttrs.length + (if colAttrs.length == 0 then 0 else 1))\n        tr.appendChild th\n        for own j, colKey of colKeys\n            totalAggregator = pivotData.getAggregator([], colKey)\n            val = totalAggregator.value()\n            td = document.createElement(\"td\")\n            td.className = \"pvtTotal colTotal\"\n            td.innerHTML = totalAggregator.format(val)\n            td.setAttribute(\"data-value\", val)\n            td.setAttribute(\"data-for\", \"col\"+j)\n            tr.appendChild td\n   
      totalAggregator = pivotData.getAggregator([], [])\n        val = totalAggregator.value()\n        td = document.createElement(\"td\")\n        td.className = \"pvtGrandTotal\"\n        td.innerHTML = totalAggregator.format(val)\n        td.setAttribute(\"data-value\", val)\n        tr.appendChild td\n        result.appendChild tr\n\n        #squirrel this away for later\n        result.setAttribute(\"data-numrows\", rowKeys.length)\n        result.setAttribute(\"data-numcols\", colKeys.length)\n\n        return result\n\n    ###\n    Pivot Table core: create PivotData object and call Renderer on it\n    ###\n\n    $.fn.pivot = (input, opts) ->\n        defaults =\n            cols : []\n            rows: []\n            filter: -> true\n            aggregator: aggregatorTemplates.count()()\n            aggregatorName: \"Count\"\n            derivedAttributes: {},\n            renderer: pivotTableRenderer\n            rendererOptions: null\n            localeStrings: locales.en.
 localeStrings\n\n        opts = $.extend defaults, opts\n\n        result = null\n        try\n            pivotData = new PivotData(input, opts)\n            try\n                result = opts.renderer(pivotData, opts.rendererOptions)\n            catch e\n                console.error(e.stack) if console?\n                result = $(\"<span>\").html opts.localeStrings.renderError\n        catch e\n            console.error(e.stack) if console?\n            result = $(\"<span>\").html opts.localeStrings.computeError\n        \n        x = this[0]\n        x.removeChild(x.lastChild) while x.hasChildNodes()\n        return @append result\n\n\n    ###\n    Pivot Table UI: calls Pivot Table core above with options set by user\n    ###\n\n    $.fn.pivotUI = (input, inputOpts, overwrite = false, locale=\"en\") ->\n        defaults =\n            derivedAttributes: {}\n            aggregators: locales[locale].aggregators\n            renderers: locales[locale].renderers\n            hidde
 nAttributes: []\n            menuLimit: 200\n            cols: [], rows: [], vals: []\n            exclusions: {}\n            unusedAttrsVertical: \"auto\"\n            autoSortUnusedAttrs: false\n            rendererOptions: localeStrings: locales[locale].localeStrings\n            onRefresh: null\n            filter: -> true\n            localeStrings: locales[locale].localeStrings\n\n        existingOpts = @data \"pivotUIOptions\"\n        if not existingOpts? or overwrite\n            opts = $.extend defaults, inputOpts\n        else\n            opts = existingOpts\n\n        try\n            #cache the input in some useful form\n            input = PivotData.convertToArray(input)\n            tblCols = (k for own k of input[0])\n            tblCols.push c for own c of opts.derivedAttributes when (c not in tblCols)\n\n            #figure out the cardinality and some stats\n            axisValues = {}\n            axisValues[x] = {} for x in tblCols\n\n            PivotData.for
 EachRecord input, opts.derivedAttributes, (record) ->\n                for own k, v of record when opts.filter(record)\n                    v ?= \"null\"\n                    axisValues[k][v] ?= 0\n                    axisValues[k][v]++\n\n            #start building the output\n            uiTable = $(\"<table cellpadding='5'>\")\n\n            #renderer control\n            rendererControl = $(\"<td>\")\n\n            renderer = $(\"<select class='pvtRenderer'>\")\n                .appendTo(rendererControl)\n                .bind \"change\", -> refresh() #capture reference\n            for own x of opts.renderers\n                $(\"<option>\").val(x).html(x).appendTo(renderer)\n\n\n            #axis list, including the double-click menu\n            colList = $(\"<td class='pvtAxisContainer pvtUnused'>\")\n            shownAttributes = (c for c in tblCols when c not in opts.hiddenAttributes)\n\n            unusedAttrsVerticalAutoOverride = false\n            if opts.unusedAttrsV
 ertical == \"auto\"\n                attrLength = 0\n                attrLength += a.length for a in shownAttributes\n                unusedAttrsVerticalAutoOverride = attrLength > 120\n\n            if opts.unusedAttrsVertical == true or unusedAttrsVerticalAutoOverride\n                colList.addClass('pvtVertList')\n            else\n                colList.addClass('pvtHorizList')\n\n            for i, c of shownAttributes\n                do (c) ->\n                    keys = (k for k of axisValues[c])\n                    hasExcludedItem = false\n                    valueList = $(\"<div>\").addClass('pvtFilterBox').hide()\n\n                    valueList.append $(\"<h4>\").text(\"#{c} (#{keys.length})\")\n                    if keys.length > opts.menuLimit\n                        valueList.append $(\"<p>\").html(opts.localeStrings.tooMany)\n                    else\n                        btns = $(\"<p>\").appendTo(valueList)\n                        btns.append $(\"<button>
 \", {type:\"button\"}).html(opts.localeStrings.selectAll).bind \"click\", ->\n                            valueList.find(\"input:visible\").prop \"checked\", true\n                        btns.append $(\"<button>\", {type:\"button\"}).html(opts.localeStrings.selectNone).bind \"click\", ->\n                            valueList.find(\"input:visible\").prop \"checked\", false\n                        btns.append $(\"<input>\").addClass(\"pvtSearch\").attr(\"placeholder\", opts.localeStrings.filterResults).bind \"keyup\", ->\n                            filter = $(this).val().toLowerCase()\n                            $(this).parents(\".pvtFilterBox\").find('label span').each ->\n                                testString = $(this).text().toLowerCase().indexOf(filter)\n                                if testString isnt -1\n                                    $(this).parent().show()\n                                else\n                                    $(this).parent().hide()\n\n   
                      checkContainer = $(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(valueList)\n\n                        for k in keys.sort(naturalSort)\n                             v = axisValues[c][k]\n                             filterItem = $(\"<label>\")\n                             filterItemExcluded = if opts.exclusions[c] then (k in opts.exclusions[c]) else false\n                             hasExcludedItem ||= filterItemExcluded\n                             $(\"<input type='checkbox' class='pvtFilter'>\")\n                                .attr(\"checked\", !filterItemExcluded).data(\"filter\", [c,k])\n                                .appendTo filterItem\n                             filterItem.append $(\"<span>\").text \"#{k} (#{v})\"\n                             checkContainer.append $(\"<p>\").append(filterItem)\n\n                    updateFilter = ->\n                        unselectedCount = $(valueList).find(\"[type='checkbox']\").length -\n            
                               $(valueList).find(\"[type='checkbox']:checked\").length\n                        if unselectedCount > 0\n                            attrElem.addClass \"pvtFilteredAttribute\"\n                        else\n                            attrElem.removeClass \"pvtFilteredAttribute\"\n                        if keys.length > opts.menuLimit\n                            valueList.toggle()\n                        else\n                            valueList.toggle(0, refresh)\n\n                    $(\"<p>\").appendTo(valueList)\n                        .append $(\"<button>\", {type:\"button\"}).text(\"OK\").bind \"click\", updateFilter\n\n                    showFilterList = (e) ->\n                        valueList.css(left: e.pageX, top: e.pageY).toggle()\n                        $('.pvtSearch').val('')\n                        $('label').show()\n\n                    triangleLink = $(\"<span class='pvtTriangle'>\").html(\" &#x25BE;\")\n                    
     .bind \"click\", showFilterList\n\n                    attrElem = $(\"<li class='axis_#{i}'>\")\n                        .append $(\"<span class='pvtAttr'>\").text(c).data(\"attrName\", c).append(triangleLink)\n                    attrElem.addClass('pvtFilteredAttribute') if hasExcludedItem\n                    colList.append(attrElem).append(valueList)\n\n                    attrElem.bind \"dblclick\", showFilterList\n\n            tr1 = $(\"<tr>\").appendTo(uiTable)\n\n            #aggregator menu and value area\n\n            aggregator = $(\"<select class='pvtAggregator'>\")\n                .bind \"change\", -> refresh() #capture reference\n            for own x of opts.aggregators\n                aggregator.append $(\"<option>\").val(x).html(x)\n\n            $(\"<td class='pvtVals'>\")\n              .appendTo(tr1)\n              .append(aggregator)\n              .append($(\"<br>\"))\n\n            #column axes\n            $(\"<td class='pvtAxisContainer pvtHorizList p
 vtCols'>\").appendTo(tr1)\n\n            tr2 = $(\"<tr>\").appendTo(uiTable)\n\n            #row axes\n            tr2.append $(\"<td valign='top' class='pvtAxisContainer pvtRows'>\")\n\n            #the actual pivot table container\n            pivotTable = $(\"<td valign='top' class='pvtRendererArea'>\").appendTo(tr2)\n\n            #finally the renderer dropdown and unused attribs are inserted at the requested location\n            if opts.unusedAttrsVertical == true or unusedAttrsVerticalAutoOverride\n                uiTable.find('tr:nth-child(1)').prepend rendererControl\n                uiTable.find('tr:nth-child(2)').prepend colList\n            else\n                uiTable.prepend $(\"<tr>\").append(rendererControl).append(colList)\n\n            #render the UI in its default state\n            @html uiTable\n\n            #set up the UI initial state as requested by moving elements around\n\n            for x in opts.cols\n                @find(\".pvtCols\").append @find(\
 ".axis_#{shownAttributes.indexOf(x)}\")\n            for x in opts.rows\n                @find(\".pvtRows\").append @find(\".axis_#{shownAttributes.indexOf(x)}\")\n            if opts.aggregatorName?\n                @find(\".pvtAggregator\").val opts.aggregatorName\n            if opts.rendererName?\n                @find(\".pvtRenderer\").val opts.rendererName\n\n            initialRender = true\n\n            #set up for refreshing\n            refreshDelayed = =>\n                subopts =\n                    derivedAttributes: opts.derivedAttributes\n                    localeStrings: opts.localeStrings\n                    rendererOptions: opts.rendererOptions\n                    cols: [], rows: []\n\n                numInputsToProcess = opts.aggregators[aggregator.val()]([])().numInputs ? 0\n                vals = []\n                @find(\".pvtRows li span.pvtAttr\").each -> subopts.rows.push $(this).data(\"attrName\")\n                @find(\".pvtCols li span.pvtAttr\").
 each -> subopts.cols.push $(this).data(\"attrName\")\n                @find(\".pvtVals select.pvtAttrDropdown\").each ->\n                    if numInputsToProcess == 0\n                        $(this).remove()\n                    else\n                        numInputsToProcess--\n                        vals.push $(this).val() if $(this).val() != \"\"\n\n                if numInputsToProcess != 0\n                    pvtVals = @find(\".pvtVals\")\n                    for x in [0...numInputsToProcess]\n                        newDropdown = $(\"<select class='pvtAttrDropdown'>\")\n                            .append($(\"<option>\"))\n                            .bind \"change\", -> refresh()\n                        for attr in shownAttributes\n                            newDropdown.append($(\"<option>\").val(attr).text(attr))\n                        pvtVals.append(newDropdown)\n\n                if initialRender\n                    vals = opts.vals\n                    i = 0\n 
                    @find(\".pvtVals select.pvtAttrDropdown\").each ->\n                        $(this).val vals[i]\n                        i++\n                    initialRender = false\n\n                subopts.aggregatorName = aggregator.val()\n                subopts.vals = vals\n                subopts.aggregator = opts.aggregators[aggregator.val()](vals)\n                subopts.renderer = opts.renderers[renderer.val()]\n\n                #construct filter here\n                exclusions = {}\n                @find('input.pvtFilter').not(':checked').each ->\n                    filter = $(this).data(\"filter\")\n                    if exclusions[filter[0]]?\n                        exclusions[filter[0]].push( filter[1] )\n                    else\n                        exclusions[filter[0]] = [ filter[1] ]\n\n                subopts.filter = (record) ->\n                    return false if not opts.filter(record)\n                    for k,excludedItems of exclusions\n    
                     return false if \"\"+record[k] in excludedItems\n                    return true\n\n                pivotTable.pivot(input,subopts)\n                pivotUIOptions = $.extend opts,\n                    cols: subopts.cols\n                    rows: subopts.rows\n                    vals: vals\n                    exclusions: exclusions\n                    aggregatorName: aggregator.val()\n                    rendererName: renderer.val()\n\n                @data \"pivotUIOptions\", pivotUIOptions\n\n                # if requested make sure unused columns are in alphabetical order\n                if opts.autoSortUnusedAttrs\n                    natSort = $.pivotUtilities.naturalSort\n                    unusedAttrsContainer = @find(\"td.pvtUnused.pvtAxisContainer\")\n                    $(unusedAttrsContainer).children(\"li\")\n                        .sort((a, b) => natSort($(a).text(), $(b).text()))\n                        .appendTo unusedAttrsContainer\n\n    
             pivotTable.css(\"opacity\", 1)\n                opts.onRefresh(pivotUIOptions) if opts.onRefresh?\n\n            refresh = =>\n                pivotTable.css(\"opacity\", 0.5)\n                setTimeout refreshDelayed, 10\n\n            #the very first refresh will actually display the table\n            refresh()\n\n            @find(\".pvtAxisContainer\").sortable\n                    update: (e, ui) -> refresh() if not ui.sender?\n                    connectWith: @find(\".pvtAxisContainer\")\n                    items: 'li'\n                    placeholder: 'pvtPlaceholder'\n        catch e\n            console.error(e.stack) if console?\n            @html opts.localeStrings.uiRenderError\n        return this\n\n    ###\n    Heatmap post-processing\n    ###\n\n    $.fn.heatmap = (scope = \"heatmap\") ->\n        numRows = @data \"numrows\"\n        numCols = @data \"numcols\"\n\n        colorGen = (color, min, max) ->\n            hexGen = switch color\n             
    when \"red\"   then (hex) -> \"ff#{hex}#{hex}\"\n                when \"green\" then (hex) -> \"#{hex}ff#{hex}\"\n                when \"blue\"  then (hex) -> \"#{hex}#{hex}ff\"\n\n            return (x) ->\n                intensity = 255 - Math.round 255*(x-min)/(max-min)\n                hex = intensity.toString(16).split(\".\")[0]\n                hex = 0+hex if hex.length == 1\n                return hexGen(hex)\n\n        heatmapper = (scope, color) =>\n            forEachCell = (f) =>\n                @find(scope).each ->\n                    x = $(this).data(\"value\")\n                    f(x, $(this)) if x? and isFinite(x)\n\n            values = []\n            forEachCell (x) -> values.push x\n            colorFor = colorGen color, Math.min(values...), Math.max(values...)\n            forEachCell (x, elem) -> elem.css \"background-color\", \"#\" + colorFor(x)\n\n        switch scope\n            when \"heatmap\"\n                heatmapper \".pvtVal\", \"red\"\n      
       when \"rowheatmap\"\n                heatmapper \".pvtVal.row#{i}\", \"red\" for i in [0...numRows]\n            when \"colheatmap\"\n                heatmapper \".pvtVal.col#{j}\", \"red\" for j in [0...numCols]\n\n        heatmapper \".pvtTotal.rowTotal\", \"red\"\n        heatmapper \".pvtTotal.colTotal\", \"red\"\n\n        return this\n\n    ###\n    Barchart post-processing\n    ###\n\n    $.fn.barchart =  ->\n        numRows = @data \"numrows\"\n        numCols = @data \"numcols\"\n\n        barcharter = (scope) =>\n            forEachCell = (f) =>\n                @find(scope).each ->\n                    x = $(this).data(\"value\")\n                    f(x, $(this)) if x? and isFinite(x)\n\n            values = []\n            forEachCell (x) -> values.push x\n            max = Math.max(values...)\n            scaler = (x) -> 100*x/(1.4*max)\n            forEachCell (x, elem) ->\n                text = elem.text()\n                wrapper = $(\"<div>\").css\n         
            \"position\": \"relative\"\n                    \"height\": \"55px\"\n                wrapper.append $(\"<div>\").css\n                    \"position\": \"absolute\"\n                    \"bottom\": 0\n                    \"left\": 0\n                    \"right\": 0\n                    \"height\": scaler(x) + \"%\"\n                    \"background-color\": \"gray\"\n                wrapper.append $(\"<div>\").text(text).css\n                    \"position\":\"relative\"\n                    \"padding-left\":\"5px\"\n                    \"padding-right\":\"5px\"\n\n                elem.css(\"padding\": 0,\"padding-top\": \"5px\", \"text-align\": \"center\").html wrapper\n\n        barcharter \".pvtVal.row#{i}\" for i in [0...numRows]\n        barcharter \".pvtTotal.colTotal\"\n\n        return this\n\n\n"],"sourceRoot":"/source/"}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/plugins/text.js
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/plugins/text.js b/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/plugins/text.js
deleted file mode 100644
index 1e4fc96..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/lib/plugins/text.js
+++ /dev/null
@@ -1,386 +0,0 @@
-/**
- * @license RequireJS text 2.0.10 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
- * Available via the MIT or new BSD license.
- * see: http://github.com/requirejs/text for details
- */
-/*jslint regexp: true */
-/*global require, XMLHttpRequest, ActiveXObject,
-  define, window, process, Packages,
-  java, location, Components, FileUtils */
-
-define(['module'], function (module) {
-    'use strict';
-
-    var text, fs, Cc, Ci, xpcIsWindows,
-        progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],
-        xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,
-        bodyRegExp = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,
-        hasLocation = typeof location !== 'undefined' && location.href,
-        defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''),
-        defaultHostName = hasLocation && location.hostname,
-        defaultPort = hasLocation && (location.port || undefined),
-        buildMap = {},
-        masterConfig = (module.config && module.config()) || {};
-
-    text = {
-        version: '2.0.10',
-
-        strip: function (content) {
-            //Strips <?xml ...?> declarations so that external SVG and XML
-            //documents can be added to a document without worry. Also, if the string
-            //is an HTML document, only the part inside the body tag is returned.
-            if (content) {
-                content = content.replace(xmlRegExp, "");
-                var matches = content.match(bodyRegExp);
-                if (matches) {
-                    content = matches[1];
-                }
-            } else {
-                content = "";
-            }
-            return content;
-        },
-
-        jsEscape: function (content) {
-            return content.replace(/(['\\])/g, '\\$1')
-                .replace(/[\f]/g, "\\f")
-                .replace(/[\b]/g, "\\b")
-                .replace(/[\n]/g, "\\n")
-                .replace(/[\t]/g, "\\t")
-                .replace(/[\r]/g, "\\r")
-                .replace(/[\u2028]/g, "\\u2028")
-                .replace(/[\u2029]/g, "\\u2029");
-        },
-
-        createXhr: masterConfig.createXhr || function () {
-            //Would love to dump the ActiveX crap in here. Need IE 6 to die first.
-            var xhr, i, progId;
-            if (typeof XMLHttpRequest !== "undefined") {
-                return new XMLHttpRequest();
-            } else if (typeof ActiveXObject !== "undefined") {
-                for (i = 0; i < 3; i += 1) {
-                    progId = progIds[i];
-                    try {
-                        xhr = new ActiveXObject(progId);
-                    } catch (e) {}
-
-                    if (xhr) {
-                        progIds = [progId];  // so faster next time
-                        break;
-                    }
-                }
-            }
-
-            return xhr;
-        },
-
-        /**
-         * Parses a resource name into its component parts. Resource names
-         * look like: module/name.ext!strip, where the !strip part is
-         * optional.
-         * @param {String} name the resource name
-         * @returns {Object} with properties "moduleName", "ext" and "strip"
-         * where strip is a boolean.
-         */
-        parseName: function (name) {
-            var modName, ext, temp,
-                strip = false,
-                index = name.indexOf("."),
-                isRelative = name.indexOf('./') === 0 ||
-                             name.indexOf('../') === 0;
-
-            if (index !== -1 && (!isRelative || index > 1)) {
-                modName = name.substring(0, index);
-                ext = name.substring(index + 1, name.length);
-            } else {
-                modName = name;
-            }
-
-            temp = ext || modName;
-            index = temp.indexOf("!");
-            if (index !== -1) {
-                //Pull off the strip arg.
-                strip = temp.substring(index + 1) === "strip";
-                temp = temp.substring(0, index);
-                if (ext) {
-                    ext = temp;
-                } else {
-                    modName = temp;
-                }
-            }
-
-            return {
-                moduleName: modName,
-                ext: ext,
-                strip: strip
-            };
-        },
-
-        xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/,
-
-        /**
-         * Is an URL on another domain. Only works for browser use, returns
-         * false in non-browser environments. Only used to know if an
-         * optimized .js version of a text resource should be loaded
-         * instead.
-         * @param {String} url
-         * @returns Boolean
-         */
-        useXhr: function (url, protocol, hostname, port) {
-            var uProtocol, uHostName, uPort,
-                match = text.xdRegExp.exec(url);
-            if (!match) {
-                return true;
-            }
-            uProtocol = match[2];
-            uHostName = match[3];
-
-            uHostName = uHostName.split(':');
-            uPort = uHostName[1];
-            uHostName = uHostName[0];
-
-            return (!uProtocol || uProtocol === protocol) &&
-                   (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) &&
-                   ((!uPort && !uHostName) || uPort === port);
-        },
-
-        finishLoad: function (name, strip, content, onLoad) {
-            content = strip ? text.strip(content) : content;
-            if (masterConfig.isBuild) {
-                buildMap[name] = content;
-            }
-            onLoad(content);
-        },
-
-        load: function (name, req, onLoad, config) {
-            //Name has format: some.module.filext!strip
-            //The strip part is optional.
-            //if strip is present, then that means only get the string contents
-            //inside a body tag in an HTML string. For XML/SVG content it means
-            //removing the <?xml ...?> declarations so the content can be inserted
-            //into the current doc without problems.
-
-            // Do not bother with the work if a build and text will
-            // not be inlined.
-            if (config.isBuild && !config.inlineText) {
-                onLoad();
-                return;
-            }
-
-            masterConfig.isBuild = config.isBuild;
-
-            var parsed = text.parseName(name),
-                nonStripName = parsed.moduleName +
-                    (parsed.ext ? '.' + parsed.ext : ''),
-                url = req.toUrl(nonStripName),
-                useXhr = (masterConfig.useXhr) ||
-                         text.useXhr;
-
-            // Do not load if it is an empty: url
-            if (url.indexOf('empty:') === 0) {
-                onLoad();
-                return;
-            }
-
-            //Load the text. Use XHR if possible and in a browser.
-            if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {
-                text.get(url, function (content) {
-                    text.finishLoad(name, parsed.strip, content, onLoad);
-                }, function (err) {
-                    if (onLoad.error) {
-                        onLoad.error(err);
-                    }
-                });
-            } else {
-                //Need to fetch the resource across domains. Assume
-                //the resource has been optimized into a JS module. Fetch
-                //by the module name + extension, but do not include the
-                //!strip part to avoid file system issues.
-                req([nonStripName], function (content) {
-                    text.finishLoad(parsed.moduleName + '.' + parsed.ext,
-                                    parsed.strip, content, onLoad);
-                });
-            }
-        },
-
-        write: function (pluginName, moduleName, write, config) {
-            if (buildMap.hasOwnProperty(moduleName)) {
-                var content = text.jsEscape(buildMap[moduleName]);
-                write.asModule(pluginName + "!" + moduleName,
-                               "define(function () { return '" +
-                                   content +
-                               "';});\n");
-            }
-        },
-
-        writeFile: function (pluginName, moduleName, req, write, config) {
-            var parsed = text.parseName(moduleName),
-                extPart = parsed.ext ? '.' + parsed.ext : '',
-                nonStripName = parsed.moduleName + extPart,
-                //Use a '.js' file name so that it indicates it is a
-                //script that can be loaded across domains.
-                fileName = req.toUrl(parsed.moduleName + extPart) + '.js';
-
-            //Leverage own load() method to load plugin value, but only
-            //write out values that do not have the strip argument,
-            //to avoid any potential issues with ! in file names.
-            text.load(nonStripName, req, function (value) {
-                //Use own write() method to construct full module value.
-                //But need to create shell that translates writeFile's
-                //write() to the right interface.
-                var textWrite = function (contents) {
-                    return write(fileName, contents);
-                };
-                textWrite.asModule = function (moduleName, contents) {
-                    return write.asModule(moduleName, fileName, contents);
-                };
-
-                text.write(pluginName, nonStripName, textWrite, config);
-            }, config);
-        }
-    };
-
-    if (masterConfig.env === 'node' || (!masterConfig.env &&
-            typeof process !== "undefined" &&
-            process.versions &&
-            !!process.versions.node &&
-            !process.versions['node-webkit'])) {
-        //Using special require.nodeRequire, something added by r.js.
-        fs = require.nodeRequire('fs');
-
-        text.get = function (url, callback, errback) {
-            try {
-                var file = fs.readFileSync(url, 'utf8');
-                //Remove BOM (Byte Mark Order) from utf8 files if it is there.
-                if (file.indexOf('\uFEFF') === 0) {
-                    file = file.substring(1);
-                }
-                callback(file);
-            } catch (e) {
-                errback(e);
-            }
-        };
-    } else if (masterConfig.env === 'xhr' || (!masterConfig.env &&
-            text.createXhr())) {
-        text.get = function (url, callback, errback, headers) {
-            var xhr = text.createXhr(), header;
-            xhr.open('GET', url, true);
-
-            //Allow plugins direct access to xhr headers
-            if (headers) {
-                for (header in headers) {
-                    if (headers.hasOwnProperty(header)) {
-                        xhr.setRequestHeader(header.toLowerCase(), headers[header]);
-                    }
-                }
-            }
-
-            //Allow overrides specified in config
-            if (masterConfig.onXhr) {
-                masterConfig.onXhr(xhr, url);
-            }
-
-            xhr.onreadystatechange = function (evt) {
-                var status, err;
-                //Do not explicitly handle errors, those should be
-                //visible via console output in the browser.
-                if (xhr.readyState === 4) {
-                    status = xhr.status;
-                    if (status > 399 && status < 600) {
-                        //An http 4xx or 5xx error. Signal an error.
-                        err = new Error(url + ' HTTP status: ' + status);
-                        err.xhr = xhr;
-                        errback(err);
-                    } else {
-                        callback(xhr.responseText);
-                    }
-
-                    if (masterConfig.onXhrComplete) {
-                        masterConfig.onXhrComplete(xhr, url);
-                    }
-                }
-            };
-            xhr.send(null);
-        };
-    } else if (masterConfig.env === 'rhino' || (!masterConfig.env &&
-            typeof Packages !== 'undefined' && typeof java !== 'undefined')) {
-        //Why Java, why is this so awkward?
-        text.get = function (url, callback) {
-            var stringBuffer, line,
-                encoding = "utf-8",
-                file = new java.io.File(url),
-                lineSeparator = java.lang.System.getProperty("line.separator"),
-                input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),
-                content = '';
-            try {
-                stringBuffer = new java.lang.StringBuffer();
-                line = input.readLine();
-
-                // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324
-                // http://www.unicode.org/faq/utf_bom.html
-
-                // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK:
-                // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
-                if (line && line.length() && line.charAt(0) === 0xfeff) {
-                    // Eat the BOM, since we've already found the encoding on this file,
-                    // and we plan to concatenating this buffer with others; the BOM should
-                    // only appear at the top of a file.
-                    line = line.substring(1);
-                }
-
-                if (line !== null) {
-                    stringBuffer.append(line);
-                }
-
-                while ((line = input.readLine()) !== null) {
-                    stringBuffer.append(lineSeparator);
-                    stringBuffer.append(line);
-                }
-                //Make sure we return a JavaScript string and not a Java string.
-                content = String(stringBuffer.toString()); //String
-            } finally {
-                input.close();
-            }
-            callback(content);
-        };
-    } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env &&
-            typeof Components !== 'undefined' && Components.classes &&
-            Components.interfaces)) {
-        //Avert your gaze!
-        Cc = Components.classes,
-        Ci = Components.interfaces;
-        Components.utils['import']('resource://gre/modules/FileUtils.jsm');
-        xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc);
-
-        text.get = function (url, callback) {
-            var inStream, convertStream, fileObj,
-                readData = {};
-
-            if (xpcIsWindows) {
-                url = url.replace(/\//g, '\\');
-            }
-
-            fileObj = new FileUtils.File(url);
-
-            //XPCOM, you so crazy
-            try {
-                inStream = Cc['@mozilla.org/network/file-input-stream;1']
-                           .createInstance(Ci.nsIFileInputStream);
-                inStream.init(fileObj, 1, 0, false);
-
-                convertStream = Cc['@mozilla.org/intl/converter-input-stream;1']
-                                .createInstance(Ci.nsIConverterInputStream);
-                convertStream.init(inStream, "utf-8", inStream.available(),
-                Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
-
-                convertStream.readString(inStream.available(), readData);
-                convertStream.close();
-                inStream.close();
-                callback(readData.value);
-            } catch (e) {
-                throw new Error((fileObj && fileObj.path || '') + ': ' + e);
-            }
-        };
-    }
-    return text;
-});