remix-ide
Version:
Minimalistic browser-based Solidity IDE
78 lines (73 loc) • 2.32 kB
JavaScript
var async = require('async')
module.exports = {
shortenAddress: function (address, etherBalance) {
var len = address.length
return address.slice(0, 5) + '...' + address.slice(len - 5, len) + (etherBalance ? ' (' + etherBalance.toString() + ' ether)' : '')
},
shortenHexData: function (data) {
if (!data) return ''
if (data.length < 5) return data
var len = data.length
return data.slice(0, 5) + '...' + data.slice(len - 5, len)
},
createNonClashingNameWithPrefix (name, fileProvider, prefix, cb) {
var counter = ''
var ext = 'sol'
var reg = /(.*)\.([^.]+)/g
var split = reg.exec(name)
if (split) {
name = split[1]
ext = split[2]
}
var exist = true
async.whilst(
() => { return exist },
(callback) => {
fileProvider.exists(name + counter + prefix + '.' + ext, (error, currentExist) => {
if (error) {
callback(error)
} else {
exist = currentExist
if (exist) counter = (counter | 0) + 1
callback()
}
})
},
(error) => { cb(error, name + counter + prefix + '.' + ext) }
)
},
createNonClashingName (name, fileProvider, cb) {
this.createNonClashingNameWithPrefix(name, fileProvider, '', cb)
},
checkSpecialChars (name) {
return name.match(/[/:*?"<>\\'|]/) != null
},
find: find
}
function findDeep (object, fn, found = { break: false, value: undefined }) {
if (typeof object !== 'object' || object === null) return
for (var i in object) {
if (found.break) break
var el = object[i]
if (el && el.innerText !== undefined && el.innerText !== null) el = el.innerText
if (fn(el, i, object)) {
found.value = el
found.break = true
break
} else {
findDeep(el, fn, found)
}
}
return found.value
}
function find (args, query) {
query = query.trim()
var isMatch = !!findDeep(args, function check (value, key) {
if (value === undefined || value === null) return false
if (typeof value === 'function') return false
if (typeof value === 'object') return false
var contains = String(value).indexOf(query.trim()) !== -1
return contains
})
return isMatch
}