1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
</copyright> */
////////////////////////////////////////////////////////////////////////
//
var Montage = require("montage/core/core").Montage,
Component = require("montage/ui/component").Component;
////////////////////////////////////////////////////////////////////////
//
exports.UrlParser = Montage.create(Component, {
////////////////////////////////////////////////////////////////////
//
hasTemplate: {
value: false
},
////////////////////////////////////////////////////////////////////
//
parseStyleUrls: {
value: function (css, href, local) {
//
if (local) {
var fileCouldDirUrl = href.split(href.split('/')[href.split('/').length-1])[0];
} else {
//TODO: Add logic for external URLs
}
//TODO: Clean up functions
css = css.replace(/url\(()(.+?)\1\)/g, parseToNinjaUrl.bind(this));
//
function parseToNinjaUrl (prop) {
//
return prop.replace(/[^()\\""\\'']+/g, prefixWithNinjaUrl.bind(this));
}
//
function prefixWithNinjaUrl (url) {
//
if (url !== 'url' && !url.match(/(\b(?:(?:https?|ftp|file|[A-Za-z]+):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$]))/gi)) {
url = fileCouldDirUrl+url;
}
//
return url;
}
//
return css;
}
},
////////////////////////////////////////////////////////////////////
//
loadLocalStyleSheet: {
value: function (href) {
//Getting file URI (not URL since we must load through I/O API)
var css = {}, file;
css.cssUrl = href.split(this.application.ninja.coreIoApi.rootUrl)[1];
css.fileUri = this.application.ninja.coreIoApi.cloudData.root + css.cssUrl;
//Loading data from CSS file
file = this.application.ninja.coreIoApi.readFile({uri: css.fileUri});
//Checking for file to be writable on disk
css.writable = JSON.parse(this.application.ninja.coreIoApi.isFileWritable({uri: css.fileUri}).content).readOnly;
//Returning loaded file
if (file && file.content) {
//Getting file contents
css.content = this.parseStyleUrls(file.content, href, true);
//Returning CSS object
return css;
} else {
return false;
}
}
},
////////////////////////////////////////////////////////////////////
//
loadExternalStyleSheet: {
value: function (href) {
//Loading external file
var file = this.application.ninja.coreIoApi.readExternalFile({url: href, binary: false});
//Returning file
return file;
}
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
});
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
|