Skip to content

Commit

Permalink
~ 接口变化
Browse files Browse the repository at this point in the history
  • Loading branch information
cloudcome committed Nov 9, 2016
1 parent 923030e commit a304aef
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 46 deletions.
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "blear.core.hashbang",
"version": "1.0.2",
"description": "hashbang #!/",
"version": "1.1.0",
"description": "hashbang #/",
"scripts": {
"live": "browser-sync start --config bs-config.js",
"test": "node ./node_modules/.bin/karma start karma.conf.js --single-run",
Expand Down Expand Up @@ -37,7 +37,7 @@
},
"dependencies": {},
"peerDependencies": {
"blear.utils.hashstring": "1.x",
"blear.utils.hashbang": "1.x",
"blear.utils.url": "1.x"
},
"devDependencies": {
Expand Down
71 changes: 46 additions & 25 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,32 @@

'use strict';

var hashstring = require('blear.utils.hashstring');
var url = require('blear.utils.url');

var reHashbang = /#!\/.*$/;
var hashbangUtil = require('blear.utils.hashbang');
var url = require('blear.utils.url');
var access = require('blear.utils.access');
var typeis = require('blear.utils.typeis');
var object = require('blear.utils.object');

var PARSE_MAP = {
href: 1,
pathname: 2,
query: 3
};


/**
* 设置 hash
* @param hashbang
* @param [split] {String} 分隔符
* @returns {string}
*/
var setHashbang = exports.set = function (hashbang) {
return location.href.split('#')[0] + '#!' + hashbang;
var set = exports.set = function (hashbang, split) {
return location.href.split('#')[0] + hashbangUtil.stringify(hashbang, split);
};


var setHashbang = function (ret, split) {
return set(url.stringify(ret), split);
};


Expand All @@ -31,15 +44,8 @@ var setHashbang = exports.set = function (hashbang) {
* @type {Function}
* @returns {String}
*/
var getString = exports.toString = function () {
var matches = location.hash.match(reHashbang);

if (!matches) {
return '/';
}

// 移除“#!”
return matches[0].slice(2);
var get = exports.get = function () {
return hashbangUtil.parse(location.hash);
};


Expand All @@ -48,7 +54,9 @@ var getString = exports.toString = function () {
* @returns {{path, query}|{path: string, query: *}}
*/
var parse = exports.parse = function () {
return hashstring.parse(getString());
return object.filter(url.parse(get()), function (val, key) {
return PARSE_MAP[key];
});
};


Expand Down Expand Up @@ -80,36 +88,49 @@ exports.getQuery = function (key) {
/**
* 获取当前 hashbang 的 pathname
* @parma pathname {string} pathname
* @param [split] {String} 分隔符
* @returns {string}
*/
exports.setPathname = function (pathname) {
exports.setPathname = function (pathname, split) {
var ret = parse();
ret.path = '';
ret.pathname = pathname;
return setHashbang(hashstring.stringify(ret));
return setHashbang(ret, split);
};


/**
* 设置当前 hashbang 的 query
* @param key {String|Object} query 键名、键值对、字符串
* @param [val] {String|Array|Number|Boolean} query 键值
* @param [split] {String} 分隔符
* @returns {string}
*/
exports.setQuery = function (key, val) {
var ret = url.assignQuery(getString(), key, val);
return setHashbang(ret);
exports.setQuery = function (key, val, split) {
var args = access.args(arguments);

// .setQuery({a: b});
// .setQuery("a=b");
// .setQuery("a", "b");
// .setQuery({a: b}, "c");
// .setQuery("a", "b", "c");
if (args.length === 2 && typeis.Object(args[0])) {
split = args[1];
}

var ret = url.setQuery(get(), key, val);
return set(ret, split);
};


/**
* 移除当前 hashbang 的 query
* @param key {String} query 键名
* @param [split] {String} 分隔符
* @returns {string}
*/
exports.removeQuery = function (key) {
var ret = parse();
ret.query[key] = null;
return setHashbang(hashstring.stringify(ret));
exports.removeQuery = function (key, split) {
var ret = url.removeQuery(get(), key);
return set(ret, split);
};

33 changes: 15 additions & 18 deletions test/test.index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,29 @@
'use strict';

var hashbang = require('../src/index.js');
var split = '!';

describe('测试文件', function () {
var ha = '/a/b/c/?x=1&y=2&z=3';
var buildURL = function (hashstring) {
location.hash = location.pathname + '#!' + hashstring;
var buildURL = function (hb) {
location.href = hashbang.set(hb, split);
};


it('.toString', function () {
expect(hashbang.toString()).toEqual('/');
it('.get', function () {
expect(hashbang.get()).toEqual('/');
buildURL(ha);
expect(hashbang.toString()).toEqual(ha);
console.log(location.href);
expect(hashbang.get()).toEqual(ha);
});

it('.parse', function () {
expect(hashbang.parse()).toEqual({
path: '/a/b/c/?x=1&y=2&z=3',
var ret = hashbang.parse();

console.log(ret);

expect(ret).toEqual({
href: '/a/b/c/?x=1&y=2&z=3',
pathname: '/a/b/c/',
query: {
x: '1',
Expand All @@ -34,15 +40,6 @@ describe('测试文件', function () {
});
});

it('.get', function () {
expect(hashbang.getPathname()).toEqual('/a/b/c/');
expect(hashbang.getQuery()).toEqual({
x: '1',
y: '2',
z: '3'
});
});

it('.getPathname', function () {
expect(hashbang.getPathname()).toEqual('/a/b/c/');
});
Expand All @@ -54,11 +51,11 @@ describe('测试文件', function () {
});

it('.setPathname', function () {
expect(hashbang.setPathname('/o/p/q/')).toEqual(location.protocol + '//' + location.host + location.pathname + location.search + '#!/o/p/q/?x=1&y=2&z=3');
expect(hashbang.setPathname('/o/p/q/', split)).toEqual(location.protocol + '//' + location.host + location.pathname + location.search + '#!/o/p/q/?x=1&y=2&z=3');
});

it('.setQuery', function () {
var ret = hashbang.setQuery('x', [4, 5]);
var ret = hashbang.setQuery('x', [4, 5], split);

console.log(ret);
expect(/x=4/.test(ret)).toEqual(true);
Expand Down

0 comments on commit a304aef

Please sign in to comment.